20 products, four volume tiers, read roughly every 80 minutes for 172.8 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 20 products, every 80 minutes, for 7 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 80 minutes. The top
panel never crosses zero. The bottom panel does, 15 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 6 failed readings take up their true width: the widest step
covers 2.682 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 2,476 consecutive 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.37 million units, we watched the counter move by exactly one, 22 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 127 times on 9 of the 20 products, once by 380 in a single step — a rate of 5.13% of pairs. Over the same readings, the sold count moved backwards 0 times.
The review comparison runs over the same 2,476 pairs as the sold-count comparison: every reading that returned a sold count also returned a review count, so both sides carry an identical denominator.
So the reader works. The zero is a measurement, not a blind spot.
127 of the 127 dips came back — the number returned to where it had been, 102 of them within one or two readings. None failed to recover inside the window. We do not know what causes this and do not guess.
Each bar is a number of readings. The tall bar at 1 means 71 of the 127 dips were gone by the very next reading, roughly 80 minutes later. Deleted reviews do not come back.
| TIER | MAX OBSERVED | PAIRS | MOVED | SHARE MOVED | SMALLEST STEP | WENT DOWN |
|---|---|---|---|---|---|---|
| <1k | 703 | 598 | 44 | 7.36% | +1 | 0 |
| 1k–10k | 9,859 | 615 | 264 | 42.93% | +1 | 0 |
| 10k–100k | 84,099 | 634 | 565 | 89.12% | +1 | 0 |
| >100k | 1,367,502 | 629 | 611 | 97.14% | +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 — 99,480 products with a record on 2026-10-22, the most recent completed day.
Across all collected days, sold_count moved backwards
63 times in 648,441 pairs of consecutive daily
readings. Counted on gold’s daily record — one ok reading per product per day. The base rate opposite counts every distinct daily reading in silver, on both surfaces, which is why its pair count is larger.
Counts of products, not percentages. 80.8% of the 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.
20 products can show how the field behaves. They cannot tell you how often something happens across TikTok. 172.8 hours cannot separate a weekly pattern from a trend. And we have one vantage point, not several.
The section above says the panel's zero is a measurement rather than a limit of the instrument. That is true and it is not the whole answer, because a second figure on this page bounds what the panel could ever have found.
Across the wider crawl, sold_count moved backwards
63 times in 671,635 product-day pairs
— a rate of 9.4×10−5. Applied to the panel's
2,476 pairs, that predicts 0.23 decreases.
That denominator spans every surface the crawl re-reads. Of those 63, 19 fall in the category feed (6.2×10−5 over 306,662 pairs), 43 fall on shop pages (11.8×10−5 over 364,611 pairs), and 1 on a pair joining a reading from one surface to a reading from the other. On shop pages, 23 of the 43 come from one seller’s listings (9 products). Without that seller, shop pages run at 5.5×10−5 over 364,354 pairs against the feed’s 6.2×10−5 — a difference these counts cannot distinguish (exact test, p = 0.75). The writeup’s 0.13 expected decreases come from the same calculation over the study window alone — 2 decreases in 37,706 pairs collected through 2026-09-09; this page’s 0.23 runs over everything collected through 2026-10-23.
So the panel observing zero is exactly what the base rate predicts.
Both statements hold at once: the instrument demonstrably resolves
backwards movement — it resolved 127 of them in the field beside
this one, over these same pairs — and a panel of 20 products
was never large enough to settle whether that movement occurs in
sold_count. What settles it is the crawl, not the panel.
What we can say: across 2,476 consecutive readings of 20 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 7 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.