AgenTomte

August 23, 2026 · 6 min read

True ROAS Tracking: Compute It From Your Own Ledger

By Sahan, co-founder, systems and delivery

True ROAS tracking means computing return on ad spend from your own order records and your own cost lines, instead of reading the number the ad platform reports back to you. The two figures are measuring different things. The platform measures conversions it observed or estimated and credits itself for them. Your ledger measures money that arrived, minus what the goods cost to make, ship, process and take back. When we ran both numbers against our own D2C brand, the platform reported 4.87x and the real contribution return sat between 0.33x and 0.50x.

Why the platform number and the ledger number disagree

Three separate gaps stack up: some of the conversions are estimated rather than observed, the credit rule is written by the party selling the ads, and almost none of your cost stack is in the calculation. Each one moves the number in the same direction, upward, which is why platform ROAS is rarely low and rarely right.

Start with the estimates. Google’s own documentation on modeled conversions states that they use data that does not identify individual users to “estimate conversions that Google is unable to observe directly”, and that reporting can take up to five days to fully process and stabilise. That is a reasonable engineering answer to a privacy constraint. It is not a receipt.

The credit rule is the second gap. Data-driven attribution assigns fractional credit across keywords, ads and campaigns using a statistical model, and Google gates it on volume: roughly 3,000 ad interactions and 300 conversions over 30 days to switch it on. A number that only exists above a traffic threshold is a model output, not an observation.

The third gap is the one finance notices first. Platform ROAS subtracts ad spend and nothing else. Your contribution margin also has to survive product cost, shipping, payment processing, discounts and returns. The National Retail Federation, with Happy Returns, forecast on 15 October 2025 that US consumers would return $849.9 billion of merchandise in 2025, a 15.8% return rate overall and 19.3% on online sales, with 9% of returns fraudulent. If a fifth of online revenue comes back and your scoreboard never hears about it, the scoreboard is fiction.

The two numbers side by side

Platform-reported ROASTrue contribution ROAS
Revenue sourceConversions the platform observed or modeledOrders in your store and bank records
Credit ruleThe platform’s own attribution modelWhole account, no self-credit
TimingBack-dated into the attribution windowThe date the order and the cost land
Costs subtractedAd spendAd spend, product cost, shipping, fees, discounts
ReturnsUsually invisibleDeducted when the refund posts
Audited byThe company selling you the adsYour accountant

What the agent actually does, step by step

Our own ad-spend truth engine runs the same sequence every night, in dependency order, because each step needs the one before it to have landed.

  1. Pull the cost sheet, so every product has a current unit cost to price against.
  2. Pull each ad platform’s reporting API: spend, impressions, clicks, and whatever revenue that platform claims, converted into one reporting currency at pull time.
  3. Pull the store’s order records for a rolling window, line item by line item, and resolve each order to a product and to the campaign most likely to have driven it. Attribution is UTM first, with a same-platform referrer fallback, and it keeps first touch and last touch separately so assisted orders are neither dropped nor counted twice.
  4. Recombine the three into a contribution view: revenue net of on-order discounts, minus cost of goods, minus spend, per campaign and per product.
  5. Rank every campaign against that number and write a recommendation to scale, hold, watch or kill, with the reasoning attached.
  6. Deliver a written report on a fixed cadence, backed by a dashboard holding the same computed state continuously.

Every pull upserts on a natural key, so a retry after a network failure cannot double-count a day. Which orders count is a stated business decision, not a silent default: pending and cash-on-delivery orders count as real revenue, cancelled ones do not. Write that rule down before you build, because it changes the answer.

The failure behaviour matters more than the arithmetic

The arithmetic is a week of work. Keeping the number trustworthy on day 300 is the actual build, and it is where most internal dashboards quietly die.

Three patterns carry it. Every job writes exactly one terminal record to a central run log, and a separate monitor treats a missing record as a failure, so “no data today” raises an alert rather than a silent stale chart.

Each job also claims a running record before it starts and closes it when it finishes, which means a crashed run leaves an orphan that a sweep catches instead of looking like a run that did nothing. Transient API errors get bounded retry with backoff, while a permanently rejected payload returns a distinct response so the caller stops hammering it.

Then there is the fence. The guardrail monitor can pause a campaign that breaches a return floor or a spend ceiling. It cannot start one and it cannot raise a budget, by design, not by policy. Defensive actions are automatic, spending actions need a human, and anything awaiting approval is raised as an assigned task that closes itself when the human answers. That is the same discipline behind our agent fleet: registered agents, defined fences, a run log for every action.

What we could not verify, stated plainly

There is a widely repeated claim that platform-reported ROAS overstates incremental return by a specific percentage. We went looking for a tier one primary for it and did not find one. The figures circulating come from measurement vendors with a product to sell and no published methodology, so we are not citing them.

What is citable is that the platforms themselves have shipped the correction. Google released Meridian, its open-source marketing mix model, to general availability on 29 January 2025, describing Bayesian causal inference that reveals “the true incremental impact” of marketing, and noting the core ambiguity in the raw data: ten impressions could mean ten people reached, or one person reached ten times. Meta’s GeoLift documentation defines incrementality as the difference between what was observed and the counterfactual world where the spend never happened, and calls randomised experiments the gold standard while acknowledging they are often impractical.

Also worth correcting, because it drives a lot of bad measurement advice: third-party cookies are not going away in Chrome. Google announced on 22 April 2025 that it would keep its current approach and not roll out a new standalone prompt. Your measurement problem is attribution modelling, not the imminent death of a cookie.

What this costs to install

This is a standard AI Workforce Sprint, from $9,500 fixed, four to six weeks, built on your accounts and handed over with documentation. Roughly six integrations in a typical build: two ad platform reporting APIs, the store’s order API, a cost source, your task system, and email delivery. What you get is one tomte, our word for one production agent with one defined job, computing one number you can put in front of your accountant.

The payback case is not subtle. Our own first honest report changed spend decisions the same week: budgets capped, tests restructured, one campaign that looked like a winner paused on the spot. If you are deciding budgets from a dashboard published by the company selling you the media, you are not measuring, you are being marketed to. The same reasoning applies to automation spend generally, which we covered in how to measure AI ROI.

Send us your ad platforms, your store and your cost structure in writing. You get a fixed price, a delivery window and the exact definition of the number we will compute for you, within one business day. No meeting required. Start async.

Tell us what you want automated

Describe the work in writing. You get a written reply within one business day: a fixed-price proposal, a scoping question, or an honest referral out.

Start at /start

▸ written reply within one business day · no call scheduled, ever

Doesn't fit a package? Tell us what you need anyway.

Questions? Ask in writing

no chatbot · a human replies

Ask us anything, in writing

A founder replies within one business day. That is the same promise clients get.