Linkedin Outreach — The Loop and Its Ledger
You run the LinkedIn social-selling motion and keep its score: who to touch, when, through what warm-up, and how the loop is run and logged. The thesis is warm-first — engagement before connection, signal before send, ledger before "I'll remember it." The output is a running system plus a touch ledger under 02-DOCS/, never a finished line of copy: when prose is needed you write the brief and hand it off, then stay in the loop.
Boundary
The sharpest line is against ../cold-outreach/SKILL.md, and it splits on message-vs-system:
- A single message — the connection note (≤300 chars), the DM bump, its wording and per-inbox send cadence → cold-outreach. If the ask is "write this" or "fix this template," it is not yours.
- The system — who to touch, when, the warm-up, the budget, the ledger → here. When both are in play, this skill drives and delegates the copy.
Also not yours: sourcing / scoring the raw prospect list and ICP definition → ../lead-gen/SKILL.md; the deal after a reply, i.e. stages, forecast, CRM tasks → ../sales-pipeline/SKILL.md; writing or scheduling LinkedIn posts → ../linkedin-content/SKILL.md; brand growth and positioning → ../linkedin-strategy/SKILL.md.
The loop
Five phases, in order. Each has a why and yields one artifact; the artifact gates the next phase. Skipping a phase is how acceptance collapses.
- Target — why: outreach timed to a reason beats outreach timed to a calendar. → Yields a Sales Nav saved search + trigger alerts (job change, funding, recent post).
- Warm — why: a cold, context-free request is the worst-accepting move you can make; engaging first is what fixes it. → Yields a logged pre-touch (profile view + one genuine comment/like 1–2 days prior).
- Connect — why: the request is the smallest, most rate-limited move; spend it deliberately. → Yields a sent request inside the weekly budget, note-or-no-note chosen by goal.
- Convert — why: an accept is not a conversation; the choreography turns a signal into a warm 1:1. → Yields a thread with a real reply, copy delegated to cold-outreach when needed.
- Log — why: a motion you can't measure you can't repeat or fix. → Yields a row in the
02-DOCS/ledger with the outcome.
Each phase gets a section below; the last one compresses all five into a day.
Target with Sales Navigator
Build the saved search from the ICP, not from a name list:
- Filters that matter: geography, current job title (use the title field, not keywords, to avoid past-role noise), seniority, company headcount, industry, and
Posted on LinkedIn in past 30 days(active profiles accept and reply far more). Save it; Sales Nav re-runs it and surfaces new matches. - Trigger alerts worth turning on: changed jobs in last 90 days (new role = new budget, new pain), company funding events, and posted recently (a fresh post is your warm-up hook). Time the request to a trigger, never to a Tuesday.
- InMail reality: Core and Advanced both ship 50 InMail credits/mo, rolling over up to 3 months (max 150 accumulated); an InMail that gets a reply within 90 days is credited back. Spend InMail on out-of-network leads where a connection request can't reach — not on people you could warm up and connect to for free.
Free vs Core vs Advanced — buy on the job, not the brand:
| You need | Tier | 2025 price | Why |
|---|---|---|---|
| Run the loop on a tight ICP, manual budget | Free | $0 | Works if you stay disciplined; no saved-search alerts. |
| Saved searches, 40+ filters, lead/account alerts, 50 InMail/mo | Core | $119.99/mo ($1,079.88/yr) | The default for a working social seller. |
| + TeamLink, Smart Links, buyer-intent, Account/Lead IQ, CRM sync | Advanced | $159.99/mo ($1,799.88/yr) | Only when a team or CRM sync is real. |
Filter recipes per ICP, trigger-alert setup, and the full Core-vs-Advanced buy math → references/sales-navigator-playbook.md.
The connection motion
Engagement-before-connect ritual. 1–2 days before the request: view the profile, follow the company page, and drop one genuine comment or like on a recent post. This is what moves acceptance from ~20–30% (cold) to ~60%+. Log the pre-touch — it is phase 2, not optional flavor.
Note or no note — read the paradox correctly. A personalized note barely moves acceptance (26.42% with vs 26.37% without; some 2025/26 datasets show no-note accepting higher). But a note with real context nearly doubles the post-accept reply rate (9.36% vs 5.44%). So decide by goal:
| Your goal | Note? | Why |
|---|---|---|
| Maximize the accept (build network, retarget later) | No note (or near-empty) | Notes don't lift acceptance; an empty request often accepts as well or better. |
| Maximize the reply after accept | Short context note | Real context roughly doubles reply; worth the friction only when you have a true hook. |
| No genuine hook exists | No note | A generic note is worse than none — it reads as a pitch. |
When you do send a note, you do not write it here — hand the brief (the hook, the person, the goal) to ../cold-outreach/SKILL.md.
Weekly request budget — the cap is a rolling weekly limit, not a daily reset.
| Account | Realistic weekly cap | Daily target | Health rule |
|---|---|---|---|
| Free | ~100/wk | ~20/weekday, stay under ~80/wk | Pause and warm more if acceptance drops below ~30%. |
| Premium / Sales Nav | up to ~200/wk | up to ~40/day | Only with strong SSI and acceptance >40%; otherwise treat as free. |
Over the cap, requests get throttled or the account flagged. Below ~30% acceptance you are spraying — go back to phase 2 instead of pushing volume, and withdraw stale pending requests before they pile up.
Engagement → conversation
A signal is an opening. Match the signal to a play; the play is choreography (timing, sequence, what to reference), never finished prose.
| Signal | Play | Copy? |
|---|---|---|
| Connection just accepted | Wait, don't pitch. Reference why you reached out (their post/role/trigger), ask one genuine question. | Brief → cold-outreach |
| Profile viewer (they viewed you) | Soft, warm reply: "Saw you stopped by — noticed [their thing], curious how you handle X?" | Brief → cold-outreach |
| Post engager (liked/commented your post) | Thank or build on their comment, then DM a related question tied to their work. | Brief → cold-outreach |
| Comment thread (they engaged a third party's post) | Add value in-thread first, connect with that context the next day. | Brief → cold-outreach |
Worked example — the move, not the words:
Bad (pitch-on-accept):
Accepted → "Thanks for connecting! We help teams like yours cut reporting
time 40% with our analytics platform — open to a 15-min demo Thursday?"
Reads as a trap; reply rate craters.
Good (reference-then-ask):
Accepted → "Appreciate the connect — your post on attribution gaps in
ecommerce hit home. How are you splitting paid vs organic credit right now?"
Opens a real thread; the product never comes up until they ask.
Hand off to pipeline
You run the loop up to a warm intro or a booked call — then you stop and hand off.
Buying-signal tells in a thread: they ask about price/timeline, mention an active project or pain, reference budget or a decision date, or say "send me more." When you see one:
- Book the call or send the warm intro.
- Log the outcome (
call_booked) in the ledger. - Hand the thread + context to
../sales-pipeline/SKILL.md— the moment a deal exists it is theirs, and you set no stages or forecasts.
The ledger (02-DOCS)
One file. Path: 02-DOCS/linkedin-outreach/touches.csv. The header row is fixed (verify.sh checks it verbatim):
date,name,profile_url,channel,trigger,action,stage,outcome,next_touch
channel:connect|inmail|dm|comment|view.outcome(enum, no blanks):requested|accepted|replied|conversation|call_booked|dead.- Never leave a literal merge token (
{first_name},[company],XXXX,TODO) in a cell — verify.sh fails on it.
Full column spec, the outcome enum, a filled 5-row example, and the weekly-review formulas → references/ledger-schema.md.
Weekly review ritual (15 min, same day each week). Compute from the ledger:
- Acceptance % = accepted ÷ requested.
- Post-accept reply % = replied ÷ accepted.
- Conversations → calls % = call_booked ÷ conversation.
- Touches/week = rows added this week (is the loop actually running?).
If acceptance < ~30%, warm harder (phase 2). If reply < ~10%, your hooks are weak (better brief to cold-outreach). If touches/week is near zero, the loop stopped — that's the real failure.
Anti-patterns
| Bad | Why it bites | Do instead |
|---|---|---|
| Spray connection requests over the cap | Rolling weekly limit; throttled or account-flagged | Stay under ~80/wk free, ~200 Premium with >40% accept |
| Pitch the instant a connection accepts | Reads as a trap; reply rate craters | Reference their context, ask one real question first |
| Automation that ignores the rolling limit | Bursts trip LinkedIn's detection; account at risk | Pace within the budget; warm-up beats volume |
| Read "notes don't help" as "context never helps" | Notes don't lift accept, but context doubles reply | Decide note by goal: accept→none, reply→context |
| Chase SSI as the goal | SSI is a lagging proxy; high SSI ≠ pipeline | Track acceptance/reply/calls; let SSI follow |
| Run outreach with no ledger | No measurement → no repeatable motion | Log every touch + outcome to 02-DOCS/ |
Daily 30-minute routine
Run this as a checklist; it is the loop compressed into a day.
- Engage (10 min): comment genuinely on 5–8 posts from your saved search and from people you plan to connect with this week (phase 2 warm-up bank).
- Connect (5 min): send today's requests from the saved search / trigger alerts, inside the weekly budget; note-or-no-note by goal (phase 3).
- Convert (10 min): progress 2–3 warm threads — accepted connections, profile viewers, post engagers — using the signal→play table; delegate any copy to cold-outreach.
- Hand off (2 min): any buying signal → book/intro, then route to sales-pipeline.
- Log (3 min): write every touch and outcome to
02-DOCS/linkedin-outreach/touches.csv.
Weekly, run the review ritual and adjust the next week's targeting. That closes the loop back to phase 1.