For Indian D2C founders and performance marketers
Your Meta ROAS and your actual revenue will never match. Here is why.
Meta counts the sale when the pixel fires. It never learns about the cancellation, the COD refusal at the door, or the return two weeks later. So the ROAS on your dashboard is higher than the revenue your bank actually kept. That difference has a name, and it is measurable.
Read-only access. Free plan, no card required.
Why the two numbers drift apart
When a customer completes checkout, Meta's pixel records a purchase and revenue enters your reported ROAS at that moment. Everything after the click happens in your store and courier systems, which Meta has no connection to. So no correction ever travels back. This is not a defect in Meta; it is how conversion measurement works everywhere. The platform measures what it can see, and it cannot see past the click.
Cancellation
The order is called off before dispatch, often within hours. The pixel already counted it.
COD refusal
The parcel reaches the door, the customer declines to pay, the courier returns it. A failure mode specific to cash on delivery.
Return
Delivered and paid, then sent back inside the returns window and refunded. The revenue leaves; the reported number does not.
The India multiplier
The gap exists everywhere, but India widens it. During the 2025 festive quarter, 58% of COD orders came back, against under 15% of prepaid orders in the same window (Unicommerce, 2026). Every one of those failed COD orders is a sale Meta already took credit for. Multiply that across a month of spend and the number you scale against stops being optimistic and starts being fiction.
This is why two campaigns with identical reported ROAS can retain very different revenue, purely on their payment mix. Payment mix is a marketing metric here, not just a finance one.
How Adverti shows your true ROAS
Connect, read-only
Link Meta and your store (Shopify or WooCommerce) through official APIs. Read-only, minutes, nothing in your accounts changes.
See the estimated gap
Reported ROAS next to a stitched estimate of what you actually kept, every figure labelled by how confident we are in it.
Act on the honest number
Creative, ad-spend, and campaign recommendations that run on retained revenue, so you cut what bleeds, not what merely looks tired.
Questions founders ask
Why is my Meta ROAS higher than my actual revenue?
Meta counts a conversion when the purchase event fires and never receives what happens afterward: cancellations before dispatch, cash-on-delivery refusals at the door, and returns inside the window. All three reduce what you keep, none reduces what Meta reported, so reported ROAS stays higher than your actual retained revenue.
What is true ROAS?
True ROAS, or retained ROAS, is retained revenue divided by ad spend, where retained revenue is reported revenue minus cancellations, COD failures, and returns. It is an estimate, and an honest one is labelled as such.
Does the Conversions API fix the ROAS gap?
No. The Conversions API improves what Meta sees at conversion time. It does not send back doorstep refusals or returns that happen days later, so the gap between reported and retained revenue survives CAPI.
Is the retained number exact?
No, and we will not call it that. It is a stitched estimate, labelled by confidence. It is more honest than the platform number, which is presented as truth while structurally missing every post-click failure. An order-level deterministic engine that hardens the estimate is on our roadmap.
See the ROAS your bank account agrees with.
Connect Meta and your store in minutes, read-only. Free plan, no card. Your estimated gap on the first screen.