You don't have a cold email problem. You have an ICP problem.
A cold email ICP problem hides behind almost every "outbound doesn't work" complaint, and the founder who came to us was a clean case of it. His words: "I hand-typed 60 emails and got nothing back. Not one reply." He'd rewritten the subject lines, swapped openers, tightened the ask. None of it moved. The silence wasn't a copy failure. He'd researched the wrong 60 people, and no phrasing rescues a list that never fit.
We build an AI research assistant in Google Sheets. It researches, it never sends. So here's our bias, stated up front: the work that decides whether cold email lands happens before the send, on the list, in the grid, while a wrong call still costs a keystroke instead of a warmed inbox and a spam flag.
Key takeaways
- Silence after 60 careful emails is usually a targeting problem, not a copy one.
- In 2025, Salesforge found emails targeting a clear ICP get 52% higher reply rates.
- Plain-English ICP scoring writes a readable verdict in a cell you can sort, argue with or delete.
- Gates inspect a step's results and drop the rows that don't fit, so only fits proceed.
- Contact data ages fast, which is why a fit check with a drop step beats trusting the database.
What is a cold email ICP problem, and why does it look like a copy problem?
A cold email ICP problem is a list built from a target definition that doesn't match who you actually sell to. Ideal customer profile refers to the traits - size, stage, motion, buying signals - that make a company a genuine fit. When the list drifts from those, the send inherits the drift, and no rewrite closes the gap.
It disguises itself as a copy problem for one reason: copy is the last thing you touched. You research, personalise, send, and the pile stays quiet, so you reach for the dial nearest your hand. But the message sits downstream of the list. In 2025, Salesforge found that emails targeting a clear ICP get 52% higher reply rates ("How Defining Your ICP Can Improve Your Cold Email Messaging"). That's a verdict on the list, not the wording. Our founder tuned the copy three times and left the target definition untouched. Wrong dial.
Firmographic filtering vs an AI-written verdict: which one catches a bad row?
An AI-written verdict catches rows that firmographic filtering waves through, because most real fit criteria aren't columns. Filter-by-column asks whether a value sits inside a range: headcount over 50, industry equals SaaS, country equals UK. Useful, blunt, and blind to anything the database doesn't store as a field.
Take the trait that started this feature for us: "scaling outbound, no data engineer yet." No dropdown holds it. Neither does "just raised, spending on tooling, no RevOps hire." Those are judgements about where a company sits, and column filters can't see them. A model reading public signals can - and it writes down why, so the judgement stays checkable rather than hidden inside a threshold. That's the split. Filters sort on stored values; verdicts reason over live signals and leave a reason you can override.
How does plain-English ICP scoring fix a cold email list, row by row?
Plain-English ICP scoring fixes a cold email list by giving each row a verdict written like a colleague's note, in a cell you can read and edit, instead of an opaque 0.71. Legibility is the whole point. You should tell at a glance whether the model understood your business.
Walk three real rows. Say your ICP is "Series A to B B2B SaaS, scaling outbound, no data engineer yet."
TIER_1 - Series B SaaS, ~140 staff. Careers page lists two open SDR roles and zero data or RevOps engineer roles. Case studies mention outbound. Fits: scaling the motion, no data hire yet.
TIER_2 - Seed SaaS, ~22 staff. Site shows a demo-request flow but no visible sales team. Below the usual floor, but the outbound intent is there. Read before dropping.
NOT_ICP - Sole-trader consultancy. No sales team, no outbound signals, "1 employee" on the public profile. Below the team-size floor. Skip.
Read those and you know whether the scoring matches your judgement. If a reason is wrong - the consultant actually runs a 12-person agency - you override the cell and move on. That's the difference between research and a decimal you take on faith. Our founder's 60 rows would each have carried a short reason he could have read in two minutes, and the mismatches would never have reached his outbox.
What is a Gate in outbound research, and how does it drop non-fits?
A Gate is the checkpoint step. After the ICP-fit test runs, you inspect the results and choose which rows proceed. Rows that don't fit the profile get dropped, and only the fits continue. It's a filter with a human at the switch, not an automatic purge.
Think of it as three moves in sequence. Score writes the verdict and reason into a cell. Inspect is you reading the TIER_1, TIER_2 and NOT_ICP rows and deciding whether each verdict holds. Drop removes what doesn't, so the sheet that continues is only the rows you signed off. Nothing is sent at any point - the drop happens on the list, where reversing a bad call is a keystroke.
Why does a fit check with a drop step beat trusting the database?
Because the database describes the past, and you're contacting the present. Firmographic fields are a snapshot that starts ageing the moment it's stored, and outbound runs on data old enough to be quietly wrong.
Where stale data bites
A contact who was VP of Sales two years ago has moved on. A company tagged "SaaS" turns out to be a services shop. A headcount field lags reality by a whole funding round. Trust the source blindly and every one of those errors becomes a send you can't take back.
What the drop step actually does
You run the fit check, read the verdicts, and remove the rows that don't hold up. The drop step is the line between a list you committed to and a list you inspected. The non-fits leave before they cost you a send slot, a reputation ding, or the minutes of triaging a reply that never fit in the first place.
When should you skip the tool and do this by hand?
Under roughly 100 rows, qualify by hand. Our founder's 60 sat squarely in that range, and a careful hour reading company sites would have caught the mismatches faster than any setup. We say that plainly, because honest "this is not for you" content builds more trust than it costs.
The tool earns its place at throughput: multi-hundred-row lists where reading each one by hand is the bottleneck. If you're running deep account-based marketing with bespoke research per target, you want judgement per account, not speed per row - a different instrument. We know the volume line because we're our own heaviest user. Multi-hundred-row enrichment and scoring runs are routine here, and score-inspect-drop is how our own lists get built before a message goes out.
Put the research where it belongs, before the send
The founder didn't have a cold email problem. He had 60 rows that never fit, dressed as a copy problem because copy was the last thing he'd touched. Score the row in plain English, read the reason, Gate on the fit, drop what doesn't hold. What continues is a list you inspected, not one you inherited.
If you want to test plain-English ICP scoring and Gates, run a few hundred of your real rows through the fit check, read the verdicts, and drop the non-fits. Then judge how much of your "cold email problem" was a list problem the whole time. There's $20 of credit on a free account if you want to try it on your own list.
Sources
- Salesforge, "How Defining Your ICP Can Improve Your Cold Email Messaging" - https://www.salesforge.ai/blog/how-defining-your-icp-can-improve-your-cold-email-messaging (2025)