Skip to content

Measuring marketing ROI with multi-touch attribution

Not by itself. It splits credit for orders; return also needs margin, returns and the share of those orders the ads caused. A holdout gives that share, and one line of arithmetic turns it into profit.

By , Founder & CEOPublished 4 min read

Run the numbers for your store: the free customer journey credit calculator, or the free contribution margin calculator.

Multi-touch attribution tells you how credit for orders is split across touchpoints. It does not tell you return, because three things sit between attributed revenue and profit: margin, returns, and whether the orders would have happened anyway. The third is the only one you cannot read off your own orders. In 663 Facebook experiments, the median lift on lower-funnel outcomes such as purchases was 5%, where one statistical method estimated 24% (Gordon, Moakler and Zettelmeyer, arXiv preprint, 2022), so a credited order is not the same as a caused order.

Which three gaps sit between attributed revenue and return?

Multi-touch attribution reports attributed revenue: order value, split among the touchpoints on converted paths by a rule or a model. Credit is not profit, and three gaps separate the two.

Margin. Revenue pays for product, shipping and fees before any of it is profit. Return needs contribution margin, not order value.

Returns. Shopify's Admin API separates an order's total "at the time of order creation" from its total "after returns", and computes net payment as "the total amount received minus the total amount refunded". GA4's documentation treats a refund as its own event, sent with the order's transaction ID. A tool that credits revenue at purchase and never updates it reports revenue before returns.

Caused or not. Attribution credits orders; it does not say which would have happened without the ads. In the 2022 preprint, the experiments' median lifts were 29%, 18% and 5% for upper, middle and lower funnel outcomes, against 83%, 58% and 24% from double/debiased machine learning, and the authors call the remaining bias "substantial". In field experiments at eBay (Blake, Nosko and Tadelis, Econometrica, 2015), "returns from paid search are a fraction of" the non-experimental estimates. Neither tested a named attribution product, so this is the size of the question, not a score for any tool.

What does the arithmetic look like?

Put the three gaps in one line:

profit = attributed revenue × (1 − return rate) × contribution margin × caused share − ad spend

For illustration: a channel shows €10,000 of attributed revenue on €2,500 of spend, a ROAS of 4.0, and with 10% returns and a 40% contribution margin before ad spend it keeps €3,600 of contribution (10,000 × 0.9 × 0.4). In the same worked example, profit is 3,600 − 2,500 = €1,100 if every credited order was caused, and 1,800 − 2,500 = −€700 if half were.

In the same worked example, break-even ROAS is 1 ÷ (0.9 × 0.4) = 2.8 if every credited order was caused, and 1 ÷ (0.9 × 0.4 × 0.5) = 5.6 if half were. On these illustrative numbers, a platform ROAS of 4.0 clears the first bar and misses the second.

How do you find the caused share for your own channel?

Measure it with a holdout, then do the sum:

  1. Run a holdout on one channel, as in the paired-region check.
  2. Count incremental orders. Google defines it for its own lift tests as "Incremental conversions = Treatment conversions - Control conversions": orders with the channel running minus orders without it.
  3. Divide by the credit. Take incremental orders over the orders your tool credited to that channel, for the same regions and weeks. That ratio is the caused share.
  4. Finish the line above with your own return rate and margin. Google's lift documentation does the spend step too: "Incremental cost per action = Total ad spend / Incremental conversions".

Pass: the caused share holds in a second test in a different period, and the return you compute still clears break-even. Fail: the share swings between tests, or the test could not see an effect. Then the channel's return is unknown, not zero: move budget in small steps and keep total revenue over total ad spend in view as the cross-check.

Sources, 30 September 2026: Close Enough? A Large-Scale Exploration of Non-Experimental Approaches to Advertising Measurement (Gordon, Moakler and Zettelmeyer, arXiv preprint, 2022; full text); Consumer Heterogeneity and Paid Search Effectiveness (Blake, Nosko and Tadelis, Econometrica, 2015; abstract via IDEAS/RePEc); Order object (Shopify GraphQL Admin API documentation, version 2026-07); Measure ecommerce (Google Analytics developer documentation, 2026); Understand your Conversion Lift based on users measurement data (Google Ads Help, 2026).

Frequently asked questions

  • Can multi-touch attribution measure marketing ROI?
    Not on its own. It splits credit for orders among touchpoints; return also needs margin, returns and the share of orders the ads caused. In 663 Facebook experiments, one method's median lift for lower-funnel outcomes such as purchases was 24% where the experiments measured 5%, so check a channel's caused share with a holdout.
  • What is the difference between attributed revenue and profit?
    Attributed revenue is order value assigned to a channel. Profit is that revenue after returns, times contribution margin, times the share of orders the ads caused, minus ad spend. Only the last step needs an experiment; the rest comes from your own order data.
  • How do I find the caused share of a channel's attributed orders?
    Run a holdout on the channel, count orders with it running minus orders without it, and divide by the orders your tool credited for the same regions and weeks. Google defines incremental conversions as treatment conversions minus control conversions in its own lift tests.

Go deeper: Incrementality testing, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.