Skip to content

How do margins change a fashion store's target ROAS?

If you sell clothing, your margin moves through the season, so one target ROAS rarely fits all year. Markdowns lower the margin and raise the floor, and returns lower it again weeks later. Set a full-price target and a sale target, each priced after returns.

By , Founder & CEOUpdated 6 min read

Run the numbers for your store: the free break-even ROAS calculator.

If you sell clothing, your margin moves through the season, so one target ROAS rarely fits all year. Markdowns cut the margin and raise the break-even line, and returns cut it again weeks later. Usually you need a full-price target and a sale target, each priced after returns.

If you sell fashion and apparel

If you sell clothes, shoes or accessories, a product's margin is rarely one number. A collection launches at full price. Slow lines go on sale a few weeks later, and the last sizes get cleared at the end of the season. Each step lowers the margin on the same item.

Returns hit the margin a second time. Fit and size send items back, and a free return pays a courier twice. The ad platform counts the order when it is placed, and the return arrives weeks later. If you use Shopify's Google & YouTube app, Google's list of the events its tag sends has a purchase event and no refund event.

So a target set once, in the launch weeks, usually sits on the best margin that product will ever have.

The export below is one store's, and it does not say what that store sells.

One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts.

What the export showsValueSource cell
Break-even ROAS at a 40% margin (1 divided by 0.40)2.5xBreak-even sheet, 40% margin row
Journeys with 2 to 3 touches, 12.5 days to buy12.2% of revenueJourneys sheet, 2-3 touches row
Journeys with 4 to 9 touches, 16.9 days to buy5.4% of revenueJourneys sheet, 4-9 touches row

The first row is arithmetic, not a ROAS any store reached, since the export holds no spend. On the Break-even sheet, a 40% margin needs 2.5x, because 1 divided by 0.40 is 2.5. If you sell clothes, the same item can sit at that margin in one month and well below it the next.

The other rows are about timing. Journeys with 2 to 3 touches took 12.5 days to buy, and those with 4 to 9 touches took 16.9 days (Journeys sheet). If your buyers take that long, ads in the fortnight before a sale will collect orders placed in the sale, at the sale margin.

The export holds revenue shares, not costs, discounts or returns. The margin side is yours to bring.

What changes for a fashion store?

Markdowns raise the floor. For illustration, take a jacket at €120. Say the product, shipping and fees cost €42: a 65% margin and a floor of about 1.54x. Say the jacket gets a 30% markdown: it sells for €84, and the floor rises to 2.0x. If the jacket goes to half price, it sells for €60 and the floor reaches about 3.33x.

So a sale needs a higher ROAS than full price, not a lower one.

Shopify will not call a markdown a discount. Gross profit by product works out margin on net sales, so discounts and refunds show in it. But Shopify creates discounts from discount codes, not from compare-at prices. Mark an item down with a compare-at price and the lower price is simply the price. Read the sale margin in Gross profit by product.

Returns land on their own date. Shopify shows a sale on the day it was made and the reversal on the day it was processed. So a sale month looks its best just after it ends, before the returns arrive. If a returned item can be sold again, you lose the courier and the handling, not the item.

Clearance is the exception. If stock would otherwise go to an outlet or a write-off, what you paid is spent either way. Work out its floor from the price minus what the outlet would pay.

Google's sales-season tip needs a limit. Google's Shopping help suggests lowering Target ROAS when bids rise in a sales period. Lower it only as far as the sale floor, never below.

What to do this week

  1. Read last season's two margins. In Shopify, open Gross profit by product for your last sale weeks. Compare them with the full-price weeks before, using Compare to. Pass: you have a full-price margin and a sale margin for your main lines. Fail: the margins are blank, because those items had no cost recorded when they sold.
  2. Measure returns by product. In Shopify, open Analytics, then Reports, and in the Sales category open Total sales by product for last season. Pass: you can set each top line's sales reversals against its gross sales. Fail: you skip it, and both targets sit on a margin you never keep.
  3. Give the next sale its own target. Work it out from the sale margin plus your profit share. Set it before the sale starts, as Target ROAS in Google Ads or as the ad set's ROAS goal in Meta. Pass: the sale target sits above the full-price one. Fail: it sits below, so the sale is told to aim under its own break-even.

Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework

Sources, 1 October 2026: Profit reports (Shopify Help Center); Sales reports (Shopify Help Center); Product details page (Shopify Help Center); Setting and comparing time ranges for your reports (Shopify Help Center); Shopify event parameters (Google for Developers); Set up Target ROAS bidding for Shopping campaigns (Google Ads Help); About ROAS goal (Meta Business Help Center)

Frequently asked questions

  • Should sale items and full-price items share one ROAS target?
    Usually not. A markdown cuts the margin, so the sale floor sits above the full-price one. Give sale lines their own campaign or ad set and target. Read their margin in Shopify's Gross profit by product for the sale weeks.
  • How do returns change a clothing store's break-even ROAS?
    They raise it. A refund gives the price back and the courier still gets paid, so the margin you keep is below the margin at checkout. Take last season's reversals per product from Shopify's sales reports and price them in before you divide 1 by the margin.
  • Why does my Shopify discount report show nothing during a sale?
    Because Shopify creates discounts from discount codes, not from compare-at prices. A markdown set with a compare-at price lowers the price itself, so no discount appears. Read the sale's margin in Gross profit by product instead.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.