Why refunds break your ROAS number
Return on ad spend is a simple ratio: revenue your ads generated, divided by what you spent to get it. The trouble is the word "revenue." Most merchants plug in the number their ad platform reports, and that number is gross — it counts every checkout, including the ones the customer later sent back.
A refund reverses the sale. The money leaves your account, the product may be gone, and yet the original conversion still sits in your ROAS math like it never happened. You end up scaling a campaign that looks profitable on paper and bleeds cash in the bank.
This is the single most common error in return-on-ad-spend math, and every serious guide flags it. As Triple Whale puts it, ROAS should be based on your revenue after returns and refunds — gross revenue gives "an overly optimistic view of your results."
The two ROAS formulas: gross vs. net
There are really two versions of the metric, and you should always know which one you are looking at.
Gross ROAS = ad-attributed revenue ÷ ad spend. This is what Meta Ads Manager or Google Ads shows you by default. It never subtracts a refund, because the ad platform recorded the purchase and moved on.
Net-revenue ROAS = (ad-attributed revenue − refunds − returns) ÷ ad spend. This is the honest number. If you use it, label it clearly as net-revenue ROAS so nobody on your team confuses it with the platform figure.
Neither is "wrong," but they answer different questions. Gross ROAS tells you how much your ads influenced. Net-revenue ROAS tells you how much of that influence actually stuck after buyers changed their minds.
Worked example: what refunds really do to ROAS
Say you sell printed mugs. In one week you spend $1,000 on Meta ads and the platform reports $4,000 in purchases. Headline ROAS looks great:
$4,000 ÷ $1,000 = 4.0 gross ROAS
Now the reality. Those 100 orders were $40 each in product revenue. Over the next two weeks, 10 of them get refunded — wrong size, changed mind, whatever. That is $400 of revenue reversed:
Net revenue = $4,000 − $400 = $3,600 $3,600 ÷ $1,000 = 3.6 net-revenue ROAS
That is a 10% haircut to your headline number, and you only see it if you deliberately go pull the refund data. A 4.0 that you were about to scale is really a 3.6 — and you have not even counted costs yet.
The catch: refunds only lower one of your dashboards
Here is the part the generic ROAS guides skip entirely. When a refund happens, it does not update everywhere. Shopify reduces its net and total sales when you refund an order. Meta and Google generally do not retroactively remove the original conversion from their reports — the credit they claimed stays on the books.
So after those 10 refunds, Meta still shows ~$4,000 and Shopify shows ~$3,600. The gap is not a tracking bug; it is by design. This is one flavor of the broader problem where your ecommerce numbers never quite reconcile across tools.
If you compute ROAS from the platform's revenue, you are baking in every refund the platform forgot to subtract. That is why the store-side order record — not the ad account — has to be your source of truth for how much revenue survived. The same lesson shows up with cancelled orders that linger in your analytics long after the sale evaporated.
Two related traps make the revenue side even messier. Your pixel might pass revenue that includes or excludes tax depending on your Shopify setup, and it may or may not fold in shipping revenue in your sales reports. Get refunds right but revenue definitions wrong, and your ROAS is still fiction.
From net-revenue ROAS to profit on ad spend
Subtracting refunds fixes the revenue side. It does nothing about cost. And ROAS — even net ROAS — is silent on whether you actually made money.
The fix is to break even against your margin. Breakeven ROAS = 1 ÷ profit margin. As purei walks through, a business with a 25% margin needs roughly a 4.0 ROAS just to break even — so our 3.6 net ROAS is already underwater if margins are thin.
Better still, skip the ratio games and compute profit on ad spend (POAS) directly. Keep going with the mug example. Of the 100 orders, 90 stay sold. Each fulfilled order costs $12 to print and $6 to ship, so $18 × 90 = $1,620 in cost of goods.
Then payment costs. Shopify Payments charges roughly 2.9% + 30¢ per transaction on the Basic plan for US online cards, so 2.9% × $4,000 + $0.30 × 100 = $116 + $30 = $146 in fees. One of the refunds also turned into a dispute, and Shopify's chargeback fee runs about $15 per dispute in the US.
Now stack it up:
Contribution = net revenue − COGS − fees − chargeback Contribution = $3,600 − $1,620 − $146 − $15 = $1,819 POAS = $1,819 ÷ $1,000 ad spend = 1.82
So the same week reads three completely different ways: a 4.0 gross ROAS, a 3.6 net-revenue ROAS, and a 1.82 profit-on-ad-spend. Profit of $819 after the ad bill is real, but it is a fraction of what the headline implied — and refunds are a big reason why.
How to handle refunds consistently across systems
The goal is not to make Meta and Shopify agree — they never will, because they answer different questions. The goal is to make your ROAS reflect money that actually stayed in your account.
Pick one source of truth for revenue. Use the store-side order record (Shopify), because it is the only system that subtracts refunds and settles to your bank. Treat the ad platform's revenue as an influence signal, not a cash figure.
Use a trailing window. Refunds arrive days or weeks after the sale, so a campaign's true net ROAS is not knowable on day one. Compare on trailing 7-to-14-day windows and revisit last month's ROAS once the refund tail has landed.
Deduct refunds in the same place, every time. If one report subtracts returns and another does not, your ROAS will swing for no real reason. Consistency beats precision here.
Watch the plumbing, not just the math. Sometimes the "extra" revenue in your ad account is not refunds at all but missing purchase events on the Facebook side or duplicate conversions. Fix the tracking before you trust the ratio.
Doing this by hand across Meta, Google, Stripe, and Shopify is tedious and easy to get wrong. This is exactly the reconciliation work PodVector automates: it connects Shopify, Meta Ads, Google Ads, Printify, and Printful, then computes true per-order profit — refunds, fees, and print costs already subtracted. Victor, its AI operator, reads that live data warehouse and proposes moves you approve, so you are steering on profit that survived returns instead of a gross number the ad platform never corrected. Victor works on the Shopify side and does not touch your ad account.
FAQs
Should refunds be subtracted from revenue in ROAS?
Yes. Refunds reverse a completed sale, so counting that revenue overstates your return on ad spend. Subtract refunded and returned revenue from ad-attributed revenue before dividing by ad spend, and label the result net-revenue ROAS so it is not confused with the platform's gross figure.
Why does Meta still show revenue for orders I refunded?
Because ad platforms do not retroactively remove a conversion once they have credited it. Shopify lowers its net and total sales when you issue a refund, but Meta and Google generally leave the original purchase on their reports. That is why the platform's revenue runs higher than your store's after refunds, and why the store record should be your revenue source of truth.
What is the difference between net-revenue ROAS and POAS?
Net-revenue ROAS still measures revenue — it just uses revenue after refunds and returns instead of gross. Profit on ad spend (POAS) goes further and subtracts your cost of goods, payment processing fees, and other variable costs, so it tells you whether the campaign actually made money rather than just moved revenue.
How long should I wait before trusting a campaign's ROAS?
Long enough for the refund tail to land, which is usually a couple of weeks. Refunds and returns trickle in after the sale, so a fresh campaign's net ROAS is always optimistic on day one. Compare on trailing windows and re-check older periods once returns have settled.
Do refunds affect my Shopify payout too?
Yes. A payout is a batch of balance transactions, and refunds issued in the period are deducted from it, along with processing fees and any chargeback fees. That is another reason the cash in your bank rarely matches either your gross sales or your ad platform's reported revenue.