+ Book
GTM Engineering

The cold email playbook for 2027

Exactly how we run cold email after millions of sends: the copy frameworks, entry offers, our full tool stack, the Claude Code setup and the weekly review.

The Cold Email Playbook
On this page

We have sent millions of cold emails. This is exactly how we run it today: the copy frameworks, the tools, how Claude Code is wired into everything, how we read the data every week, and the infrastructure underneath.

Three parts decide whether cold email works: the copy and offer, the data, and the infrastructure. Then there is everything after the reply, which is where most teams lose the deal.

1. Copy and offer

90% of cold emails are slop. A generic opener, a feature list and "do you have 15 minutes this week?". Beating that is easy if you follow a few rules, sound like a human and lead with an offer that is actually worth something.

1.1 We never ask for anything

This is the rule everything else hangs on. A cold email never asks the prospect for their time. No "15 minutes", no "quick call", no "are you free Thursday".

Every email ends in one of two ways:

  1. Permission to deliver. We already have something for them, and we ask if we can send it. "Mind if I send it over?" "Should I send the list?" "Will you take a look if I send it?"
  2. A qualifying question, then the delivery. We ask one question that tells us which version to send, then we deliver it either way.

The meeting comes after they have seen the work. They ask for it, or the conversation gets there naturally.

1.2 Entry offers

An entry offer is something the prospect gets even if they never buy. It is a slice of real work, not a PDF and not a "free consultation".

How we build them:

  1. List every outcome your product or service produces. Aim for 10 or more.
  2. Tag each one: saves time, saves money, or makes money.
  3. Turn the top 4 into entry offers. Each one has to be a literal deliverable a stranger can say yes to at zero risk.
  4. Every entry offer must lead toward the main offer.

Entry offers we have run:

  • A list of 50 target companies for their market, with the decision makers already found.
  • A free reference build of one AI agent, with full ownership transferred to them.
  • A breakdown of which AI agent would have the highest ROI in their business, and then we build it for free.
  • A partnership angle: we take on a small number of partners per vertical at no cost.
  • A performance guarantee: double the booked meetings, or they don't pay.

We run about 4 entry offers plus a partnership angle inside every campaign, as A/B variants, and let the replies pick the winner.

People respect a good email even when they don't buy. Good copy builds the brand on its own.

1.3 One campaign per vertical, one email per persona

A campaign is one combination of vertical, buyer title and offer. A data source is never a campaign. Recruiting firms, SaaS companies and agencies each get their own campaign with their own offers and their own copy.

Inside a vertical, the email changes per persona. A founder of a 20-person agency, a VP of Sales at a 300-person SaaS company and a recruiting firm owner do not read the same email.

There is no right length. Some audiences want three lines, some want the detail. We decide by reading the actual LinkedIn profiles and posts of the people in the segment: how they write, what they talk about, how formal they are. Then the email is written in their voice, not ours.

What changes per persona:

What changesHow we decide
LengthHow the people in the segment write on LinkedIn
RegisterCasual, direct or formal, matched to their own posts
What we anchor onThe problem their role owns
ProofThe proof that person cares about (a peer company, a number, a build)
Entry offerThe deliverable that is most useful to that role

1.4 The email frameworks

These are the structures we write from. Every line is rewritten per vertical and persona.

Framework 1: Permission to deliver

  • Line 1: who we are, in one plain line.
  • Line 2: the outcome we produce for companies like theirs.
  • Line 3: the entry offer, specific to them ("I put together a list of 50 [their buyers] in [their market]").
  • CTA: "Want me to send it over?"

Framework 2: Qualify, then deliver

  • Line 1: something true about their business or market.
  • Line 2: the problem that usually comes with it.
  • CTA: one question that decides what we send ("Are you mostly hiring for X or Y right now?").
  • Whatever they answer, the next email delivers the matching asset.

Framework 3: Signal

  • Line 1: the signal, stated plainly (they are hiring for a role, they just raised, they engaged with a post about the problem).
  • Line 2: what that usually means for a team like theirs.
  • Line 3: the deliverable that helps right now.
  • CTA: "Should I send it?"

Framework 4: Partnership

  • Line 1: we are taking on a small number of partners in their vertical.
  • Line 2: what the partner gets, at no cost, and why we do it.
  • CTA: "Should I send the details?"

Framework 5: The follow-ups

StepDayWhat it does
10The entry offer and the permission ask
23Reads like a reply to step 1. A second deliverable or the same one explained differently, permission ask rephrased
38"I sent a few emails but couldn't reach you. Where should we go from here?"
420A new angle: a different entry offer or a different pain
526Close the loop and leave the door open

Step 1 carries most of the result. Late steps produce more "remove me" than "yes", so we keep sequences short and put the best thinking into the first email.

Subjects are short and lowercase and read like internal mail ("reference build", "opportunity!").

1.5 There are no rules

The most important part. Every framework above is a starting point. The campaigns that worked best for us broke a "best practice" on purpose. Be interesting, be a go-getter, try things nobody in your market is saying, and let the data decide.

2. Data

Great copy to the wrong people gets nothing. Data is how the right person reads it.

2.1 What we pull from

We never rely on one or two tools. We pull from 10+ databases, signal sources and our own scrapers:

SourceWhat we use it for
ApolloPeople by title, company search, hiring signals, email fallback
AI ArkCompany and people search, first email lookup
ProspeoVerified emails
BlitzDecision makers at qualified companies
ApifyOur own LinkedIn scrapers: everyone engaging with posts from creators in our space
RB2BIdentified website visitors
TrigifyFinding the creators whose audiences we scrape
BounceBanEmail verification
OrigamiPrompt-driven list building for niche verticals
SupabaseThe ledger every lead, contact, send and reply lands in

2.2 How a lead gets in

  1. Pull from every source above into one Supabase ledger.
  2. Free gates first: geography, competitor check (on our first LinkedIn engager run most of the "qualified" leads sold what we sell), the employer must be a real company with a real presence, and a senior title on a profile with almost no network is a red flag.
  3. Claude qualifies the survivors against one ICP file. Two independent reads have to agree. Cheap model, cached prompt, about $1 per 1,000 people.
  4. Email waterfall: AI Ark, then Prospeo, then Apollo. Pay only on hits.
  5. Verify every email with BounceBan. Only "deliverable" goes out. Catch-alls are held, because they bounce late and quietly ruin a campaign hours after the dashboard looked fine. One verdict per address is cached so we never pay twice.
  6. Suppression: every person is checked against our CRM (Attio) on email, LinkedIn URL and name plus company. Clients, open deals and past conversations never get a cold email. Attio syncs to the blocklist daily.
  7. Push to Instantly into the right vertical campaign.

2.3 Precise volume, and the phone

Send precise volume to qualified people, not maximum volume to everyone. And cold call the hottest replies: a phone call on top of a positive reply moves deals faster than any follow-up.

3. Infrastructure

Once you have a fire offer, infrastructure is the one thing that can quietly ruin it. Nothing tells you that you landed in spam.

3.1 You need volume to learn anything

You cannot test 4 offers on 50 mailboxes. To tell a winning offer from a lucky week you need around 1,500 sends per variant. Four offers across a few verticals is tens of thousands of sends.

  • Start with around 100 mailboxes. That is roughly 2,000 cold emails a day at 20 per mailbox.
  • 50 to 300 mailboxes is the range where cold email starts to show real value.
  • We run around 235 mailboxes in Instantly today, including 102 Google Workspace boxes from InboxKit, 3 mailboxes per domain.

3.2 How we run the mailboxes

  • 20 cold emails per mailbox per day, max. Scale comes from more mailboxes, not more volume per mailbox.
  • 3 mailboxes per domain.
  • Warm every new mailbox for weeks before it sends cold. In our own data the same verified list bounced 0% from older domains and 13 to 18% from domains a few weeks old. The receiving servers rejected the sender, not the address.
  • Rotate domains and keep reserves. Domains wear out at volume. Plan to replace them, not repair them.
  • Plain text, open and click tracking off, sending on weekdays in business hours.

3.3 Agents watch it every day

  • Bounce guard: if a campaign goes above 3% bounces over 7 days, the engine pauses itself.
  • Per-domain check: one bad domain gets pulled without stopping everything.
  • Errored mailboxes are detached automatically.
  • When bounces spike, check the sending domains before you touch the list.

4. The weekly review

Every week we sit down with the data and decide what to scale, what to fix and what to kill.

What we look at:

  • Interested and negative replies per 1,000 sends, per campaign, per step and per A/B variant.
  • How each ICP reacts: which vertical, title and company size reply positively, which reply "remove me", which stay silent.
  • Time between send and reply: how long positive replies take versus negative ones, and at which step each one lands.
  • Which entry offer wins inside each campaign.
  • Bounces by sending domain and domain age.
  • New leads contacted per week, so a dip in results is never confused with a dip in supply.

Then we iterate: rewrite the losing variants, move volume to the winners, launch the next A/B test, and move the copy of a dead campaign to a new audience before rewriting it. Often the list was the problem, not the copy.

5. After the reply

Generating positive replies is half the job.

5.1 Every reply lands in Slack

  • Our reply agent checks Instantly every two minutes.
  • Every positive reply is posted to Slack with a drafted answer, the full thread and the open calendar slots from Cal.com.
  • The draft is written in our voice. For the first month you reply to everyone yourself, then every reply you wrote becomes the agent's voice reference. Every draft you reject and why goes back in, so it stops repeating mistakes.
  • Before a draft is shown, a checker blocks anything that would embarrass us: an invented number, a time that is not actually free, banned phrases.
  • A human presses Send. Nothing goes out without that.
  • The reply creates a deal in Attio with a follow-up task.

Answer every positive reply within 30 minutes to an hour. Interest cools fast.

"Send me more info" is often a polite brush-off. Agree, ask one qualifying question, then send the right thing.

5.2 Protect the show rate

  • Book close. Offer slots within the next few business days. The further out the meeting, the more no-shows.
  • Remind them the day before and an hour before.
  • A prep brief lands in Slack 30 minutes before every call.
  • No-show detection: if nobody joined the call, the agent marks it and drafts a same-day rebook, then follows up again a few days later before moving them to nurture.

6. The Claude Code setup

We run outbound from the terminal. I have not touched a UI in four months.

6.1 How Claude Code connects to everything

  • Instantly: through the Instantly API with a key that lives in an untracked .env file. Claude Code builds campaigns, pushes sequences, loads leads and pulls analytics through scripts. Every sequence push reads the live campaign back first and refuses to run if someone edited the copy in the UI, so nobody's edits get overwritten.
  • Data providers: Apollo, AI Ark, Prospeo, Blitz, BounceBan and Apify through their APIs, each with a cost cap per run.
  • Supabase: the ledger. Every lead, verdict, send and reply.
  • Attio: the CRM, through its API.
  • Slack, Cal.com and Fireflies: for replies, booking and no-show detection.
  • Railway: runs the scheduled jobs when nobody is at the keyboard.

6.2 The folder

text
outbound/
  CLAUDE.md          ICP, scoring rules, tiers, send caps, hard rules
  company/           offers per vertical, personas, exclusions
  voice/             every reply we sent, voice rules, banned phrases
  scripts/           plain code for anything that must be exact
  data/              untracked: lists, verdicts, exports
  .claude/skills/    one folder per repeatable job

6.3 The skills

SkillWhat it does
outbound-list-buildPulls from every source, dedupes, writes to the ledger
influencer-engager-engineScrapes LinkedIn engagers, qualifies, enriches, verifies, pushes
email-verificationVerifies once per address, caches the verdict, holds catch-alls
campaign-prelaunch-auditReads the live sequence back, checks every step, daily limits and mailbox capacity before anything sends
founder-voiceHow we write
reply-craftHow we answer replies
instantly-inboxPulls the full thread before anyone drafts a reply
meeting-timesReal open slots from the calendar
follow-up-writerPost-call and no-show follow-ups

6.4 What runs on a schedule

  • Twice a week: the LinkedIn engager engine (health check, scrape, qualify, enrich, verify, push).
  • Every two minutes: the reply agent.
  • Daily: CRM to blocklist sync, deliverability checks.
  • Every weekday at 7:05: one Slack digest with everything due today.

6.5 Rules that keep it safe

  • Claude never sends. It drafts, a human approves. A hook blocks every send command at the tool level, so this does not depend on a prompt.
  • Read the live state before changing it.
  • A success response is not proof. After any delete or update, read a sample back.
  • Price every paid run before it starts.
  • Plain code for anything that must be exact (dedup, verification, limits). Models for judgment.

7. What is not working

  • Asking for a meeting in a cold email.
  • Mass AI personalization ("I saw your post about..."). It reads as automation now.
  • One list and one offer for every vertical.
  • Long sequences.
  • A/B tests on a few hundred sends.
  • Re-verifying the list when the real problem is young domains.
  • Open tracking.
  • Booking cold meetings two weeks out.

If you want us to set this up for you, or just want to compare notes, reply to the post or book a call on anfloy.com.

About Dima Bilous

Founder of Anfloy, an embedded AI engineering team. Designs, builds, and operates AI for agencies, tech companies, info businesses, and service teams, from simple automation to agentic systems to complex AI products, all shipped into your repo and owned by you forever. Forward-deployed AI engineering, not an agency.

[ 099 ]The next move

Let's build
what your
company needs.

Drop your email. We'll send The Custom Agent Blueprint on what we'd build first for a company like yours, before you ever take a meeting.

↳ Or skip ahead · book a call