Number laundering: how a wrong metric becomes the truth
A number nobody checked becomes a number nobody questions in four hops: query, screenshot, slide, decision. How to stop it at the first one.
Number laundering is how an unchecked number becomes company truth without anyone lying. It moves through four hops: the query that births it, the screenshot that strips its context, the slide that gives it a story, and the decision that makes it load-bearing. Each hop adds confidence and removes caveats. The only hop a data person controls is the first, so the fix is to give every important number receipts at birth: freshness, volume, nulls and duplicates, and a check against its normal range, running on a schedule.
Picture this. Thursday, 4:40pm. A VP drops a screenshot into the leadership channel. It’s your chart. Signups up 22% week over week, circled in red, with “great work team” underneath.
You know that chart. You built it in an afternoon. You also know the events table behind it had a backfill running on Tuesday, and you never checked whether it double-counted. You meant to.
Now there are eleven reactions on the message. Someone from finance has replied: “can we get this in the board deck?”
You don’t say anything. Most people wouldn’t. That’s how number laundering works.
What number laundering is
Number laundering: the process by which a number nobody checked becomes a number nobody questions, just by passing through enough hands.
Nobody lies. Nobody fakes anything. The number picks up credibility at every hop and drops context at every hop, until the doubt is gone and only the confidence is left.
It runs in four hops. Once you can see them you’ll spot them everywhere, including in your own work, which is the uncomfortable part.
Hop 1: The Birth
A query gets written to answer a question. It runs once. The result looks plausible, which is the most dangerous thing a number can be.
Plausible means nobody checks it. A number that comes back wildly wrong gets debugged. A number that comes back a bit wrong gets shipped.
At birth the number still has all its caveats attached. You know the table was mid-backfill. You know the join might fan out. You know “active” means something slightly different in this table than it does in the product. All of that lives in exactly one place: your head.
Hop 2: The Screenshot
The number leaves the query tool. Someone screenshots the chart, copies the cell into Slack, pastes it into a doc.
This hop strips three things: the timestamp, the filters, and the SQL. The screenshot doesn’t say “as of Tuesday’s partial load.” It doesn’t say “excluding EU.” It just says 22%.
From here on, nobody who sees the number can re-check it. It’s not a query result anymore. It’s an image.
Hop 3: The Slide
Someone more senior than you puts it on a slide. It gets rounded. It gets a title like “Momentum is building.” It gets a story.
The story is the real laundering step. Once a number explains something, people stop asking whether it’s true and start asking what it means. A wrong number with a good story beats a right number with no story, pretty much every time.
Hop 4: The Decision
Budget moves. A hire gets approved. A campaign gets doubled. The number is now load-bearing.
Here’s the trap. To question it now, you’re not questioning a query. You’re questioning a decision someone senior already made in public. The social cost of “actually, that number might be wrong” went from zero at hop 1 to career-shaped at hop 4.
So the one person who knows stays quiet. That’s how a broken metric becomes the truth. Not through fraud. Through inertia and politeness.
The guilty part
If you read that feeling slightly sick, good. You’re who this is for.
Most data people have shipped a number they had doubts about. Not because they’re careless. Because checking is slow, the meeting is in 20 minutes, and plausible felt like enough. The laundering didn’t start with the VP. It started when you hit send.
That’s not a character flaw. It’s a process flaw, and process flaws have process fixes.
Stop it at hop 1: give every number receipts
You can’t control hops 2 to 4. You don’t own the slide. You can’t follow the screenshot around the company. The only hop you control is the birth.
So the fix is to make the number carry its own proof from the moment it exists. Call them receipts. A number with receipts survives the screenshot, because the receipts live somewhere anyone can go look, and they keep running after you’ve moved on.
Four receipts cover most of the ways a number goes quietly wrong:
- Freshness. When did the source table last get a row? A stale table makes any number look like news.
- Volume. Did today’s load bring roughly the usual number of rows for this day of the week? Half a load looks exactly like half a business.
- Nulls and duplicates. Did the column you’re summing suddenly go mostly null? Did a join start fanning out? Both give you numbers that are confidently, plausibly wrong.
- Normal. Is the value inside the range this metric usually lives in? Not a threshold you guessed once in March. The actual recent shape of the series.
None of this is clever. Each one is a few lines of SQL. The problem was never knowing what to check. It’s that checking by hand, every time, before every send, doesn’t survive a busy week.
The receipts have to run themselves.
What that looks like with arcodash
This is the problem I’m building arcodash around, so take the next part with the right amount of salt. It’s in early beta.
arcodash is SQL dashboards with checks attached to the numbers. The checks run on a schedule and tell you when a number goes wrong, ideally before anyone screenshots it.
For the four receipts:
- Freshness, volume, nulls. Scheduled checks on the tables behind your charts. When one fails, the alert goes to Slack, email, or wherever your team actually looks.
- Normal. Baseline monitors learn what normal looks like from the metric’s own history. No threshold to guess. A signup number that jumps way outside its usual shape gets flagged before it gets circled in red.
- Suggested checks. arcodash builds an AI profile of each data source and suggests checks from it, so you’re not starting from a blank page.
- “Why did this fire?” When something alerts, AI takes a first pass at which slice of the data moved, in the app and in the Slack message. Treat it as a lead, not a verdict. It still turns “something’s off” into “look at Tuesday’s load first” in seconds.
The AI runs on your own Gemini, OpenAI or Anthropic key.
The point isn’t the alert. The point is what the alert does to hop 4. When a check already flagged the number, saying “hold on, the load was partial” isn’t you being difficult. It’s the system saying it. You’re just reading the receipt out loud.
The Thursday, replayed
Same Thursday. Same VP. Same screenshot.
Except at 3:10pm, a volume check on the events table failed and posted to #data-alerts: the backfill wrote about double the usual rows for two days. The note on the alert pointed straight at those two days.
So when the screenshot lands at 4:40, you reply in the thread before finance does: “Heads up, this one’s inflated by a backfill. Fixed number within the hour.” Nobody’s embarrassed. The board deck never sees the 22%.
That’s the whole game. Catch the number while it still has one owner.
Start with one number
If any of the four hops felt familiar, don’t boil the ocean. Pick the one number most likely to end up on a slide. Give it its four receipts and let them run for a week.
arcodash is free for 14 days, no card, then from $59/month for the whole org with unlimited seats. Point it at that one table at arcodash.com and find out what your most-screenshotted number has been hiding.