"Our data is bad" is not a metric
Three slides into the quarterly review, someone asks why the CRM says 40,000 contacts but the launch campaign only reached 26,000 of them. The ops lead says the data is messy. The CFO asks how messy. The room goes quiet, and the meeting moves on.
That silence costs you budget. "Messy" is not a number, so it can't be compared, trended, or funded. It also can't be disproven, which means the next time someone wants to blame a missed forecast on the CRM, they can, and you have nothing to argue with.
Measuring data quality fixes the conversation before it fixes the data. Once you have a score, three things change. You can say where you started. You can say where you are now. And you can point at the one sub-score that is dragging everything down, which turns a vague complaint into a specific project with a specific owner.
This post hands over the whole framework: the six dimensions worth measuring, the formula for each, how to weight them into a single 0 to 100 Clarity Score, and a filled-in example on a 40,000-record CRM. You can run all of it on a CSV export with a spreadsheet and an afternoon. You should run it at least once by hand, even if you later automate it, because the act of defining what "good" means for your data is most of the value.
The six dimensions worth measuring
Data quality frameworks tend to sprawl. Academic versions list a dozen dimensions, half of which overlap. Six is the practical number. Each one describes a different way a record fails, and each one points at a different fix.
Four of them you can measure from an export alone, with no outside information. Those four are the sub-scores of the Clarity Score, always in this order: Completeness, Consistency, Uniqueness, Validity. The other two, timeliness and accuracy, need something the file can't tell you: a clock and a source of truth. Measure them too, but report them beside the score rather than inside it, so your number stays comparable from quarter to quarter and from dataset to dataset.
Here is what each one actually means in a CRM or a customer list:
- Completeness. Are the fields that matter filled in? A blank middle name is fine. A blank email on a marketing contact makes the record close to useless.
- Consistency. Does the data follow one agreed format? This is the column with 'CA', 'Calif', 'California', and one brave 'Cali'. Nothing is wrong, exactly, but nothing matches either.
- Uniqueness. Does each real person or company appear once? 'John Smith', 'Jon Smith', and 'J. Smith' at Acme are three rows and one human being.
- Validity. Do the values obey your business rules? A contract start date in 2087, an order total of negative $500, an employee count of 4 at a company you sold 900 seats to.
- Timeliness. How recently was the record confirmed? A perfectly formatted email address for someone who left the company in 2022 scores well on the first four dimensions and still bounces.
- Accuracy. Is the value actually true? This is the only dimension your file cannot answer by itself, and the only one that requires a human to check a sample against reality.
Computing the four scored dimensions from a CSV export
Export the dataset. Any of the five platforms CleanSmart connects to (Mailchimp, Shopify, Klaviyo, HubSpot, Salesforce) will give you a CSV, or you can let DataBridge read the records directly. Then run four counts.
Completeness. First, write down your critical fields. Not every field, just the ones where a blank means the record can't do its job. For a B2B CRM that is usually email, company name, country, and lifecycle stage. Then count the rows where all of them are populated.
Completeness % = (records with every critical field populated / total records) x 100
Consistency. Define a standard per field before you measure anything: E.164 for phone numbers, ISO 8601 for dates, two-letter codes for country and state, title case for names. Then count checks, not rows. If you have five standardized fields across 40,000 records, you have 200,000 checks. Counting by check tells you which field is broken; counting by row only tells you that something is.
Consistency % = (format checks passed / total format checks) x 100
Uniqueness. Group records that represent the same entity, then count the surplus. A cluster of three rows for one person contributes two surplus records. Exact email matching will find a surprising share of them in ten minutes. Name plus company matching with tolerance for spelling variation finds the rest, which is what SmartMatch does.
Uniqueness = 100 - ((surplus duplicate records / total records) x 100)
Validity. Write your rules down as a list: dates between 1990 and today plus five years, employee counts between 1 and 2,000,000, revenue not negative, email containing exactly one @ and a plausible domain. Count the rows that fail at least one.
Validity = 100 - ((records failing at least one rule / total records) x 100)
All four come out on the same scale, where higher is better. That is deliberate. Inverting uniqueness and validity is the small trick that makes the composite possible.
Computing the two that need outside truth
Timeliness needs a date column and a decision. The decision is your freshness window: how old can a record be before you stop trusting it? For a high-velocity sales database, 12 months. For a retail customer list, 24. For a vendor list, 36. Pick one, defend it, write it down.
Timeliness % = (records verified or updated within the freshness window / total records) x 100
Use the last-activity or last-verified timestamp, not last-modified. Last-modified moves every time a bulk update touches a row, which makes stale records look fresh. If your platform only gives you last-modified, note that in the scorecard so nobody over-reads the number.
Accuracy needs a sample and a human. You cannot check 40,000 records against reality, and you don't need to. Pull a random sample of 300, confirm each one against a source outside the file (the company website, a reply from the contact, a signed order), and count how many were correct.
Accuracy % = (records confirmed correct in the sample / sample size) x 100
A 300-record sample gives you a result good to about four points either way at 95% confidence, which is plenty for board reporting. Two rules keep it honest: sample at random (not the first 300 rows, which are usually your oldest records), and have someone who didn't clean the data do the checking. Run it once a quarter. It takes a person most of a day and it is the only number in the scorecard that proves the other five aren't lying to you.
Rolling it all into one 0 to 100 score
Six numbers is five too many for an exec review. The Clarity Score combines the four file-measurable dimensions into one figure between 0 and 100, weighted by how much damage each failure actually does.
The default weighting for general business data:
- Completeness, 30%. A blank critical field makes the record unusable for its purpose. Highest-impact failure.
- Consistency, 20%. Inconsistent formats create friction rather than breakage. The data still works, it's just harder to segment, match, and search.
- Uniqueness, 30%. Duplicates corrupt counts, inflate segments, trigger repeat outreach, and compound quietly every month.
- Validity, 20%. Impossible values are rarer than the other three, but one of them can distort an entire report.
Adjusting the weights without breaking comparability
Clarity Score = (Completeness × 0.30) + (Consistency × 0.20) + (Uniqueness × 0.30) + (Validity × 0.20)
Change the weights when your use case justifies it. Prepping a list for a win-back campaign? Push uniqueness to 35% and completeness to 35%, because emailing someone three times is worse than a lowercase job title. Feeding a revenue model? Validity deserves 30%, because one negative contract value distorts the whole forecast. The only hard rules: the weights sum to 100%, and you write down why you chose them. Future you will not remember.
One caution about composites. A single score smooths noise, which is the point, but it also hides a disaster behind three good numbers. Always report the sub-scores underneath, named in order (Completeness, Consistency, Uniqueness, Validity), plus timeliness and accuracy alongside. The headline number gets you the attention. The sub-scores get you the budget.
Then set thresholds, because a number without a threshold is trivia. A reasonable scale: 90 to 100 is pristine, hold the line. 80 to 89 is healthy, fix targeted problems as they surface. 70 to 79 is workable with friction, and your team is quietly working around the data. 60 to 69 means the problems are reaching downstream work and people have noticed. Below 60, the data isn't trustworthy enough to decide anything on. Most real datasets land between 60 and 85.
Worked example: 40,000 CRM records
A B2B SaaS company, roughly 90 employees, four years of CRM history, three different admins over that period, and one marketing platform that has been feeding contacts in since year two. The ops lead exports all 40,000 contact records and runs the counts.
Critical fields for completeness: email, company name, country, lifecycle stage. Records with all four populated: 30,560. Completeness = 76.4%.
Standardized fields for consistency: phone, country, state, date fields, job title. 200,000 total checks, 143,000 passed. Consistency = 71.5%. Phone and state account for most of the failures.
Duplicate clusters found across email and name-plus-company matching: 4,560 surplus records. Uniqueness = 100 - 11.4 = 88.6.
Rule failures (dates out of range, negative contract values, malformed emails): 1,480 records. Validity = 100 - 3.7 = 96.3.
Weighted out:
- Completeness 76.4 x 0.30 = 22.92
- Consistency 71.5 x 0.20 = 14.30
- Uniqueness 88.6 x 0.30 = 26.58
- Validity 96.3 x 0.20 = 19.26
- Clarity Score = 83.1
What the number actually told them
83.1 sounds fine. Healthy band, nothing on fire. This is exactly where a composite score can mislead you, and why the sub-scores matter more than the headline.
Underneath, consistency sits at 71.5, the weakest of the four by fifteen points. Timeliness, measured separately against an 18-month freshness window, came in at 68.5%. The quarterly accuracy sample of 300 records came back at 87%, with most of the failures being job titles and company names that had changed after an acquisition.
And the uniqueness number reframed the whole meeting. 4,560 surplus records means the 40,000 "contacts" in the CRM are really about 35,440 people. The campaign that reached 26,000 of them wasn't performing at 65%. Against the real denominator, after removing contacts with no valid email, it was performing closer to 82%. The marketing team had been apologizing for a number that was never real.
After a cleaning run (import, clean, review, export), the same dataset looked different. SmartMatch resolved the duplicate clusters, SmartFill closed gaps where the information existed elsewhere in the record set, AutoFormat standardized phone, state, country, and dates, and LogicGuard flagged the rule-breakers for review rather than silently deleting them. Completeness 88.5, Consistency 97.2, Uniqueness 99.1, Validity 98.6. Clarity Score 95.4, recalculated after the run finished, which took a few minutes.
The board slide was one line: 83.1 to 95.4, and 35,440 real contacts instead of 40,000 imaginary ones.
Benchmarks: what good looks like by company size
Scores are easier to act on when you know whether yours is normal. These ranges come from what typically shows up in business datasets at each stage. Treat them as a sanity check, not a target.
Under 25 employees, one CRM, two or three years of history. Typical range 70 to 82. Good is 85 and up. Your main enemy is completeness, because early-stage records get created fast and finished never.
25 to 150 employees, a CRM plus a marketing platform plus a store. Typical range 65 to 80. Good is 82 and up. Your main enemy is uniqueness, because the same person enters from three directions and nobody agreed on a match rule.
150 to 500 employees, multiple admins, at least one tool consolidation in the rear view. Typical range 60 to 78. Good is 80 and up. Your main enemy is consistency, because every admin brought their own conventions and none of them documented anything.
Two patterns hold at every size. Uniqueness and validity usually score highest, because duplicates and impossible values are a few percent of records at worst. Consistency usually scores lowest, often by ten to twenty points, because it fails per field rather than per record. And timeliness, measured honestly, is almost always the ugliest number on the page. Anything above 75% is strong. Most teams who measure it for the first time find they are in the 60s and had no idea.
Tracking it over time, and reporting it without boring anyone
A point-in-time score is a conversation starter. A trend is an argument. Recalculate on a cadence that matches how fast the data moves: weekly for an active sales database, monthly for a stable customer list, quarterly at minimum for anything else. Keep the weights and the critical-field list identical between runs, or you're comparing two different measurements and calling it progress.
Four patterns are worth watching for. Gradual decline of a point or two per month usually means a process is drifting, most often a form or an import that stopped enforcing a format. Sudden drops almost always trace to one event: a bulk upload, a list purchase, a field renamed by someone who didn't know what depended on it. Plateaus mean you've fixed the easy things and the remaining work is real work. Seasonal dips mean your team rushes data entry during busy periods, which is useful to know before you blame anyone.
For the exec audience, one chart with three lines does the job: the Clarity Score, the weakest sub-score, and the true record count after duplicates are resolved. Add a single sentence explaining the gap between the score and the target. That is the whole report. Anything longer gets skimmed.
Keep the change log from each cleaning run attached to the chart. When someone asks what changed between 83 and 95, the answer should be a file, not a memory.
Your Clarity Scorecard Template
Here’s a scorecard format you can adapt:
| Component | Current | Weight | Weighted | Target |
|---|---|---|---|---|
| Completeness | 87% | 0.30 | 26.1 | 95% |
| Consistency | 78% | 0.20 | 15.6 | 90% |
| Uniqueness | 94% | 0.30 | 28.2 | 97% |
| Validity | 91% | 0.20 | 18.2 | 95% |
| Clarity Score | — | 1.00 | 88.1 | 94.6 |
Fill in the current values, calculate the weighted scores, and sum them up. Compare against targets. Repeat next period.
The targets in this template are reasonable defaults for business data. Adjust them based on what’s achievable and what matters for your use case.
Get your baseline this week
You can build this whole scorecard by hand. A CSV, a few COUNTIFS, a sampling exercise for accuracy, and half a day of your attention. Do it once and you'll understand your data better than any tool can explain it to you.
After that, you'll want the counts to happen on their own. CleanSmart connects to Mailchimp, Shopify, Klaviyo, HubSpot, and Salesforce through DataBridge, which reads your records in, or you can upload a file directly. The run calculates Completeness, Consistency, Uniqueness, and Validity, weights them into a Clarity Score, and shows you which sub-score is costing you the most points. You review what it found, then export the cleaned records as CSV or JSON with a full change log, and bring them back into your platform on your own terms. Nothing is changed in your systems without you doing it.
The baseline is the part that matters. Once you have a number, the next exec review goes differently. Nobody shrugs. Somebody asks what it takes to get from 83 to 92, which is a question you can answer.
Try the self-serve demo and get your Clarity Score in minutes.
Frequently Asked Questions
How often should I recalculate the Clarity Score?
Match the cadence to how fast the data changes: weekly for an active sales database, monthly for a stable customer list, quarterly at an absolute minimum. The Clarity Score is recalculated after each cleaning run, which takes a few minutes, so the practical limit is how often you want to run one. Keep the weights and critical-field list identical between runs or the trend line means nothing.
What should I do first if my score comes back under 60?
Look at the weakest sub-score and fix only that. A 55 with a uniqueness sub-score of 61 tells you to resolve duplicates before you touch anything else, and resolving them often lifts completeness too, because merged records fill each other's gaps. Fix one dimension, recalculate, then reassess.
Why aren't timeliness and accuracy part of the Clarity Score itself?
Because neither can be measured from the file alone. Timeliness depends on a freshness window you choose, and accuracy depends on a human checking a sample against the outside world, so folding them in would make scores incomparable between teams and quarters. Measure both, report them beside the score, and keep the four sub-scores (Completeness, Consistency, Uniqueness, Validity) as the comparable number.