Tracker ROI vs ROAS: Why the Numbers Never Match
The tracker ROI versus ROAS standoff is the weekly ritual of every media buyer: the tracker reports 40 percent ROI on confirmed payouts, Ads Manager reports a 2.4 ROAS on attributed revenue, and someone concludes the tracking is broken. It is not. The two numbers are different formulas over different data - the tracker divides your money by your money, while Ads Manager divides the revenue value you transmitted by the spend it measured - and each one is internally correct. This guide dissects both sides of the division sign, walks every documented reason the results diverge, and ends with a reconciliation procedure that finds real leaks instead of chasing phantom ones.
Conversion-count divergence - leads versus sales, windows, duplicates - is covered separately in the three-systems guide; this page stays on the money.
Two Formulas, Not One Measurement
Write both formulas side by side - with conversion identity tying events to clicks - and the mismatch stops being mysterious:
tracker ROI = (confirmed payouts - spend) / spend
Ads Manager ROAS = attributed revenue value / attributed spendNumerators already disagree by construction. The tracker's numerator is the payout the network confirmed - after holds, after rejections, net of clawbacks. Ads Manager's numerator is the sum of value fields inside the events you chose to send - including lead events with no value, including sales the network later rejected, minus everything you never sent. Denominators disagree too: your tracker's spend is what you imported or entered; Ads Manager's spend is what the platform billed, on its own clock and currency.
No tracking setup makes these converge, because they are not two measurements of one quantity. They are two reports answering two different questions: "is my business profitable?" versus "how much revenue does the platform see per its dollar?" The craft is keeping both honest - and knowing which question each number answers.
Where the Numerator Diverges
Every stage of the affiliate chain reshapes the revenue side:
- Hold and rejection timing. The tracker's revenue only counts confirmed payouts; the platform's revenue counts events already sent. During the hold window the platform's number leads; after rejections, the tracker's number falls behind reality less - the status-policy trade-off from the hold guide applied to reporting.
- Unsent conversions. Events you filtered - trash statuses, junk segments - carry no value to the platform but no money to you either; symmetric. Asymmetric cases hurt: approved sales that were never sent (a delivery gap) inflate platform-blind money that the tracker sees alone.
- Duplicates. One sale sent twice (such as a browser-pixel and server-CAPI deduplication failure without a shared event_id) doubles the platform's revenue numerator while the tracker shows one payout - the duplicate-conversions problem in money form.
- Value quality. Events with empty
valuecount as conversions without contributing revenue; a flat-event stream makes Ads Manager's ROAS measure counts wearing a money costume.
The payout field feeding your tracker's numerator is documented explicitly: Keitaro's postback payout carries the network's reported money, "positive and negative values are supported" for clawbacks, and currency converts into the tracker's base (Keitaro postback documentation).
Where the Denominator Diverges
Spend splits on three documented seams:
- Import timing. Platform spend posts continuously; tracker-side spend exists only if imported - Keitaro's postback contract has a
costparameter "for CPA and RevShare models," but many setups leave spend out of the daily loop entirely and compare against a stale number. - Currency conversion. The platform bills in the account's currency; the network reports payouts in its own; the tracker converts to its base. A tracker ROI computed on converted payouts against unconverted spend - or the reverse - shifts the ratio by the exchange margin.
- Costs outside the platform. Tracker ROI can include content, proxies, and staff; Ads Manager ROAS sees only its own spend. Neither is wrong - they are answering for different cost bases.
The rule for reconciliation: fix the currency edge once (usually "tracker base = account currency"), import spend on a schedule, and never mix cost bases inside one ratio.
The Timing Seam: When Each Book Closes
Money crosses the chain with delays, and each book closes on its own schedule. A sale ordered on the last day of the month lands in the platform's report on the day its event was sent, in the network's balance after confirmation, and in the tracker's ROI under whichever period your report cut assigns it to. Attribution windows add a second layer: the platform joins a conversion to the click inside its own documented window, so late conversions can land attributed to nothing - revenue the tracker sees, the platform's ROAS never does, even though the event arrived fine (the attribution-window picture covers the mechanics).
Practically, the discipline is cohort thinking: compare money for cohorts of clicks old enough that hold windows and confirmation lags have finished - the same rule as approve rate math, applied to money instead of counts.
The Reconciliation Procedure
- Align the cost basis. Same currency, same period, same spend source on both sides of the comparison.
- Align the revenue scope. Decide which events the platform's numerator should contain - sales only, or the lead stream too - and confirm the delivery layer sends exactly that.
- Compare on settled cohorts. Pick clicks older than the longest hold window; compute tracker ROI on their confirmed payouts and Ads Manager ROAS on the events they produced.
- Classify the residual. Explained by scope (unsent events), by duplicates (identity drift), or by timing (windows) - each has a fix from the linked guides. Unexplained by all three: a real leak, usually in delivery or value passing.
- Repeat monthly. A standing reconciliation catches leaks while they are small; the postback troubleshooting checklist covers the plumbing side.
When the residual points at value rather than counts, the payout-as-value guide and its clawback section are the usual fixes.
Tracker ROI vs ROAS: Frequently Asked Questions
Frequently asked questions
Sources
Sources
- Audit the events: Pixel Activator fires free valued test events so both books price the same conversion.
- Value on every cycle: Most keeps payout, currency, and scope consistent between tracker and platforms.
