Methodology
How we count
How we read public TikTok Shop data, turn it into how fast each listing sells, and label every number with its confidence and freshness. And the lines we refuse to cross.
How we count the sold number
We read public TikTok Shop product pages, and only public pages. No seller login, no API keys, no writes to anyone’s shop – the whole system is read-only and needs no authentication.
Every listing is read two ways. The moment you open a listing with the extension, we take a reading of the public “sold” counter on the page and record it. After that, a backend job re-reads the page on a set interval, about every 6 hours by default. That interval is a configuration value, not code: we can change how often we read without shipping a new build.
The public counter is cumulative. It only ever climbs as a listing sells. To turn it into a daily sold number we subtract the previous reading from the newest one, within a single unbroken stretch of tracking. We never add the counter up. Summing a running total would report many times the real number, because that is not what the counter measures.
If a day has no reading, that day is a gap, a blank in the series, never a zero. A missing reading is missing data, not a day with no sales.
Confidence and freshness on every number
Every number we show carries two labels: a confidence band (high, medium, or low) and a freshness stamp saying how long ago we last read it. Confidence starts from how many readings we have and steps down whenever a known weakness is present.
| Band | What it takes |
|---|---|
| High | Read within the last day, with no recent listing reset and the counter’s step no more than a twentieth of the number. For a 30-day number, about two weeks of reading days as well. |
| Medium | Read within about three days, with the counter’s step no more than a quarter of the number. For a 30-day number, about a week of reading days as well. |
| Low | Thinner data that still clears the bar to show a number at all. |
Freshness
Freshness is simply how old the reading is: “last reading N hours ago”. Past about a day the stamp turns amber, to warn you the number may have moved since we last looked.
Why we sometimes show no number
Each window is judged on its own readings and never inherits another window’s verdict. The 30-day number needs readings on at least 7 different days spanning at least 7 days, inside a 30-day lookback. The 7-day number needs readings on at least 4 different days inside that same week. The 24-hour number needs two readings inside the day itself.
On top of that, any window is refused when the public counter’s step is too coarse to express the change we would be claiming. When the data doesn’t clear its window’s bar, we show the reason instead of a guess.
Take a listing we started tracking 12 days ago but have readings from only 4 different days. A 30-day number needs seven, so in its place the page shows:
tracking started 12 days ago, 4 readings so far – check back soon
Not a number. That is the honesty contract working as intended.
Why a counter can drop, and why “200+” is a lower bound
Sales are the rises of TikTok’s sold counter between our readings; a drop means the listing was reset, and we start counting again from there.
Why a counter can drop: a listing can be relisted, have its variants merged, or otherwise be reset by TikTok, and the public counter falls. A drop is not a sale and not a return. It counts nothing, and we start counting again from the new, lower number. A drop also lowers our confidence in that listing’s number for the rest of the window. We emit zero negative values, ever.
Why “200+” is a lower bound: small counters are shown in coarse steps – a listing might display “200+”, meaning at least 200. We treat a coarse cap as a floor, not a reading, and won’t infer sales from it until the counter actually proves it’s moving (two increases in a row). A rounded band never fabricates velocity.
The public counter’s own resolution coarsens as sales grow (illustrative):
| Counter | Resolution |
|---|---|
| ≈ 700 sold | shown to the single unit |
| ≈ 10,000 sold | rounded to the nearest 100 |
| ≈ 100,000 sold | rounded to the nearest 1,000 |
| ≈ 1,000,000 sold | rounded to the nearest 100,000 |
What we never claim
We show only what a public product page can honestly support. When a public page can’t show something honestly, we don’t guess it.
No profit, fees, or P&L.
No settlement, fee, COGS, or refund data – we never present a figure as revenue.
No inventory truth.
We can’t see a seller’s real stock.
No ads or attribution.
A different data plane.
No creator or affiliate data.
No compliance or account-health calls.
No repricing. No writes. Ever.
We arm your decision with the band and the velocity – we never set your price and never touch your shop.
Read-only. SoldCount never touches your shop.
Questions sellers ask about the method
How does a public “sold” counter become a number of sales per day?
We subtract one reading from the next, inside one unbroken stretch of tracking, and that difference is the sales. We never add the counter up: it only climbs, so summing a running total would report many times the real number. A day with no reading is left blank, never counted as zero. If the counter falls, the stretch ends there, because a drop means the listing was relisted or reset rather than that anything was returned.
How often do you re-read a listing, and how old is the number I see?
A watched listing is re-read about every 6 hours, and that interval is a setting rather than code, so we can change it without shipping a new build. Opening the listing in Chrome with the extension takes a reading right away. Every figure shows its age, “last reading N hours ago”, and past about a day the stamp turns amber. So what you are reading is a measurement of the gap between two readings, not a live count.
What does the confidence label on a number actually mean?
It is a band, high, medium or low, made from the data behind that one number, not from how the number looks. It starts from how many readings we hold and steps down when a weakness is present: an older reading, a recent counter drop, or a counter whose steps are large beside the change we would claim. A 30-day number also needs about two weeks of reading days to reach high, and about a week to reach medium. Two listings can show the same figure at different bands, which is the honest difference between a measured number and a thin one.
Why does SoldCount sometimes show no number at all?
Each window is judged on its own readings and never borrows another window’s verdict. The 30-day number needs readings on at least 7 different days spanning at least 7 days, the 7-day number needs 4 reading days in that week, and the 24-hour number needs two readings in the day. A number is also refused when the counter’s own step is too coarse for the change we would claim, which is why a “200+” listing gets nothing until it proves it is moving with two increases in a row. Below the bar you get the reason, not a guess: “tracking started 12 days ago, 4 readings so far – check back soon”.
How do you know two listings are the same product?
Four signals, and a strong one to be sure: the same primary photograph, the same brand plus a shared model token, a shared product code such as the barcode the page carries, or a similar title. A candidate becomes a rival only when its score clears one stated floor, and that floor is capped below certainty, because it is our inference about somebody else’s listing. Comparisons then run against the same product from other sellers, never against a category. Where we have found no other seller of the same thing, the band says so instead of drawing a thin one.
Can you tell me how much money a listing made?
No, and we do not pretend to. A public page gives a price and a sold counter, not fees, refunds, cost of goods or settlements, so we never present a figure as revenue. What we can show is where a listing’s price sits among the same product from other sellers, which is a price position, not earnings. And when a money figure cannot cover every unit we counted, we refuse the money and keep the units on the screen: “We counted 90 units but could not price all of them”.
What does the Chrome extension read, and what can it not do?
It runs on TikTok Shop product pages and nowhere else: three address patterns, and its only browser permissions are storage, the side panel and notifications. It takes one reading of the page you have open, the same public numbers a buyer sees, and sends that reading to us. It needs no TikTok seller login and no API key. It never writes: no repricing, no orders, no messages, no change to anyone’s shop.
Why is your figure different from another tool’s estimate?
We have not verified how any other tool reaches its number, and we do not claim to. What we can state is our own rule: only the rises between our own readings, inside one unbroken stretch, with a band and an age beside the figure. Two tools can then disagree for plain reasons: a different window, a different start date, or a counter drop that one of them counted as sales. If ours is the smaller number, the usual reason is that we started reading later, which is why we show the window and the reading count instead of one confident total.
Who we are
By the SoldCount team
SoldCount is an independent tool built by a small team who got tired of finding out too late that a competitor had moved. We read public TikTok Shop data – read-only – and label every number with its confidence and freshness.
We don’t award ourselves badges or cite proof we don’t have. If a number isn’t there yet, we tell you why.
Questions about the method? Contact us.
Watch any TikTok Shop listing – with the receipts.