STUDY 01 · SNAPSHOT

Is TikTok Shop's sold count accurate? We measured it.

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.

window 2026-09-01 19:08 → 2026-09-06 18:05 collection continues to 2026-09-09 figures are a snapshot and will move
SOLD_COUNT · CHANGE PER READING 0 to +36 units 0 36 REVIEW_COUNT · CHANGE PER READING −63 to +67 reviews 0 67 -63 0h 24h 48h 72h 96h 119h
a step forward a step backward a reading that failed product 1729399282285187757 · 90 readings

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.

1,809
observations
1,752 read, 1,751 with a count
1,732
pairs of readings
compared for change
0
times the sold count
went down
87
times the review count
went down
01 — FINDING

The counter moves one unit at a time, at every size.

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.

<1k · MAX OBSERVED 700+1 unit+7units the counter jumped between two readings25 of 35 steps are exactly +1
1k–10k · MAX OBSERVED 9,822+1 unit+7units the counter jumped between two readings90 of 184 steps are exactly +1
10k–100k · MAX OBSERVED 83,908+1 unit+38units the counter jumped between two readings78 of 392 steps are exactly +1
>100k · MAX OBSERVED 1,366,514+1 unit+180units the counter jumped between two readings14 of 428 steps are exactly +1

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.

02 — CONTROL

How do we know we would have caught a decrease?

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.

The −380 belongs to product 1729385034780414637, not to the product charted above. That one's worst dip is −63, and it recurs — the ±63 oscillation is visible in the lower panel.

Readings until the value came back

1392263845516373number of readings
85 of 87 recovered · 2 did not

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.

03 — BY TIER

The smallest step is +1 in every volume band.

Every pair of consecutive readings within each tier — five products per tier, list fixed before collection began. “Moved” means the count changed between the two readings.
TIERMAX OBSERVEDPAIRS MOVEDSHARE MOVED SMALLEST STEPWENT DOWN
<1k700421358.31%+10
1k–10k9,82243118442.69%+10
10k–100k83,90843939289.29%+10
>100k1,366,51444142897.05%+10

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.

04 — CORPUS

Twenty products show behaviour. A wider crawl shows how often.

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.

Under a gross-of-returns definition that decrease should not occur. We cannot explain it. It is recorded rather than smoothed away.
These counts describe our corpus, not TikTok. We found these products by following TikTok's own related-search links outward from a starting set of terms — so what we hold depends on what TikTok chose to link, and those feeds rank by something tied to sales. Nothing here says what share of TikTok Shop looks like this.

Corpus by lifetime units sold

Counts of products, not percentages. Three in four products we reach have sold under 1,000 units in their lifetime.

<1k 1k-10k 10k-100k >100k 5,701 1,149 674 185 7,709 products observed on 2026-09-05
05 — METHOD

Twenty products, frozen before collection, read for 119 hours.

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.

CADENCERoughly every 80 minutes, not hourly. The median gap is 1.33 hours across 1,789 gaps. The reason: a batch takes about 20 minutes to run, and the scheduler waits an hour after it finishes rather than after it starts — so 20 minutes is added to every gap.
SOURCEThe public product page. No account, no login.
STORAGEEvery response stored whole and hashed before anything parsed it. Every figure here recomputes from the original bytes.
FAILURESRecorded as failures, with the reason. Never as zero, never dropped. A reading that did not happen and a reading showing no change must never look the same.
DERIVATIONWhere a value is derived rather than read, it is labelled derived. Where a number could be wrong for a measurable reason, that measurement is published beside it.
06 — LIMITS

The claim is narrow on purpose.

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.

What we publish, and what we don't

FINDINGS IN FULLEvery figure with its denominator and the count behind it.
METHOD, REPEATABLEEnough to reproduce this on twenty products by hand.
NOT OUR INFRASTRUCTUREHow we operate at volume is not what makes the finding true.
NO RANKINGSThe corpus covers a fraction of the catalogue. A leaderboard built on it would be an unsupported claim dressed as a service.
07 — NEXT

Three things the panel will answer.

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.

Which products are accelerating against their own baseline

Not the biggest sellers — everyone already knows those. A product moving unusually for itself, measured against its own trailing median rather than the corpus.

needs 28 days per product

What a price change actually did

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.

needs matched controls and 30+ days

Where stock ran out, and what it cost

Per-variant stock is already collected. Once a product has a stable sales baseline, the units it did not sell while unavailable is arithmetic.

needs a baseline per variant

All three are being built as the panel accumulates history.