Meta Ads ROAS, the return on ad spend shown in Meta Ads Manager, rarely matches your store’s revenue. It is not meant to. The two numbers answer different questions: which sales Meta’s ads can claim, and which sales happened.
This guide explains each reason for the Meta Ads ROAS vs revenue gap, which way it pushes, and how to reconcile them. It draws on Meta’s own help pages and on our audit for Orbital Clothing. Our Meta Ads management work starts with this reconciliation before any budget changes.
What Meta Ads ROAS actually measures
Meta calculates purchase ROAS as purchase conversion value divided by amount spent (Meta Business Help Centre). It counts only purchases attributed to your ads.
Three details matter. Meta includes shop sales on its own surfaces, such as Shops and Marketplace. Meta also says statistical modeling may estimate some events and their values when data is partial or missing. For some iOS results, it may not calculate the metric at all (same source).
Your store’s revenue is different. It counts every order from every source, after the checkout, with refunds handled in your own system.
Why Meta Ads ROAS and your revenue never match
Meta Ads ROAS and store revenue differ for eight reasons, and they push in opposite directions. Some make Meta look better than your bank account; others make it look worse.
| Cause | Pushes Meta ROAS | How to check |
|---|---|---|
| Attribution window credits sales up to 7 days after a click | Up | Compare 1-day click with 7-day click in Ads Manager |
| View-through and engage-through credit | Up | Compare attribution settings with and without view-through |
| Another channel also claims the same sale | Up, when platforms are added together | Total each platform’s revenue and compare it with the store |
| Sales from non-Meta traffic are not credited | Down, against total revenue | Compare with orders from Facebook and Instagram sources only |
| Consent declines and browser blocking | Down | Events Manager purchases received versus store orders |
| Browser and server events without a shared ID | Up | Event deduplication rate for Purchase |
| Value includes tax or shipping, or keeps refunded orders | Up | Compare the purchase value sent with net sales |
| Different time zone or currency | Either way | Account and store settings |
Most accounts have several at once. That is why a single correction factor never works for long.
Attribution windows decide which sales Meta can claim
An attribution setting is the time window in which Meta credits a conversion to your ad. Meta’s standard settings count purchases within 1 or 7 days of a link click. View-through counts purchases within 1 day of an ad impression (Meta Business Help Centre).
Engage-through counts purchases within 1 day of a non-link click, such as a video play of 5 seconds (same source). A buyer who saw an ad yesterday and searched your brand today can count for Meta.
Meta now also offers an incremental attribution model. It predicts whether a conversion was caused by an ad rather than counting every purchase in a window. Meta warns that results under different models cannot be compared directly (same source).
To see how much the window matters, use the compare attribution settings feature Meta points to. If 7-day click and 1-day view report far more than 1-day click, much of your ROAS rests on delayed or view-based credit.
Meta can only credit the sales its ads touched
Meta can only attribute a purchase when its ads reached that buyer within the window. Every sale from search, email or a direct visit stays outside its ROAS.
Orbital Clothing believed half its purchases were missing from Meta. Our audit of 1,240 June orders found the tracking was healthy. GA4 showed about 44% of purchases came from Facebook or Instagram visits, and Meta found its click identifier on about 46%.
The other half came from Google, direct visits, YouTube and email. Meta recorded those purchases too; it simply could not credit them to its ads. The gap was the attribution lens, not lost data.
| Measure, 2 to 28 June 2026 | Purchases | Share of store orders |
|---|---|---|
| Shopify orders (source of truth) | 1,240 | 100% |
| Meta Conversions API (server) | 910 | about 73% |
| GA4 purchases | 805 | about 65% |
| Meta Pixel (browser) | 765 | about 62% |
| GA4 purchases from Facebook or Instagram visits | 357 | about 44% of GA4 purchases |
| of which from paid Meta ads | 124 | about 15% of GA4 purchases |
Two separate companies, Meta and Google, recorded a similar share of orders. That pointed to consent and blocking, not a fault in Meta. Only 124 GA4 purchases came from paid Meta ads, so most of Meta’s attributed sales started with organic or earlier visits.
Every platform claims the same sale
Each ad platform credits conversions under its own rules. One order can be claimed by Meta, Google Ads and your email tool at once. Add their reported revenue together and the total can exceed your real sales.
This is not an error in any one platform. Each reports what it can attribute, by its own model. We cover the Google side of this in why GA4 and Google Ads conversions don’t match.
For budget decisions, compare total ad spend with total revenue as well. That blended view cannot double count a sale.
Tracking errors inflate or shrink Meta ROAS
Tracking errors change Meta ROAS without any change in real sales. The three we find most often are duplicates, inflated values and missing server events.
- Duplicates. A Pixel event and a Conversions API event count once only when they share the event name and ID (Meta for Developers). Without the ID, each sale counts twice. We explain the fix in Meta Pixel and Conversions API deduplication.
- Inflated values. If the purchase value includes tax or shipping, Meta’s ROAS uses money you never keep.
- Refunds. At Orbital Clothing, the Purchase event fired the moment an order was placed, including orders later refunded.
Duplicates show up on more than purchases. Vegepod’s store fired AddToCart twice on a single click, from a second, partial source.
Consent and browser blocking shrink what Meta sees
Consent declines and browser blocking remove purchases from Meta’s view before attribution even starts. Store revenue keeps them, so Meta ROAS reads lower than reality.
Orbital Clothing’s numbers show the effect. Of 1,240 orders, Meta’s server feed received about 73%, GA4 about 65% and the browser Pixel about 62%. When a shopper declined the cookie banner, Shopify stopped sending the purchase to Meta on both browser and server.

The Conversions API recovers purchases lost to browser blocking. It cannot recover a purchase the shopper declined to share, and it should not.
How to reconcile Meta Ads ROAS with revenue
Reconciliation compares like with like: the same dates, time zone, currency and set of orders. Work through these steps in order.
- Align the settings. Use one date range, and check the ad account and the store use the same time zone and currency.
- Count received purchases. Compare purchases received in Events Manager with store orders. The gap is your capture rate.
- Check deduplication. Confirm browser and server purchases share an event ID, and review Event Match Quality.
- Compare the right orders. Set Meta’s attributed purchases against orders from Facebook and Instagram traffic, not against every order.
- Compare attribution settings. Read 1-day click next to 7-day click and 1-day view.
- Check the value. Confirm the purchase value excludes tax and shipping, and note refunds.
- Add a blended view. Divide total revenue by total ad spend for the same period.
Our conversion tracking audit checklist covers steps 2, 3 and 6 for every platform at once.
Signs the gap is a tracking fault, not attribution
Attribution moves the gap slowly and in both directions. A tracking fault usually shows as a sudden or one-sided change.
- Meta receives more purchases than the store has orders. That is almost always a duplicate.
- The gap jumps after a site, checkout or consent change while campaigns stayed the same.
- The deduplication rate or Event Match Quality drops for Purchase in Events Manager.
- The average purchase value in Meta sits above your average order value. Tax, shipping or a duplicate is in the value.
Any of these is worth fixing before you read ROAS at all.
Which number to trust for which decision
Each number answers a different question, so the right one depends on the decision. No single figure does every job.
- Meta ROAS: compare ads, ad sets and creatives inside Meta.
- Store revenue: report what the business earned.
- Blended return: set the total ad budget.
- Incremental results: judge how many sales Meta’s ads actually caused.
Meta’s AI-Powered delivery, including Advantage+, optimizes toward the purchases it can see. That makes clean purchase data worth more than any reporting fix. If you want the account and its tracking checked together, our Meta Ads management service starts there.
Frequently Asked Questions
Is a 6 ROAS good?
A 6 ROAS means $6 in attributed purchase value for each $1 of ad spend, which is profitable for most margins. Whether it is good depends on your margin and on how Meta counted it. Check the attribution setting and the purchase value first. A 6 under 7-day click and 1-day view may be far lower under 1-day click.
How much ROAS is good in Meta Ads?
A good Meta Ads ROAS is any figure above your break-even ROAS, which is 1 divided by your profit margin. A store with a 25% margin breaks even at a ROAS of 4. Compare that against store revenue, not Meta’s attributed value alone, because attribution windows and duplicates can inflate the reported number.
Sources (4)
All checked on 14 October 2026.
- Meta Business Help Centre, Purchase ROAS (return on ad spend)
- Meta Business Help Centre, About attribution models and attribution settings
- Meta for Developers, Handling Duplicate Pixel and Conversions API Events
- BlazeByte client audit reports, named with permission: Orbital Clothing (1 July 2026) and Vegepod (June 2026).



