Optimize · Personalization at Scale
Personalize 50 Cold Emails Using a CSV of Prospects
Take a base cold email and a CSV of 50 prospects and generate 50 personalized variants in one pass — with skips for low-signal rows.
managerrepIntermediate⏱ ~3 hrs per 50-prospect batch
When to use
Use when your SDR has pulled a 25-100 row prospect list (from Apollo, Clay, LinkedIn Sales Nav export) and you have a proven base email but no time to rewrite 50 first lines by hand. This prompt forces specific, verifiable personalization from each row and skips rows where there's no real signal — protecting deliverability and your reply rate.
The prompt
You are an outbound operator at a digital marketing agency who runs personalized cold email batches without sounding like a mail-merge bot. You'd rather skip a row than send a generic line. Agency: [AGENCY_NAME] — [SERVICES] Offer / angle: [OFFER] Base email (do not rewrite the body — only swap the personalized opener): [BASE_EMAIL] Prospect CSV (columns include name, title, company, website, recent_news, linkedin_headline, role_tenure): [PROSPECT_CSV] For every row in the CSV, generate a personalized 1-2 sentence opener that references a SPECIFIC, VERIFIABLE detail from that row, then drop it into the base email. Output 50 send-ready emails (or fewer if rows are skipped). - The opener MUST reference a specific detail from the row (a named product, a named hire, a specific page on their site, a specific number in recent_news). Never invent. - Banned generic phrases: "I saw your post about leadership", "impressed by your work", "loved your recent post", "congrats on the growth", "hope you're well". - If a row has no usable signal (only name + title, no recent_news / no headline detail), output exactly: "SKIP — no usable personalization" and DO NOT fabricate one. - Keep the base email body byte-identical across rows. Only the opener sentence(s) change. - Match the agency's tone in [BASE_EMAIL]. Don't escalate to flattery. For each row, output: Row #: [n] Prospect: [name], [title] @ [company] Signal used: [the exact CSV cell text you pulled from] Personalized opener: [1-2 sentences] Final email: --- [full send-ready email with opener swapped into BASE_EMAIL] --- At the end, print: "Sent: X | Skipped: Y" and a 1-line note on which CSV columns were most useful.
Variables
- [AGENCY_NAME] — Your agency's name
- [SERVICES] — What you sell (e.g., SEO + paid social for DTC brands)
- [OFFER] — The specific offer / CTA in this campaign
- [BASE_EMAIL] — Your proven cold email template with a placeholder for the opener
- [PROSPECT_CSV] — Pasted CSV (or markdown table) of prospects with enrichment columns
Example input
AGENCY_NAME: Northpoint Digital
SERVICES: SEO + content for B2B SaaS
OFFER: free 20-min teardown of their top 3 ranking pages
BASE_EMAIL: "{{OPENER}}\n\nMost SaaS sites we audit are leaking traffic on category pages that should be ranking. We'd record a 20-min teardown of your top 3 — free, no pitch. Worth a look?\n\n— Jim"
PROSPECT_CSV:
name,title,company,website,recent_news,linkedin_headline
Sara Chen,Head of Growth,Latchpad,latchpad.io,"Hired a Director of Content in March","Growth @ Latchpad | ex-Webflow"
Mike Ortiz,VP Marketing,Brillo,brillo.com,,"VP Marketing"
Priya Shah,CMO,Quotient HR,quotienthr.com,"Launched /resources/ hub in Feb","CMO @ Quotient | building category"Example output
Row #: 1 Prospect: Sara Chen, Head of Growth @ Latchpad Signal used: "Hired a Director of Content in March" Personalized opener: Noticed Latchpad brought on a Director of Content in March — usually means SEO is finally getting a budget line. Final email: --- Noticed Latchpad brought on a Director of Content in March — usually means SEO is finally getting a budget line. Most SaaS sites we audit are leaking traffic on category pages that should be ranking. We'd record a 20-min teardown of your top 3 — free, no pitch. Worth a look? — Jim --- Row #: 2 Prospect: Mike Ortiz, VP Marketing @ Brillo Signal used: none SKIP — no usable personalization Row #: 3 Prospect: Priya Shah, CMO @ Quotient HR Signal used: "Launched /resources/ hub in Feb" Personalized opener: Saw Quotient stood up the /resources/ hub in Feb — curious if any of those posts are pulling organic yet or still warming up. Final email: --- [full email] --- Sent: 2 | Skipped: 1 Most useful column: recent_news.
Pro tips
- Run the CSV through Clay or Apollo first to fill recent_news / role_tenure — quality of input is the whole game.
- Eyeball the SKIP rate. If >40% of rows are skipped, your enrichment is weak, not the prompt.
- Add a second pass that rewrites any opener that contains a banned phrase — Claude self-policing beats human QA at this scale.
Works with
ClaudeChatGPTGemini
Done with prompts? Time to install the system
Book a STAOS callRelated prompts