Sep 23, 2026 · Germán Muñoz Moreno, Co-founder
12 signs your attribution is lying to you

How do I know whether my attribution numbers are actually trustworthy?
Attribution rarely fails loudly. It fails by producing a number that looks reasonable, sits in a slide, and gets a budget attached to it. So the useful skill is not knowing the theory. It is recognising the specific shapes a wrong number makes.
Each of the twelve below is something you can check today, in reports you already have. Two of them are mistakes we made in our own product before we caught them, and I have said which.
1. Your channels do not sum to your orders
Add up the order count of every channel in your report for a settled window and compare it against the order count in your store admin. It must close, and it must close with an explicit line for the orders that could not be attributed to anything.
If it closes exactly with no such line, that is the sign. Unattributable orders exist in every dataset, so a report without them is not a report with none. It is a report that distributed them into the named channels, and every channel is now inflated by a share nobody can see or subtract.
2. Nothing is ever unknown
The stronger version of the same problem. If every single order has a confident channel, ask what happens to a buyer who blocked the pixel, arrived through a link that lost its parameters, or bought on a device that never touched the session where the journey started. That population is real and it is often larger than people expect. A system with no bucket for it is guessing and not saying so.
3. A number improved on the day someone changed a setting
Widen an attribution window and reported conversions rise while spend stays flat. Add a conversion action to the platform's primary set and the same thing happens. Switch on a server-side integration and reported conversions rise again, because sales that were always happening became visible to the platform that influenced them.
None of those moved a single sale. All three look identical to growth in a chart. If your reported performance improved and you can find a configuration change on the same date, you have measured the change.
4. Direct is large and growing
Direct is not a channel. It is the label a system writes when it could not read where someone came from. A small, stable direct share is normal. A growing one is almost always mechanical: a redirect that dropped the query string, an email or messaging client that stripped the referrer, an in-app browser, a shortener, or a campaign nobody tagged.
Every order in that bucket was earned by a channel that cannot be paid for it, which means the channel you are about to cut may be the one funding the bucket you are about to praise.
5. Refunds never move anything
Pull the same window with cancelled and fully refunded orders included, then excluded. If your reported revenue and ROAS do not budge, nothing in the chain is subtracting them.
On the platform side that is the expected behaviour, because the platform was told about the purchase and never told about the reversal. On your own side it is a defect. Either way, the gap grows with your return rate and it runs in the flattering direction.
6. Your new-customer count rose and your traffic did not
This is one of ours. New customer acquisition cost is what most budgets are set against, and the definition underneath it is fragile in a specific direction.
Merging two identity records can only ever move someone from new to returning, because adding history to a person only pushes an order further down their sequence. It can never do the reverse. So a new-customer count that rises without a matching rise in orders or traffic is usually identities coming apart rather than customers arriving, and one person is being counted as several. We shipped a version that derived first-order status from a bounded lookback window, which quietly reset every seasonal buyer to new. The fix was to compute it over the customer's entire history.
7. Reported conversions jumped and nobody celebrated a sales record
The cleanest tell there is. If the platform's number moved by a visible margin and your bank account did not, what changed is how much of the same revenue the platform can see and claim.
The most common cause is a deduplication failure. Sending purchases from both the browser and the server is correct practice, and what makes it safe is that both events carry the same event ID so the platform can collapse them into one. When the two sides generate their IDs independently, or one omits it, the platform receives two purchases and has no way to know they are the same. Meta reports this directly under redundant purchase events; Google rejects a repeated order id and the rejection shows up in its upload diagnostics.
8. You keep comparing days that cannot match
Ad platforms report a conversion on the date of the click or impression that earned the credit. Your store records the order on the day it was placed. A sale placed Monday off a Thursday click sits on Monday in your store and Thursday in the platform.
So a day-level comparison is a comparison of two different bases, and it will never close. If your weekly routine includes reconciling yesterday against yesterday, the routine is generating the discrepancy it exists to investigate. Compare whole settled windows first.
9. One campaign appears twice, split down the middle
This is the other one of ours, and it is visible on sight once you know the shape: the same campaign as two rows, all the spend on one and all the orders on the other.
It happens when the campaign in your URL tags and the campaign in the platform's own list are matched by exact name only. An advertiser who tags with a campaign ID rather than a name gets two rows for one campaign, and the report is arithmetically complete while being useless. Any per-campaign table you trust should be able to tell you HOW each row was matched, not just that it was.
10. A number has no unit attached to it
Watch for a report that puts sessions and visitors in the same column, or platform conversions beside verified orders, or a channel's fractional credit beside another channel's whole orders.
The most expensive version of this is the platform's own conversions column, which sums every conversion action an account has configured. Compared against orders it can read as several hundred percent on a perfectly healthy account, because add-to-cart, newsletter signups and phone calls are inside it. Two numbers in adjacent columns invite a conclusion neither of them supports.
11. A filter is on one side and not the other
The single most common false alarm in this whole subject, and it is worth learning to spot in two seconds. You are comparing what a platform claims against what your store recorded, the gap is enormous, and somewhere on the page a new-customer filter is switched on.
That filter narrows your side to first-time buyers. It does not narrow the platform's side, because the platform is reporting every purchase it believes it drove. You are comparing a subset against a whole and reading the difference as a discrepancy. Run any platform comparison with that filter off, then use it separately for the question it is genuinely good at.
12. Nobody can show you one order
The test that subsumes the other eleven. Pick a specific order you can identify in your own admin and ask why it was credited where it was.
A good answer names the evidence: this order was matched to this session by this identifier, and that session arrived with this click identifier at this time. A weak answer describes a model. Every system has a model and that is fine, but a model applied to inputs nobody verified produces a confident number with nothing underneath it, and from a dashboard the two are indistinguishable.
What to do with a failing checklist
None of these twelve mean a platform is lying to you deliberately. Most of them are a platform correctly answering a question you did not ask, and the error is in the comparison rather than in the source.
What fixes the comparison is picking an anchor. There is exactly one number in this picture with no attribution model inside it: the orders your store actually settled. It does not depend on a window, a model, a consent choice or a browser event firing. Every other number is a claim about that list, and once you treat them that way the arithmetic becomes checkable. A platform can legitimately resolve a buyer you never saw, but no platform can resolve an order that does not exist.
Common questions
How many of these signs are normal?
Several of them are normal on their own. Platform totals exceeding your order count is expected, because each platform sees only its own touch. A day-by-day mismatch is expected, because platforms report on the click date and your store on the order date. What is not normal is a report that never shows an unattributed line, a number that moved on a settings change and was read as performance, or a vendor who cannot walk you through one specific order.
What is the fastest single check?
Add up your per-channel order counts for a settled window and compare the total against the order count in your store admin. Every honest report closes that arithmetic, including a line for what could not be attributed. If it closes exactly with no such line, the unattributable orders were distributed into the named channels, and every channel is inflated by an amount nobody can see.
My platform claims add up to more than my sales. Is that proof of inflation?
Not on its own. Two platforms can each hold a defensible claim on the same order, so the sum exceeding your orders is the expected result of adding numbers that were never meant to be added. It becomes proof only when a single platform's purchase claims exceed your total settled orders, because no platform can resolve an order that does not exist.
Is a growing Direct channel always a tracking problem?
Almost always, yes, though the specific cause varies: a redirect that strips the query string, an email or messaging client that removes the referrer, an in-app browser, a link shortener, or a campaign nobody tagged. Genuine direct traffic exists and it is a small and stable share. A Direct bucket that grows month over month is credit that some channel earned and cannot be paid.
How do I check whether refunds are in my numbers?
Pull the same window twice, once with cancelled and fully refunded orders included and once without. If your reported revenue and ROAS do not move, refunds are not being subtracted anywhere in the chain. That is the normal state on the platform side, because nobody told the platform about the reversal, and it is the one gap that grows with your return rate.
