Why does Meta report higher ROAS than my actual revenue?

Meta reports higher ROAS than your actual revenue because it counts a conversion the moment the purchase event fires and never receives what happens afterward. In Indian D2C, cash-on-delivery orders returned at 58% during the FY2026 festive quarter against under 15% for prepaid (Unicommerce, FY2026), yet Meta counts every one as revenue.

The moment Meta counts, and the moments it cannot see

When a shopper checks out, Meta's pixel or Conversions API fires a purchase event, and the sale enters Reported ROAS at that instant. Everything that happens next lives in systems Meta has no connection to: the order cancelled before dispatch, the cash-on-delivery parcel refused at the door, the delivered item sent back inside the returns window. No correction ever travels back to the ad platform. This is not a defect in Meta. It is how conversion measurement works everywhere, because the platform counts what it can see at the click and cannot see past it. The distance between what Meta reports and what a brand keeps is the Reality Gap.

Timeline showing Meta counts revenue when the purchase event fires, then cannot see cancellations, COD refusals, or returns that happen afterward

The India multiplier

Two features of Indian D2C turn a small gap into a structural one. First, cash on delivery carries a doorstep veto no pixel can price: the customer can decline the parcel at the door long after Meta has counted the sale. In Unicommerce's FY2026 data, COD orders returned at 58% during the festive quarter, against under 15% for prepaid (Unicommerce, FY2026). Second, return to origin is seasonal and heavy: platform-wide RTO ran near 39% at the November 2025 festive peak and eased to about 21% by early 2026 (Unicommerce, FY2026).

Both figures describe orders Meta reported as revenue and then never heard about again. On a COD-heavy account, Reported ROAS is inflated by construction, not by error. COD and RTO each get their own article.

Vertical waterfall showing Meta reported revenue at 100 percent, Shopify confirmed at 70 percent, and Shiprocket retained at 55 percent, with cancellations and RTO plus COD failures shown as leaks between them

It is not misattribution

This gap is often confused with an attribution problem, and it is not. Attribution decides which ad or channel gets credit for a sale, and it can be wrong through view-through counting or generous conversion windows. The Reality Gap sits after the credit is assigned: it concerns whether the credited revenue was actually retained once cancellations, COD failures, and returns played out. A brand can fix attribution completely, deduplicate every view-through, tighten every window, and still plan on numbers inflated by post-sale leakage. The two problems are independent. This article is about the second one, which survives even perfect attribution.

Diagram separating attribution, which assigns credit before the sale, from the Reality Gap, which is post-sale leakage after the sale is credited

How to see your own divergence

You can size your own divergence in three lines, for any period after its returns window has closed:

  1. Reported revenue: the revenue Meta claims for the period, from Ads Manager.
  2. Retained revenue: order value in your store minus cancelled, COD-failed, and returned orders, from Shopify or WooCommerce joined to your courier data.
  3. The gap: subtract the second from the first, in rupees and as a percentage.

Audit-style card showing reported revenue minus retained revenue equals the gap, in rupees and as a percentage, with blank value fields

Done once, it is a spreadsheet exercise. Done every period, joining ad spend to store and delivery outcomes on a schedule, it becomes a continuous read rather than a month-end scramble. Either way the output is an estimate, and honest measurement labels it as one: turning it into a reconciled figure requires order-level matching between platform and store records, covered in how to calculate true ROAS after returns and COD failures.

What this page does not claim

This page explains a direction, not a size. It does not claim a universal percentage for how far Reported ROAS overstates retained revenue, because that number depends on your payment mix, your category, and your margin structure. A prepaid-heavy skincare brand and a COD-heavy fashion brand can read the same 4x in Ads Manager and keep very different amounts of it. The figures above describe the Indian D2C market from a verified source. Your own divergence is measurable, and it is the only one that should set your budget.

Sources: India D2C Report 2026: Operations, RTO & Growth Data - Unicommerce · Tier-II, Tier-III cities drove 66% of new D2C orders in FY26: Unicommerce - Business Standard

Frequently asked questions

No. Meta reports what its measurement can see, and it cannot see your store and courier outcomes. The inflation is structural, not fraudulent, which is also why it never self-corrects.

See your own estimated gap. Adverti Chat joins your ad spend with your store and delivery outcomes and shows a stitched estimate of what you actually kept, next to what was reported. Free plan, read-only access, no card.

Share this post


Harsh Bhatt

Harsh Bhatt

July 31, 20266 min read

Start Talking to Your Ads Today.

Connect your Meta and Google accounts. Your first audit is ready in 30 seconds. Free forever on the Free plan.