personalized-cold-outreach
Purpose — Generate 1-to-1 personalized outreach messages at batch scale. Each message quotes the recipient's own words back to them, references a specific pain they've expressed, and offers a concrete next step.
Triggers — "personalize cold emails for ", "write outreach for this CSV", "1-to-1 message for each row in "
Why this beats a mailmerge — Standard mailmerge replaces {{name}}. This skill generates 3–5 personalized sentences per recipient referencing their actual public pain statements. Reply rates are typically 3–10× standard cold email.
Inputs
- Seed CSV from
competitive-intel-mining — must include handle, source_url, exact_quote, pain_category
- Your pitch — 2–3 sentences describing what you'd show the recipient if they replied (not your full product tour)
- Message channel — email / X DM / GitHub issue / LinkedIn
- CTA — what action you want them to take (reply / book call / click pre-filled issue / watch 3-min Loom)
Outputs
- A CSV enriched with columns:
subject, opening, pain_mirror, pitch_line, cta, pre_filled_url (if applicable), send_batch
- A review list of the 5 best and 5 worst generated messages for manual tuning before batch send
Steps
- Read row + source URL — For each recipient, pull the
exact_quote and (optionally) re-open the source URL for 1–2 adjacent sentences of context.
- Draft opening — 1 sentence referring to the specific place you found them ("saw your Paperclip #447 thread"). Never generic ("I noticed you").
- Draft pain mirror — 1–2 sentences quoting their own words and naming the underlying pain ("you said 'agent panics when sandbox rejects bash' — that's the class of bug that comes from X").
- Draft pitch line — 1 sentence only. What you'd show them if they replied. Concrete, not abstract.
- Draft CTA — 1 specific next step with near-zero friction. Examples:
- "Want a 3-min Loom tailored to your case? Reply y/n."
- "Open a pre-filled issue with what breaks today — "
- "Reply with a screenshot of your current agent config"
- Sign-off — First name only. No title, no links in signature.
- Quality check each message against the rules below. Regenerate if any fail.
- Batch output — Group into send batches of ≤10 per day per channel to avoid spam filters / rate limits.
Quality bar (per message)
Message template (default)
Subject: <specific thing from their post, e.g., "The Paperclip #447 panic">
Hey {{name}},
Saw your {{source}} where you wrote: "{{exact_quote}}"
That's the class of pain that happens because {{one-line technical/strategic take}}.
I've been working on {{one-line pitch}} — here's what I'd show you if it helps:
{{pre_filled_url}} (30 seconds, no signup)
Worth a look?
—{{your_first_name}}
Anti-patterns
- Don't use "I think" or "I believe" — they read as low-confidence. State the observation.
- Don't close with "let me know if you're interested" — it's a weak CTA. Use a specific verb.
- Don't send on Monday morning — inbox is overloaded. Tuesday–Thursday 10am recipient local time performs best.
- Don't A/B 10 variants — pick one good message, iterate after 20 replies.
Related
1---2name: personalized-cold-outreach3description: personalized-cold-outreach4---5# personalized-cold-outreach67**Purpose** — Generate 1-to-1 personalized outreach messages at batch scale. Each message quotes the recipient's own words back to them, references a specific pain they've expressed, and offers a concrete next step.89**Triggers** — "personalize cold emails for <pool>", "write outreach for this CSV", "1-to-1 message for each row in <file>"1011**Why this beats a mailmerge** — Standard mailmerge replaces `{{name}}`. This skill generates 3–5 personalized sentences per recipient referencing their actual public pain statements. Reply rates are typically 3–10× standard cold email.1213---1415## Inputs1617- **Seed CSV** from [`competitive-intel-mining`](../competitive-intel-mining) — must include `handle`, `source_url`, `exact_quote`, `pain_category`18- **Your pitch** — 2–3 sentences describing what you'd show the recipient if they replied (not your full product tour)19- **Message channel** — email / X DM / GitHub issue / LinkedIn20- **CTA** — what action you want them to take (reply / book call / click pre-filled issue / watch 3-min Loom)2122## Outputs2324- A CSV enriched with columns: `subject`, `opening`, `pain_mirror`, `pitch_line`, `cta`, `pre_filled_url` (if applicable), `send_batch`25- A review list of the 5 best and 5 worst generated messages for manual tuning before batch send2627## Steps28291. **Read row + source URL** — For each recipient, pull the `exact_quote` and (optionally) re-open the source URL for 1–2 adjacent sentences of context.302. **Draft opening** — 1 sentence referring to *the specific place you found them* ("saw your Paperclip #447 thread"). Never generic ("I noticed you").313. **Draft pain mirror** — 1–2 sentences quoting their own words and naming the underlying pain ("you said 'agent panics when sandbox rejects bash' — that's the class of bug that comes from X").324. **Draft pitch line** — 1 sentence only. What you'd show them if they replied. Concrete, not abstract.335. **Draft CTA** — 1 specific next step with near-zero friction. Examples:34 - "Want a 3-min Loom tailored to your case? Reply y/n."35 - "Open a pre-filled issue with what breaks today — <URL>"36 - "Reply with a screenshot of your current agent config"376. **Sign-off** — First name only. No title, no links in signature.387. **Quality check each message** against the rules below. Regenerate if any fail.398. **Batch output** — Group into send batches of ≤10 per day per channel to avoid spam filters / rate limits.4041## Quality bar (per message)4243- [ ] ≤120 words total44- [ ] Zero generic phrases ("I hope this finds you well", "I came across your profile")45- [ ] Exact quote from their words appears verbatim once46- [ ] Subject line is <50 chars and references something specific to them47- [ ] CTA is a single verb + ≤15 words48- [ ] If possible, includes a pre-filled URL so they can reply with 1 click4950## Message template (default)5152```53Subject: <specific thing from their post, e.g., "The Paperclip #447 panic">5455Hey {{name}},5657Saw your {{source}} where you wrote: "{{exact_quote}}"5859That's the class of pain that happens because {{one-line technical/strategic take}}.6061I've been working on {{one-line pitch}} — here's what I'd show you if it helps:62{{pre_filled_url}} (30 seconds, no signup)6364Worth a look?6566—{{your_first_name}}67```6869## Anti-patterns7071- **Don't use "I think" or "I believe"** — they read as low-confidence. State the observation.72- **Don't close with "let me know if you're interested"** — it's a weak CTA. Use a specific verb.73- **Don't send on Monday morning** — inbox is overloaded. Tuesday–Thursday 10am recipient local time performs best.74- **Don't A/B 10 variants** — pick one good message, iterate after 20 replies.7576## Related7778- Skill: [`competitive-intel-mining`](../competitive-intel-mining) — source of the input CSV79- Skill: [`landing-to-issue-funnel`](../landing-to-issue-funnel) — for the `pre_filled_url` pattern80- Template: [`templates/cold-email/`](../../templates/cold-email) — raw message templates81- Playbook: [`01-cold-email-campaign`](../../playbooks/01-cold-email-campaign.md)