How the numbers get here
Short version: read the vendor's pricing page, store the row, hash the page every day, and only publish a change after a person looks.
What a plan row is
Each row is one current plan on one tool: the monthly price, the annual price expressed per month when the vendor publishes it, the unit they meter (credits, tokens, a dollar pool), what is included, and the URL it came from.
If price_monthly is empty and price_annual_monthly is set, the vendor only showed an annual price. We do not invent the month-to-month number.
If both prices are empty, the plan is listed and the price is marked unlisted. Claude Code Max 20x is the current example.
Verified versus needs review
verified_at is the date a person last confirmed the row against the source. A missing date means it has not been confirmed.
needs review means the page was ambiguous: a client-rendered price, a plan name inferred from docs, a bundled subscription, or a billing label that does not say monthly versus annual. The badge stays until someone re-reads the page.
An approved change is a published note that something moved. Pending checker hits are not shown on the site.
The daily pass
A cron job fetches each tool's pricing URL, strips scripts and tags, collapses whitespace, and hashes the text. That hash is compared to the last snapshot.
A different hash writes a new snapshot and a pending change. It does not edit plan prices. A person still has to read the page and update the row. The first snapshot for a tool is a baseline, not a change.
A failed fetch or a near-empty page is recorded as a failure, not as a price change. Client-rendered prices can hide inside a shell; that is why several rows are already flagged.
What we do not do
We do not convert tokens to dollars unless the vendor states a dollar credit. We do not estimate overage. We do not let an affiliate link change a number.
The benchmark — the same reference app, monthly, with credits, tokens, and dollars — is a separate pass. It is described on the benchmark page and has no results yet.