Service

Contact Data Hygiene: What It Catches and What It Costs

What does contact data hygiene cost?

Short answer

Two rates, both with a $5 minimum. $0.20 a number validates the phone at carrier level and removes dead lines, wrong line types and known litigators, and a number your list repeats is charged once. $0.55 a row does that and then grades what survives, adding a phone grade, an email deliverability answer, and whether the name on your record actually matches the phone and the email. Both rates step down past 2,000 rows and again past 5,000, graduated so a bigger list never costs less than a smaller one. No subscription either way, and nothing is owed between jobs.

Checking a whole list? Preview 20 rows of it free →

On this page

Most lists are worse than the person holding them believes, and the damage is not evenly distributed. A file can be 90% deliverable and still be the wrong file to work, because the 10% is where the disconnected lines, the landlines you are texting, and the two people who sue telemarketers for a living all sit. Contact data hygiene is the pass that finds them before your team spends a week on them.

This page is about what that pass actually catches, what it hands back, and what it costs. For what the individual checks are, phone number scrubbing explained covers the mechanics.

What each check catches, and where it shows up

Defects caught by tier, and where each shows up
What is wrong with the recordTierWhere it shows up
A cell that cannot be a phone number at allBothRemoved before the job runs, free
The lookup reports the number is not validBothRemoved, counted as not a valid number on the job, and charged, since the lookup answered
The lookup itself failedBothRemoved, counted on the job, refunded to your card when the job finishes
Landline, VoIP or toll-free when you need a mobileBothRemoved, counted as not mobile on the job
Reports as mobile but the line is deadBothRemoved, counted as disconnected on the job
Known litigatorBothRemoved, counted on the job and logged to the audit record
You do not know who the carrier isBothcarrier
The name on your record is not the person on that phoneGradedphone_name_match
Overall contactability of the phoneGradedphone_grade
The email will not deliverGradedemail_deliverable
The name does not match the email eitherGradedemail_name_match
Overall quality of the email recordGradedemail_grade

Every row you get back survived the scrub, so scrub_status reads clean on all of them; there is no row in your file marked litigator or disconnected, because that row was never delivered. What was removed is counted on the job instead: how many were litigators, disconnected, not mobile, not a valid number, or failed the lookup outright. You see those counts on the results page, on the printable certificate, and in the completion email. Every removed row also comes back in a file of its own, with its line type, carrier and the reason it was removed, except a Do Not Call Registry match when your list had the Registry check, which is only ever counted. Litigator matches are in that file too, and again in a file of their own for your suppression list. Each is also counted on the job's dated Record of compliance screening, and we keep the screened number and the time of the check for 24 months, so the screening can be evidenced later. A row whose lookup failed is removed rather than passed off as good, and its charge is refunded to your card when the job finishes. line_type, carrier and activity_score are appended to every surviving row so you can see what was checked.

Deliverable, not valid

The email column is email_deliverable rather than email_valid, and the distinction is not pedantic. A live test returned an address the provider considered structurally valid while the deliverability add-on said it would not deliver, on a record graded F. Reporting the "valid" answer would have printed "yes" next to a dead mailbox.

The two name-match columns are three-state for the same reason. Where there is no coverage for a record they come back blank rather than "no", because "we could not tell" and "the name does not match" are different findings and only one of them should stop you calling.

The two rates

The scrub charges each distinct number once, so a number your list repeats is checked and charged once; Scrub + Grade charges every row, because each row is graded against its own name. Both rates step down with volume, graduated the way tax brackets are: rows 1 to 2,000 cost $0.20 to scrub or $0.55 to scrub and grade, rows 2,001 to 5,000 cost $0.16 or $0.44, and rows 5,001 to 10,000 cost $0.08 or $0.22. Every row is priced in its own band, so a list of 2,001 rows pays the lower rate on exactly one row and a bigger list never costs less than a smaller one.

Cost of each tier by list size
RowsScrub, from $0.20/rowScrub and grade, from $0.55/row
10$5.00 (minimum)$5.50
25$5.00$13.75
100$20.00$55.00
1,000$200.00$550.00
2,000$400.00$1,100.00
5,000$880.00$2,420.00
10,000$1,280.00$3,520.00

10,000 rows is the largest single job. A longer file is scrubbed up to row 10,000, and the rest comes back as its own file to upload as a second job. There is no subscription on either tier and nothing is owed in a month you do not upload anything, which is the whole reason the floor is $5 rather than a monthly minimum.

Quick check: what each tier tells you

Pick an answer to see whether it is right, and why.

1. Your file is a single column of phone numbers, with no names. Can it go through Scrub + Grade?

Not quite. Grading needs a name to match against, so the $0.55 tier is not available to a file that has no name column. That is a hard constraint of the underlying data, not a packaging decision.

Right. A bare column of phone numbers cannot be graded at all, because grading asks whether the name on your record matches the phone and the email. The $0.20 scrub still answers the questions about the line: is it valid, what type is it, is it live, is it a known litigator.

2. On a Scrub + Grade job, a row's phone_name_match cell comes back blank. What does that mean?

Not quite. Blank is not "no". The name-match columns are three-state: where there is no coverage for a record they come back blank, because "we could not tell" and "the name does not match" are different findings.

Right. The two name-match columns come back blank rather than "no" where there is no coverage, because "we could not tell" and "the name does not match" are different findings, and only one of them should stop you calling.

Not quite. A row that failed any check was removed rather than kept, so every row in your file survived the scrub, and its scrub_status reads clean.

3. On Scrub + Grade, the scrub removes a row as a known litigator, so it is never graded. What is that row charged?

Not quite. Removal does not make a row free: the rate is charged per row processed. A row whose lookup fails outright is refunded to your card when the job finishes.

Not quite. Grading only runs on the rows that survive the scrub, but the rate is charged per row processed rather than per row graded.

Right. Grading only runs on the rows that survive the scrub, since there is nothing to learn about a litigator you will not receive, but the rate is charged per row processed rather than per row graded.

4. A record's email address is structurally valid. Will it deliver?

Not quite. Not necessarily. A live test returned an address the provider considered structurally valid while the deliverability add-on said it would not deliver, on a record graded F.

Right. A live test returned an address the provider considered structurally valid while the deliverability add-on said it would not deliver, on a record graded F. Reporting the "valid" answer would have printed "yes" next to a dead mailbox.

Not quite. Whether the name matches the email is a separate column, email_name_match. Whether the address will deliver is email_deliverable, and a structurally valid address can still fail it.

Which tier a list actually needs

  1. A bare column of phone numbers can only be scrubbed. Grading needs a name to match against, so the $0.55 tier is not available to a file that has no name column -- this is a hard constraint of the underlying data, not a packaging decision.
  2. A purchased or skip-traced list with names is the case grading was built for. Those files fail in a specific way: the number is live, so a scrub passes it, but it belongs to someone other than the person named on the row. Only a name match catches that.
  3. A list you are about to text needs line type above everything else, which the $0.20 tier already gives you. Texts to landlines are billed and never delivered.
  4. A list with emails you also intend to use gets the email half of the grading for the same $0.55, so running the two hygiene passes separately across two vendors is usually the more expensive route.

If the list came from a skip trace, what to do with a skip-traced list covers the failure modes specific to that source. For how this compares to buying the checks from a compliance platform instead, see the TCPA compliance software buyer's guide.

Frequently asked questions

What is contact data hygiene?

It is the practice of checking a list of people you intend to contact before you contact them: is the number live, is it the right kind of line, does the name on the record actually belong to it, is the email deliverable, and is anyone on the list dangerous to call. It is distinct from database hygiene in the CRM sense -- deduplication, field formatting, record merging -- which is about the tidiness of your data. This is about whether the data is true, which is a question you can only answer by looking the contact up against live carrier and identity sources.

What is the difference between the $0.20 and $0.55 tiers?

The $0.20 tier answers questions about the line: is it valid, what type is it, is it live, is it a known litigator. The $0.55 tier answers questions about the person on top of that: does this name match this phone, is this email deliverable, does the name match the email, and how contactable is this record overall on an A to F grade. They are two tiers rather than an upgrade path because the grading requires a name column in your file -- a bare column of phone numbers cannot be graded at all. One thing worth being precise about: grading only runs on the rows that survive the scrub, since there is nothing to learn about a litigator you will not receive, but the rate is charged per row processed rather than per row graded. A delivered row whose grading fails is refunded down to the scrub rate, and a row whose lookup fails outright is refunded to your card when the job finishes.

What columns do I get back?

The rows that survived, unchanged, with columns appended. Every job adds line_type, carrier, activity_score and scrub_status -- the last of which reads clean on every row, since a row that failed any check was removed rather than kept with a different status. A graded job adds five more: phone_grade, phone_name_match, email_grade, email_deliverable and email_name_match. An ungraded job's file keeps exactly the shape it always had, so nothing downstream of you has to change to accommodate a tier you did not buy. A job that ran the federal registry check (your own SAN, up to 1,000 numbers) also adds dnc_federal.

Why does the $5 minimum kick in at a different row count on each tier?

Because it is a flat floor divided by two different rates, and the division is rounded up. At $0.20 a row the floor stops applying at 25 rows; at $0.55 it stops at 10, since $5 buys 9.09 graded rows and you cannot buy nine-tenths of one. Below those counts you pay $5 and no less. Above them you pay exactly the per-row rate with no minimum in play, at the first band's rate through row 2,000 and the lower band rates after that.

Does this include Do Not Call registry scrubbing?

The federal registry only. A signed-in paid scrub includes a federal Do Not Call Registry check, under your own FTC subscription (SAN), included free on lists of up to 1,000 numbers; state lists, your internal list, larger lists and the free assessment are not covered. National DNC Registry access runs under the seller's own Subscription Account Number from the FTC, and a vendor can only use it on the seller's behalf, never replace it. Carrier-level validation, litigator screening and identity matching touch neither the registry nor your SAN. See what a SAN actually gates if you are unsure which of the two you need.

Can I see the output before paying?

Yes. The free contact assessment grades up to 300 rows of a file you upload and returns a real report, using the same grading the $0.55 tier uses. Duplicate and completeness statistics run over the whole file regardless of size, because that is plain CSV analysis and costs nothing to do.

Grade the list before anyone works it.
Upload a CSV, TSV, Excel or PDF list and get every surviving row back with the columns below appended. $0.20 per row to scrub, $0.55 to scrub and grade, $5 minimum. No subscription.
Preview 20 rows free

Founder, NumberBroom · 10 years in telecommunications and marketing

Cameron Hoffman is the founder of NumberBroom and has spent 10 years working in telecommunications and marketing. He built NumberBroom after repeatedly watching outbound teams dial purchased lists that were full of dead numbers, landlines and TCPA litigators.