Size curves: build your first one from your own Shopify variant sales
Stop buying equal size runs. A size curve analysis from your own Shopify variant sales, in six steps, with a worked example and a 600-unit buy plan.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
Equal size runs feel fair — one case each of XS through XXL — and they quietly guarantee the opposite of what they promise: your most common sizes sell out first while the extremes fund your storage shelf. The buying plan that fixes this is called a size curve, it's how every serious apparel buyer decides what "one order of a style" means, and you can build your first one this afternoon from sales data you already have.
A size curve is the distribution of demand across a product's sizes, expressed as percentages of total units sold. The wider size-and-season problem it lives inside — seasonal timing, depth vs width, the apparel-specific stock traps — is covered in the clothing store inventory management overview. This article is just the curve: how to compute it from your own variant sales, how to fix its one big blind spot, and how to turn it into a buy plan.
Why buying by feel keeps failing
The failure isn't carelessness; it's arithmetic. Demand across sizes is roughly bell-shaped — middle sizes move multiples of the extremes — while "buy one of each" spreads units evenly. The result repeats every season: M and L go dark mid-season (at full price, with demand standing there unserved), and XS and XXL sit until the markdown. You lose on both ends and pay for the privilege in storage.
The intuition version fails differently: buyers correct one season's embarrassment by over-ordering whatever went dark, without asking whether the dark size was genuinely popular or just badly stocked in a bad ratio. That's why the curve has to come from data, not from last season's regrets.
Building the curve, step by step
- Pull sales by variant for 6–12 months. If your plan includes native reports, the "Sales by product" report breaks sales down to the variant level; otherwise export your orders with line items and sum by SKU (both paths live in the Shopify admin, as of November 2026).
- Sum units per size across the whole style — every colorway together. One curve per style family, not per color.
- Divide each size by the total to get shares.
- Adjust for weeks a size was dark (the step everyone skips — more below).
- Apply the shares to your next buy quantity and round deliberately.
- Re-run it quarterly, or whenever the fit or the audience changes.
A worked example: one trail tee, six sizes
Harbor & Trail sells a merino trail tee in XS–XXL. Six months of variant sales, summed by size:
| Size | Units sold | Share of sales |
|---|---|---|
| XS | 118 | 4.2% |
| S | 402 | 14.2% |
| M | 761 | 26.9% |
| L | 878 | 31.1% |
| XL | 471 | 16.7% |
| XXL | 194 | 6.9% |
| Total | 2,824 | 100% |
Already useful: the curve says M and L together are 58% of demand, and XXL is 6.9% — not the 16.7% an equal six-way run would give it.
The blind spot: dark weeks
Size L was out of stock for 5 of the last 26 weeks. Those 5 weeks of demand left no sales record, so L's true share is bigger than 31.1% — the curve as computed will under-buy exactly the size that sells best. This is the same measurement problem that makes sales velocity numbers lie during out-of-stock days; the full correction method lives there. The two-line version for a curve:
- L sold 878 units in 21 sellable weeks → 41.8 units/week
- True 26-week demand ≈ 41.8 × 26 = 1,087 units
Recompute the shares with L's corrected demand (total becomes 2,824 − 878 + 1,087 = 3,033):
| Size | Corrected share |
|---|---|
| XS | 3.9% |
| S | 13.3% |
| M | 25.1% |
| L | 35.8% |
| XL | 15.5% |
| XXL | 6.4% |
L jumps from 31.1% to 35.8% — five points of demand the raw data was hiding. Apply this fix to any size that spent real time dark before you trust the curve.
Turning the curve into a buy plan
Next PO for this style: 600 units. Multiply, then round deliberately:
| Size | Share | 600 × share | Buy |
|---|---|---|---|
| XS | 3.9% | 23.4 | 23 |
| S | 13.3% | 79.8 | 80 |
| M | 25.1% | 150.6 | 151 |
| L | 35.8% | 214.8 | 215 |
| XL | 15.5% | 93.0 | 93 |
| XXL | 6.4% | 38.4 | 38 |
Three rounding rules worth writing down:
- Keep the total exact. Round to absorb the fractions into the biggest sizes, where a few units don't change depth.
- Never zero out a size with demand. Even a 3.9% size is 23 units here — enough to matter. If a size's share can't fund a sellable depth, that's a range decision, not a rounding footnote.
- Add an exchange allowance. Exchanges move units between sizes without creating new demand: a customer swaps an S for an L, and your L count takes a second hit with no sale recorded. If exchanges run at, say, 12% of orders (illustrative) and most swaps move up a size, shift a few points from S into L and XL. The levers that cut those returns outright are in how to reduce apparel returns.
Size curves vs size ratios (pack ratios)
The trade writes curves two ways. A size curve is what your customers buy, measured from your own sales. A size ratio is how a supplier packs a case — 1-2-4-5-2-1 per 15 units, for example. If a supplier's prepack ratio sits close to your curve, prepacks are convenient and cheap. If it doesn't, every prepack quietly buys your worst sizes for you. Compare the ratio to your computed curve before accepting prepack terms, and where the mismatch is large, buy open stock per size instead — or negotiate the ratio. How the buy performed is then a one-number check: sell-through rate, read per size.
One Shopify mechanic to know before you add a size
Adding a sixth size to a product creates a new variant across every other option — every color, every length. Products cap at 2,048 variants and 3 option names, and themes, apps, and integrations can lag beyond 100 variants per product (Shopify Help Center, "Adding variants," accessed November 2026). A single added size is routine; a size explosion across a large catalog is where the Shopify variant limit stops being trivia.
Failure points on your first curve
Four ways a first curve comes out wrong, none of them obvious in the moment:
- One-off bulk orders pollute the data. A single B2B order of 40 units in size L looks like a month of retail demand. Scan the export for outlier orders and exclude anything that isn't a normal customer purchase — one bulk order can move a share by five points.
- A trending style inherits an old curve. If the style launched in one colorway that ran large-heavy, the family curve carries that skew. Rebuild per colorway when a style's fits differ, then merge only if the curves agree.
- Returns get counted where they were sold, not where they end up. A customer buys an M, exchanges for an L; the sale still sits on the M. That's the exchange-allowance problem in reverse — audit a month of exchanges before your second buy, not your first.
- The dark-week fix gets applied to dark days. A size that was out for a weekend lost almost nothing; correcting for it over-buys. Reserve the adjustment for sizes that lost a week or more.
None of these make the curve fragile — they make it worth checking against common sense before it becomes a purchase order. A curve that says XS outsells M is not a finding; it's a data problem.
Common questions
What is a size curve in retail? The distribution of demand across a product's sizes, expressed as percentages of total units sold. A tee selling 4% XS, 13% S, 25% M, 36% L, 16% XL, 6% XXL has that curve — and a 600-unit buy follows it size by size instead of splitting evenly and selling out in the middle.
How do I calculate a size curve from Shopify? Pull sales by variant for 6–12 months, sum units per size across the whole style, divide each size by the total, then adjust for any weeks a size was out of stock. Apply the corrected shares to your next buy quantity and round deliberately, keeping the total exact.
What's the difference between a size curve and a size ratio? A size curve is what your customers actually buy, measured from your own sales. A size ratio is how a supplier prepacks a case, like 1-2-4-5-2-1 per 15 units. When they match, prepacks are convenient; when they don't, the prepack buys your worst sizes at scale.
How much history does a size curve need? At least one full season, ideally 6–12 months. The bigger risk than length is censorship: if your best-selling size spent five weeks out of stock, its raw share understates real demand. Adjust for the dark weeks before buying, and re-run the curve quarterly as fits and audiences shift.
Should every product use the same size curve? No. Fit, silhouette, and audience all shift the curve — a slim-fit tee skews larger than a boxy cut, and kids' wear has its own shape entirely. Build one curve per style family at minimum, and sanity-check any single-color style against the family before trusting its data alone.
Next step
Build the curve for one style family this week: export variant sales, correct for dark weeks, and set the result beside your last buy order, size by size. The gap between the two columns is your over-buy and under-buy made visible — and the wider context for what to do about it is in the clothing store inventory management overview.