Every campaign passes through the same layers in the same order. Steps with a solid outline run by themselves. Steps with a dashed outline wait for a person: nothing sends until the list and copy are approved, and no reply goes out until that reply is approved. Dotted lines show what each layer reads from or writes to the records.
Swipe sideways to see the whole chart.
Build
Send
Replies
AI side and records
Waits for your approval
02 / All stages
Stack
The tools under each layer, grouped the same way as the chart above.
Lead data
Public records and trade data
Contact databases
Email verification
Two independent email verifiers
Sequencer
Smartlead
Generic sending domains
Warmed mailboxes
Monitoring
Preflight
Send watchdog
AI layer
Claude Code
Skills
Hooks
Memory
App
Next.js
Convex
Vercel
03 / All stages
How it got built
Each part was added after a specific problem showed up. The steps below are in the order they were built.
Send
First sends
Problem: Once campaigns were sending, a change saved mid-send could email the same person twice.
What we built: The sequence lock, the lead-add lock and the watchdog that pauses a campaign by itself.
Paid enrichment is the expensive step, so it only touches leads that already passed everything free. A bad list gets caught for pennies.
05 / Build
Two checks on every email address
One verifier misses things, so every address goes through two. A missing result from either one fails preflight.
06 / Build
One list, before and after
The left side is a raw list as it comes out of a contact database. The right side is the same list after the free filters, the fit check and the two email checks. Each dropped row shows the step that removed it and why.
MockA worked example in the real format. Invented companies, people and addresses.
Raw list
Northfield Valve Works
Dana Ortiz, VP Sales
dana@northfieldvalve.example
Brightwater Seals
Owen Pratt, President
owen@brightwaterseals.example
Ostrander Flow Group
Lena Fischer, Regional Director
lfischer@ostranderflow.example
Calder Pump Co.
Marcus Lee, Owner
marcus@calderpump.example
Kessler Hydraulics
Tom Brandt, Sales Manager
tbrandt@kesslerhyd.example
Marlow Machine & Tool
Ana Ruiz, Owner
ana@marlowmachine.example
Ridgeline Fittings
Priya Shah, GM
priya@ridgelinefittings.example
Pinecrest Controls
Sam Okafor, Marketing Lead
s.okafor@pinecrestcontrols.example
After the funnel
Northfield Valve WorksKept
Valid on both email checks.
Brightwater SealsDropped at free filters
Dead domain. The website does not load and the mail server does not answer.
Ostrander Flow GroupDropped at free filters
Wrong size. Far above the company size this list is built for.
Calder Pump Co.Kept
Valid on both email checks.
Kessler HydraulicsDropped at fit check
Owned by a distributor. The email says there is no distributor in the middle, which would be false here.
Marlow Machine & ToolDropped at fit check
Job shop. Makes parts to other companies' drawings and has no branded product to sell.
Ridgeline FittingsKept
Catch-all server. Kept and flagged in the preview.
Pinecrest ControlsDropped at email checks
Invalid email. Verifier one says the mailbox does not exist.
Paid enrichment runs only on the rows that pass the free filters and the fit check.
07 / Send
How a send is protected
Re-saving a campaign mid-send can email the same person twice. Each guard below blocks or acts. The watchdog runs on its own schedule, independent of any session.
Guard
What it stops
Sequence lock
Saving a campaign's sequences after it has sent anything. No bypass.
Lead-add lock
Adding leads to an active or completed campaign. Order is pause, add, preflight, restart.
Duplicate-lane gate
Creating a second campaign with the same name as a live or draft one.
Preflight
A one-step or empty sequence, a lead already in another campaign, missing verification results.
Send watchdog
Anything that slipped through. Runs every five minutes and pauses the campaign itself.
Clock
Guessing the day or hour. The real time and send window print on every prompt.
08 / Send
What broke, and what stops it now
Each guard above exists because something went wrong without it. These are the failures, what each would cost if it reached a prospect, and the check that blocks it now.
Sequences re-saved during a send
What happened
A campaign's sequences were saved again after it had started sending. Some people got the same email twice.
What it would cost
A repeat email looks careless to the person who gets it, and duplicate sends count against the sending domain.
What stops it now
The sequence lock blocks any save once a campaign has sent. The watchdog pauses a campaign by itself if one lead gets the same step twice.
Leads added to a running campaign
What happened
Leads went into a campaign that was already sending, outside the pause and preflight order the rest of the list went through.
What it would cost
Those leads skip the duplicate and verification checks, so a bad address or a person already emailed elsewhere can get through.
What stops it now
The lead-add lock blocks adding to an active or completed campaign. The order is pause, add, preflight, restart.
One campaign created twice
What happened
The same campaign was built twice under one name, and both copies pointed at the same people.
What it would cost
Everyone on that list could get two first emails from two campaigns.
What stops it now
The duplicate-lane gate blocks a new campaign with the same name as a live or draft one.
A lead with no verification result
What happened
A lead reached a campaign without a result from the email checks, so nobody knew if the address existed.
What it would cost
Bounces count against the sending domain, and a domain that bounces too much stops reaching inboxes.
What stops it now
Preflight fails any lead missing a result from either verifier, and the campaign stays paused until it is fixed.
09 / Send
How sends reach the inbox
Campaigns send from domains kept for sending. None of them carries a client's brand, so your own domain never sends cold email. Each mailbox warms up before a campaign uses it and has a daily cap. The watchdog pauses a campaign on a duplicate send. A domain that gets flagged is paused, and its mailboxes stop sending.
Swipe sideways to see the whole chart.
Ask how these send guards would apply to your campaigns.
The draft depends on which offer that campaign sold. No dollar figure goes into any reply, and nothing sends until it is approved. Replies go out in the thread they came from.
See how replies would be handled for what you sell.
Every email states a fact about the company, asks where their deals come from, says what we do in one sentence, and makes one ask. Four variants of a real campaign are below. Merge fields are in double braces and fill from each lead's own data.
A{{product}} accounts
{Hi|Hey} {{first_name}},
Is most of your new {{product}} business still coming through distributors or dealers?
We {open|start} direct conversations with the businesses that buy {{product}} in your territory, with no distributor in the middle.
Shall I show you what that looks like for {{company_name}}?
{sender}
Bwho picks the brand
{Hi|Hey} {{first_name}},
When a distributor picks which {{product}} brand goes in front of the buyer, is {{company_name}} part of that conversation?
We {open|start} direct conversations with the businesses that buy {{product}} in your territory, so the order comes to you.
Shall I show you what that looks like for {{company_name}}?
{sender}
Cbuyers you talk to
{Hi|Hey} {{first_name}},
How many of the businesses that buy {{product}} in your territory does {{company_name}} talk to directly, and how many only through a distributor?
We {open|start} direct conversations with the ones you do not reach, so new accounts do not depend on a dealer.
Shall I show you what that looks like for {{company_name}}?
{sender}
Dsomething new in {{product}}
{Hi|Hey} {{first_name}},
When {{company_name}} launches something new in {{product}}, how does it reach buyers before a distributor decides to stock it?
We {open|start} direct conversations with the businesses that buy {{product}} in your territory, so the new product gets in front of people who can buy it.
Shall I show you what that looks like for {{company_name}}?
{sender}
The copy gate runs before anything is built. It checks word count, banned words, one question per email, and that the ask is identical across variants:
copy_gate output
--- A | {{product}} accounts | 45 words
--- B | who picks the brand | 51 words
--- C | buyers you talk to | 56 words
--- D | something new in {{product}} | 58 words
PASS
12 / Build
Check your own cold email
A simplified version of the copy gate above. Paste an email and it checks length, the number of questions, a list of filler phrases, the number of links, and whether the email ends on one question. The real gate has more rules than this.
The check runs in your browser. Nothing you paste is stored or sent anywhere.
13 / Build
Niche teardowns
Each niche gets the same worksheet: who buys, where their deals come from now, which public record gives a fact about each company, and why that fact fits what they sell.
Petroleum equipment contractors
Independent contractors who install and service fuel tanks, dispensers and piping.
Public source
EPA and state tank registration files
Why it fits
The file shows how many regulated tanks sit in the contractor's own state, which is the market they can serve.
Aggregate and crusher equipment dealers
Independent dealers selling crushing and screening equipment to quarries and pits.
Public source
MSHA mine registry
Why it fits
Active mines in a dealer's territory are the operators who buy. The file shows operators, not intent, so the email never claims a mine will buy.
Self-funded health plan administrators
Independent third-party administrators running claims for employers that fund their own plans.
Public source
Form 5500 filings
Why it fits
The filings list self-funded plans by state, so the email can name the pool in the administrator's footprint.
Industrial demolition and decommissioning
Contractors who take down plants and facilities.
Public source
State WARN closing notices
Why it fits
A closing notice is public and dated. It is a lead on a facility changing hands, not a promise of a job, so the copy says only what the notice says.
Safety equipment makers
Manufacturers of protective gear who sell mostly through distributors.
Public source
OSHA citation data by standard
Why it fits
The fact has to match the product. A respirator citation figure goes to a respirator maker, never to a glove maker.
Data center equipment makers
Manufacturers of power, cooling, cabling and fluid-handling parts sold to data center builders, mostly through channel partners.
Public source
Data Center World 2026 exhibitor list
Why it fits
Being on the list is a public, dated fact about the company and shows it sells into this market. It shows presence at a show, not intent to buy, so the email says only that the company was on the list.
Glove, boot and protective-fabric makers
Makers of hand, foot and fabric protection who sell through safety distributors.
Public source
National Safety Council Safety Congress 2026 exhibitor list
Why it fits
The exhibitor fact works the same way as on the data center card. The check that matters is ownership. A maker owned by a distributor is dropped, because the email would wrongly say there is no distributor in the middle. Distributors themselves and wrong-company domain matches are dropped too.
Branded manufacturers that sell through distributors
Independent makers of branded industrial products whose orders mostly come through dealers.
Public source
Company records filtered by industry and size, then each company's own dealer or distributor pages
Why it fits
The fact in the email is something the company published about itself. Each lead goes through a fit check that drops a giant or foreign parent, job shops, dealers and wrong people. A person check then needs one source outside the contact database before the lead is approved.
14 / Replies
What worked
Each card is one campaign: the hook, the ask, what came back in the replies, and the limits of what it proves.
Cleaning contractors, public-record hook
Hook
A federal contract ending near the contractor, taken from a public award record.
Ask
Can I send you the contract details?
What came back
Owners and managers replied yes and asked for the contract details, the contracting office and the timeline.
What it shows
A fact the reader can check for themselves gets a yes before any pitch.
Limits
A yes here means the contractor wants the lead. It is not a sale. One reply was a decline that said government contracts go to the lowest bid. The sequencer counted an auto-reply as positive, so every positive reply was read by hand.
Roofing contractors, public-record hook
Hook
An open public bid in their area that a roofer could answer.
Ask
Can I send it over?
What came back
Roofers replied yes. One asked for the full bid package and whether they could bid as a subcontractor. Another said yes if the job was flat-roof work, which is the fit the hook was built for.
Limits
A yes here means the roofer wants the bid. It is not a sale. Every positive reply was read by hand, the same as on the cleaning campaign.
Commercial production studios
Hook
A specific buyer need in their region.
What came back
Studio owners replied with questions about us and sent their portfolios, so each reply opened a conversation.
Limits
The replies were few. A yes from a studio is a yes from the supplier side, and a buyer still has to agree.
What the pattern says
In the same trades and from the same sending setup, a dated public fact the reader could check beat the plain pay-per-lead campaigns that had no such fact. The next test is the same hook in a new trade.
Each campaign was a small send, so this pattern is a lead to test and not yet a proven rate.
15 / Build
Markets we test and turn down
Before any money goes into a market, we size it from free data and run a small test sample through the same fit and email checks a real list gets. If too few reachable buyers come out the other end, the market stops there and no contacts are bought.
Some of the kinds of markets that stopped at this test:
Turned down
Government contractors
The test pool held too few reachable buyers to fill a campaign.
Turned down
Small manufacturers
The test pool held too few reachable buyers to fill a campaign.
Turned down
Logistics firms
The test pool held too few reachable buyers to fill a campaign.
Find out whether your market passes the same test.
Every campaign stops at a 10-lead preview. You see each lead, the fact the email uses, the email check result, and why the lead fits, then approve or send it back. The table below is a mock built in the same format as the real preview. Every company and person in it is made up.
MockSame columns as a real preview. Invented companies and people.
Lead
Fact used in the email
Email check
Why it fits
Northfield Valve Works Dana Ortiz, VP Sales
Lists a distributor network on its dealer page
Valid on both
Fits: makes the product, sells through dealers
Calder Pump Co. Marcus Lee, Owner
Exhibits at one regional trade show
Valid on both
Fits: small maker, no direct sales team listed
Ridgeline Fittings Priya Shah, GM
Dealer locator covers four states
Catch-all, flagged
Fits: dealer-led, owner reachable
Mock rows. A real preview has ten.
17 / Build
The copy as data
The same four variants as the JSON the gate reads and the preview renders from.
copy.json
[
{
"label": "A",
"subject": "{{product}} accounts",
"body": "{Hi|Hey} {{first_name}},<br><br>Is most of your new {{product}} business still coming through distributors or dealers?<br><br>We {open|start} direct conversations with the businesses that buy {{product}} in your territory, with no distributor in the middle.<br><br>Shall I show you what that looks like for {{company_name}}?<br><br>%sender-firstname%"
},
{
"label": "B",
"subject": "who picks the brand",
"body": "{Hi|Hey} {{first_name}},<br><br>When a distributor picks which {{product}} brand goes in front of the buyer, is {{company_name}} part of that conversation?<br><br>We {open|start} direct conversations with the businesses that buy {{product}} in your territory, so the order comes to you.<br><br>Shall I show you what that looks like for {{company_name}}?<br><br>%sender-firstname%"
}
]
18 / AI side
How the AI side runs
The work runs through Claude Code. A skill is loaded for each kind of task. Hooks check every action before it runs and block the ones that break a rule. When something goes wrong, the lesson is written to memory so the next session starts with it.
19 / All stages
Decisions and why
Single-step campaigns stay. Most replies come from the first email, so the effort goes there.
Campaigns that were not working were stopped, not left running.
Every guard blocks or acts. None of them is a reminder to be careful.
No competitor names in any email. A wrong or dead name costs more than it earns.
Proof on this site is limited to what we can show.
22 / Send
The kill gate: when a campaign gets flagged
A rule for pausing a campaign that is not working, written before any campaign could trigger it.
It looks at each active campaign and counts leads whose first email went out at least 48 hours ago.
Below 2,000 such leads it prints 'too early' and flags nothing. Smaller samples mislead more than they inform.
At 2,000 or more it flags a campaign as a kill candidate if the reply rate is under 1% with out-of-office replies removed, or if positive replies are under 5% of replies.
It only flags. A person decides every pause, and the gate is not wired into the sender.
Checked on every active campaign on 18 October 2026: all were too early, the largest had about 29 leads. The rule has not been able to fire at our scale yet, and this page does not pretend otherwise.
23 / Build
The fact check: a line about a company must be on its own site
An email that opens with a detail about the recipient is only as good as that detail. A model can write one that sounds right and is wrong.
Numbers, years and capitalised names in the line must appear on the company's home, about or services page.
At least 70% of the other content words must appear there too.
A spelled-out count such as 'six advisors' always fails, because it cannot be matched safely.
If the site cannot be read, preflight warns instead of failing. Facts that come from a job posting are skipped, because they come from the posting, not the site.
A line that fails is blanked before upload, so the email goes out without it instead of with a wrong one.
Tested on 20 real leads: 17 of 18 real facts passed, and the one miss was 'molder' against 'molding', which fails safe. We then wrote 10 wrong facts by hand (wrong year, state, city, customer, certification) and all 10 were caught.
24 / Build
The intake page: a campaign is written down before a list is pulled
One page per campaign: the buyer, the trigger, who to exclude, who to never email, the offer, whether the economics clear our own bar, seed companies, how many sendable leads we are aiming for, and the expected yield.
A free size check comes first. It refuses to go ahead without a complete intake.
Preflight fails any campaign created after 19 October 2026 that no intake lists, and warns on older ones.
The exclusions are agreed before any pull. They used to live only in someone's head, which is how a wrong target got shown once.
25 / Build
A free filter by the software a company runs, and where it misleads
It reads the technology fingerprints on a company's site, so we can keep or drop companies that use a tool that fits or rules them out.
It runs only on companies that already passed the funnel, and before any paid lookup, so it costs nothing.
Limit one: the fingerprints are loose. A test run tagged a large marketing platform's own website as a site-builder.
Limit two: tools that only appear after the page runs its scripts are missed.
So it is a filter that needs a spot check, and it is not wired into the main funnel yet.
26 / Build
Two verifiers, and which results stop a send
Every address is checked by the data source and again by a second, independent verifier.
Invalid and mail-server-error results are hard stops. They are never loaded.
Accept-all addresses (a domain that says yes to everything) are kept but sent at lower volume, because the answer is unknowable and not bad.
Unknown results, such as timeouts, are never loaded either.
Preflight runs the second verifier itself on any active lead that lacks a stamp, and fails the campaign on an invalid, a server error or a missing result.
First list through the new rule, 177 leads: 101 valid, 61 accept-all, 13 unknown, 2 invalid. The 13 unknown were paused before a single send.
27 / Build
The cost ladder: cheapest check first
Paid steps run on survivors only.
A sample of 100 first, and we read the best 10 and worst 10 before running the rest.
Free filters next: does the site exist, can it be read, is it the right kind of company.
A small, cheap model scores each company against one written sentence describing the buyer, reading the company's own site. This step costs about twelve cents per thousand leads.
A larger model confirms and finds one fact, but only for the leads we would actually send.
Paid email lookup and verification run last, and only on what is left. A hook blocks those tools for any domain that did not survive.
A roofing run, start to finish: 321 companies, 240 sites readable, 190 scored as a fit, and 11 of 12 checked leads confirmed by the larger model.
28 / Send
The preflight checklist, in full
A campaign cannot start until every check passes, and a change after the check voids it.
The sequence has every step it should and none is empty. A one-step or blank sequence fails.
Every lead is rendered locally at both extremes of the wording variants, so a broken merge field shows up before send.
Copy rules fail on hard errors. Booking links fail, other links and dollar figures warn.
The send window is weekdays, 9 to 5 Eastern, and all webhooks are registered.
Leads are checked against banned industries and our do-not-email list, and against every other campaign: a lead already in another campaign fails, and so does a company domain already sent to.
Every address has both verification results, and every personal fact is grounded on the company's site.
The campaign has an intake page, and the variants of an A/B test are balanced.
The check stores a fingerprint of the copy, leads, inboxes and settings. If any of them changes after the check, the launch refuses to start.
After start, a monitor runs every 5 minutes for 15 in-window minutes: no sends raises an alert, a bounce rate of 7% or more on at least 20 sent pauses the campaign, and a missing webhook or dead watchdog raises an alert.
A dry sweep of every draft campaign runs each Monday at 8:45 Eastern before the send window opens.
29 / Send
Warmup: what it is, what week one looks like, what we watch
A new inbox on a new domain has no history. For about two weeks it exchanges mail with other warming inboxes so mailbox providers learn that it behaves like a person.
Week one looks poor and is normal. We measured warmup mail on new inboxes: roughly a quarter to a third of it landed in spam folders in the first eight days, and it improves as the inbox ages.
Nothing is sent to your market during warmup. That is why month one is about half a month of sending.
We watch each inbox's reputation score, not just whether warmup is switched on. On 26 September the average across 270 inboxes was 94%, and 24 were under 85%.
20 / All stages
Projects
Available for contract GTM engineering
I build lead lists, reply handling and signal checks for outbound, and I run them on Breezy's own cold email. Each project below lists the problem, how it works, numbers from a real run, what broke, and a prompt you can copy and use today.
Book a callCounts and costs are from real runs. Company names, lead data and prices are left out on purpose.
Turns a raw company list into a short list the companies' own websites confirm, spending money only on what survives the free steps.
Python, headless Claude Haiku scoring, SQLite cache, 11 unit tests on the grounding step
The problem
A bought or scraped list is mostly the wrong companies. A database export of "marketing agencies" holds holding-company subsidiaries, associations, dead sites and firms that do something else entirely. Every enrichment credit and every email spent on those is wasted, and the sending reputation takes the hit.
This pipeline keeps only companies whose own website matches a written buyer definition. Each paid step sees only what survived the cheaper step before it.
One real run
4,138 rows of independent agencies, scored against a one-sentence buyer definition.
Raw rows in
4,138
After free filters
1,576
2,526 already seen or duplicate, 26 look like associations or schools, 10 had no domain
Site readable
1,368
47 domains did not resolve, 161 live with no readable text
Score 2 (clear match)
572
Scored 0: 589. Scored 1: 207. Only a 2 moves on.
Model cost for the scoring step on that run was $1.54 for 1,368 sites, about $1.13 per 1,000. A 100-row pilot on a different niche cost $0.10 and kept 12, which shows a niche is thin before any more rows get pulled.
How it works
Stage
What happens
Cost
1. Free filters
Dedupe, drop rows with no domain, drop association and school names, drop domains already contacted
$0
2. Fetch
Read each homepage once, cache it 30 days, retry failures, drop dead sites
$0
3. Score
A small model reads the page text and scores 0 to 2 against the buyer definition, with a written reason. Only 2s survive
Cents per 1,000
4. Deep check
On survivors only, a stronger model writes one fact about the company
Survivors only
5. Ground the fact
Plain code re-reads the site and passes the fact only if every number, every name and most content words appear on it. An unreachable site gets no fact
$0
A model can write a detail that sounds right and is missing from the page, so step 5 checks every fact against the site. On a test set, 17 of 18 real facts passed and all 10 deliberately wrong ones were caught. A spelled-out count ("six advisors") always fails, because code cannot count names on a page.
What broke, and what changed
Dropping every free-mail and role address in the first stage also dropped good companies on lists built from map data, where the only email is the firm's own. In one early run that removed 16 of 33 good firms. Company-first lists now get their own flag.
Scoring a vague buyer definition with no sample run first produced confident, wrong scores. A --sample 100 mode now scores a random 100, prints the 10 best and 10 worst with reasons, and stops so a person reads them before the full run.
Models approve marginal companies to be helpful unless told what the buyer is not. The definition now takes an explicit exclude list.
Use it yourself
Start with a CSV that has a domain column, then apply the same four rules:
Write the buyer as one sentence, plus a separate list of what they are not.
Sample 100 first. Read the 10 best and 10 worst reasons before running the rest.
Require a written reason on every verdict, and tell the model to answer "none" when the page does not say.
Run a cheap model on everything, then a stronger one only on the survivors.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
You are screening companies for a cold outreach list.
BUYER: <one sentence: who they are, what they sell, who they sell to>
NOT THE BUYER: <comma list: associations, resellers, subsidiaries, ...>
You will get the text of a company's homepage.
Score 0 = not the buyer, 1 = unclear, 2 = clearly the buyer.
Return JSON: {"score": 0|1|2, "reason": "one sentence quoting the page"}.
If the text is empty or unrelated, score 0 and say so. Never guess.
2 fields still blank
02 / Revenue operations
Reply triage system
Classifies every prospect reply, picks the one correct next move, drafts it, and leaves the send to a person.
Playbook skill, eleven reply codes with answer-time targets, send guards with 21 tests
The problem
Cold email produces a trickle of replies, and most of the value sits in a few of them. A reply that waits a day books a fraction of what the same reply books in fifteen minutes. A wrong reply costs more than a late one: the wrong price, the wrong offer for that campaign, a calendar link nobody asked for, or a second email to someone who asked to be removed.
This system classifies every reply, decides the next move, drafts it, and stops. A person sends it.
The eleven reply types
Every reply gets exactly one code. If a reply mixes types, the highest-value intent wins.
Code
Type
Move
Answer within
A
Yes, book it
Two live time slots as text, no link
15 min
B
Price ask
Structure only, never a dollar figure
1 hr
C
Wants it in writing
Full offer by email, no call ask
1 hr
D
Objection
Agree, one question, one small next step
Same day
E
Send me info
Overview, one qualifying question, two slots
1 hr
F
Wrong person or referral
Thank them, get the name, new thread to that person
Same day
G
Not now
Pin a month, log it, stop the sequence
Same day
H
Not interested
Nothing, or one sorting line. Never re-pitch
Same day
I
Unsubscribe or angry
Suppress the whole domain first. Reply only if they asked a question
Immediately
J
Out of office
No reply. Handled automatically
None
K
Quiet after a yes
Follow-up ladder at 24 to 48 hours
24 to 48 hr
A reply that only says "send me info" counts as neutral. A reply that asks a question counts as positive.
The rules that stop mistakes
Offer first. Before any reply, look up which offer that campaign sold. Campaigns carry different terms, and a reply with the wrong structure contradicts the email the prospect answered.
No dollar figure in any reply. Price comes up on a call.
No calendar links. Offer two specific times as text.
Nothing sends itself. Replies, reminders and follow-ups are drafts. Automatic replies are off in production.
An unsubscribe suppresses the whole domain, everywhere, before anything else happens.
Reply rates use contacts sent as the denominator, with machine replies removed first.
Speed is a rule because of a third-party benchmark from a lead-gen firm's client data: an answer under 15 minutes books about 73% of positive replies, four hours about 31%, a day or more about 12%. The answer-within column above comes from it. The same source puts a healthy ratio of booked calls to positive replies at 45 to 60%, and anything under 35% points to broken reply handling.
Four numbers decide whether reply handling works: positive replies per 1,000 contacts, booked calls per positive reply, calls that show, and minutes from reply to answer. The next addition is a pre-call reminder sequence, because cold-sourced meetings no-show more often than inbound ones.
Try the sorting
Sort a reply
A rule-based version of the sorting, so it only catches the clear cases. Anything it does not recognise goes to a person, which is the right default. The prompt below handles the rest.
Code C: Wants it in writing
Send what exists in writing, and offer a call.
Use it yourself
Paste this into any assistant with a reply in hand. It returns the code and a draft.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
Classify this reply from a cold email prospect with exactly one code:
A yes/book, B price ask, C wants it in writing, D objection, E send info,
F wrong person/referral, G not now, H not interested, I unsubscribe/angry,
J out of office, K quiet after yes.
If several apply, pick the highest-value intent.
Then draft the reply: under 60 words, no dollar figure, no links,
two specific times as plain text if a call is the next step.
If code is I, do not draft. Say: suppress the domain.
Thread:
<paste>
1 field still blank
03 / Buying signals
Signal radar
Watches public sources for the moment a buyer needs you, and checks one real, dated signal per lead before any email mentions it.
Python, scheduled weekly Slack scoreboard, 17 unit tests
The problem
Some services only sell when the buyer has a need right now: they just raised money, they are hiring for the role your service replaces, or a public event affects them. A static list cannot show when that happens. A signal detector watches public sources and reports who changed this week.
There are two pieces. One measures how often a market announces demand before any money goes into it. The other checks one real, dated signal per lead before any email mentions it.
Piece one: the radar
It subscribes to public feeds for each candidate market, counts qualifying events per week, and posts a ranked scoreboard to Slack every Monday at 08:00 from a scheduled job.
A dead feed still parses and still returns entries, all of them old. One trade feed parsed fine with a newest item 757 days old, and another was 532. Read at face value, a dead feed looks like a quiet market and gets a good market rejected. Every run now starts with a liveness check, every digest prints a staleness warning, and a missing feed is reported as missing, never as zero.
The radar ranks markets already on the list. New markets come from what is already known and from neighbors of a market already running. 17 unit tests cover the counting and the staleness logic.
Piece two: the signal check
For every lead, it looks for exactly one verifiable signal and records its type, text, date and link.
Signal
How it is checked
Rule for the email
Funding
A news headline that names the company and a raise, dated inside 240 days
Mention the round only if the date is in the window
Hiring
An open sales or growth posting whose company name matches, posted in the last 30 days
Name the role. Confirm the date is recent before writing "saw you are hiring"
None
Neither found
Send the plain offer. Make no claim about them
Cost is about $0.0005 per lead. Filters exclude look-alike headlines such as charity fundraisers and community drives. A companion tool pulls one row per hiring company, collapses repeat postings, keeps the newest, and refuses to run if it would drain the data pool below a reserve.
What broke, and what changed
Dead feeds, described above.
A funding "year" from one data source is a year with no date. Claims in copy now require a real posting or news date.
A model asked to find a signal will invent one. The check returns "none" when nothing verifiable exists.
Use it yourself
The method works with free tools and a spreadsheet: Use a model that can search the web, because it has to find a dated source for each company.
Pick the one trigger that comes before a purchase of your service.
Find a public feed or search that shows it, and check that the newest item is under a week old.
Log the date, company and source link. Count per week.
Only email a company whose signal is dated and linkable. If there is none, send the plain offer.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
For each company below, search for ONE signal: raised funding in the last 240 days,
or an open <role> posting in the last 30 days.
Return: type (funding|hiring|none), the exact headline or posting title,
its date, and its URL.
If you cannot find a dated, linkable source, return type none.
Do not infer, estimate or fill in a date.
Companies:
<list>
2 fields still blank
04 / Messaging systems
Messaging generation and copy gate
Writes cold email variants from one offer and one fact per lead, then blocks any variant that breaks a written rule before it can reach a sending tool.
Python gate scripts shared by build and send time, a failing-build voice test, browser demo below
The problem
A model asked for cold email copy writes the same email every time, in the same cadence, with the same openers. Prospects read that cadence in one line. The rules for avoiding it also tend to live in prose, and prose does not stop anything: the same tics came back after being banned in writing several times.
This system generates variants from a fixed structure, then runs every variant through checks that fail loudly. Nothing reaches a sequencer until the checks pass.
How it works
Check
What it enforces
When it runs
Length
30 to 75 words in the body, counted after every spintax option is expanded
Before the campaign is built
Banned words and marks
15 entries, among them em dashes, "robust", "unlock", "free", "guarantee" and "quick question"
Before the campaign is built
Voice tells
8 patterns that fail on sight ("it's not X, it's Y", tee-up openers, reveal setups) and 4 that warn
Build time and again at send time
Repeated word
The same content word twice in one sentence fails, plurals counted as the same word
Build time and again at send time
One ask, one question
Every variant must carry a question and the ask must be identical across variants, so a test measures the angle and not the ask
Before the campaign is built
Every spin combination
Each spintax combination is printed so a person reads what a prospect could actually receive
Before the campaign is built
Fact on their site
The one fact about the lead is re-read against their own website (project 01) and dropped if it is not there
Before upload
The same voice and repeated-word checks run again when the campaign is started, so copy edited by hand after the build still gets checked. Outward-facing page copy is covered by a unit test that fails the site build on the same tics.
What broke, and what changed
A rule written as a sentence in a doc did not stop the tics. The same cadence was banned in writing repeatedly and kept coming back until the rule became a test that fails the build. Fix the copy, never the test.
A line like "cafes opening, cafes still dialing in" passed review and went into a live preview. The repeated-word check came from that miss.
A closing line that promised to stop emailing on silence was false, because the system does follow up. It is now a hard fail.
Hype words from a generic spam list would have rejected every email, so single words are not enforced from it and only phrases are.
Try the checks
A browser-only version of the length, question, filler, link and ask checks. The text never leaves this page.
The check runs in your browser. Nothing you paste is stored or sent anywhere.
Use it yourself
Try the checks on your own email below, then use the prompt to generate variants that hold the same rules.
Pick one fact about the company that is on their own site, and one offer.
Write the email as: that fact, what you do about it, one question.
Run it through the checks. Fix the copy, not the rule.
Change one thing between variants: the angle or the subject, never both.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
Write 3 cold email variants, 30 to 75 words each.
Fact about the company (from their own site): <fact>
What I offer: <one sentence>
Structure: the fact, what I do about it, then exactly one question.
Rules: no em dashes, no exclamation marks, no links, no "quick question",
no "robust" or "unlock", no "it's not X, it's Y", no tee-up opener
like "I hope this finds you". Do not repeat a content word inside one sentence.
Every variant must end on the same question. Vary only the angle.
2 fields still blank
05 / Market selection
Market screening test
Decides whether a market is worth a campaign before a list is bought, by scoring a sample of 40 companies against one sentence and a bar that was set in advance.
A Python test that pulls company rows, a small model that reads each company's own website, a fixed pass rule
The problem
A market looks large on a registry or a directory and shrinks once the wrong companies come out. One registry listed about 4,000 repair stations, and the independent ones left after filtering came to between 40 and 65. A campaign built on the registry figure would have spent on a list that was never the buyer.
This test decides before any money is spent on a list. It samples companies, reads each company's own site, and scores it against one written sentence about the buyer. The pass rule is fixed first, so the result cannot be argued into a yes.
One real run
One market, start to finish: independent forklift and lift truck dealers.
Sampled
40
company rows from a contact database, one per company
Clearly the buyer
25
Unclear
3
Not the buyer
12
manufacturers, trailer dealers, parts only, a lumber company
The rule needed at least half the sample to be the buyer and at least 40 firms in the market. It passed. A hand check of the 25 then cut 7 more on ownership, because they belonged to a parent group or had been sold, so the independent pool is smaller than the raw estimate.
How it works
Market
Sampled
Clearly the buyer
Decision
Independent forklift and lift truck dealers
40
25
Taken
FAA Part 145 repair stations
45
9
Killed
Hydraulic cylinder and pump repair shops
39
7
Killed
Commercial kitchen equipment service
39
3
Killed
Motor, generator and pump rewind shops
40
7, and 13 unclear
Not taken, needs a hand check
Aerial and scissor lift dealers
35
12
Killed
Floor scrubber and sweeper dealers
40
1
Killed
Racking and conveyor integrators
39
7
Killed
Air compressor distributors
40
12, and 10 unclear
Not taken, needs a hand check
Two limits are written into the rule. A company that lists the buyer's industry as one of several is not counted as the buyer unless it is its primary market. And a market that passes the sample still needs a hand check on ownership before a list is built.
Try the pass rule
Run the pass rule
Enter what your sample of companies scored. The rule is the one above: at least half the buyer and at least 40 firms.
TAKE
63% of the sample is clearly the buyer and the market holds 60 firms.
Use it yourself
Write the buyer as one sentence, set the bar before you look, then score a sample of 40 with the prompt below.
Write one sentence: who the buyer is, and who it is not.
Set the bar first: what share of the sample must be the buyer, and how many firms the market must hold.
Pull one row per company, not one per person, so a large firm does not fill the sample.
Read each company's own site, score it, and count.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
You are testing whether a market is worth a campaign.
The buyer is: <one sentence, including who it is NOT>
For each company below, read its description and homepage text and answer with one word:
BUYER, UNCLEAR or NOT. A company that lists this industry as one of several
is NOT unless it is clearly its primary market. A company owned by a parent group is NOT.
Return the list, then the counts of BUYER, UNCLEAR and NOT.
The market passes only if BUYER is at least half the sample and the market holds at least <N> firms.
1 field still blank
06 / Messaging systems
Per-lead fact check
Checks that the one personal line in an email appears on the company's own website, and blanks the line before upload if it does not.
A Python check with no model and no cost, wired into the pre-launch checks and the upload step
The problem
An email that opens with a detail about the recipient lands only if the detail is true. A model can write a detail that sounds right and is wrong: a wrong year, a wrong city, a customer they do not have. A prospect who spots one stops reading.
This check reads the same pages the line was written from and compares them to the line. A line it cannot find is blanked, so the email goes out without it and not with a wrong one.
One real run
A test on 20 real leads in one niche.
Real facts checked
18
Passed
17
Failed
1
'molder' against 'molding', so it fails safe
Wrong facts written by hand
10
wrong year, state, city, customer, certification
Caught
10
Model cost
$0.19
Every wrong fact was caught and none passed. The one real fact it rejected was a spelling variant, which is the direction it should err.
How it works
Rule
What it enforces
Numbers and years
Must appear on the company's home, about or services page
Capitalised names
Must appear on those pages
Other content words
At least 70% must appear on those pages
Spelled-out counts
Always fail, such as 'six advisors', because they cannot be matched safely
Unreadable site
Warns in the pre-launch check and does not fail
Facts from a job posting
Skipped, because they come from the posting and not the site
Checking only the home page failed 9 of the 18 real facts on the first run, so the check reads the same three pages the writer read. It has not been tuned outside manufacturing.
Try the check
Check a line against a page
Paste the text of a company's pages and the one line you want to open an email with. The same rules the check uses run on it.
Grounded: the line stays
Pass: Numbers and yearsAll appear on the page
Pass: Capitalised namesAll appear on the page
Pass: Spelled-out countsNone in the line
Pass: Other content words (at least 70%)5 of 5 appear on the page (100%)
Use it yourself
Use the prompt to make a model give you a line plus the sentence it came from, then check the line yourself against the page.
Ask for one fact and the exact sentence on the page that supports it.
Check numbers, years and names against the page text.
Drop the line if it cannot be found. Send the email without it.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
From the company website text below, write ONE factual line about the company
that you could open a cold email with, and quote the exact sentence from the text that supports it.
Rules: use only what is in the text. Do not infer a year, a city or a customer.
If nothing in the text supports a line, answer NONE.
Return: LINE: <the line> SOURCE: "<the exact sentence>"
2 fields still blank
07 / List quality
Two-verifier email gate
Runs every address through a second, independent verifier and blocks the campaign if any lead has an invalid result, a server error or no result at all.
A Python filter around a verification API, the same check run again inside the pre-launch checks
The problem
One verifier is the only check between a bad address and the sending domain, and a bounce hurts the domain's reputation. The data source's own 'verified' flag is one opinion, and nothing in our pre-launch checks read it.
This gate adds an independent second opinion and makes a missing result a failure, so an unverified lead cannot slip through because nobody ran the check.
One real run
The first list through the gate.
Leads
177
Valid
101
Accept-all
61
a domain that says yes to everything
Unknown
13
timeouts and mail-server errors
Invalid
2
The 13 unknown leads were paused before any send. Valid and accept-all leads go in, and accept-all leads go out at lower volume.
How it works
Result
Meaning
What happens
Valid
The address exists
Loaded
Accept-all
The domain accepts everything, so the address cannot be confirmed
Loaded, sent at lower volume
Unknown
Timeout or mail-server error
Never loaded
Invalid
The address does not exist
Never loaded
No result
The check was never run
The campaign fails its pre-launch check
The pre-launch check runs the second verifier itself on any active lead that lacks a stamp, and writes the stamp back once it has a result. The verifier is rate limited, so a large list runs slowly and the check is built to resume.
Try the sorting
Sort verifier results
Paste a CSV with an email column and a result column from any verifier. It sorts the rows the way the gate does and gives you the file you may load.
Valid: 2Loaded
Accept-all: 1Loaded, sent at lower volume
Unknown: 1Never loaded
Invalid: 1Never loaded
Use it yourself
Use the prompt to have an assistant write the filter for your own list, then run every list through it before an upload.
Verify with a second tool, not the one that supplied the list.
Split the results into valid, accept-all, unknown and invalid.
Load valid and accept-all only, and send accept-all at lower volume.
Make a missing result a failure, not a pass.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
Write a Python script that takes a CSV with an email column, checks each address with
<verifier API>, and writes four files: valid.csv, accept_all.csv, unknown.csv, invalid.csv.
Respect the API's rate limit, resume from where it stopped if it is interrupted,
and print the count in each file. Never put unknown or invalid addresses in a file that is uploaded.
1 field still blank
08 / Approval
The 10-lead preview
Shows ten real leads, the line and the source behind each, and exactly what each prospect would receive, so the list and the copy are approved before anything is sent.
Research on public sources, a render script that fills the email as the sender will send it
The problem
A list can pass every automatic check and still contain a lead that looks wrong the moment a person reads it. A preview puts ten real leads in front of the buyer, with the evidence for each, before a campaign exists.
The render script prints each email with the spintax chosen and the variables filled. A missing variable prints as a visible marker, so an empty name cannot reach a prospect unseen.
What each lead in the preview carries
Field
What it shows
Person and title
Who we would email, found on the company's own site, press or an association page and not only a contact database
Company
The business and its city
The fact
One checkable line for the first line of the email
The source
The link that proves the fact
Independence
The evidence the company is not owned by the manufacturer, a private equity firm or a parent group
The email
The full text exactly as it would be sent, with every variable filled
On the forklift dealer market, of the 25 companies in the pull, 9 passed clean and 7 were cut because ownership failed on the evidence. A preview that shows only the survivors would hide that, so the cut companies and the reason are kept with it.
Why it comes before the list
The preview is the approval step. The buyer sees the people, the lines and the emails, and corrects them while changing them costs nothing. After approval the campaign is built from what they saw.
Try the render
Render a lead's email
Write the email with {{variables}} and {spin|options}, and give one lead's fields. See exactly what that lead would receive. A missing field shows up as a marker, not as a blank.
Missing: territory
Hi Chad,
Fairfield has sold lift trucks since 1982. We email the plants in <<MISSING territory>> that run lift trucks.
Shall I show you what that looks like for Fairfield Lift?
Use it yourself
Ask for the preview in this shape for your own market before you commit to a list. Use a model that can search the web, because it has to find people, sources and ownership. A model without search will tell you it cannot.
Ask for ten leads, not a count.
For each, ask for the person, the title, the line, the link that proves it, and the ownership evidence.
Read the emails as the recipient will, with every variable filled.
Prompt builder
Fill the fields and the prompt below is ready to paste. Anything you leave blank stays as a marker.
Build a 10-lead preview for this market: <one sentence describing the buyer>.
For each lead give: person and title, company and city, one checkable fact, the URL that proves it,
and the evidence the company is independent (not owned by a manufacturer, a private equity firm or a parent group).
Then write the email exactly as it would be sent, with every variable filled in.
Use web search. If you cannot source a line, write NONE for it. If you cannot search the web, say so and list what to look up instead. Do not guess.
1 field still blank
09 / Send safety
Preflight and launch gate
A set of checks a campaign must pass, a fingerprint that voids the pass if anything changes afterwards, and a hook that refuses to start a campaign without a fresh pass.
Python checks, a command hook on the sending tool, a monitor that runs after start, a weekly sweep of every draft
The problem
Most sending mistakes are things that were checked once and changed later: a lead added to a live campaign, copy edited by hand, a setting flipped. A check that runs only once does not stop them.
This system makes the check a condition of starting. The start command is refused unless a pass from the last 12 hours exists, and the pass is voided if the copy, leads, inboxes or settings change after it.
How it works
Stage
What it does
Checks
Sequence complete, every lead rendered at both wording extremes, copy rules, send window, webhooks, banned industries, do-not-email list, duplicates across campaigns, both verifier results, per-lead fact check, intake page
Fingerprint
A hash of the copy, leads, inboxes and settings is stored with the pass. If it no longer matches, the start is refused
Launch hook
Any command that would start a campaign is denied unless the pass is under 12 hours old. The override can only be set before the session begins, never typed in
After start
For 15 in-window minutes, a monitor checks that emails are going out, pauses the campaign at a 7% bounce rate on 20 or more sent, and alerts on a missing webhook or a dead watchdog
Weekly sweep
Every Monday at 8:45 Eastern, every draft campaign is checked without writing a pass, so problems surface before the send window opens
The gate blocks and acts. None of it is a reminder to be careful. It does not judge whether a campaign is a good idea, only whether it is safe to send.
Try the gate
Try the launch gate
Record a pass, then change one character of anything below and press Start. The pass no longer matches, so the start is refused. That is the whole mechanism.
No pass recorded. The start would be refused.
Use it yourself
Use the prompt to have an assistant design the same gate around your own sending tool.
List the checks a campaign must pass and make each one fail loudly.
Store a fingerprint of everything the checks read.
Refuse the start command without a pass that matches the fingerprint.
Watch the first minutes after a start, and pause on a bounce spike.
Design a launch gate for a cold email sending tool.
Requirements: a list of checks that must all pass; a stored pass with a hash of the copy, leads, inboxes and settings;
a rule that the start command is refused if there is no pass from the last 12 hours or the hash no longer matches;
a monitor for the first 15 minutes after start that pauses the campaign if the bounce rate reaches 7% on at least 20 sent;
an override that can only be set outside the session. Use exactly these numbers. Output the checks, the data stored, and the refusal message.
21 / All stages
About me
I'm Travis Heurtelou, founder of Breezy Growth Co. Before this I worked at Fidelity Investments, Microsoft, Western Union and Meta. We run cold email for B2B sellers, and I build and run each campaign myself: the sending setup, the lists, the copy and the replies. I built this page, its charts and the copy check with Claude Code, the same setup described in How the AI side runs.