Tensorust Research / Methods
Methods · 11 datasets · 1,038 CSV files
How we collect every number
Short answerEvery dataset on this site is collected by code we run ourselves, from a named public source or our own accounts, and every dataset carries the date it was read. We publish the table behind each chart as CSV (1,038 files today), state the limits next to the number, and log fixes on the corrections page. Pick a dataset below for its method in one paragraph.
Datasets
- Real downloads for the top Rust crates
- Crate movers and comparisons
- AI model API prices
- AI price history and changelog
- LLM API Price Index (monthly)
- App Store review times
- Steam market data (download speeds, free-to-play players, game sizes)
- O'BLOCK launch numbers
- Data behind articles and Manual pages
- Money size pages
- Reader counts on our pages
Rules for every dataset
- A source and a date on every number. If we can't name where a number came from and when, it doesn't go on the page.
- Raw data out. The table behind a chart is a CSV next to it, free to reuse under CC BY 4.0 with a link back.
- Rules, not judgement calls. Verdicts like "widely used and steady" or "best for" come from rules printed on the page.
- Old readings stay old. Dated snapshots and monthly issues are never edited after the fact; a correction is added and logged.
- No paid placement in the data. Sponsored spots are labelled and sit outside the tables. They never change a ranking.
Real downloads for the top Rust crates
From the crates.io API we fetch each crate's daily downloads for the last 90 days (all versions), its versions with publish times, and its reverse dependencies, one request every 2 seconds into a disk cache; a site build never calls crates.io. A day counts as a release window if a version was published that day or the day before. Every other day is a quiet day, and the median quiet day is the crate's "real downloads a day". A crate gets a page once it has 80+ days of data and 10,000+ all-time downloads (1,000 crates today). The verdict on each page comes from four stated rules printed on that page.
Limits: crates.io counts every download, including CI, mirrors and bots. The quiet-day median removes release spikes, not steady automated traffic.
The study behind the method: why raw crates.io counts mislead, featured in This Week in Rust #674.
Crate movers and comparisons
Weekly movers compare each crate's raw downloads and its quiet-day baseline between weeks from the same cache, so a release spike is flagged instead of read as growth. Head-to-head comparison pages exist only for pairs people search for (Google autocomplete, the phrase is kept with each pair).
Limits: Short windows are noisy; a one-week move is a prompt to look, not a trend.
AI model API prices
We copy each price from the provider's official pricing page (Anthropic, OpenAI, Google, DeepSeek) into a dated table; every row keeps the page URL and the date it was checked. Context window, input types, tool calling and lifecycle (current, legacy, deprecated) come from each provider's model pages, also dated. Workload costs are token arithmetic on the listed prices: fixed token counts per job, the cheapest way the provider bills it (cache reads or batch where listed), cache writes not counted. 71 models today.
Limits: Price only. We do not score answer quality, and a model that writes longer answers costs more per task than its per-token price suggests.
The table is also an open dataset: github.com/Mattbusel/llm-prices.
AI price history and changelog
Each check of the pricing pages is saved as a dated snapshot that is never edited; a wrong snapshot is fixed by adding a corrected newer one. The changelog is the difference between consecutive snapshots, plus future prices the providers announce on their pages. Generation history groups each provider's models into families (Claude Opus, GPT mini, Gemini Flash) and orders them by version number, at the price the provider lists for each one today. Snapshots so far: Oct 17, 2026, Oct 23, 2026.
Limits: An older model's price today can differ from its launch price. Families are ordered by version, not release date, because most model ids carry no date.
LLM API Price Index (monthly)
The basket is every model a provider lists as current with an input and an output price (retired models and embeddings excluded), from the last snapshot of the month. The workload is one chatbot reply (1,500 tokens in, 400 out) at the standard price. The index is the median basket cost divided by the first issue's median, so models joining or leaving the basket move it.
Limits: It tracks what a buyer can pick, not like-for-like price changes on one model.
App Store review times
Every App Review decision email on our own Apple developer account, pulled from the mailbox. Wait = the decision email's sent time minus the "Submitted" time in the same email (Pacific time). Duplicate emails for one submission and outcome count once.
Limits: One developer account and its apps: a real sample, not an industry average.
The guideline and error pages under /app-store/ use the same decisions plus the Resolution Center messages we received.
Steam market data (download speeds, free-to-play players, game sizes)
Download speeds: the data behind Steam's public download stats page (average Mbps and bytes per country and US state), read Oct 20, 2026; the world figure is our byte-weighted average. Players: every game SteamSpy's genre API returns for Free to Play, with its peak concurrent players on the day before. Sizes: the "Storage" line from Steam's appdetails API for the 60 of those games with the most players.
Limits: One read each, on Oct 20, 2026. SteamSpy is a third party and its lists are not complete; listed storage is not the exact download size.
O'BLOCK launch numbers
Read-only readings of our own Steamworks dashboard for O'BLOCK, each saved with the time it was read and Steam's "data as of" time. Free claims are Steam's lifetime free licenses; players are lifetime unique users.
Limits: Steamworks counters lag each other by hours (the daily report and the lifetime counter can disagree); we quote the conservative lifetime figure.
Data behind articles and Manual pages
21 articles and Manual pages ship the table behind their charts as data.csv next to the page. Each page states its own sources and the date each number was read, in its method or sources section.
Limits: Each one is a one-time read unless the page says it updates.
Money size pages
Piles of cash are drawn from bill dimensions and weights (sources in the page method). The US national debt figure is refreshed from the Treasury's Debt to the Penny API at most every 12 hours; billionaire fortunes are a dated snapshot.
Limits: Illustration math, not a financial claim.
Reader counts on our pages
Where a page says how many people read it, the number is unique visitors over 30 days from cookieless analytics (Vercel Web Analytics, or our own first-party counts once they cover a full week), shown only from 10 readers up.
Limits: Bots that run JavaScript can be counted; we do not inflate or round up.
Public copies
The main datasets are also on Hugging Face and Kaggle, each with a card that links back to its source page here:
- Real crates.io downloads, top 300 Rust crates: Hugging Face · Kaggle
- LLM API prices: Hugging Face · Kaggle
- App Store review times: Hugging Face · Kaggle
- LLM API Price Index, Oct 2026: Hugging Face · Kaggle
- UUIDv7 library test: Hugging Face · Kaggle
Cite or reuse
Every data page has a "Cite this" box with APA, plain text and BibTeX. Questions about a number: matt@tensorust.com.
Up next
The other half of trusting a number: What we got wrong, when we fixed it, and how to report an error.Corrections logEvery correction to a number on tensorust.com, dated, with what was wrong and what we changed. How to report an error, and what counts as a correction.Read it next →