← All articles
Outbound Email · How-to

How to Build a B2B Lead List That Can Actually Feed a Campaign

From ICP to sendable records: one exact filter spec, the right source class, enrichment, verification, and the quality checks that stop you paying for junk.

By Joel Wylie, Founder · Last updated 7 August 2026

To build a B2B lead list: define the ICP from customers you actually win, write it down as one exact filter spec, pull contacts from the source class that matches your signal, enrich every row to a name, a company, and a verified email, then MX-check every domain before anything uploads. A full cold email programme wants a starting pool of roughly 50,000 contacts, so size the market honestly before you commit to a targeting spec that cannot feed it.

We build lead lists for client campaigns every week, and the pattern in bad lists is always the same: a vague persona instead of exact filters, a source picked by habit instead of by signal, and no quality gate between the export and the send button. This is the exact process we run instead.

What are the steps to build a B2B lead list?

Seven steps, each with a quality gate that must pass before the next one starts. Every gate exists because we have watched a list fail without it.

StepActionQuality gate
1. Define the ICPDerive it from the customers you have won and enjoy servingEvery filter traces to a real customer pattern, not an aspiration
2. Size the poolCount the market against your monthly send volumeRoughly 50,000 contacts with headroom for a full programme
3. Write the filter specOne list, one spec: exact titles, seniority, industries, size band, geographyNo prose. Every filter is a concrete value you could type into a database
4. Source the contactsPick the source class that matches the signal you are buyingBack pages of the preview are still on-ICP before you pay to export
5. Enrich to sendableEvery row gets a name, a company, and a verified emailRows that will not enrich get cut, not sent on hope
6. Verify and MX-checkVerify everything not verified at source; MX-check every domainZero known-invalid addresses, zero strict-gateway domains in the send set
7. Temperature-checkSample the built list and, post-launch, mine the negative repliesSampled rows match the intended titles and companies

Where do you start? The ICP you actually win

Start from evidence, not aspiration. Your ICP is the pattern in the clients you have won, kept, and enjoyed serving, because cold email is a proof-driven channel: your best copy leans on results for companies like the one reading it. The full process for getting this right, including when targeting is and is not the problem, is in our guide to ICP targeting for cold outreach.

Then size the pool honestly before you commit. A full volume programme sends around 50,000 emails per month, which means the targeting needs to produce roughly 50,000 contacts as a starting pool, with headroom, because lists decay, bounce, and get recycled. Interested replies arrive at roughly one per 500 to 1,000 sends on a good campaign, so a beautiful ICP of a few hundred companies is not a channel, it is a coin flip. Do this arithmetic first; it decides everything downstream.

How do you write the filter spec?

One list, one filter spec, and every filter is an exact value. A real job-title list, a seniority level, named industries, an employee size band like 50 to 1,000, and a concrete geography. "Expansion-stage companies with modern ops teams" is a mood, not a filter. If you cannot type the spec straight into a lead database, you have not written it yet.

Resist the urge to manufacture personas. A separate filter set per persona is only justified when you will say a materially different thing to each one. If three "personas" would receive the same message, they are one list, and splitting them just costs you volume and analytical clarity.

Two lessons from doing this weekly. First, raise the employee floor: a list that starts at one employee drags in sole traders and micro-shops, and starting at eleven sharpens almost every B2B list. Second, when the ICP is leaders only, heads of function and above, fix thin volume by raising the company size ceiling, not by lowering the seniority bar. At small companies the titled leader barely exists, because one person does everything without the title.

Where do you source B2B lead data?

There is no single best B2B lead database. There are four source classes, and the right one depends on which signal you are buying. Most real lists combine two or more.

People-search databases: titles at scale

These are the workhorses: searchable databases of contacts filtered by title, seniority, industry, size, and geography. Tools like Apollo.io, AI Ark, and LinkedIn Sales Navigator turn a filter spec into a raw pool, and lookalike engines like Ocean.io and DiscoLike build the market outward from your best existing customers instead of from stacked firmographic filters, the approach in the lookalikes playbook. Use this class when the ICP is defined by who the person is.

Technographic sources: stack signals

Technographic tools like Sumble and TheirStack reveal which companies run which tools. If your offer integrates with, replaces, or extends a specific system, this is the cleanest fit signal available, and it lets every email open with a specific claim about the prospect's world. The full play is in the technographic targeting playbook.

Engagement scraping: active intent

Tools like Trigify, Jungler, and PhantomBuster capture the people actively engaging on LinkedIn: your competitor's followers, commenters on industry keywords, the audience of the right thought leaders. This class trades scale for warmth: smaller lists, but every contact has recently demonstrated interest in your problem space, and the outreach can reference it.

Your own CRM: reactivation

The cheapest source of all is the export nobody runs: your own CRM. Old opportunities, ghosted replies, closed-lost deals, past trial users. These contacts already know who you are and the data costs nothing. Treat the export like any other raw source though: it decays, so it goes through the same enrichment and verification as a scraped list.

How do you turn raw contacts into sendable records?

A sendable record is three fields: a correctly cased name, a company, and a verified email. Everything else is decoration. Raw exports rarely arrive complete, so enrichment is the step that fills the gaps, typically through a waterfall that tries multiple providers per contact until one returns a valid address.

The rule that keeps this honest: rows that will not enrich get cut, not sent on hope. A contact with no findable email is not a lead, and a guessed address is a future bounce. Expect to lose a slice of the raw pool here; that loss is why the pool wants headroom above the send target.

What do you verify before upload?

Two different checks, and you need both, because they answer different questions.

First, email verification: is this address real? Verify everything that was not verified at source, every time. Scraped lists, CRM exports, and client-supplied CSVs all decay, and stale validity flags from a previous pass do not count. A list verified at source by the data provider is the one exception that saves money. The full process, including catch-all domains and what verifiers cannot see, is in our email list verification guide.

Second, the MX check: will this domain's gateway accept our mail at all? When the server receiving a domain's mail is a strict corporate gateway like Mimecast or Barracuda, cold mail from a new sending domain gets rejected on policy regardless of address validity. In one campaign we analysed, those protected domains were 7% of the list but 77% of all bounces. No verifier catches this, so we look up the MX record for every unique domain, never a sample, and drop the protected ones before anything uploads. This check applies to every source, including lists that were verified at source.

What do you do when the market runs thin?

Widen deliberately, cheapest trade first. When the honest count comes back short of the target, there is a ladder, ordered from least to most quality risk. Loosen the company size band first. Add adjacent geographies second. Add adjacent industries third, or flip from an include-list to an exclude-list so you stop filtering industry so hard. Broadening titles from exact matches to seniority plus function is the last resort, because title precision is usually what keeps a list clean.

Take one rung at a time and re-count after each. The goal is the tightest spec that still clears the volume target. A list that ballooned to hit a number is just a noisy list with better paperwork.

How do you check quality before committing spend?

Judge the list by its worst rows, not its best. Lead database previews are not randomly ordered: the strongest matches sit on page one and the weakest sit at the back, so page one always looks good. Before paying to export anything, open the last few pages of the preview. If the back pages are full of off-ICP titles and wrong-size companies, the filter is too loose, and you tighten before you spend. If the back pages are still clean, the count is real.

We learned to distrust big raw numbers the hard way. A list we inherited claimed 35,000 in-market records. A sample told a different story: roughly a fifth of it was outside the target geography, another large slice carried competitor keywords in the domain, and the top domains by frequency were industry associations and trade press, not buyers. The usable core was a fraction of the headline number. Sample before you scrub; a big raw list is not a big usable list.

The last gate runs after launch: the temperature check. Sample the leads the campaign has actually sent to and confirm they match the intended titles and companies, then read the non-interested replies for wrong-person patterns. Replies like "not my department" mean the list is cold and the offer never got a fair test. Offer objections from the right people mean the list is fine, and the problem lives upstream.

FAQ

How many contacts do you need for a B2B lead list?

A full cold email programme wants a starting pool of roughly 50,000 contacts, with headroom, because lists decay, bounce, and get recycled. Interested replies arrive at roughly one per 500 to 1,000 sends, so a small perfect list cannot sustain the arithmetic of a volume channel.

What is the best source of B2B lead data?

It depends on the signal you are buying. People-search databases give you titles at scale, technographic sources reveal what tools a company runs, engagement scraping captures active intent, and your own CRM export is the cheapest source of all for reactivation. Most real lists combine two or more.

Do you need to verify a B2B lead list before sending?

Verify everything that was not verified at source, every time. Scraped lists, CRM exports, and client-supplied CSVs decay fast, and stale validity flags do not count. Then MX-check every domain regardless of source, because strict corporate gateways reject cold mail even when the address is valid.

What is an MX check on a lead list?

A lookup of which mail server receives each domain's email. Domains behind strict corporate gateways like Mimecast reject cold mail from new sending domains on policy, even when the address is perfectly valid. We drop those domains at list build; no verifier catches them.

What do you do when your target market is too small?

Widen deliberately, cheapest trade first: loosen the company size band, then add adjacent geographies, then adjacent industries. Each rung trades a little precision for volume. Re-count after each step and stop at the first rung that clears your volume target.

How do you check lead list quality before sending?

Judge the list by its worst rows, not its best. In any list-building tool, the back pages of a preview hold the weakest matches, so read the last few pages before paying to export. After launch, sample the leads actually sent to and mine negative replies for wrong-person patterns.

Want outbound like this run for you, end to end?

Book A Call