Measurement · attribution · 9-minute read

Why your Meta ROAS lies (and how to work out the real profit of your Shopify store)

Your dashboard says 8. Your bank account says something very different. That is not bad luck and not a bad month — it is how the system is built.

Written by Efe Zomoregie, founder of Northbound · Growth Partners. Media buyer since 2019, ran my own skincare brand, marketing coordinator at international level at VF Corporation. After that I built and ran the full e-commerce operation of Rivali in Ghent.

It is Monday morning. You open Meta Ads Manager. It shows a ROAS of 8,2. You have spent €6.000, and Meta claims €49,200 in revenue.

Then you open Shopify. Total revenue this month: €31.000.

€18,000 is missing. And that is not even the awkward question. The awkward question is: why does a month with ROAS 8 feel like a month in which you barely move forward?

I have had this conversation with founders dozens of times now. It almost always goes the same way. The agency sends a report full of green arrows. The founder nods. And meanwhile the inventory grows, the payment terms grow, and the feeling that something is off grows.

Something is off. Just not what you think.

Meta is not lying to you. Meta answers a different question than the one you are asking. You ask: am I making money? Meta answers: how much revenue can I attribute to my ads? Those are two completely different questions.

The marketing trick agencies build on this

Platform ROAS is the easiest number to show a client. It is there ready-made, it is big, and it is almost always higher than reality.

An agency on an hourly rate or a fixed retainer has no incentive at all to correct that. Their invoice does not change when your margin drops. Their invoice only changes when you cancel. And the fastest way to stop you cancelling is to show a dashboard where things look good.

That is not malice. It is an incentive. But the result is the same: for months you steer on a number that does not appear in your accounts.

The technical cause

Why Meta and Shopify never line up

Six reasons. They stack up, and together they almost always explain the whole gap.

1 · View-through attribution counts people who did not click

Meta defaults to 7-day click, 1-day view. That second part is the biggest culprit.

Someone scrolls past your ad. Does not click. Buys four hours later through Google, or through your newsletter, or because they already knew your brand. Meta claims that purchase.

2 · The seven-day click window overlaps with all your other channels

Someone clicks your ad on Monday. Buys on Saturday after an email. Meta counts them. Klaviyo counts them too. Google Analytics may count them a third time.

Add those dashboards together and you often end up at 130 to 180% of your actual revenue. That is not an error — every platform claims what it touched.

3 · Meta counts VAT, your margin does not

This is the most underestimated one. The conversion value Meta receives from Shopify is the order value including VAT.

In Belgium that is 21%. So your ROAS is by definition inflated by more than 20% compared with what actually comes into your business. A ROAS of 4.0 is in reality 3.3 on money that is yours.

4 · Returns never come back into the dashboard

Meta records the purchase. Meta does not record the return.

In fashion and footwear that runs to 25 or 30%. And a return costs you shipping twice with no revenue against it. So what you actually make per euro of ad spend is quite a bit lower than the dashboard suggests.

5 · Existing customers convert through your cold campaigns

If you do not exclude your existing customers from your acquisition campaigns, you buy them back. They see the ad, click, buy — and Meta attributes it to acquisition.

You are then paying ad money for revenue you would have had anyway. That is the most expensive form of doing nothing.

6 · Data loss on the other side: iOS, ad-blockers and consent

At the same time data is also being lost. Since iOS 14 a large share of iPhone users can no longer be tracked through the browser pixel. Ad-blockers strip out scripts. And since the European consent rules your pixel only loads after someone clicks accept — anyone who declines does not count.

The result is a number that is both too high and too low. Too high because of attribution, too low because of data loss. That is exactly why you cannot correct it with a rule of thumb. You have to calibrate it.

The incentive behind the problem

Why traditional agencies keep you blind

Ask yourself one question about your current agency: what happens to their invoice if your profit halves?

On a fixed retainer: nothing. On hourly billing: nothing, or it goes up, because there is more work.

Everything follows from that.

I am not saying agencies are crooks. I am saying the model rewards them for something other than what you are paying for. As long as that incentive is wrong, nothing about the report changes.

The solution

Stop using ROAS. Steer on MER and AMR.

Two numbers. You take both from your own backend, not from an ad platform. That is exactly why they work: nobody with an interest can tweak them.

MER — Marketing Efficiency Ratio

MER = total revenue ÷ total ad spend

All revenue, all ad spend across all channels. No attribution, no windows, no discussion. This is the number that measures your business as a whole.

AMR — Acquisition MER

AMR = revenue from new customers ÷ total ad spend

This is the most important number in this whole article. Shopify tags every order as new or returning. Take only the new ones.

Why this matters: ads are supposed to bring in new customers. Your existing customers come back anyway, through email, through direct visits, through habit. If your ad spend is mostly buying back existing customers, your ROAS looks great while your business stands still.

The threshold that matters: break-even MER

An MER of 3 can be excellent or disastrous. That depends entirely on what is left over per order.

Break-even MER = 1 ÷ your contribution margin

And you work out that contribution margin after VAT and after returns. That is the step almost everyone skips:

If you work with an AOV including VAT, you inflate your margin by more than 20% and think you are making a profit while you are losing.

A real example

Take a fashion brand with €40,000 in online revenue per month and €8,000 in ad spend. Meta reports a ROAS of 4,2.

NumberValueWhat it says
Meta ROAS4,2What the platform attributes to itself
MER5,0€40,000 ÷ €8.000. The business as a whole
AMR2,75€22,000 new-customer revenue ÷ €8,000
Break-even MER2,84At 35.2% contribution margin after VAT and returns

Read those last two rows again. Acquisition is running at a slight loss. The brand makes money, but that comes from returning customers. Every euro that goes to new customers does not quite earn itself back.

The dashboard says 4.2 and everyone cheers. In reality retention is funding acquisition. That can go well for a while — until you scale. Then the loss accelerates.

How to bring Meta in line with your accounts

You do not have to throw Meta out. You have to calibrate it. Two changes, both done within half an hour:

If you do both, your Meta ROAS usually drops exactly to the AMR level from your accounts. At that point your numbers have integrity — and only then can you make decisions about ad creative, budget and scaling.

And only then: server-side tracking

The Conversions API — also known as CAPI — sends your purchases straight from your own server to Meta, instead of from your visitor's browser. That is where an ad-blocker or a cookie banner can stop them. That recovers part of what iOS and ad-blockers take away.

Important to understand: server-side tracking makes your measurement more complete, not more honest. It does not solve the attribution problem. Turn CAPI on without correcting your windows and you get an even higher number that is still wrong.

Order: first make attribution honest, then exclusions, then CAPI, and only then scale. Reverse that order and you pay for the lesson.

How I fix this

Northbound · Growth Partners

I am one person, not an agency. I never start with ads. I start with the question of whether your numbers can be trusted at all. I call that order The North: set your direction first, then move.

In the first week I set up server-side tracking, a UTM structure you can read yourself, and the split between new and returning customers. Only after that do I touch your campaigns. At the brand I run day to day, that is how I found that more than a quarter of monthly revenue had no traceable source — ads that were burning money on paper were in fact doing the work. They just were not getting the credit.

My pricing follows the same logic:

That percentage covers only people who have never bought from you before. That number is in your Shopify, not in my dashboard. I work with a limited number of brands at a time. At the intro call we make an agreement about direct competitors that we can both keep.

Minimum term 8 weeks, then month to month with a 4-week notice period, and no onboarding or setup fees. For fashion brands already selling online. There is no fixed revenue threshold: together we look at whether your ad spend, margin, returns and inventory leave enough room for this to work.

What you can do today

You do not need me for this. Three steps, about an hour's work:

  1. Set your Meta attribution to 7-day click and note how far your ROAS drops
  2. Take your new-customer revenue from Shopify and divide it by your total ad spend. That is your AMR
  3. Work out your contribution margin after VAT and returns, and from that your break-even MER

If your AMR is below your break-even MER, your acquisition is running at a loss. However good your dashboard looks.

That is not a pleasant discovery. But it is the first honest morning you have had in months.

The next step

Thirty minutes, in your numbers.

Cannot work it out yourself, or want to know where your biggest leak is? In a thirty-minute call I work through the numbers live: what you keep per order after VAT and returns, where your break-even sits, and which three leaks cost the most.

No presentation, no sales pitch. If it is not a fit, I will say so in ten minutes and we are done.

Book your call  Or read the full growth audit first

Written by Efe Zomoregie, founder of Northbound · Growth Partners in Belgium. Last updated in September 2026.