Skip to content
← Processus

Écrire aux nouvelles connexions LinkedIn

Chaque nouvelle connexion LinkedIn est vérifiée pour un échange passé, étudiée sur sources publiques, puis reçoit un message et une relance après accord.

LinkedIn→Firecrawl→TheirStack
Démarre
Planification quotidienne, les matins de semaine
Étapes
9
Contrôles et conditions
4
Une personne décide
1

Déclencheur · Planifié

Planification quotidienne, les matins de semaine

Chaque matin de semaine l'exécution reprend les connexions acceptées depuis la précédente.

Claude exécute la suite en autonomie

  1. 1

    Vérifier le compte avant de dépensercontrôle

    LinkedIn

    LinkedIn

    La session doit répondre active et les tables doivent répondre, sinon l'exécution s'arrête et dit laquelle avant de dépenser quoi que ce soit.

  2. 2

    Lister les connexions nouvellement acceptées

    LinkedIn

    LinkedIn

    Chaque connexion encore inconnue devient une ligne identifiée par l'URL de son profil, avec la date d'acceptation.

  3. 3

    Rattacher chacune à sa source outbound

    Une connexion présente sur l'une de vos listes outbound garde sa source, et une connexion absente de toutes relève du réseau personnel et n'est pas touchée.

  4. 4

    Écarter les personnes déjà contactéescontrôle

    LinkedIn

    LinkedIn

    La conversation entière est lue, et tout message que vous avez envoyé, une exclusion, un collègue déjà retenu ou un email récent arrête la ligne.

  5. only when un fil vierge et aucune exclusion
  6. 5

    Étudier l'entreprise, puis juger l'adéquation

    LinkedIn

    LinkedIn

    Le poste actuel, les pages de l'entreprise et ses offres d'emploi donnent un verdict avec deux ou trois signaux sourcés, et une mauvaise adéquation s'arrête là.

    Firecrawl

    Firecrawl

    TheirStack

    TheirStack

  7. 6

    Écrire les deux messages

    Une observation avec une question, puis un second angle, mis en file de validation avec la raison du choix de la personne.

  8. Approuver, réécrire ou écarter chaque paire. Une personne intervient ici.relais

    Une personne envoie, réécrit ou écarte chaque paire, et les raisons vont dans un journal que l'exécution suivante lit en premier.

  9. only when approuvé pour l'envoi
  10. 8

    Revérifier juste avant l'envoicontrôle

    LinkedIn

    LinkedIn

    La connexion, le texte, un fil relu à l'instant, le poste actuel et la fenêtre email sont tous revérifiés, et un seul échec retient l'envoi.

  11. 9

    Envoyer, puis relancer une fois

    LinkedIn

    LinkedIn

    Le premier message part exactement tel qu'approuvé, et le second suit quelques jours plus tard seulement si personne n'a répondu.

Votre outbound envoie quelques dizaines d'invitations LinkedIn par semaine, et les gens les acceptent. Ensuite, de deux choses l'une. Rien ne se passe, parce que personne n'est responsable du moment qui suit l'acceptation et que la connexion refroidit dans une liste. Ou un pitch générique arrive dans un fil où quelqu'un de votre équipe avait déjà écrit à cette personne des mois plus tôt, et elle le lit comme la séquence automatisée qu'il est.

Les deux moitiés existent déjà. Vos connexions acceptées, et chaque conversation que vous avez eue avec elles, sont dans votre compte LinkedIn. Ce que fait chaque entreprise, comment elle vend et qui elle recrute figurent sur ses propres pages publiques et dans ses offres d'emploi. Le travail est la jonction : pour chaque nouvelle connexion, lire d'abord l'historique, puis l'entreprise, et écrire le seul message qui n'aurait pu être adressé qu'à elle.

What you get

Chaque connexion amenée par votre outbound reçoit deux messages construits sur un fait public vérifié à propos de son entreprise, personne avec qui vous avez déjà échangé n'est démarché comme un inconnu, et rien ne part tant qu'une personne n'a pas approuvé ce texte exact.

Au regard de quoi chaque nouvelle connexion est vérifiée

L'exécution lit vos connexions acceptées les plus récentes sur LinkedIn et donne une ligne à chaque inconnue, identifiée par l'URL normalisée du profil que toutes les tables partagent. Elle cherche ensuite d'où vient la connexion : la liste de l'une de vos campagnes email, celle de votre outil de sourcing, ou aucune. Aucune signifie réseau personnel, et la personne n'est pas touchée. Une connexion qui ressemble à un lead sourcé mais n'apparaît sur aucune liste attend que la liste soit rechargée, plutôt que d'être rangée au hasard d'un côté ou de l'autre.

Avant toute recherche, la messagerie est parcourue jusqu'au bout et le fil de la personne est lu en entier. Un message envoyé depuis votre compte, à n'importe quelle date, clôt la ligne. De même pour une exclusion, un collègue de la même entreprise déjà retenu, ou un email de vos campagnes à cette entreprise dans la dernière semaine. C'est seulement ensuite que l'entreprise est étudiée : le poste actuel sur le profil, les pages de l'entreprise via Firecrawl, et ses offres d'emploi via TheirStack.

Ce qui rend fiable un premier message LinkedIn

Chaque signal porte l'URL d'où il a été lu. Le verdict sur une connexion s'écrit en deux ou trois lignes « fait (source : URL) », et un signal sans page réellement ouverte n'existe pas. C'est cette règle qui garde le premier message honnête : il s'ouvre sur une observation de la façon dont l'entreprise traite le problème que vous résolvez, tirée de l'une de ces pages, et pose une question sur sa façon de travailler à laquelle on répond en une ligne. Si le même message pouvait partir tel quel à vingt personnes ayant le même titre, c'est de la recherche et non de la pertinence, et il est réécrit avant que quiconque le voie.

La personne reste la bonne personne. Le profil est relu par son identifiant public, et l'identifiant renvoyé doit correspondre à celui demandé, car un écart est une redirection vers quelqu'un d'autre. C'est l'entreprise actuelle qui est jugée, pas celle du fichier de campagne. Une recherche d'offres vide est normale pour une petite entreprise et n'est jamais lue comme « ne recrute pas ». Les posts de la personne peuvent orienter l'angle, mais ne lui sont jamais cités.

Rien ne part sans décision sur ce texte exact. Dix paires au plus attendent la validation à la fois, et une personne envoie, réécrit avec un commentaire, ou écarte chacune. Les raisons vont dans un journal des décisions que l'exécution suivante lit avant de juger ou d'écrire quoi que ce soit, et une raison qui revient trois fois est proposée comme règle permanente.

Revérifié au moment de l'envoi

Une validation peut dater de plusieurs jours quand le message part, donc l'exécution revérifie juste avant l'envoi : la connexion est acceptée, les deux messages existent, le fil relu à l'instant est toujours vierge, la personne occupe toujours le poste, et aucun email n'est parti vers l'entreprise entre-temps. Une vérification impossible à faire compte comme un échec, et la ligne revient avec la raison. Le premier message part caractère pour caractère tel qu'approuvé. Le second suit au moins cinq jours ouvrés plus tard, sous un autre angle, et seulement si personne n'a répondu. Il n'y a jamais de troisième.

The prompt

The real prompt behind the steps above, detailed enough that an agent with the same tools can run it as written. The Run buttons copy the full version, which also carries the steps for connecting those tools.

# Message new LinkedIn connections

You have access to your own LinkedIn session, a web scraper, a job
postings search, and a handful of tables you can read and write. Run
this **[on weekday mornings]** for **[the connections your outbound
invitations brought in]**.


## 1. Check the account before spending

### The tables, and the one key they share

Every match in every table runs on the normalized LinkedIn URL:
`https://www.linkedin.com/in/<public identifier>`, no trailing slash,
no query parameters.

| Table | What it holds |
|---|---|
| The pool | One row per person; its status is the truth. A person enters once, is judged once, and is never messaged twice. |
| The approval queue | The only table the reviewer works in: undecided pairs only, never more than ten. |
| The tracking table | One row per person messaged: step, dates of both messages, reply. Written by the run, never by hand. |
| The source lists | The LinkedIn URLs of people in your email campaigns, with their tier, and of people your sourcing tool found. |
| The exclusions | People, domains and companies you never contact: opt-outs, customers, friends, people who replied to a campaign and their colleagues. |
| The decisions log | One dated line per reviewer decision, with its reasons and evidence. Read before every run. |

- The LinkedIn session must answer connected and alive. A seat can
  stay linked while its session is dead, and this check is free.
- The pool must answer a read. If either check fails, stop and say
  which: a run that cannot read the inbox or write the pool spends
  nothing.
- If the LinkedIn tools are missing altogether, the connector is most
  likely paused rather than missing a key. Report it that way.

## 2. List the newly accepted connections

- Read your connections, newest first, asking only for name,
  headline, public identifier, member id and connection date so each
  page stays small. Keep paging until a whole page is already in the
  pool. Dedupe on the member id, never on the page offset: the cursor
  can return the same person twice.
- Look each normalized URL up in the pool and in the exclusions. A
  known person stops there, with one exception: a known row with no
  connection date is an invitation you queued earlier. When it shows
  up as accepted, stamp the date and the row resumes where it was.
- A new person becomes one row: name, headline, company, URL,
  connection date, status `to_draft`, fit `to_judge`. Nothing else is
  written yet.

## 3. Match each one to its outbound source

Compare the normalized URL, in this order:

1. **Your email campaigns' list.** The provenance is the tier on that
   row. Reload the list whenever a campaign starts: a list that lags
   turns a sourced lead into an organic one.
2. **Your sourcing tool's list**, matched on the public identifier.
3. **Neither: organic.** Add the person to the exclusions with the
   reason "organic" and set the pool row to `rejected`. Your personal
   network is out of scope.

**Never guess a provenance.** A connection that looks like a sourced
lead but is on neither list waits in `to_draft` with "source to
confirm, reload the list".

## 4. Close anyone already talked to

This is the step that protects the relationship. For each open row:

- **Find the thread.** List the inbox page by page with the cursor
  and index the one-to-one threads on the attendee's profile URL,
  normalized, once per run rather than once per person. When the
  attendee names did not resolve, fall back on the attendee's provider
  id. **Only a listing paged to the end proves there is no thread**: a
  partial listing raises no error, it just shows fewer people.
- **Read it in full.** Any message written from your account, however
  old, closes the row as `already_contacted`: tick `thread_verified`
  and note the date of your last message. Campaign files are not
  evidence; the inbox is.
- **Decide who wrote each message** by comparing its sender id with
  your own account's id. Never rely on the message's "is sender" flag:
  it has been seen false on every thread of an account.
- **An unreadable thread is not a blank thread.** An error or a
  timeout leaves the row in `to_draft` for the next run.
- **Exclusions.** The person, their company's domain or their URL on
  the list sets the row to `rejected` with the list's reason.
- **One person per company.** When two open rows share a company,
  keep the one closest to the buying decision and reject the other as
  "colleague, one person per company".
- **One channel at a time.** If anyone at that company received an
  email from your campaigns in the last **[7 days]**, or is still in a
  live email sequence, the row waits with "recent email". Read this
  from **[your email send log]**; if it cannot be read, the row waits
  and the report says why.

A row moves on only with `thread_verified` ticked and no exclusion
touching it.

## 5. Research the company, then judge the fit

Load **[your fit guide]** and the decisions log first. A reason that
recurs in the log counts as a rule until the reviewer contradicts it.

1. **Confirm the person is still there.** Read their profile by
   public identifier and check that the identifier returned is the
   one you asked for: a mismatch is a redirect onto someone else.
   Judge the *current* company and correct the row when the profile
   disagrees. Keep the provider id, which sending needs. A response
   saying some sections were throttled is a rate limit, not missing
   data: retry that person later.
2. **Read the profile's description first.** One matching **[your
   standing no-go profiles]** is an immediate `no_go`, however strong
   the lead looks. So is a contact address on a different domain than
   the stated company.
3. **Gather public sources.** Scrape the company's home, pricing,
   customers, team and careers pages, allowing cached copies of stable
   pages. Search its job postings by company domain with a small
   limit: it bills per company record returned, and an empty result is
   normal on small companies, never proof they are not hiring. The
   person's own LinkedIn activity may steer the angle, but it is never
   quoted.
4. **Write the verdict**: `go`, `weak` or `no_go`, with two or three
   signals written one per line as "fact (source: URL)", a reason, a
   trigger and an angle. **A signal without a URL actually opened does
   not exist.** A `no_go` ends the row as `rejected`.

## 6. Write the two messages

Load **[your copy guide]** and re-read the rewrite comments in the
decisions log first. For each `go` or `weak` row, most recent
connection first:

1. **Message one: an observation and its question.** One verified
   public observation about how this company handles the problem you
   solve, from a URL you opened, then one question about their
   workflow that can be answered in a line. No pitch. **The twenty
   test:** if the message could go unchanged to twenty people with
   the same title, rewrite it.
2. **Message two: a different angle.** One question. Never a reminder
   of message one and never an exit line. For a row returned with a
   rewrite comment, the comment outranks everything else.
3. **Run your copy checklist** on both, item by item. A message that
   fails is rewritten, never proposed.
4. **Queue the pair** in the approval queue: name, company, title,
   URL, both messages and a one-line "why" (source, verdict, the
   observation used), decision empty. Store both messages on the pool
   row and set it to `awaiting_decision`.

**At most [ten] proposals per run, and never more than ten undecided
rows in the queue.** A `weak` row gets a shorter, more careful
message, never a generic one. When no observation holds up, the row
stays `to_draft` with "no solid observation".

## 7. Approve, rewrite or drop each pair

A person opens the approval queue and sets one decision per row:

- `send`: both messages go out exactly as written, character for
  character.
- `rewrite`, with a comment: step 6 rewrites it next run and queues
  it again.
- `no`: the person is never messaged. "Exclude" in the comment adds
  them to the exclusions.

For `no` and `rewrite`, the reviewer ticks the reasons and pastes the
evidence. The next run **collects the decisions first**: `send` sets
the pool row to `approved`, `rewrite` to `to_fix` with the comment,
`no` to `rejected`. Reasons and evidence are copied onto the pool row
and appended as one dated line to the decisions log **before** the
row leaves the queue. When the same reason shows up three times, the
report proposes it as a rule for the fit or copy guide, and the
reviewer confirms it.

Make the pool table enforce this where your tables allow it: message
one and `thread_verified` required once a row is `approved` or
`sent`, and a status lifecycle that cannot jump from `to_draft`
straight to `sent`.

## 8. Re-check just before sending

For each `approved` row, in this order. One failure and nothing
sends: the row goes to `to_fix` with the reason, and the report names
the check.

1. **The connection is accepted.** If not, it is a pending
   invitation: the row stays `approved` and is listed under "awaiting
   acceptance". This is the only check that is not a failure.
2. **The copy exists**, both messages.
3. **The thread is blank, read just now.** Never trust step 4, which
   may be days old. An unreadable thread postpones the send.
4. **The person is still in the role.** A changed company sends the
   row to `to_fix` with "no longer there, re-judge on the new
   company". A role check older than **[7 days]** no longer counts.
5. **The email window is clear**, read again now.

**A check that cannot be run counts as a failed check.**

## 9. Send, then follow up once

**Message one**, in the order the decisions were made: send the
approved text unchanged, in the existing thread if there is one,
otherwise to the provider id from step 5. Set the pool row to `sent`
with the date and create the tracking row.

**Message two**, for `sent` rows at least **[5 business days]** old
with no second message: read the thread first. If the person
replied, message two never goes and the conversation belongs to a
person from here on. Otherwise send it exactly as approved and move
the tracking row on.

**Pacing:** at most **[15 messages per run]**, both messages
combined, on business days and within **[your business hours]**. The
rest wait for the next run.

**Tracking**, every run: a reply moves the tracking row to `replied`
with a one-line summary, and colleagues still open in the pool are
rejected as "colleague of someone who replied". A negative reply or
an opt-out puts the person and their company in the exclusions.
Silence after message two: nothing more. Two messages, never three;
after **[10 business days]** the row closes as `ended_no_reply`.

## Rules

- One sender on the account: while this runs, nothing else sends
  messages or invitations from it.
- Nothing sends without a `send` decision on that exact text.
- This process sends no invitations. It only works on connections
  already accepted.
- The inbox is the truth.
- Only a person lifts an exclusion.
- A second run on the same day is a no-op: the shared URL key, the
  thread re-read before every send, the send dates and the terminal
  statuses see to it.

## Output

Report: connections added and their sources; rows closed as already
contacted or excluded; verdicts; pairs queued; decisions collected,
with their reasons; rows blocked by a pre-send check, naming the
check; rows awaiting acceptance; first and second messages sent;
replies received; rows waiting past the caps or on a provenance; any
thread that could not be read. Nothing estimated.

Pourquoi le faire tourner avec Tulina

Un prompt aide une personne. Un processus fait avancer une équipe.

Collé dans une conversation, le prompt ci-dessus marche une fois, pour celui qui l'a collé. Dans Tulina, « Écrire aux nouvelles connexions LinkedIn » devient un processus que l'équipe partage, qui garde son historique, qui tourne seul, et qui reste dans le même périmètre de sécurité que les outils qu'il appelle.

  • Toute l'équipe travaille sur le même

    PersonnelÉquipeOrganisation

    Un processus se range à l'endroit qui lui correspond : à vous, à votre équipe ou à toute l'organisation. Celui qui l'exécute peut l'améliorer, et tout le monde repart de la meilleure version au lieu de réexpliquer le travail à chaque fois.

  • Chaque modification est une version

    v1v2v3

    Chaque changement crée une nouvelle version et garde la précédente ; une mauvaise modification se défait en restaurant une version antérieure. Chaque exécution enregistre la version qu'elle a suivie, et ce qu'elle a appris revient dans le processus.

  • Il tourne sans vous

    planifiéwebhookà la demande

    Un agent hébergé exécute le processus sur l'infrastructure de Tulina, à heure fixe ou quand un événement arrive, et continue quand vous fermez la conversation. Rien à héberger. Chaque exécution est suivie jusqu'à son résultat.

  • Dans le même périmètre de sécurité

    coffrerôlesjournal

    Les identifiants restent dans le coffre, jamais dans le prompt. Les rôles décident qui peut lancer quoi, chaque appel est journalisé, et une étape qu'une personne doit valider attend cette personne.

Questions sur le premier message aux nouvelles connexions LinkedIn

Une observation publique vérifiée sur la façon dont son entreprise traite le problème que vous résolvez, tirée d'une page réellement ouverte, et une question sur sa façon de travailler à laquelle on répond en une ligne. Pas de pitch. Si le même message pouvait partir tel quel à vingt personnes ayant le même titre, il est réécrit.

Elle peut faire la recherche et l'écrire, et ici elle s'arrête avant l'envoi. Le profil, le site de l'entreprise et ses offres d'emploi sont lus pour chaque nouvelle connexion, un verdict et ses sources sont consignés, et un premier message et une relance attendent dans une file de validation. Seul le texte exact qu'une personne a marqué à envoyer part.

En lisant la messagerie, pas les fichiers de campagne. Le fil de chaque nouvelle connexion est retrouvé en parcourant la messagerie jusqu'au bout et lu en entier, et tout message jamais envoyé depuis votre compte classe la personne comme déjà contactée. Le fil est relu juste avant l'envoi, car la première vérification peut dater de plusieurs jours.

Une seule, ici. Le second message part au moins cinq jours ouvrés après le premier, sous un autre angle, et seulement si la personne n'a pas répondu. Ensuite la séquence s'arrête, et une réponse à tout moment confie la conversation à une personne.

D'autres processus qui tournent surtout sur LinkedIn. Les outils partagés avec celui-ci sont allumés.

Découvrez Tulina en 30 minutes.

Réserver une démo