Where the pages came from
The company list is every distinct domain that appeared in “Ask HN: Who is
hiring?” between July 2025 and August 2026 — 4,509 postings, 1,407 domains. For
each domain, six candidate paths were tried in order: /pricing,
/pricing/, /plans, /price,
/pricing-plans, /pricing/plans, under both the bare
host and www.
- 484 pricing pages returned usable text; 141 competitor pages were fetched the same way
- GET requests only, ten to twelve concurrent connections, no login, no paywall, nothing purchased
- Page text is cached locally so the analysis can be re-run without re-fetching anyone's site
Matching every price to its real unit
A price counts only when it is attached to a unit. The parser reads the amount,
the currency, an optional quantity, and the unit itself — then a second unit if
there is one, which is how $49 per seat / month is told apart from
$49 per seat.
| Unit class | Examples | Tokens | Share |
|---|---|---|---|
| month / year | /mo, per month, /yr, per annum | 715 | 68.2% |
| usage | per credit, per GB, per event, per API call, per document | 292 | 27.9% |
| seat without a period | per user, per seat — ambiguous, kept as unknown | 41 | 3.9% |
Annualisation is deliberately boring: month × 12, year × 1, seat-month × 12 × seats. The published figures assume five seats; one-seat and twenty-five-seat variants were computed too and move the median from $2,148 to $3,588, so the seat assumption is not what drives the result.
Usage prices are not annualised at all. Turning “$0.10 per credit” into an annual figure requires knowing how many credits a customer burns, which is exactly the thing a pricing page does not tell you. Those tokens are recorded with their metric and then excluded from every percentile rather than filled in with a guess.
Can you actually buy it without talking to anyone
Each page is classified from what it contains: a checkout provider in the page source, a signup link, trial and free-tier language, usage or pay-as-you-go wording, and sales-contact phrasing such as “book a demo” or “custom pricing”.
| Buying path | Pages | Share |
|---|---|---|
| Price listed, sales offered alongside | 195 | 40.3% |
| Self-serve, usage billing | 104 | 21.5% |
| Could not be classified | 92 | 19.0% |
| Sales call required | 42 | 8.7% |
| Self-serve, trial then checkout | 38 | 7.9% |
| Self-serve, other | 10 | 2.1% |
| Instant self-serve checkout | 3 | 0.6% |
What this method cannot see
- Revenue. These are list prices. Whatever discount your competitor actually grants is invisible here, and it is often the whole story.
- Causation. Every factor quoted on this site is an association in one snapshot. Companies that charge for usage differ from flat-rate companies in many ways this dataset cannot observe, and any of those could be doing the work.
- JavaScript-rendered pricing. Some pricing pages return almost no static text — one well-known vendor returns sixteen characters. Those companies are missing from the index, not priced at zero.
- Sample. The companies posted engineering roles on Hacker News, so the index leans toward developer-facing products and away from, say, field-service software. It is not a random sample of B2B SaaS and does not claim to be.
- Small segments. Some combinations contain fewer than ten companies. Where that happens the count is printed next to the figure, and below five companies no figure is shown at all.
If a number here about your company is wrong, it is because a parser read your page and got it wrong, not because anyone judged you. Email the address on the Impressum and it will be corrected or removed.