Run a 5-day cold email outreach sprint
A 10-step playbook over 5 working days. Open in Dock and you'll get four surfaces:
- **Steps** (table) — 10 gates from list-building to post-sprint follow-up
- **Prospects** (table) — 200 rows: name, company, role, brief, draft, sent date, status
- **Brief** (doc) — your ICP definition + value prop + the email structure rules
- **Sent log** (table) — every email sent: prospect, send time, opened, replied, meeting booked
Read `Steps` top-to-bottom. Day 1 is list + research; Day 5 is reply triage. The structure is rigid for a reason.
Outcome
200 personalised cold emails sent over 5 days, 15-25% reply rate, 5-15 first calls booked, your domain reputation intact, and a Prospects table you'll keep working for the next 90 days.
Estimated time: 5 working days
Difficulty: intermediate
For: Founders + first sales hires running outbound for design partners or first customers.
What you'll need
Pre-register or install before you start.
- Apollo ($59/mo Basic, free tier available) — Build prospect lists with verified emails, role filters, technographics.
- Clay ($149/mo Starter) — Enrich prospects with signal data (recent posts, hires, fundraises).
- Instantly ($37/mo Growth) — Send sequences from a warmed-up secondary domain with deliverability tooling.
- Smartlead ($39/mo Basic) — Alternative outbound platform with built-in inbox warmup.
- Hunter.io (Free tier (25 verifications/mo)) — Verify email deliverability before send to protect domain reputation.
- MXToolbox (Free) — Check SPF, DKIM, DMARC records for sending domain hygiene.
The template · 10 steps
Step 1: Define the ICP and the offer in 1 page
Estimated time: 2-3 hours, Day 1 morning
The single biggest reason cold emails get ignored is the offer doesn't match the prospect. Before any list-building, write 1 page: who exactly are you emailing (role, company size, technographic, trigger event), what are you offering them (not 'a demo', a specific outcome), and why now. This becomes the agent's reference for every draft.
Tasks
- Write the ICP definition: role, seniority, company size, vertical, recent triggers (fundraise, hire, launch)
- Write the offer: what specific outcome are you offering in the first call? Not 'a demo'
- Write 3 example dream prospects by name and why they fit
- Write the anti-ICP: who you are NOT emailing in this sprint
- Save in the Brief doc; this is the source of truth for every draft
[!CAUTION] Gotchas
- If your ICP is 'B2B SaaS companies', it's too broad. Add at least 3 narrowing dimensions (size, vertical, role).
- If your offer is 'see a demo', the reply rate will be terrible. Reframe as a specific outcome ('save 5 hours/week on X').
- An ICP without trigger events ('just raised a Series A', 'just hired a Head of X') drives spray-and-pray. Triggers earn the reply.
Step 2: Build a 200-row prospect list with verified emails
Estimated time: 4-6 hours, Day 1 afternoon
200 deeply-researched prospects beat 5000 spray. Build the list in Apollo or Clay using ICP filters + trigger events. Verify every email before send (Hunter / MXToolbox) so bounce rate stays < 2%. High bounce rate is the fastest way to torch sender reputation.
Tasks
- Filter for the ICP in Apollo: role, seniority, company size, vertical, technographic
- Layer trigger filters: 'raised funding in last 90 days', 'hired Head of X in last 60 days', 'launched product in last 30 days'
- Export 250-300 prospects (overshoot the 200 target since some will be unverified)
- Verify emails via Hunter or NeverBounce; cut anything < 90% deliverability
- Cap at 200 verified rows in the Prospects table
Pointers
- [Official] Apollo prospect search filters
- [Tool] Hunter email verifier
- [Tool] NeverBounce verification
[!CAUTION] Gotchas
- Generic role filters (CEO, Founder) flood your list with people too senior for your offer. Use Head of X or VP X for early-stage outbound.
- Apollo's 'verified' tag is < 90% accurate. Always run a second-pass verification (Hunter, NeverBounce).
- If you scrape from LinkedIn directly, expect 30%+ bounce rate. Use Apollo or similar with real verification.
Step 3: Set up a secondary sending domain (don't burn your main domain)
Estimated time: 1-2 hours setup, 14 days warm-up (start 2 weeks before sprint)
Cold email volume on your primary domain ruins deliverability for your transactional + customer email. Buy a secondary domain (yourcompany.co or yourcompanyhq.com), warm it for 14 days before send, and use it for outbound. This is the single biggest deliverability lever.
Tasks
- Buy a similar-but-different domain (yourcompany.co, yourcompanyhq.com, getyourcompany.com)
- Set up SPF, DKIM, DMARC records (use MXToolbox to verify all 3 are green)
- Add 2-3 sending mailboxes per domain (cap each at 30 emails/day)
- Run a 14-day warm-up via Instantly, Smartlead, or Mailwarm before the sprint
- Set up forwarding from the secondary domain to your real inbox so replies don't get lost
Pointers
- [Tool] MXToolbox SPF / DKIM / DMARC checker
- [Guide] Instantly mailbox warmup
[!CAUTION] Gotchas
- Cold emailing from your primary domain (yourcompany.com) destroys deliverability for customer + transactional email. Always use a secondary.
- SPF + DKIM + DMARC are non-negotiable. Missing any of them and Gmail / Outlook silently spam-folder you.
- Sending more than 50 cold emails/day per mailbox tanks reputation. Cap at 30/day, multi-mailbox if you need volume.
Step 4: Research each prospect: 3-bullet brief + 1 personalisation hook
Estimated time: 1 day (Day 2), agent-driven
Personalisation that actually works isn't 'Hi {{firstName}}, I noticed you work at {{company}}'. It's a specific reference: a recent podcast, a recent hire, a recent product launch, a recent post. The agent reads each prospect's company news + LinkedIn activity + Twitter posts and outputs a 3-bullet brief + one personalisation hook for the email opener.
Tasks
- Configure the agent to enrich every Prospects row with: 3 bullets on company context + 1 specific personalisation hook
- Run the agent on 5 prospects first; review the briefs for quality
- Iterate the agent prompt until briefs are concrete (not 'they care about scaling' but 'they hired 3 engineers in the last month')
- Run the agent on the full 200; spot-check 20 random rows for quality
- Cut any prospects where the agent couldn't find a real hook (no signal = lower reply rate)
[!CAUTION] Gotchas
- Generic personalisation ('I see you work in B2B SaaS') reads as worse than no personalisation at all.
- Inventing a hook ('I loved your recent post about X') when the agent didn't actually find it is the fastest way to torch your reputation if the prospect catches it.
- If the agent comes back with a low-confidence hook, cut the prospect. 200 quality > 250 quantity.
Agent prompt for this step
Research a prospect for cold outreach.
Inputs from the Prospects row:
- name
- title
- company
- LinkedIn URL (if available)
- Twitter/X handle (if available)
- company website
Research and output:
1. **Company brief (3 bullets)**: what they do (1 line), their stage / size / funding (1 line), what's happening right now (1 line: recent hire, fundraise, launch, news)
2. **Role context (1 bullet)**: what their role's pain looks like at this stage of the company
3. **Personalisation hook (1 bullet)**: a SPECIFIC reference. A recent post they wrote, a podcast they were on, a product they shipped, a quote in a press release. Must include the source URL.
4. **Confidence rating**: high / medium / low — flag low if you couldn't find a real hook (this prospect should be cut)
Constraints:
- Hook MUST be specific to the human, not the company. 'Your company raised X' is weaker than 'your post about X'.
- If you can't find a real hook in 3 minutes of searching, return low-confidence. Don't invent.
- Do not use marketing-style language ('innovative', 'cutting-edge'). Plain facts.
Output as a structured update to the Prospects row.
Step 5: Draft 200 first emails (60-100 words each, 1 specific hook each)
Estimated time: 1 day (Day 3), human reviews drafts
Cold emails that work are 60-100 words, specific opener, clear value prop, low-commit CTA. The agent drafts each based on the prospect brief; you edit any draft that needs human voice. Read every draft before sending; never bulk-send AI drafts.
Tasks
- Configure the agent to draft each first email using the prospect brief + the Brief doc + the email structure rules
- Generate 200 drafts in the Prospects table
- Review every draft (~30 sec/draft = 1.5-2 hours total)
- Edit any that read robotic; rewrite any that miss the personalisation hook
- Mark each row 'ready to send' after review
[!CAUTION] Gotchas
- Subject lines that look like marketing ('Save 50% on X', 'Quick question about Y') get filtered to spam folders.
- Bulk-sending AI drafts without human review is the fastest way to send 200 emails that all sound identical and tank your reply rate.
- Emails > 100 words drop reply rates; the prospect doesn't read past the second line.
Agent prompt for this step
Draft a cold email for a prospect.
Inputs from the Prospects row:
- name (first name only in greeting)
- company
- role
- 3-bullet company brief
- personalisation hook + source URL
Inputs from the Brief doc:
- ICP definition
- value prop
- CTA pattern (e.g., '15 min call?')
Output structure:
1. **Subject line**: lowercase, < 50 chars, no marketing language. The subject line is the single biggest reply-rate lever.
2. **Email body** (60-100 words):
- Line 1: the personalisation hook (1 sentence reference to their post, hire, launch, etc.)
- Line 2-3: the connection between the hook and your offer (the 'why I'm reaching out' bridge)
- Line 4-5: the value prop in one sentence + a specific outcome (numbers, not categories)
- Line 6: low-commit CTA ('worth a 15 min call?' or 'reply if it's interesting')
3. **Personal sign-off**: just your first name
Constraints:
- 60-100 words MAX. Cut ruthlessly.
- No 'I hope this email finds you well'
- No 'I came across your profile and...'
- No 'Just wanted to reach out about...'
- No bullet points (reads as templated)
- One thought per sentence; short sentences
Output as a structured update to the Prospects row: subject + body.
Step 6: Send in batches over 3 days (40-70 emails/day per mailbox)
Estimated time: Day 4 + Day 5 over 2 days
Sending 200 emails in one blast looks like spam to ESPs and to humans. Spread across 3 days, ramp gradually (Day 4: 30, Day 4 PM: 50, Day 5: 70, Day 5 PM: 50). Send during the prospect's local working hours (Tuesday-Thursday, 8-11am their timezone is the highest-reply window).
Tasks
- Day 4 morning: send first batch of 30-50 to the highest-quality prospects
- Day 4 afternoon: send second batch of 30-50
- Day 5 morning: send third batch of 50-70
- Day 5 afternoon: send remaining 30-50
- Use Instantly / Smartlead's send-time-by-prospect-timezone feature so each email lands in their morning
- Cap each mailbox at 30-40 emails/day to protect deliverability
Pointers
- [Guide] Instantly send-time optimization
[!CAUTION] Gotchas
- Sending 100+ emails/hour from a single mailbox triggers Gmail / Outlook spam filtering. Spread across mailboxes + timezones.
- Sending Friday afternoon through Sunday afternoon kills reply rates for B2B (your email gets buried by Monday morning).
- If your bounce rate exceeds 5% mid-send, STOP and re-verify the list. Continued sending will burn the domain.
Step 7: Triage replies in real time (positive / objection / not now / not interested)
Estimated time: 1-2 hours/day during the sprint
Reply triage is the highest-leverage hour of the sprint. Every reply gets categorised in the Sent log: positive (book the call), objection (handle it), not now (follow up in 90 days), not interested (move on, don't argue). Reply within 1 hour during business hours; reply within 12 hours always.
Tasks
- Configure the agent to categorise each reply when it arrives
- Positive replies: agent drafts the calendar link reply; human approves and sends within 1 hour
- Objection replies: agent surfaces the objection + drafts a substantive response; human edits and sends
- Not-now replies: agent moves to 90-day follow-up queue with the prospect's stated reason
- Not-interested replies: agent removes from list, never re-engage in this sprint
[!CAUTION] Gotchas
- Replying to 'not interested' with a counter-pitch tanks your reputation in tight communities. Acknowledge and move on.
- Replying with 'when works for you?' adds friction. Propose 2-3 specific times.
- If you don't reply within 24 hours of a positive response, the lead cools by 50%. Speed beats polish.
Agent prompt for this step
Categorise an incoming reply to a cold outreach email.
Inputs:
- The original email sent (subject + body)
- The reply body
- The prospect's brief
Output:
1. **Category**: positive / objection / not-now / not-interested / spam-bot / out-of-office
2. **Sentiment**: warm / neutral / cool
3. **Summary** (1 line): what the prospect said, in plain words
4. **Recommended action**: book-call / handle-objection / follow-up-90d / drop / reply-to-OOO
5. **Draft response** (if applicable): match the prospect's tone, address their specific point, propose the next concrete step
Constraints:
- Don't argue with not-interested replies. Move on.
- Don't auto-reply to OOO bots. Ignore.
- For positive replies, propose a specific time slot (not 'when works for you?'). Reduces friction.
Output as a structured update to the Sent log row.
Step 8: Send follow-up #1 to non-repliers after 3 working days
Estimated time: Day 8 (3 days after Day 5)
Single-touch cold email replies hover around 5-10%. Adding 1 follow-up bumps reply rate to 15-20%. Adding 2 follow-ups bumps it to 20-25%. The follow-up should be SHORTER than the first email (40-60 words), reference the original, and add one new piece of value or signal — not just 'bumping this'.
Tasks
- Filter the Prospects table to rows where status = sent + no reply + > 3 working days
- Configure the agent to draft follow-up #1: shorter, references the original, adds new context
- Review and edit each draft (less than the first round; the framework is set)
- Send in batches the same way as the first email
- Mark rows as 'follow-up #1 sent' with timestamp
[!CAUTION] Gotchas
- 'Just following up' follow-ups have lower reply rates than no follow-up at all. They look templated and lazy.
- More than 3 follow-ups starts to feel like harassment. Stop after #2 or #3 max.
- If the first email landed in spam, the follow-up will too. Check deliverability before sending follow-ups.
Agent prompt for this step
Draft follow-up #1 for a cold outreach prospect who hasn't replied.
Inputs:
- The original first email (subject + body)
- The prospect's brief + personalisation hook
- 3+ working days since first email sent
Output:
1. **Subject line**: keep the original or use 'Re: [original subject]' (threading is cleaner)
2. **Email body** (40-60 words):
- Line 1: brief reference to the original ('shot you a note last week about X')
- Line 2-3: ONE NEW thing — a fresh angle, a recent customer story, a stat, a related news item
- Line 4: low-commit CTA ('worth a quick reply with a yes / no?')
Constraints:
- 40-60 words MAX. Shorter than the first.
- DO NOT just 'bump' the original. Add real new value.
- DO NOT use 'just following up' or 'circling back'.
- One sentence per line. Short.
Output as a structured update to the Prospects row.
Step 9: Run the post-sprint analysis and tune for the next sprint
Estimated time: 2-3 hours, Day 12+
After the 5 days + 1 week of follow-ups, run the analysis: which subject lines worked, which openers worked, which prospect segments converted highest, which value props earned the most positive replies. The next sprint runs against the same template with these tuned variables.
Tasks
- Compute reply rate by subject line cohort, opener cohort, segment cohort
- Identify the top 3 subject lines (most replies / most positives) and the bottom 3
- Identify the top 3 personalisation hook types (e.g., recent post > recent fundraise > recent hire)
- Identify the top 3 prospect segments by positive-reply rate
- Update the Brief doc with the next-sprint playbook based on findings
[!CAUTION] Gotchas
- Open rates are unreliable on iOS Mail Privacy. Use reply rate as the truth metric.
- If your overall reply rate is < 10%, the issue is the offer or the ICP, not the email copy.
- If your reply rate is 25%+ but positive rate is < 5%, the email is 'interesting' but not 'relevant'. The offer is mistargeted.
Agent prompt for this step
Run the post-sprint analysis.
Inputs:
- The Sent log (every email sent + reply category + meeting booked)
- The Prospects table (every prospect with brief + segment + draft)
Output to the Brief doc:
1. Reply rate (overall, by segment, by subject line cohort)
2. Positive-reply rate (overall, by segment, by hook type)
3. Top 3 subject lines (with reply rates)
4. Top 3 openers (with reply rates)
5. Top 3 prospect segments (with positive-reply rates)
6. Top 3 winning hook types (post / fundraise / hire / launch / etc.)
7. Three concrete recommendations for the next sprint
Step 10: Book the calls and prep the pipeline
Estimated time: Ongoing post-sprint
Replies are the leading metric; booked calls are the lagging one. For every positive reply, get a meeting on the calendar within 7 days. Send a calendar link with 3 specific time options. After the call, the prospect either becomes a design partner / customer or moves to a 90-day nurture queue with explicit next-action notes.
Tasks
- For each positive reply: send a calendar link reply within 1 hour with 3 time slots
- After the call: log outcome (becomes-customer / design-partner / 90-day-nurture / not-fit) in the Prospects table
- For 'becomes-customer': move to your CRM / customer pipeline
- For 'design-partner': start the partner workflow (separate playbook)
- For '90-day-nurture': set the calendar reminder + the specific reason / next-action
[!CAUTION] Gotchas
- Calendar links without specific time slots ('here's my Calendly') get 50% lower book rate than 'how about Tue 2pm or Wed 10am Pacific?'.
- If a positive reply doesn't lead to a booked call within 7 days, the lead cools. Don't let positives sit.
- Don't run the next sprint until you've worked through the current sprint's positive-reply queue. Volume without conversion is vanity.
Hand the template to your agent
Paste the prompt below into your agent's permanent system prompt so the agent reads, writes, and maintains this workspace as you work through the steps.
You are an agent on the "5-day cold email outreach sprint" playbook workspace at your-org/run-a-cold-email-outreach-sprint.
Your role: research prospects, draft personalised first emails, track replies, queue follow-ups. Humans send and reply.
Cadence:
- Day 1: enrich every Prospect row with: 3-bullet brief on the company + role + 1 personalisation hook from a recent post / hire / fundraise.
- Day 2-3: draft the first email per prospect in the Prospects row (subject + opening hook + value prop + low-commit CTA).
- Day 4-5: when the human marks a row 'replied', auto-draft the reply candidate; when 'no reply 3 days', queue follow-up #1.
- After 5 days: surface the top-performing subject lines + opening hooks in the Brief.
First MCP tool calls:
1. list_surfaces(workspace_slug="run-a-cold-email-outreach-sprint")
2. list_rows(workspace_slug="run-a-cold-email-outreach-sprint", surface_slug="prospects")
3. get_doc(workspace_slug="run-a-cold-email-outreach-sprint", surface_slug="brief")
Do NOT send any emails. Drafts go in the prospect row; humans review, personalise further if needed, and send via their email client.
Constraints:
- Subject lines: lowercase, < 50 chars, no marketing language
- First email: 60-100 words MAX
- Personalisation hook: must reference something specific to that prospect, not the company
- CTA: low-commit ('worth a 15 min call?' or 'reply if it's interesting')
FAQ
Why 200 emails over 5 days, not 5000 over 5 days?
Because the bottleneck on early-stage outbound is reply rate, not list size. 200 deeply-researched emails to a tight ICP get 15-25% reply rates and 5-15 booked calls. 5000 sprayed emails get 1-2% reply rates and burn your domain reputation in the process. The math: 200 * 20% = 40 replies, while 5000 * 2% = 100 replies but with worse deliverability for the next sprint and 90% of replies being 'not interested'. Quality wins on both metrics that matter.
Should I use my main domain or a secondary domain for cold email?
Always a secondary. Cold email volume on your primary domain destroys deliverability for customer + transactional email. Buy yourcompany.co or yourcompanyhq.com, set up SPF/DKIM/DMARC, warm for 14 days, and use that. Replies forward to your real inbox via mail forwarding so you don't miss anything.
What reply rate should I expect?
For 200 deeply-personalised emails to a tight ICP with trigger events: 15-25% reply rate, 5-10% positive-reply rate, 5-15 booked calls. For broader ICPs without triggers: 5-10% reply rate. For spray-and-pray: 1-3% reply rate, but the marginal positive-reply rate is so low and the deliverability cost so high that the absolute volume of booked calls is often lower.
Can I fully automate the cold email pipeline?
Partially. Agents are great at: research, draft generation, reply categorisation, follow-up drafting, analysis. Agents are bad at: judging draft quality, replying to nuanced objections, choosing which prospects to cut. The pattern that works is: agent drafts at scale, human reviews every draft (30 sec each), human sends. Full automation tanks reply rates because every email reads identical and the prospect smells the agent.
What does the cold email outreach stack cost?
Free path: a secondary domain ($12/year) + your own SMTP + agent for drafts. $20/year. Paid path: secondary domain + Apollo ($59/mo) + Instantly or Smartlead ($37-39/mo) + Hunter or NeverBounce ($49/mo) + agent API tokens ($10-30/mo) = around $150-200/mo. Most founders running their first sprint can do it on the free path; scale to paid tooling once the sprint is repeatable.
How often can I run a sprint to the same prospect list?
Once every 90-180 days minimum. Sending the same prospect 4 emails in 30 days gets the prospect's domain to mark you as spam. Each sprint also burns your fresh-prospect inventory in that ICP — by sprint 3 you should be either expanding the ICP or running a different motion (events, content, partnerships).