É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.
- 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
Vérifier le compte avant de dépensercontrôle
LinkedInLinkedIn
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
Lister les connexions nouvellement acceptées
LinkedInLinkedIn
Chaque connexion encore inconnue devient une ligne identifiée par l'URL de son profil, avec la date d'acceptation.
- 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
Écarter les personnes déjà contactéescontrôle
LinkedInLinkedIn
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.
- only when un fil vierge et aucune exclusion
- 5
Étudier l'entreprise, puis juger l'adéquation
LinkedInLinkedIn
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à.
FirecrawlFirecrawl
TheirStackTheirStack
- 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.
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.
- only when approuvé pour l'envoi
- 8
Revérifier juste avant l'envoicontrôle
LinkedInLinkedIn
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.
- 9
Envoyer, puis relancer une fois
LinkedInLinkedIn
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
Aussi sur LinkedIn
D'autres processus qui tournent surtout sur LinkedIn. Les outils partagés avec celui-ci sont allumés.
Faire de l'outreach LinkedIn à un rythme sûr
De petits créneaux d'envoi dans la journée, un budget quotidien qui monte d'un cran seulement si le compte va bien, et tout envoi stoppé au premier signal.
- Partage
Planification quotidienne en petits créneaux7 étapes →
Répondre à chaque conversation LinkedIn
Quatre fois par jour, les fils LinkedIn où l'autre personne a écrit en dernier vous reviennent dans Slack avec une réponse rédigée dans votre style.
- Partage
Planification quotidienne, quatre passages9 étapes →