How to Build a B2B Prospect List That Is Actually Worth Sending To
Write your ideal customer as filters rather than adjectives — industry, headcount, location, job title — then keep the list small enough that every name…
Write your ideal customer as filters rather than adjectives — industry, headcount, location, job title — then keep the list small enough that every name genuinely fits. There are two honest ways to get names: import a list that already contains the addresses, or filter them out of a leads database. A tight list out-earns a big one every time.
Key takeaways
- An ICP written as adjectives (“ambitious mid-market firms”) cannot be searched. Rewrite it as filters and it becomes a list.
- Two sources exist: importing a list you already have, or filtering a leads database. There is no magic address-finder, and you should be suspicious of anyone selling one.
- Filter order matters: industry and country first, then location, then size, then job title. Each filter you add makes the list smaller and better.
- Check the addresses right before you send, not when you built the list. Contact data goes stale continuously.
- Google’s own guidance for senders is to start at low volume with engaged recipients and increase slowly — which caps how big a first list should sensibly be.
What is an ICP, in practice?
It is the shortest description of a company that will buy from you, written so that a search box can understand it. Most ICP documents fail this test. “Fast-growing B2B SaaS companies who care about efficiency” is a positioning statement, not a filter set — there is no field called cares about efficiency.
The rewrite is mechanical. Take each adjective and ask “what observable attribute is this a proxy for?”
| Adjective in your ICP doc | The filter it actually means |
|---|---|
| “Mid-market” | Company size: 50–500 employees |
| “Established” | Revenue range above a threshold |
| “Local” | City, state, or ZIP prefix |
| “Regulated industry” | Specific industries, named |
| “Decision maker” | Job title, listed explicitly |
If an adjective survives the rewrite with nothing on the right, it does not belong in your targeting. Keep it for the message instead.
How do I turn an ICP into an actual search?
Add filters in the order that removes the most irrelevant rows first, and read the count after each one. A realistic sequence:
- Industry — the single highest-leverage filter. Start broad, then split by sub-category if the result is too wide.
- Country — always set it, even when the answer is obvious. It is the cheapest way to avoid sending into a market you cannot serve.
- Location within the country — city, state, or a ZIP prefix if you sell locally. In our database, ZIP-prefix and street-level filtering is available for the US and Canada.
- Company size — employee count, then revenue range if you need it tighter.
- Job title — last, and deliberately so. Titles are the noisiest field in B2B data, and filtering on them too early hides companies that are a perfect fit under a title you did not think of.
Watch the count fall as you go. If it collapses to nothing, the last constraint is probably too narrow rather than the market being empty — widen it one notch rather than starting over.
How big should the list be?
Smaller than you want it to be, for two independent reasons.
The first is quality. Every name past the point of genuine fit lowers the average relevance of the campaign, which lowers reply rate and raises complaint rate on the whole send.
The second is deliverability. Google’s guidance to senders is explicit: “Start with a low sending volume to engaged users, and slowly increase the volume over time”, and “If messages start bouncing or start being deferred, reduce the sending volume until the SMTP error rate decreases” (Gmail sender guidelines). Gmail also asks senders to keep the spam rate reported in Postmaster Tools below 0.10%. A first campaign into a 20,000-name list is a direct contradiction of that advice.
For a sense of the ceiling from the other end: Google Workspace publishes a maximum of 2,000 messages per day per user and 3,000 external recipients per day, dropping to 500 messages a day on trial accounts (Google Workspace). Those are provider ceilings, not targets — a warmed mailbox running cold outreach should sit far below them.
A practical shape for a first campaign: a few hundred names, one clear segment, one message written for that segment.
How do I segment it?
Split on the thing that changes the first sentence of your email. If a segment does not change the message, it is not a segment — it is a filter you can leave applied.
Three splits that usually earn their keep: industry, when your value proposition names an industry-specific problem; company size, because a 20-person company and a 400-person one do not evaluate the same way; and location, when you have local proof — a customer in their city, an event they attended, a regulation they live under.
Two that usually do not: revenue band when the message is identical, and job title when both titles have the same problem.
Where do the names actually come from?
Two paths, and it is worth being blunt about the boundary between them.
You import a list that already contains the email addresses. This is the path for lists you have collected, bought elsewhere, exported from your CRM, or assembled by hand. The addresses come with the file.
You filter them out of a leads database. Our database holds 200 million business records, searchable in-app by industry and category, city, state, ZIP prefix and country, job title, company size and revenue range. A record can carry a business name, contact name, job title, email, phone, website, full address, industry, employee count and revenue range. Where a record has an address, you get it; where it does not, it does not.
What does not exist is a third path. There is no customer-facing tool that takes a name and a company and conjures an email address, and we will not pretend otherwise. If a record has no email, the way to fill the gap is to import a list that already contains it.
How do I check the list before sending?
Verify the addresses immediately before the send, not when you built the list. Business contact data decays continuously — people change roles, companies restructure, mailboxes get switched off — so a check done six weeks ago tells you about six weeks ago.
Verification returns a usable answer per address: valid, invalid, risky, or unknown, with catch-all domains flagged separately because they cannot be confirmed by design. Drop the invalid ones. Decide deliberately what to do with risky and catch-all addresses — sending to them is a choice, and on a new domain it is usually the wrong one.
Then keep the list fresh: re-check before each major campaign rather than trusting the last result.
How WarmySender handles this
The whole path stays in one place. Search the leads database with the filters above, save the result as a list, verify the addresses, and launch a campaign against it without exporting to a spreadsheet in between. Warmup runs first so the mailbox has history before it sends anything cold, and the scheduler paces the campaign inside safe per-mailbox and per-domain limits.
Your AI agent can drive most of it. Claude, ChatGPT, Cursor, Codex, OpenClaw, Hermes Agent — or any agent that speaks MCP — can search leads, create and enroll prospects, verify emails, build a campaign, launch, pause and resume it, and read back the stats, all in plain language. Two things stay fixed: the agent never sends an email itself, and it can never raise a sending limit. Launching hands the campaign to the same scheduler that paces everything else.
- Find your ideal leads with filters
- How fresh and accurate the leads database is
- How to get email addresses for your contacts
- Do I need to verify my list before I send?
Frequently asked questions
What is the difference between an ICP and a prospect list?
An ICP is a description; a prospect list is that description expressed as filters and resolved into named companies and people. If you cannot convert every part of your ICP into a filter — industry, location, headcount, revenue, job title — the untranslatable parts belong in your messaging rather than your targeting.
How big should my first prospect list be?
A few hundred names in a single segment is a healthy first campaign. Google’s own sender guidance is to start with low volume to engaged recipients and increase slowly, so a large first send works against you regardless of how good the list is.
Can I find an email address for a specific person?
Not through a customer-facing finder — no such tool exists here, and we would rather say so than sell you guesses. The two supported paths are importing a list that already contains the addresses, or drawing records from the leads database where an address is present.
How often should I re-check a list?
Before each significant campaign. Business contact data goes stale continuously as people change roles and mailboxes are retired, so the useful question is not how old the list is but how recently the addresses were checked.
Should I send to catch-all or risky addresses?
Treat it as a deliberate decision rather than a default. Catch-all domains accept mail for any address, so they cannot be confirmed either way, and risky results carry real bounce probability. On a new or recently warmed domain, leaving both out of the first campaigns is the conservative choice.