| name | email-personalization |
| description | Draft a 90-word personalized first-touch cold email for a [COMPANY] prospect. Takes one company row (from leads_scored.csv or leads_enriched.csv) plus an optional buying signal, and produces a draft that follows the v1 sequence pattern. Use when drafting Email 1 of the 4-touch sequence (outreach/sequence-v1.md). Also triggers on "draft outreach email", "write cold email", "personalize email for {company}". |
Email personalization
Generate a personalized Email-1 cold outreach draft for a [COMPANY] ICP target, matching the v1 sequence pattern in outreach/sequence-v1.md.
When to use
- Drafting first-touch emails for the top tier (T1/T2) of
pipeline/leads/leads_scored.csv.
- Re-drafting after a signal changes (new buying signal, leadership change, compliance event).
- NOT for follow-up emails (2, 3, 4) — those are thread replies with simpler templates already in the sequence doc.
Inputs
| Input | Required | Source |
|---|
| Company row | Yes | A single row from pipeline/leads/leads_scored.csv or leads_enriched.csv. At minimum: Company Name, Short Description, Keywords, Company Country, # Employees. |
| Recipient name + title | Yes | First name, title, ideally verified via Findymail/Hunter |
| Buying signal | Optional but recommended | One-sentence specific fact: |
| Angle | Optional | One of: [ANGLE_A], [ANGLE_B], [ANGLE_C]. Default: pick the one best-matched to the signal. |
Process
-
Read positioning/messaging.md, positioning/ICP.md, and outreach/sequence-v1.md. The skill must conform to the voice and structural conventions already defined there. Do not invent claims that aren't in messaging.md.
-
Classify segment for the company (A/B/C per ICP.md). If unclear, infer from Short Description + Keywords, but prefer to ASK rather than guess on segment.
-
Choose angle. Pick the angle that maps to:
- The provided signal.
- The segment (Segment A favors
[ANGLE_A]; Segment B favors [ANGLE_B]; Segment C favors [ANGLE_C]).
-
Generate signal sentence. This is the most important sentence — first line of the email. It must reference a specific, verifiable fact about the company. Source it from:
- The provided signal input (preferred).
- The Short Description column (less specific but better than nothing).
- A recent news snippet if web search is available.
- DO NOT make up a signal. If you don't have one, return an explicit "needs signal research" output instead of a fabricated email.
-
Draft. Follow the structure in outreach/sequence-v1.md Email 1. Constraints:
- 80–95 words in the body.
- First sentence is the signal reference + the pain hook.
- One proof point (citing the canonical traction: "[METRIC_DEPLOYMENTS] / [METRIC_USERS]" — or "replaced [INCUMBENT] at [ANCHOR_CUSTOMER]" if a switch-out proof lands harder for the segment).
- One soft CTA ("worth a 15-min call?").
- Plain text, no HTML, no formatting.
- Lowercase, no exclamation marks, no "Hope this finds you well" or similar dead opens.
-
Subject line. Generate 3 candidate subject lines following the patterns in outreach/sequence-v1.md. ≤8 words. Lowercase. No question marks at the end unless it's a real question. Reference a specific token (a product/category term, company name, role) — don't go generic.
-
Output as YAML so it slots cleanly into Smartlead/Instantly imports:
to: {recipient_email}
recipient_name: {FirstName} {LastName}
recipient_title: {Title}
company: {Company}
segment: {A|B|C}
angle: {[ANGLE_A]|[ANGLE_B]|[ANGLE_C]}
signal_used: "{one-sentence signal}"
subject_options:
- {subject 1}
- {subject 2}
- {subject 3}
body: |
Hi {FirstName},
{body 80–95 words}
— [FOUNDER]
[DOMAIN] · [CALENDLY]
qc_checks:
word_count: {N}
has_signal: true|false
has_one_cta: true|false
no_banned_phrases: true|false
Banned phrases (never use)
- "Hope this finds you well"
- "Just checking in"
- "Circling back"
- "Touching base"
- "Synergy", "leverage", "solution" (as nouns), "platform" (generic)
- "10x", "best-in-class", "world-class"
- "I noticed you on LinkedIn..." (we are not on LinkedIn for this audience)
- Any subject line that's only "{Company}" with no other context
Voice constraints
- Use specific [INDUSTRY] terms when they fit.
- The reader is a [INDUSTRY] operator, not a SaaS buyer. Match their register.
- Honest claims only — canonical traction is [METRIC_DEPLOYMENTS], [METRIC_USERS], [METRIC_COMPLETION], anchor customer [ANCHOR_CUSTOMER] with the incumbent replaced (name them only if cleared for external use). Don't inflate beyond these. Keep the wedge framing in cold email (the budgeted entry pain) — do NOT cold-open with "[PRODUCT_ONELINER]"; "platform" stays a banned generic noun here.
Failure modes (return explicitly rather than fake it)
- No signal available: return
status: needs-signal-research with a list of 3–5 specific signal queries to run.
- Segment ambiguous: return
status: needs-segment-decision with two interpretations and your recommendation.
- Recipient title doesn't match [COMPANY]'s buyer personas: return
status: wrong-persona with a recommended persona to find instead.
Example invocation
Draft an Email-1 for [TARGET_COMPANY] (row in leads_scored.csv) targeting their [BUYER_TITLE]. Signal:
Expected output: a YAML block as specified above, with the angle matched to the signal, 3 subject candidates, and a body that opens with the signal reference.
Integration
This skill is invoked manually per email during the first weeks (we want human review of every draft). Once you've shipped ~50 drafts and feel confident the voice is right, wrap it in scripts/draft_emails.py to batch-process the top 20 weekly.
Track each draft in outreach/drafts/_template/{company-slug}.yaml (copy _TEMPLATE.yaml per prospect). Drafts are .gitignored if they include recipient emails; the templates without recipient emails are fine to commit for voice tuning.