Every figure on this site comes out of one scan. Here is the scan — one row per catalogue, no names — so you can check the arithmetic instead of taking my word for it.
The claim is that 78.5% of the 298 catalogues had at least one size run with every size in its core sold out. Column 11 is broken. That is the whole check:
awk -F, 'NR>1{n++; if($11>0)b++} END{printf "%d of %d = %.1f%%\n", b, n, 100*b/n}' size-runs-2026-09.csv
234 of 298 = 78.5%
And the second headline — that every one of the 101 catalogues carrying 200 or more runs had one — is column 4:
awk -F, 'NR>1 && $4>=200{g++; if($11>0)b++} END{printf "%d of %d\n", b, g}' size-runs-2026-09.csv
101 of 101
A run can be broken and still be, in practice, sold through: if the whole core is gone and one size is left on the end, calling that a broken run is a stretch, and the tool no longer does. It reports only the styles with two or more sizes still on sale — genuine stock sitting in the ends of a run that no shopper can complete. That is column 12, broken_stranded, added on 23 September 2026 for exactly this reason: it is what the app tells a merchant, so it has to be something you can check.
awk -F, 'NR>1{n++; if($12>0)b++} END{printf "%d of %d = %.1f%%\n", b, n, 100*b/n}' size-runs-2026-09.csv
190 of 298 = 63.8%
awk -F, 'NR>1 && $4>=200{g++; if($12>0)b++} END{printf "%d of %d\n", b, g}' size-runs-2026-09.csv
95 of 101
63.8%, not 78.5%. 95 of the largest 101, not all of them. Fifteen points and six brands, and the conservative pair is the one to judge the tool by, because it is the one the tool will give you. Across the whole corpus, 5,773 styles are strictly broken and 1,581 of those — 27.4% — have two or more sizes left. Both measures are in the file. We publish both because the gap between them is the most useful thing here: it is the size of the difference between a number chosen to sound large and a number chosen to be actionable.
This file was regenerated on 24 September 2026 and 234 of its 298 rows changed order, 5 of them changed values. Nothing was rescanned: the size grammar was failing on sizes spelled out in full (“Extra Extra Large”), which discards the whole product, and fixing it added 1,014 readable size runs. The headline moved from 78.2% to 78.5% and the conservative one from 63.1% to 63.8%. The research page carries the full note.
If those two lines disagree with anything written anywhere on this site, the site is wrong and I would like to know: support@bananafest-destiny.com. The check that holds the pages to this file runs on every release.
| Column | What it counts |
|---|---|
store_id | A sequence number, 1–298. Not a hash of anything — see below. |
products_seen | Products returned by the storefront, up to a per-store ceiling of 1,000. |
with_size_option | Of those, products offering a size option at all. |
sized_styles | Size runs, after splitting by colour. One product in 3 colours × 7 sizes is 3 runs, not one 21-size garment full of holes. |
unsized | Products with no size option — a candle, a gift card, a one-size hat. |
unreadable | Products where the option names could not be parsed into a run. |
sold_out | Runs with every size unavailable. Not broken — a sold-out style is a sold-out style. |
partial | Some sizes gone, core intact. |
whole | Every size available. |
broken_loose | Most of the core gone. A weaker reading, published here, not counted in the headline. |
broken | Every size in the core gone, the ends still listed. The strict verdict, and the one 78.5% counts. |
broken_stranded | Of those, the ones with two or more sizes still on sale. The conservative verdict, and the one the app reports. A broken style down to one size is sold through, and this column excludes it. Always ≤ broken. Added 23 September 2026. |
scanned_month | 2026-09 for every row. |
The cohort is 298, not 354. 438 storefronts were approached, 354 answered, and 56 of those sell nothing with a size option — a store with no size runs cannot have a broken one. Counting all 354 gives 233/354 = 65.8%, which is a true sentence about a different population. The rows in this file are the 298.
The verdict is strict. broken means every size in the core of the run is gone while the ends are still on sale. broken_loose is the weaker reading and it is in the file so you can see what it would do: count either and you get 86.2%. Both sentences are true about the same data and only one of them is the published one. Ours is 78.5%.
And strict is still not conservative. broken counts a style whose core is gone and whose last remaining size is an XXS on the end. broken_stranded does not. The difference between them is larger than the difference between broken and broken_loose: 63.8% against 78.5%. If you are checking whether this tool is worth installing, check the conservative column, because that is the one it answers with.
The products total is the third: 122,425 products sit on the 354 stores that answered, and the 298 in this file hold 111,774 of them. Attaching the larger number to the smaller sample overstates it by 9.5%, which a footer link on this site did for a week until this file was built and the two stopped agreeing.
No store names. No product titles, no handles. Those are the directly identifying fields and they are dropped rather than hashed — a hash of a domain is a dictionary away from the domain, and a hash that looks anonymous is worse than a number that does not pretend to be. store_id is a position in a sort by catalogue size, and carries nothing else.
That is the whole of the protection, and I am not going to oversell it. A row reading 294 products, 291 size runs, 24 broken describes exactly one store, and anyone willing to rescan can find it. What this file withholds is the name beside the verdict — not the possibility of rediscovering it.
Every underlying fact here is published by the store itself, on its own /products.json, to anybody who asks. Nothing in this file was obtained any other way: no login, no account, no order data, nothing behind a password. The editorial act I am declining is printing a brand name next to an unflattering number. I am not claiming the number is unattributable.
It is a single reading in September 2026, not a time series. A size run broken on the morning of the scan may have been restocked that afternoon, and that is the honest limit of a one-shot measurement — it says how often a catalogue is in this state, not how long it stays there.
Storefronts cap at 1,000 products, so the largest catalogues are truncated and their totals are floors. The parser has been wrong before and the corrections are published in full on the report, including a figure that was withdrawn. Read that page before you quote this one.
And a capped row is not a partial sample of a catalogue — it is a recent one. /products.json comes back ordered by publication date, newest first. I checked rather than assumed: seven storefronts asked, five answered, and all five were in that order; the other two returned 404 and are not evidence either way. So what the cap returns is the most recently published 1,000 products, and how much of a catalogue that is depends entirely on how fast the store publishes. Measured on the newest 250 products, that window was 1.7 days on one storefront and 101 days on another. If you are quoting a row with products_seen at 1,000, you are quoting a window, and this file cannot tell you how wide it was.
44 of the 298 catalogues hit the cap. They are the ones with the most going on, and splitting the headline on them is the only honest way to show what the cap did to it:
| Catalogues | Read whole | Capped at 1,000 | All |
|---|---|---|---|
| How many | 254 | 44 | 298 |
| At least one broken size run | 192 — 75.6% | 42 — 95.5% | 234 — 78.5% |
Note which way that runs. The capped catalogues are the more broken group, so dropping them would lower the published 78.5%, not raise it. That is also the reason the cap cannot be inflating the headline in the first place: every claim in this file is of the form this catalogue has at least one broken size run, and a read that stops early can only fail to find one. It can never invent one. Truncation makes 78.5% a floor and leaves it a floor.
And it is Shopify only, because that is what the product reads. It is not a claim about apparel retail; it is a measurement of 298 Shopify storefronts that answered a request in one month.
CC0. No attribution required, though a link back is welcome. If you write something with it I would genuinely like to read it.