July 25, 2026
Shopify Refund Tracking: How Returns Are Silently Destroying Your Margins
Shopify deducts refunds from revenue but never from your ad spend. On a 20% return rate, that gap can flip a profitable product into a money loser. Here is how to calculate the real impact.
Johny | Shopsterra
Shopify Refund Tracking: How Returns Are Silently Destroying Your Margins
Shopify processes your refunds correctly. The money goes back to the customer, the order is marked refunded, and your revenue number drops accordingly.
What does not drop: your ad spend for that order.
You paid for the click. You paid to acquire that customer. The Meta or Google campaign that brought them in still shows the conversion, still counts it toward your ROAS, and still charges you the full amount. The return happens in Shopify. The ad cost lives somewhere else entirely. The two numbers never meet.
This is how a product with a 20% return rate and a ROAS of 3.5 can be losing money on every returned order, and your dashboard will show nothing unusual.
What Shopify actually tracks when a refund happens
When a customer returns an item, Shopify does three things: it creates a refund record, adjusts the order total, and restores inventory if you choose. What it does not do is touch the marketing attribution for that order. The sale still appears in your conversion data. The campaign that drove it still gets credit. The ad cost is unchanged.
Your Shopify analytics will show net sales after refunds. That part works. The problem is that net sales is not the same as net profit. Between those two numbers sit ad spend, payment processing fees, outbound shipping, and in many cases return shipping. Shopify knows about none of those.
The actual math on a 20% return rate
Take a product priced at $60 with a landed cost of $20. On paper: $40 gross margin per unit, 67% gross margin. Looks healthy.
Now add realistic numbers:
- Ad spend to acquire the customer: $18 (ROAS 3.3)
- Payment processing: $2.04 (Shopify Payments 2.9% + $0.30)
- Outbound shipping: $6
- Gross profit after those costs: $13.96 per order
At a 20% return rate, 1 in 5 orders comes back. On that returned order:
- You refund the $60 to the customer
- Shopify refunds the payment processing fee partially (typically just the $0.30 fixed, not the 2.9%)
- You paid $6 outbound shipping that is not coming back
- You paid $18 in ad spend that is not coming back
- If you offer free returns, add another $5-8 in return shipping
- Net on that order: -$25 to -$30
Blended across 5 orders (4 kept, 1 returned): your $13.96 per kept order becomes roughly $7-9 actual net profit per order when you average in the loss on the returned one.
That is not a rounding error. That is a product that looks profitable in every Shopify report and is actually half as profitable as you think, or worse.
Why ROAS makes this invisible
ROAS is revenue divided by ad spend. When a refund happens, revenue drops in Shopify and stays high in your ad platform. Most stores check ROAS inside Meta or Google, where the conversion is still counted as a full sale. Some check it in Shopify using the sales over ad spend formula, but even there the refund only reduces the revenue figure, not the ad spend.
Either way, the ROAS number that comes out is fiction for any product with meaningful returns. A ROAS of 3.5 on a product with a 25% return rate might be closer to 2.6 on a net revenue basis, which depending on your margins could mean you are spending more to acquire customers than you make from them.
The only way to see this accurately is to calculate ROAS using net revenue after refunds, per product, over a period long enough to capture the return window. For most Shopify stores that means at least 30 days, because returns often come in 10-20 days after delivery.
What to actually measure
Three numbers give you a complete picture per product:
Net revenue after refunds. Not gross sales. Pull this from Shopify: Reports > Finances > Summary, filter by product, set date range to at least 60 days.
Total ad spend attributed to that product. This requires breaking out campaign spend by product, which most stores do not do. If you run product-specific campaigns or ad sets, pull that number directly. If you run catalog or broad campaigns, allocate by revenue share as a starting point.
Return rate by SKU. Not store average. Store average hides which specific products are driving returns. A 12% overall return rate can mean 5 products under 5% and one hero SKU at 35%. Shopify shows this under Reports > Products > Returns if you have access, or via a custom report on refunded items.
Once you have those three, the formula is:
Net revenue - ad spend - COGS - shipping (outbound + return, weighted by return rate) - payment fees = real net profit per product
Run this for 60 days on your top 10 products by revenue. The ranking will be different from what your Shopify dashboard shows. Usually by a lot.
The products most likely to have this problem
Returns cluster in a few categories: apparel (sizing issues), electronics (buyer remorse, functionality gaps), home goods ordered without measuring, and any product where the online description or photos do not match the physical reality.
If your store is in any of those categories and you have not calculated return cost per SKU, there is a meaningful probability that at least one of your top sellers is a profit drain that your current reporting makes look healthy.
The second category is products with high ad spend and thin margins. A 50% gross margin product can absorb returns better than a 30% margin product because there is more cushion before the math goes negative. If your margins are thin and your ad dependency is high, the return rate threshold that flips you into a loss is much lower than you think.
How to fix the reporting gap
The manual approach: export orders, export refunds, export ad spend by period, and join them in a spreadsheet by SKU and date range. It takes a few hours to set up and needs to be repeated monthly because the data changes.
The faster approach: use a profit tracking tool that pulls all three data sources automatically. Shopify for orders and refunds, ad platform APIs for spend, and calculates net profit per product with returns already factored in. That is exactly what Shopsterra does. You connect your store and ad accounts once, and the dashboard shows real net profit per product updated daily, including the margin impact of refunds on your actual ad spend.
If you want to see which of your products is quietly losing money on returns, you can connect your store at shopsterra.com/register. Free during beta, no credit card required, takes about 5 minutes to connect.