Combines Claude Code's language model capabilities with its file-handling power. Feed it a prospect CSV with enriched data and it generates personalised emails or LinkedIn messages for each row. Not merge tags. Actual personalisation based on company context.
Typical result: 50 unique personalised emails in under 10 minutes.
What this workflow does
The difference from generic AI email tools is context depth. Claude Code can read a prospect's company website, their recent LinkedIn posts, and their CRM activity history, then synthesise all of it into a single personalised message. The personalisation is specific to each row, not a template with a name merge.
For teams running multi-channel outreach, Claude Code can generate LinkedIn connection request messages and follow-up sequences alongside the initial email, all from the same prospect data file.
Quality control matters. Claude Code generates the emails but you should review a sample of 10-15% before sending. Common failure modes: hallucinated company details, generic openings despite specific data being available, occasional tone mismatches. Catching these before send protects your sender reputation.
Step-by-step workflow
Step 1: Prepare your input CSV with enriched prospect data. The more context per row, the better the personalisation. At minimum: name, company, title, and one contextual signal (funding stage, tech stack, hiring pattern, recent content).
Step 2: Write the personalisation prompt. Specify tone, length, what to reference, and what to avoid.
Step 3: Claude Code generates a unique email for each row and outputs a new CSV with subject line, body, and any additional columns you need for import into your sequencer.
Step 4: Review 10-15% of the output. Flag any emails with hallucinated details or wrong tone. Refine the prompt and re-run the flagged rows.
Step 5: Import to Instantly, Smartlead, or your sequencer of choice.
Copy-paste prompts
# Tech stack and funding stage personalisation
"Read prospects.csv.
For each prospect, write a 3-sentence cold email referencing their specific tech stack
and a pain point common to companies at their funding stage.
Tone: direct, peer-to-peer, no salesy language.
Rules:
- Opening line references their specific tech stack (use tech_stack column)
- Second sentence names the pain we solve for companies at their stage (use funding_stage column)
- Third sentence is a single low-friction CTA: one question, not a calendar link
- Under 90 words total per email
- No em dashes
- No filler phrases (I hope this finds you well, I wanted to reach out, etc.)
Output: outreach.csv with columns: name, email, subject_line, body."
# Signal-led personalisation (job posting trigger)
"Read prospects.csv. Each row includes a job posting the company recently published.
For each prospect, write a cold email opener (3 sentences) that:
- References the specific job posting (use job_title and job_posted_date columns)
- Infers what problem they are trying to solve by hiring for that role
- Connects that inferred problem to our value prop: [ONE SENTENCE VALUE PROP]
Do not pitch. Do not mention pricing. End with one open question.
Under 80 words per opener. No em dashes.
Output: outreach.csv with: name, email, opener."
# LinkedIn connection request personalisation
"Read prospects.csv.
For each prospect, write a LinkedIn connection request note.
Max 200 characters. No pitch. No mention of our product.
Reference one thing from their profile (use recent_post or job_title column).
Sound like a peer who found them interesting, not a sales rep.
Output: linkedin.csv with: name, linkedin_url, connection_note."
# Full 3-touch sequence per prospect
"Read prospects.csv.
For each prospect, write a 3-touch outreach sequence:
Touch 1 (Day 1): Signal-led email referencing their tech_stack or recent_news column. Under 80 words.
Touch 2 (Day 5): Different angle. Lead with a relevant insight or stat. No repeat of Touch 1. Under 70 words.
Touch 3 (Day 14): Breakup email. Honest, no guilt trip, leaves the door open. Under 50 words.
Each touch needs its own subject line. No em dashes anywhere.
Output: sequences.csv with columns: name, email, touch_1_subject, touch_1_body, touch_2_subject, touch_2_body, touch_3_subject, touch_3_body."