---
title: "How to Measure ROAS After Cookie Consent — 7 Steps"
description: "Consent pushes ROAS in two directions: analytics undercounts, ad platforms model and self-credit. A seven-step method to get a ROAS you can allocate budget on."
summary: "Calculate it twice with the same spend: once with the revenue each ad platform reports, and once with revenue measured independently of the banner, and reconciled with your real orders. Use the platform figure to bid inside that platform and the measured figure to allocate budget between channels."
canonical_url: "https://sealmetrics.com/blog/measure-roas-after-cookie-consent/"
lang: "en"
author: "Rafa Jiménez"
author_url: "https://sealmetrics.com/authors/rafa-jimenez/"
date_modified: 2026-09-14
content_type: "blog"
owner: "content"
llm_priority: "useful"
last_verified: "2026-09-14"
source: https://sealmetrics.com/blog/measure-roas-after-cookie-consent/
publisher: Sealmetrics
---

Attribution

# How to Measure ROAS After Cookie Consent: A Seven-Step Method

September 14, 2026 10 min read By [Rafa Jiménez](https://sealmetrics.com/authors/rafa-jimenez.md)

To measure ROAS after cookie consent, calculate it twice: once with the revenue each ad platform reports, and once with revenue measured without consent loss and reconciled with your real orders, both divided by the same spend. Use the platform number to bid inside the platform and the measured number to move budget between channels.

## Key Takeaways

- Consent distorts ROAS in two opposite directions: consent-gated analytics undercounts paid revenue, while ad platforms fill the gap with modelled and view-through conversions credited to their own ads.
- The undercount is uneven. On Incapto's Shopify store, GA4 put paid campaigns at 50% of traffic; measured without consent loss they were 62%.
- A defensible ROAS needs three things in the same period, timezone and currency: tagged clicks, revenue reconciled with real orders, and spend per campaign from each platform.
- Session-scoped last-click ROAS is a floor for upper-funnel campaigns, not a verdict. Test before cutting them.
- Dreamplace Hotels moved Meta and Google budget once its measured sales were checked against the CRM total.

Ask a European eCommerce team for the ROAS of its best campaign and you will often get three answers. Google Ads has one, Meta has another, and GA4 has a third that is lower than both. None of them is lying. Each is measured on a different base, and since the cookie banner arrived, those bases have drifted further apart every year.

[ROAS](https://sealmetrics.com/glossary/return-on-ad-spend.md) is revenue attributed to a campaign divided by what the campaign cost. The spend side is not in dispute: the platform that charged you knows it to the cent. Every argument about ROAS is about the revenue side — which orders are counted, and which campaign gets them. That is the part consent broke, and it is the part [campaign revenue attribution](https://sealmetrics.com/use-cases/revenue-attribution.md) has to fix.

## Why consent pushes ROAS in two directions at once

**Consent-gated analytics undercounts.** A GA4 tag that waits for the banner does not record the visitor who rejects it, and the ones who accept on the second page lose the UTMs of the landing page. The loss is not proportional across channels. On [Incapto's Shopify store](https://sealmetrics.com/case-studies/incapto.md), Sealmetrics recorded 11% more direct traffic than GA4 but 37–52% more traffic from paid campaigns. Paid campaigns were 50% of traffic in GA4 and 62% measured without consent loss. An analytics ROAS built on that base makes paid media look worse than it is. Why the lost visits end up as direct is explained in [why GA4 shows (direct) / (none)](https://sealmetrics.com/blog/why-ga4-shows-direct-none.md).

**Ad platforms fill the gap, in their own favour.** When a user does not consent, Google's Consent Mode stops its tags reading or writing advertising cookies, and Google Ads models the conversions it cannot observe. Those modelled conversions appear in the Conversions column, and the modelling needs a minimum of 700 ad clicks over seven days per country and domain grouping. Meta's attribution settings credit conversions after a view as well as after a click. Each platform credits conversions to its own ads within its own windows, so a single order can be claimed by Google and by Meta at the same time, and the sum of platform-reported conversions can exceed the orders you took.

The result is a ROAS that is too low in analytics and generous in the platforms. Averaging the two does not fix it. What fixes it is a revenue figure measured on a base that does not depend on the banner, checked against an order total that no tool produces.

## What goes into each side of the formula

- **Spend:** media cost per campaign from the platform, for the same dates, timezone and currency as the revenue. Agency fees and production costs belong in a separate profitability view, not in ROAS.
- **Revenue:** the order value you record at purchase, defined once — with or without tax and shipping — and applied the same way to every channel. Decide whether refunds come out before you compare periods.
- **Attribution rule:** written down. Sealmetrics credits each purchase to the channel of the session in which it happens, by [last click](https://sealmetrics.com/glossary/last-click-attribution.md); ad platforms use their own windows and models. Two ROAS figures built on different rules are not two opinions about the same number.
- **Break-even:** a ROAS only means something next to the one you need. With a 40% gross margin, break-even ROAS is 1 ÷ 0.40 = 2.5.

## The method, step by step

1. Separate the two jobs ROAS does

   Bidding inside one platform and allocating budget between channels are different decisions. Keep the platform's own ROAS for the first, because its algorithm optimises on it, and build a measured ROAS for the second.

2. Tag every paid click at the source

   Add UTMs to every paid link: an account-level tracking template with ValueTrack parameters in Google Ads, and utm_source, utm_medium, utm_campaign and utm_content for the creative in Meta. Load a live ad URL and check the parameters survive every redirect to the landing page.

3. Record revenue without waiting for consent

   Send each purchase with its value to a measurement layer that does not wait for the cookie banner, so consenting and non-consenting visitors are counted on the same base. The campaign comes from the UTMs of the landing page, not from a cookie.

4. Reconcile revenue with your orders first

   Compare the measured revenue total with your store's own orders for the same period, timezone and currency, leaving out orders with no web session. Incapto's parallel run recorded 96% of real orders and 97% of revenue before any channel was read.

5. Export spend per campaign from each platform

   Take media spend per campaign from Google Ads, Meta and any other platform for the same dates, timezone and currency. Use campaign names or IDs that match your utm_campaign values, so each cost line joins exactly one revenue line.

6. Calculate both ROAS figures side by side

   For each campaign, divide platform-reported revenue by spend and measured revenue by the same spend. Add a column with the gap and one with your break-even ROAS, which is 1 divided by gross margin.

7. Move budget on the measured figure, test before cutting

   Shift budget between channels on measured ROAS. Where a prospecting, video or display campaign falls below break-even on last click, run a holdout or geographic test before cutting it, because last click is the rule that gives it least credit.

## A worked example

The figures below are illustrative, not from a client. They show the shape of the comparison in step 6 for three campaigns with the same monthly spend.

| Campaign | Spend | Platform ROAS | Measured ROAS | Reading |
| --- | --- | --- | --- | --- |
| Brand search | €10,000 | 9.1 | 8.7 | Close: little modelling, little view-through |
| Prospecting social | €10,000 | 3.4 | 1.9 | Below break-even on last click: test before cutting |
| Non-brand search | €10,000 | 3.0 | 3.6 | Undervalued by consent-gated analytics |

With a break-even ROAS of 2.5, the platform view funds all three. The measured view says non-brand search deserves more than it gets, and that prospecting social needs a holdout test before anyone decides it loses money: last click is exactly the rule that gives it least credit.

## Where measured last-click ROAS is wrong too

A measured ROAS is more complete than a consent-gated one, but it is not the whole truth about a campaign, and it would be dishonest to present it that way:

- **No credit for views.** A campaign that works by being seen, not clicked — video, display, much of prospecting social — gets no view-through credit.
- **No credit for earlier sessions.** Sealmetrics does not identify users. A shopper who clicks an ad on Monday and returns by typing your address on Friday is credited to direct.
- **No multi-touch model.** There is no split of credit across touchpoints of the same person, by design.
- **Only what reaches the website.** Marketplace, phone and in-store sales have no web session to attribute.

So treat measured last-click ROAS as a floor for upper-funnel campaigns and as a reliable figure for campaigns that sell in the session. Before cutting a campaign that looks weak on last click, run an incrementality test: pause it in some regions or for a holdout audience and see whether total measured revenue moves.

## What the published cases show

[Dreamplace Hotels](https://sealmetrics.com/case-studies/dreamplace-hotels.md) compares the sales Sealmetrics attributes with the total in its CRM and treats the remaining gap as a quality signal. On that base it attributes 15–20% more sales than its previous tool, and Meta and Google were the first budgets it moved. [Palladium Hotel Group](https://sealmetrics.com/case-studies/palladium-hotel-group.md) went further on display: it rebuilt its Display & Video 360 buying around Cost-per-Search, using availability searches in the booking engine as the intent signal, and Display Cost-per-Search improved by 165%. Incapto's case reports no ROI at all — only the base on which ROAS is calculated, which moved paid campaigns from half of the traffic to close to two thirds.

## Related reading

[Why GA4 Shows So Much (direct) / (none) Traffic, and What Fixes It](https://sealmetrics.com/blog/why-ga4-shows-direct-none.md)

9 min read

[Consentless Analytics for DTC: What It Is and Why It Matters in 2026](https://sealmetrics.com/blog/consentless-analytics-for-dtc.md)

7 min read

[Cookieless Analytics for eCommerce: The 2026 Guide](https://sealmetrics.com/blog/cookieless-analytics-for-ecommerce.md)

10 min read

## Questions about ROAS after cookie consent

### How do you measure ROAS after cookie consent?

Calculate it twice with the same spend: once with the revenue each ad platform reports, and once with revenue measured independently of the banner, and reconciled with your real orders. Use the platform figure to bid inside that platform and the measured figure to allocate budget between channels.

### Why is my Google Ads ROAS higher than in GA4?

Because they are measured on different bases. GA4 behind a consent banner does not record visitors who reject it, and paid traffic loses more than direct. Google Ads models conversions from users who did not consent, once the account meets its threshold, and credits them to its own ads within its own attribution settings.

### Does Consent Mode fix ROAS?

It fills part of the gap inside Google's own reports with modelled conversions, which need at least 700 ad clicks over seven days per country and domain grouping. It does not restore the source of each lost visit in your analytics, and it does not settle how much credit Google should get compared with Meta or email.

### Should I trust the ROAS Meta reports?

Trust it for what it is: Meta's view of its own ads, including conversions after a view and modelled conversions where it cannot observe them. It is the right number for Meta's bidding. For deciding how much budget Meta gets against other channels, compare it with revenue measured on your site and reconciled with your orders.

### Can Sealmetrics calculate ROAS?

Sealmetrics measures revenue by channel, campaign and creative from the UTMs of each landing page; it does not import ad spend. Spend comes from the ad platforms and is joined to that revenue in a spreadsheet, in BigQuery through the Sealmetrics connector, or by an AI assistant connected to the Sealmetrics MCP server and the ad platform's own connector.

### Is last-click ROAS good enough to cut a campaign?

Not on its own for upper-funnel campaigns. Last click gives no credit for views or for earlier sessions, so video, display and prospecting look weaker than they are. It is reliable for campaigns that sell in the session. Before cutting one that looks weak, run a holdout or geographic test and watch total measured revenue.
