Home › Buyer's guide

How to verify a B2B lead list before you pay for it

Seven checks that separate a genuinely verified list from a scrape with a nice cover page. Most of them take under ten minutes, and you can run every one of them on a free sample — before any money moves.

Last updated 3 August 2026 · Written by the team that runs the verification pipeline behind TrueList Leads

Buying a lead list is a strange transaction. You hand over $149, or $500, or $2,000, and the thing you are buying is information about whether the information is good — which the seller controls entirely until after you have paid. Everyone in the category uses the same three words. Verified. Validated. Accurate. None of them mean anything on their own.

The good news is that lead data is unusually easy to audit from the outside. An email address either has a mail server behind it or it doesn't, and that's a public DNS fact anybody can look up. A website either loads or it doesn't. Two rows are either the same company under two spellings, or they aren't. You don't need to trust the seller. You need about ten minutes and a sample file.

Here's the order we'd run the checks in, roughly cheapest-and-most-damning first.

1. Ask for the funnel, not the count

This is the single question that ends most conversations. Ask the seller:

"How many raw records did you start with, and how many did you throw away at each stage?"

A list that was genuinely filtered has a shape to it. Ours, for the roofing-contractor build that's printed on the front page, went 279 raw records → 161 after dedupe → 130 that passed email and website verification → 73 where the email was published by the business itself. That's a 74% cut from top to bottom. Numbers like that aren't flattering, which is exactly why they're credible: nobody invents a funnel that throws away three quarters of their inventory.

A scraped list has one number, because nothing was ever removed. If the answer comes back as "we have 12,000 verified roofing contractors" with no attrition anywhere in the story, the pipeline had no filter in it. There is no data source on earth where 100% of scraped rows survive a real MX check — the base rate for dead or parked domains in small-business directory data sits comfortably in the double digits.

What good sounds like: "We pulled 400, 231 survived dedupe, 178 passed MX, 96 had a public email on their own site. You're buying the 178, and the 96 are tagged as tier one."

2. Run your own MX lookups

An MX record is the DNS entry that says "mail for this domain goes to this server." No MX record means no mailbox can exist at that domain, full stop — every send to it is a hard bounce. This is free to check and takes seconds.

On any Mac or Linux box, on 20 domains pulled at random from the sample:

dig +short MX acseamlessgutters.com
# 10 mx1.example-host.com.   ← has mail, plausible

dig +short MX somedeadcompany.com
# (empty)                    ← guaranteed hard bounce

Or in bulk, straight down a CSV column:

cut -d, -f4 sample.csv | tail -n +2 | cut -d@ -f2 | sort -u \
  | while read d; do
      printf '%-38s %s\n' "$d" "$(dig +short MX "$d" | head -1)"
    done

If you're on Windows, nslookup -type=mx domain.com does the same job. If more than one or two of twenty come back empty, the list was not MX-verified, whatever the sales page says. That's not a judgement call — it's arithmetic.

3. Find the catch-all domains

Here's the trick that lets a bad list pass a naive verification check. A catch-all domain accepts mail addressed to anything at that domain — john@, sales@, asdkjh@ — and sorts it out later, or silently bins it. Any verification tool that just asks the mail server "does this mailbox exist?" gets a yes for every address at a catch-all domain, including the ones that were completely invented.

That's how a vendor gets to claim a 98% validity rate on a list of guesses. The mailbox test passed. The mail still goes nowhere, and it still counts against your sending reputation when the recipient's filter quietly drops it.

You can't fully detect this from a CSV, but you can smell it: if a supposedly verified list is full of firstname.lastname@ addresses at small companies with no public staff directory, someone generated permutations and let a catch-all server rubber-stamp them. Ask directly whether catch-all domains are flagged in the delivery. A seller who knows what they're doing will have a column for it. A seller who doesn't will change the subject.

4. Load ten of the websites

Business data goes stale in a specific way: the company closes, the domain lapses, and a parking page or an SEO squatter takes over. The website column is the fastest tell, because a dead site usually means a dead everything.

curl -s -o /dev/null -w "%{http_code} %{url_effective}\n" -L https://example-roofing.com

Anything that isn't a 2xx, or that redirects to a domain registrar, a "this domain is for sale" page, or a completely unrelated business, is a row you paid for and cannot use. Ten samples is enough to estimate the rate. Two dead out of ten means roughly 20% of the file is landfill, and you should reprice accordingly or walk.

5. Check the role-account ratio

Sort the email column and count how many start with info@, sales@, contact@, office@, admin@. These are role accounts, and they are not automatically bad — for a 6-person roofing company, info@ genuinely is the owner's inbox, and it's often the best address on the file. For a 400-person manufacturer it's a shared mailbox that a receptionist clears once a week.

What matters is honesty about the mix. If a vendor sells you "verified decision-maker contacts" and 90% of the file is info@, you weren't sold decision-makers, you were sold a directory scrape with a job-title column bolted on. Ask what share of rows carry a named human, and what share carry a role account. Then check it yourself in the sample — it's one spreadsheet formula.

The tell: a job title in every single row. Real public business data has gaps. A file where every row is neatly labelled "Owner" was labelled by a script, not researched.

6. Hunt for dedupe collisions

Duplicates are how a 900-row list becomes a 1,600-row list. The same business appears once from a directory listing, once from a maps entry with "LLC" appended, and once more with a different phone format. Any of those looks unique to a naive script.

Sort by domain — not by company name — and look for repeats. Domain is the honest key, because "A&C Seamless Gutters" and "A and C Seamless Gutters LLC" both sit on acseamlessgutters.com. In a spreadsheet, extract the domain from the email or the URL column and run a duplicate count on it. In our roofing run, name-and-domain normalisation collapsed 185 usable records to 161 — a shade over 13% of the file was the same businesses wearing different hats.

If a sample of 25 rows contains even one obvious pair, the full list is probably inflated by 10–20% and you're paying per row for the privilege.

7. Google five rows at random

Low-tech, and the most revealing of the lot. Pick five rows, search the company name plus the city, and compare what you find to what's in the file. You're checking three things: does the business exist, is the contact detail current, and is the address on the file the one the business actually publishes?

Do it on rows you pick, not rows the seller picks. A curated demo tells you the vendor can find five good businesses. A random sample tells you what the other 245 rows look like.

What "verified" can and can't mean

Worth being blunt, because the category leans on this ambiguity hard.

ClaimWhat it can actually proveTrust
Published on the company's own site or listingA human at that business put that address in public to be contactedStrongest
Domain has a live MX recordThe domain can receive mail; it isn't dead or parkedSolid floor
SMTP handshake accepted the mailboxSomething accepted it — could be a catch-all saying yes to everythingConditional
"Pattern-inferred", e.g. info@company.comAn educated guess on a domain confirmed to run mailUse knowingly
"99% accuracy guaranteed"Nothing. It's a refund policy wearing a lab coatMarketing

Our own position, printed on the sales page rather than buried: publicly-listed addresses are the top tier and we label them as such. Pattern-inferred addresses get an MX check, which rules out dead domains but is not a mailbox-level ping, and they're labelled as that too. In the roofing build, 73 of 130 verified rows were publicly listed and 57 were pattern-inferred. You get told which is which, per row, so you can send to them differently — or not at all.

Any vendor who won't tell you which tier a row belongs to is hoping you assume the good one.

What a fair price looks like

Rough market shape for built-to-order niche lists in 2026:

The economic point people miss: the expensive part of a bad list isn't the money. It's what a 30% bounce rate does to your sending domain. Mailbox providers read bounce and complaint rates as a reputation signal, and once you've slid, your good emails — the replies, the invoices, the follow-ups to real prospects — start landing in spam too. A $49 list that costs you a warmed-up domain is the most expensive thing on this page.

Red flags in the pitch

Run every one of these on us

All seven checks work on the free 25-lead sample. Pull the domains, run dig, load the sites, sort for duplicates, Google whichever rows you feel like. That's the entire point of publishing the funnel numbers: they're falsifiable, and you're invited to falsify them.

Get the free 25-lead verified sample

Real rows from the roofing-contractor build — publicly-listed emails, MX-checked, live-site-checked. Audit it however you like. Then tell us your niche and we'll quote a list built the same way.

Up to 250 verified leads, any niche · clean CSV within 48 hours · funnel report included

If the problem is the database you already have rather than the one you're about to buy, the companion piece is here: what a CRM data cleaning service actually does, and what it does to your bounce rate.

FAQ

How can I tell if a lead list is scraped?

Ask for the funnel — raw records, survivors after dedupe, survivors after verification. A scraped list has one number because nothing was ever removed. Then MX-check 20 random domains and load 10 of the sites yourself. If every row passes every check, nothing was ever filtered.

Is buying a B2B lead list legal?

In the US, CAN-SPAM permits cold B2B email provided you don't forge headers, you identify yourself, and you honour opt-outs. In the EU and UK, GDPR and PECR allow B2B contact on a legitimate-interest basis with a clear opt-out and a real relevance argument — corporate addresses at limited companies are treated more permissively than sole traders or personal addresses. Buying the data isn't the risk; sending badly is.

What bounce rate should I expect from a properly verified list?

Under 3% on publicly-listed addresses is a reasonable expectation. Pattern-inferred rows run higher — MX verification proves the domain takes mail, not that the specific mailbox exists — which is exactly why they should be labelled separately and sent to on a warmed domain, in smaller batches.

Can I just use a free email verifier instead?

Bulk verifiers are useful and worth running, but they inherit the catch-all problem: a domain that accepts everything returns "valid" for addresses that were invented. They also can't tell you whether a company still trades. Run one, then still load a handful of the websites.

How fast does B2B contact data decay?

Commonly cited figures land between 22% and 30% a year, driven by job changes, mergers and closures. Practically, a list older than about six months should be re-verified before a serious campaign, and a CRM that has never been cleaned is almost certainly carrying a double-digit share of dead rows.