Attribution Data Quality: How to Know If Your Attribution Data Is Real
Your attribution data is only as good as the orders, clicks, and events feeding it. If those inputs are polluted by bots, canceled orders, lost cookies, or double-fired events, every model you run on top of them will produce confident numbers that are wrong.
Attribution data quality is the degree to which the conversions and touchpoints in your reporting match what actually happened in your store. You can test it. Most teams never run the test, and end up scaling campaigns off a dashboard nobody has checked against the order ledger.
This guide gives you a 7-point audit, a symptom-to-fix table, and a monthly routine you can hand to whoever owns reporting. If you already sense your numbers are off, this is where you find out by how much.
What does “good” attribution data look like?
Good attribution data reconciles to your store's order records within a small, explainable gap, and every attributed order traces back to a verifiable click. Not “matches Meta,” but ties out to the source of revenue.
Three properties matter most:
- Completeness: real orders are captured, including ones from Safari users, iOS app traffic, and customers who come back days later.
- Cleanliness: fake sessions, canceled orders, test orders, and duplicate events are filtered out.
- Traceability: you can follow a conversion back to the click, campaign, and ad that drove it.
For a broader look at your setup beyond data hygiene, our guide on how to audit your ad attribution setup covers configuration, models, and windows.
The 7-point attribution data audit
Run these checks in order. The first two usually catch the largest errors.
1. Reconcile orders against your store
Start by comparing the total orders and revenue in your attribution tool against your store platform for the same date range and time zone. This is the single most useful test, because the store is where money actually lands.
Say your Shopify admin shows 1,200 orders for September and your attribution dashboard shows 1,150 tracked orders. That is a gap of 50 orders, or about 4.2%. A small gap like that is normal, usually manually entered, wholesale, or draft orders with no trackable session. If the gap is 20% or more, something upstream is broken, usually the tracking script or the order sync.
Example: September order reconciliation
Also check the reverse problem. If your tool reports more orders than the store, you almost certainly have duplicate events. Our walkthrough of the attribution data reconciliation process shows how to line up the two sources row by row.
2. Remove canceled and refunded orders
A canceled order that still counts as a conversion inflates both revenue and ROAS. In high-cancellation categories, that can change which campaign looks like the winner.
Here is the math. Say a campaign drives 300 orders at a $90 average order value, so $27,000 in attributed revenue on $9,000 of spend. That is a 3.0 ROAS. If 40 of those orders are canceled, real revenue is 260 x $90 = $23,400, and the true ROAS is 2.6. Nothing about the campaign changed. The data did.
Same campaign, $9,000 spend, before and after cancellations
Nothing about the campaign changed. The data did.
In October 2026, AdBeacon added an Exclude canceled orders from attribution setting, so canceled orders stop counting toward attributed revenue and ROAS. Refunds and returns deserve the same scrutiny; our piece on returns-adjusted ROAS shows how to fold them into the number you optimize toward.
3. Filter bot traffic
Bots are not an edge case anymore. According to the 2025 Imperva Bad Bot Report from Thales, automated traffic made up 51% of all web traffic in 2024, the first time in a decade it passed human traffic. Bad bots alone were 37% of internet traffic, and in retail they accounted for 59% of traffic.
Bot traffic in 2024
51%
of all web traffic was automated
37%
of internet traffic was bad bots
59%
of retail traffic was bad bots
Source: Thales, 2025 Imperva Bad Bot Report
For attribution, the damage is mostly to the denominator and the touchpoint record. Bot sessions inflate clicks and sessions, deflate conversion rate, and can leave fake touchpoints attached to real customer paths. Watch for traffic spikes with near-zero engagement, sessions from data center locations, and campaigns whose click volume rises while orders stay flat. We go deeper in how bot traffic contaminates attribution data.
4. Measure cookie loss
Browser privacy rules shorten how long you can recognize a returning visitor. WebKit's documentation on Tracking Prevention explains that Safari blocks third-party cookies by default, can delete cookies created in JavaScript and other script-writeable storage after 7 days, and in certain link-decoration cases caps JavaScript-set cookies on the landing page to 24 hours.
In practice, that means a Safari shopper who clicks an ad on Monday and buys the following week may look like a brand-new direct visitor. The fix is to rely on first-party, server-set identifiers and to capture click data at the moment of the visit. Our guide to cookieless attribution covers the mechanics.
5. Account for consent and ATT
On iOS, apps must ask permission through the App Tracking Transparency framework before tracking a user across other companies' apps and websites, as Apple's User Privacy and Data Use page states. When users decline, ad platforms lose part of their ability to match an in-app ad view to a later web purchase, and they fill the gap with modeling.
What you can do is make sure the clicks you do receive are captured cleanly on your own site, so your first-party record is as complete as the rules allow. Then compare it to what the platform reports and treat the difference as modeled, not observed.
6. Check UTM and click ID capture
Broken UTMs are the quietest data quality problem. A campaign tagged “fb” in one ad set and “facebook” in another splits into two sources. A missing UTM on a Klaviyo flow sends revenue to “direct.” A redirect that strips parameters erases the trail entirely.
Pull a list of every source/medium combination from the last 30 days and look for duplicates, typos, and unexplained “direct” spikes. Then confirm click IDs survive the landing page: fbclid for Meta, gclid for Google, ttclid for TikTok. Our UTM naming conventions for ecommerce and the explainer on click IDs like fbclid, gclid and ttclid give you a template to standardize on.
7. Look for duplicate events and view-through inflation
Many stores send purchase events through both a browser pixel and the server. Meta's Conversions API creates a direct connection between your server, website platform, app or CRM and Meta's ad optimization systems. That connection helps signal quality, but if the browser and server events are not deduplicated correctly, a single order can be counted twice.
Separately, check which attribution settings your ad sets use. Meta's guide to attribution models and settings describes click-through windows of 1 or 7 days after a link click, a 1-day view-through window after an impression, and a 1-day engage-through window after a non-link click action. View-through credit means someone who saw an ad, never clicked, and bought anyway can be counted as a conversion. Meta also notes that results can't be compared across ad sets using different attribution models, which matters when you roll up a report. For more on how that plays out, see how view-through conversions inflate Meta ROAS.
See it on your own account.
Find your gaps in minutes.
We can pull your store orders next to your click-verified and platform-reported conversions in one view, so the gaps from this audit show up in minutes instead of a spreadsheet afternoon. Book a live AdBeacon demo.
Symptom, cause, fix: a quick diagnostic table
When a number looks wrong, start with the symptom and work backward.
| Symptom | Likely cause | Fix |
|---|---|---|
| Attribution tool shows more orders than the store | Duplicate pixel and server events, or test orders | Check event deduplication IDs; exclude test and draft orders |
| Attribution tool shows far fewer orders than the store | Tracking script missing on some pages or checkout, order sync failing | Verify script on every template, including checkout and thank-you pages; re-sync orders |
| ROAS drops after you look at net revenue | Canceled or refunded orders still counted | Exclude canceled orders; report returns-adjusted revenue |
| Clicks up, orders flat, conversion rate falling | Bot or low-quality traffic | Filter suspicious sessions; review placements and traffic sources |
| “Direct” revenue growing with no brand activity | Missing UTMs, stripped parameters, cookie loss | Audit UTMs and redirects; use first-party server-set identifiers |
| Meta reports far more purchases than you can verify | View-through and engage-through credit, modeled conversions | Compare click-only results to platform-reported side by side |
| Safari and iOS conversions look unusually low | ITP cookie limits and ATT opt-outs | Capture click IDs at landing; strengthen server-side signal |
Why do clean inputs matter more than the model you choose?
Because every attribution model, from last click to linear to data-driven, divides credit among the touchpoints it is given. If the touchpoints are wrong, a better model just distributes the error more evenly.
Teams often debate first click versus linear for weeks while canceled orders still sit in attributed revenue. Fix the inputs first. Then the model debate becomes useful, because you are comparing real differences in how credit is assigned rather than artifacts of bad data. Our post on first-party data signal quality explains why the quality of what you collect outweighs the sophistication of what you compute.
How AdBeacon handles attribution data quality
AdBeacon is built on click-only, first-party attribution. It only credits clicks it can verify, not view-throughs, which removes one of the biggest sources of inflation before any model runs. Every report shows AdBeacon-measured results and platform-reported numbers side by side, so you can see the size of the gap rather than guess at it.
A few specifics that map to the audit:
- Orders come from your store, so reconciliation starts from the ledger, not from ad platform claims.
- The Exclude canceled orders from attribution setting keeps canceled orders out of attributed revenue and ROAS.
- Lookback windows run up to 180 days, which helps with longer consideration cycles where short browser cookies would lose the original click.
- Luma AI flags anomalies, such as a sudden spike in clicks with no matching orders, so problems surface before they distort a week of decisions.
The goal is not a perfect number. It is a number that is more accurate, auditable, and consistent enough to move budget on. See how this comes together in AdBeacon's attribution reporting.
Cleaner data tends to show up in results. Nexbelt, working with an agency partner, saw orders rise 55.7% and net profit rise 50.9% over 90 days, with returning-customer net profit up 149.3%. You can read the full Nexbelt case study for how they used the data.
A monthly attribution data reconciliation routine
One audit is useful. A routine keeps the data trustworthy. Block an hour or so in the first week of each month.
- Pull the store totals. Orders, gross revenue, net revenue, canceled orders, and refunds for the prior month, in your store's time zone.
- Pull the attribution totals. Tracked orders and attributed revenue for the same period. Calculate the gap as a percentage of store orders.
- Explain the gap. List known causes (manual orders, wholesale, untracked channels). If the unexplained portion grew since last month, investigate before moving on.
- Review source/medium hygiene. Look for new UTM variants, typos, and any growth in direct or unassigned traffic.
- Scan for bot patterns. Flag campaigns or placements where clicks rose and orders didn't.
- Compare platform-reported to click-verified. Note the ratio by channel. A stable ratio is fine. A ratio that jumps signals a settings change, a tracking break, or a shift in view-through credit.
- Log what changed. Keep a simple change log: new pixels, theme updates, checkout changes, new apps. Most sudden data problems trace back to one of these.
After three months you will know your normal gap by channel. That baseline makes the next anomaly obvious.
What to do next
- Run the order reconciliation test this week for last month. Write down the gap percentage.
- Check whether canceled and refunded orders are counted in your attributed revenue. If they are, exclude them and recalculate ROAS for your top five campaigns.
- Export your source/medium list and fix UTM inconsistencies in active campaigns and email flows.
- Confirm browser and server purchase events are deduplicated.
- Set up a side-by-side view of platform-reported and click-verified results for every paid channel.
- Put the monthly routine on the calendar with a named owner.
Attribution data quality is not a one-time project, and it is rarely fixed by switching models. It is fixed by tying every number back to real orders and verifiable clicks, then checking that tie every month. Once you know the size and source of the gap, budget decisions get faster. If you want to see how your own numbers reconcile, walk through your store data with our team.
Frequently Asked Questions
What is attribution data?
Attribution data is the record of touchpoints (clicks, sessions, campaigns) connected to the orders they preceded. It is what attribution models use to decide which ads and channels get credit for revenue.
How do I know if my attribution data is accurate?
Compare attributed orders and revenue to your store's order records for the same period and time zone. A small, explainable gap is normal; a large or growing gap means tracking, deduplication, or order filtering needs attention.
Should canceled orders count in attribution?
Generally no, because a canceled order produced no revenue. Counting it inflates ROAS and can make a weak campaign look strong, which is why AdBeacon added a setting to exclude canceled orders from attribution.
How much does bot traffic affect attribution data?
It depends on your traffic mix, but the scale is real: Thales reported that bad bots were 59% of retail traffic in 2024. Bots mostly inflate clicks and sessions and drag down conversion rate, so filter them before judging campaign efficiency.
Why don't my Meta conversions match my store orders?
Meta can credit conversions through click-through, view-through, and engage-through windows, and it models some conversions it cannot observe directly. Your store only records actual orders, so platform totals often run higher than click-verified results.