Guide
A practical guide to measuring what your ads actually earn: why the numbers never match, what first-party attribution fixes, and how to set it up without a data team.
Every platform counts conversions in its own window, with its own credit rules, using a pixel the browser is actively fighting. Google claims a sale on the click date with data-driven fractional credit; Meta claims the same sale on a seven-day view; your store records it on the day the money landed. Three systems, three answers, none of them wrong exactly, and none of them the truth.
The fix
The only source of truth for a sale is the order in your store. First-party attribution starts there: capture the ad click on your own domain, tie it to the order server-side, and report that conversion back to the platforms yourself. Now the number the algorithm optimises on is the number that actually happened.
A pixel on your own domain records the click id the moment a visitor lands, where ad blockers and Safari cannot strip it.
The order arrives straight from Shopify or WooCommerce and is matched to the session that earned it, not the browser that may have dropped the thank-you page.
Report the recovered sale to Google and Meta from your server, with the click id attached, so Smart Bidding sees your whole revenue.
Reverse refunds against the right campaign and keep first and last touch apart, so retargeting cannot claim credit for the whole funnel.
Before you switch anything
Do not trust a new attribution number on faith. Run it in shadow mode: let the system build the conversions it would send without sending them, then compare against your ad account and your store. When you understand exactly why the numbers differ, turn the push on. Attribution is a trust-me category, so insist on being able to check the work.
When it is working, you have one number per channel you can defend, refund-adjusted ROAS you act on, a clear split between the campaigns that carry themselves and the ones that bleed budget, and an ad account whose bidding is fed by every order rather than the fraction the browser reported.
Connect a store, run Trakt in shadow mode, and see the gap between your pixel and your real orders.