Twenty products, four volume tiers, read every eighty minutes for 119 hours — and what the field actually measures, according to TikTok's own documentation.
TikTok shows a units-sold figure on every product page. We read that figure on twenty products, every eighty minutes, for five days.
Two things worth knowing. It counts in single units, even on products past a million — nothing forces a platform to do that. And it includes returned items, so any revenue estimate built on it is too high.
How to read it: each vertical bar is one reading. Its height is how many units sold since the previous reading — not the running total. A bar of +5 means five units sold in roughly eighty minutes. The top panel never crosses zero. The bottom panel does, twelve times.
The two panels are scaled separately. For this product, sold-count steps reach +36 and review-count steps run between −63 and +67; on a shared axis the top panel would flatten to a line. Other products in the panel reach much larger steps — see section 01. Horizontal is real elapsed time, so the two failed readings take up their true width: the step across the first covers 2.615 hours rather than the usual 1.33.
TikTok's own documentation defines this field as "the number of items sold since this item was listed on TikTok shop, including items that have been returned."
Two things follow. It includes returns, so it runs ahead of real sales. And it only ever adds, so it cannot go down — across 1,732 readings it never did. That confirms the definition. It is not a discovery.
The discovery is what the definition does not require: how finely it counts. A product selling thousands a day has no reason to report single units, and most platforms would round. This one does not. On a product past 1.3 million units, we watched the counter move by exactly one, fourteen times.
How to read these: the horizontal axis is step size — how many units the counter jumped between two readings. Bar height is how often a jump of that size occurred. If the field rounded or batched, the bars at the far left would be empty and the first bar would sit at +10 or +100. In every tier the tallest activity is at the smallest steps, and the leftmost bar is +1.
Saying a number never went down means nothing if you could not have seen it go down. So we checked against a second counter on the same page, read by the same code, in the same requests: the review count.
It moved backwards 87 times on 9 of the 20 products, once by 380 in a single step. Over the same readings, the sold count moved backwards zero times.
The review comparison uses 1,730 pairs rather than 1,732: two readings returned a sold count but no review count, so those pairs have nothing to compare on the review side.
So the reader works. The zero is a measurement, not a blind spot.
85 of the 87 dips came back — the number returned to where it had been, 65 of them within one or two readings. Two never did. We do not know what causes this and do not guess.
Each bar is a number of readings. The tall bar at 1 means 39 of the 87 dips were gone by the very next reading, roughly eighty minutes later. Deleted reviews do not come back.
| TIER | MAX OBSERVED | PAIRS | MOVED | SHARE MOVED | SMALLEST STEP | WENT DOWN |
|---|---|---|---|---|---|---|
| <1k | 700 | 421 | 35 | 8.31% | +1 | 0 |
| 1k–10k | 9,822 | 431 | 184 | 42.69% | +1 | 0 |
| 10k–100k | 83,908 | 439 | 392 | 89.29% | +1 | 0 |
| >100k | 1,366,514 | 441 | 428 | 97.05% | +1 | 0 |
The last column is zero by definition — a count that includes returns only adds. It is shown because it is the check the field has to pass before the rest of the table means anything.
A second collection runs daily across a wider crawl — 7,709 products with a record on 2026-09-05, the most recent completed day.
Across all collected days, sold_count moved backwards 1 time in 10,505 pairs of consecutive daily readings. One event with a denominator attached, not a rate.
Counts of products, not percentages. Three in four products we reach have sold under 1,000 units in their lifetime.
Five products in each of four volume bands. Within each band we took evenly spaced ranks across the sorted range, so the five span their tier instead of bunching at one end. The list was fixed before collection started and never changed.
The count is gross of returns. Because TikTok defines the field as including returned items, any revenue or velocity figure derived from it overstates net sales by the return rate — which we cannot observe. Every tool that estimates TikTok Shop revenue inherits this, whether or not it says so.
One caveat on the definition itself: TikTok documents it for the Research API field. No definition is published for the figure on the public product page. That they are the same metric is highly likely, not verified.
No access to any seller's order records, so we cannot say the counter equals completed orders. Refunds, cancellations and relists are invisible. We cannot tell whether it counts units or orders, or where in the order lifecycle it increments.
Twenty products can show how the field behaves. They cannot tell you how often something happens across TikTok. 119 hours cannot separate a weekly pattern from a trend. And we have one vantage point, not several.
What we can say: across 1,732 consecutive readings of twenty products, the figure on the page moved forward in single units at every volume tier and never moved back.
The panel runs daily and keeps running. Each of these needs history the corpus does not have. They are listed with what they require rather than as features, because at five days none of them is computable.
Not the biggest sellers — everyone already knows those. A product moving unusually for itself, measured against its own trailing median rather than the corpus.
Sales before and after a discount, compared against similar products that did not discount over the same days. The difference is the effect; the raw before-and-after is not.
Per-variant stock is already collected. Once a product has a stable sales baseline, the units it did not sell while unavailable is arithmetic.
All three are being built as the panel accumulates history.