← Blog

Proving list quality to a client, without a number you made up

"98% verified" is a number your client cannot check and will not believe twice. A per-row artefact they can re-run is a different kind of deliverable.

Contents

An agency that delivers lists gets paid on volume and judged on bounces. Those two facts pull in opposite directions, and the usual resolution is a number on a slide: 98% verified.

The problem with that number is not that it is wrong. It is that your client cannot check it, which means it does no work the first time a bounce report contradicts it.

Hand over the artefact, not the adjective

Run the file through POST /v1/bulk/email and POST /v1/bulk/phone, then deliver results.csv alongside the list rather than instead of it.

That file carries, per row: the verdict, the checks that produced it, and — the part that matters in a dispute — the checks that did not run. Your client can open it, sort it, sample it, and re-run any row against the same endpoint to get the same answer.

You have replaced a claim with a thing. Claims get argued about; artefacts get read.

What the not-run list does for you

Most quality disputes are not about a wrong verdict. They are about a mismatched expectation of what "verified" covered.

checks.not_performed settles that in advance, in writing, per row. For email it names smtp_mailbox and catch_all. That is Boundstone stating plainly that nobody knocked on the individual mailbox and nobody tested whether the domain accepts everything — because an SMTP probe is slow, frequently answered dishonestly by the receiving server, and damaging to the reputation of whoever runs it.

When a bounce arrives from a mailbox that no longer exists, you are not defending a broken promise. You are pointing at a line in a file you both already have, which said that check did not run.

Date the file

Validation is a reading, not a property. An address that resolved on the third can be gone on the tenth.

Put the validation date in the deliverable and make it explicit that the answer decays from that moment. It protects you, it is true, and it converts a vague "the list was clean when we sent it" into a checkable claim.

What you can defensibly say

You can say the list was screened for syntax, mail-server presence, disposable providers and role addresses, on a stated date, with the per-row evidence attached.

You cannot say it will not bounce, and you should not want to — the bounces only the receiving server knows about are invisible to every vendor, including the ones implying otherwise.

For phone, the same shape: valid, line_type and E.164 are what you screened, with carrier_lookup, ported_status and hlr_liveness marked not_performed unless you paid for a live dip with hlr:true. If a client's economics genuinely need liveness, that is a line item you can quote rather than a promise you absorb.

Why this is a commercial position, not a disclaimer

The instinct is to see the not-run list as weakness — the thing to bury in a footnote so the deliverable looks stronger.

It is the opposite. An agency that hands over a scoped, dated, re-runnable artefact is doing something its competitors, who ship an unverifiable percentage, structurally cannot. The client learns that your numbers survive inspection. That is worth considerably more than two points of claimed accuracy, and it compounds across renewals.

The vendors selling certainty are betting the client never checks. You are better off being the agency that assumed they would.

The short version

  • A percentage your client cannot verify does no work. The first contradicting bounce report turns it into an argument.
  • Deliver results.csv with the list. Per-row verdict, the checks that ran, and the checks that did not.
  • checks.not_performed prevents disputes rather than causing them. smtp_mailbox and catch_all set the expectation in writing, per row, before anyone sends.
  • Date the validation. The answer decays from that moment, and both sides should know when the clock started.
  • Never promise no bounces. Some are only knowable to the receiving server at send time — for every vendor.
  • Scoped honesty is a commercial advantage. It is the deliverable a competitor shipping an unverifiable percentage cannot match.

Frequently asked questions

How can a lead-gen agency prove the list it delivered was clean?

Hand over the evidence rather than the adjective. Ship the results file alongside the list, with the per-row verdict and the checks arrays intact, so the client can see which tests produced each verdict and re-run any row themselves. A claim like 98% verified is unverifiable by the person receiving it, and the first bounce report turns it into an argument. A per-row artefact turns the same conversation into a shared reading of the same file.

What should be in a list-quality report?

The verdict per row, the checks that produced it, and the checks that did not run. Boundstone returns checks.performed and checks.not_performed on every response and carries both into the bulk results file, so the not-run list travels with the deliverable instead of living in a caveat nobody reads. Include the date you validated, because the answer decays from that moment and both sides should know when the clock started.

Does validation guarantee the emails you deliver will not bounce?

No, and promising it is how agencies end up in disputes. Validation removes the provably bad — bad syntax, a domain with no mail servers, disposable providers, role addresses. It does not confirm a specific mailbox exists: smtp_mailbox and catch_all are reported as not_performed, because an SMTP probe is unreliable and damages your own sending reputation. Some bounces are only knowable to the receiving server at the moment you send.

Thomas Tsui

Founder of Boundstone — building phone, email and IP validation you can actually verify.

One honest API for email, phone and IP — every response lists what it checked and what it didn't claim to. Free tier: 250 credits/month, no card, credits never expire.

More from Boundstone — API documentation · Benchmark methodology · The benchmark series · Buyer's checklist