# Linkedin Outreach

> Use when running LinkedIn social selling as a repeatable motion — Sales Navigator saved searches and trigger alerts, weekly request budgets, fixing a low acceptance rate, turning profile views and post engagers into warm threads, logging every touch. NOT the note or DM copy (that is `cold-outreach`), NOT the deal after a reply (that is `sales-pipeline`).

- Skill: `ericrisco/linkedin-outreach` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add ericrisco/linkedin-outreach`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ericrisco/linkedin-outreach/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: ericrisco (https://skillmd.com/u/ericrisco)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ericrisco/linkedin-outreach

---


# 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.

1. **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).
2. **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).
3. **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.
4. **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.
5. **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:

```text
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:

1. Book the call or send the warm intro.
2. Log the outcome (`call_booked`) in the ledger.
3. 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):

```csv
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.

