How these prices are checked
Written on the assumption that every vendor here will change its pricing silently.
The method, in five lines
- Source
- The vendor’s own pricing page, and nothing else. Each of the 64 plans records the URL it was read from.
- Re-read
- Nightly at 03:20, across all 29 services, checking 137 literal strings that must still appear.
- On a change
- The row is marked drifted and its date stops advancing. Nothing rewrites a price on its own.
- On a missing rate
- Recorded as unknown, printed as not published, and the total refuses to resolve.
- Usage
- An assumption, always printed beside the figure it produced, and editable in every calculator.
1. Every figure comes from the vendor’s own page
Not a press release, not an aggregator, not a blog post. Each of the 64 plans records the URL it was read from and the literal strings that must appear on that page for the figure to count — Supabase’s $0.00325 per monthly active user, Polar’s 3.8% + 40¢, Cloudflare’s +$0.30 per additional million.
2. A job re-reads all of them every night
At 03:20 a scheduled job fetches all 29 pricing pages and re-checks every string. It does not rewrite prices. Extracting a number from a marketing page and trusting it enough to print as somebody’s bill is precisely how a cost calculator ends up lying with confidence. It answers one narrower question honestly: are the figures published here still on the vendor’s page?
- Verified — every string found. The date on the page moves to today.
- Drifted — the page read fine but a figure is gone. The vendor changed something. The date stops advancing, so the site keeps showing when the number was last actually true, and the row is flagged for re-reading by hand.
- Unreadable — the page could not be fetched. Same rule: the date does not move.
A page that fails is fetched a second time before being called drifted. Some vendors serve slightly different markup between requests, and a false drift is worse than a slow one — it teaches you to ignore the list, and then a real change goes past unnoticed. The last run checked 64 plans and verified 64.
3. Unknown is never zero
Firebase publishes a free quota of 50,000 monthly active users and then defers to Google Cloud pricing without a number. Auth0 publishes a base at 500 users and moves the rest behind a slider. Stytch produces its overage rate only inside a calculator widget. In every one of those cases the rate is recorded as unknown, the total refuses to resolve, and the page says not published.
This is the single most important rule here. A calculator that renders a missing price as $0 does not have a small bug; it produces a confident wrong answer, which is worse than producing none.
4. A plan that cannot carry the usage is not an option
Before price is considered at all, plans are excluded when they cannot do the job. A plan that publishes an allowance and sells no overage is hard-capped: pass the cap and it is not a cheap plan, it is the wrong plan. Vercel Hobby is excluded for a different reason — it forbids commercial use, and offering it as the cheapest way to host something you charge for would be recommending a terms-of-service violation.
5. The usage is an assumption, and it is always shown
Rates are facts. How much database, egress and traffic a given number of users implies is not. The default profile assumes 2% of users pay $20 a month, with storage and bandwidth scaling from the user count. Every one of those numbers is printed beside the total and can be changed in the calculators, because an assumption you cannot see or change is just a hidden number.
What this does not cover
- Negotiated or enterprise pricing. Everything here is the public rate card.
- Annual discounts, except where noted in a plan’s notes.
- Regional price differences and currency conversion.
- Your own time, which is usually the largest line and appears on nobody’s pricing page.
Icons are Solar bold-duotone (CC BY 4.0, 480 Design).
