Methodology
Where prices come from
Plan prices, specs and stock status are taken from official provider pages and official price APIs only. Each plan row records the exact source_url and the checked_at date. Third-party directories (e.g. FindHost, CC BY 4.0) are used only for provider-level metadata such as headquarters country, regions and official URLs — never for prices.
Every check appends a row to an append-only observation log (data/price_observations.json): observations are never edited or deleted, so historical lows and medians are reproducible from git alone. Rows that fail verification go to a review queue ( data/review-queue.json, generated by the build-time validator) and are flagged for human review — they are never silently auto-corrected.
Normalization math
The native price is the truth: the amount, currency and billing period exactly as the provider publishes them. For sorting and cross-plan comparison we also derive a monthly equivalent:
monthly_equivalent = native_price / billing_period_months × fx_rate(currency → USD)
Worked example — RackNerd 1 GB KVM VPS at $21.99/year:
$21.99 / 12 months × 1.00 (USD) = $1.8325/mo → displayed as "≈ $1.83/mo"
Any normalized figure carries the "≈" marker. We never display a native term price as a plain "/mo" figure — $21.99/year · ≈ $1.83/mo, never "$21.99/mo" as the label for a yearly price.
Renewal & due-today semantics
Due today is what a buyer actually pays at checkout for the first term. It is recorded data, never computed: a $1.99/mo plan billed annually records due today = $23.88 (12 × 1.99), while a $21.99/year plan records due today = $21.99 — for terms of a year or longer the advertised price IS the upfront amount. Where the source does not state an amount, due today renders as Unknown.
Renewal is the price after the first term, with its own currency and billing period (renewal_price, renewal_currency,
renewal_period). When a renewal is known we also compute the renewal increase against the advertised monthly equivalent — e.g. $9.99/mo intro renewing at $16.99/mo is +70%. When the renewal is not published the row says Renewal: Unknown; it is never assumed equal to the first term.
Verification levels
Every price carries an evidence tier. A promo-page capture must never be labelled checkout verified, so the ladder is strict and the glyph is always shown next to the label:
- 1. 🟢 Checkout verified
- A purchase was carried through to the final checkout step and the charged amount (including due-today and setup fees) was recorded. Strongest tier.
- 2. 🔵 Official store verified
- The price was captured from the provider own ordering/store system (configurators, cart APIs) while signed out.
- 3. 🔵 Official page verified
- The price was captured from an official public pricing page or official price API. All current pilot rows sit at this tier.
- 4. 🔵 Official promo captured
- Captured from an official promotion or campaign page. Explicitly NOT checkout verified: promo pages advertise first-term prices that can expire without notice.
- 5. 🟡 Community reported
- Reported by users or third parties. Never promoted above an official capture; shown only when it is the only evidence that exists, and labelled as such.
- 6. 🟡 Historical
- A price that was verified when captured but whose page has since changed or disappeared. Kept for history, never presented as current.
- 7. ⚪ Unknown
- No evidence tier could be established. The row states Unknown and is excluded from rankings that require a verified price.
All rows in the current pilot were captured from official pricing pages and APIs (🔵 Official page verified); none has been through checkout yet.
What Unknown means
Unknown > Wrong. A field the official source does not publish renders as the literal string "Unknown" — never an empty cell, never a placeholder character, never a guess dressed up as data. When a third-party source conflicts with an official page, the row is not published until a fresh official-source check resolves it. Unknown fields are also excluded from the deal-score components they would contaminate.
How the deal score is computed
The deal score is a transparent weighted sum of five components, each normalized to 0–1. Vendor banners such as "70% OFF" are ignored for scoring — only recorded observations count.
deal_score = 0.40 × discount_vs_median
+ 0.25 × historical_low_proximity
+ 0.15 × renewal_penalty
+ 0.10 × spec_value
+ 0.10 × freshness - discount_vs_median (0.40)
- (median − current) / median, clamped to [0, 1]. Rewards a current price below the recent median of its own observations.
- historical_low_proximity (0.25)
- 1 − (current − low) / (high − low); 1 = at the historical low, 0 = at the high. When high = low (single observation) the component scores 0.5.
- renewal_penalty (0.15)
- 1 − renewal increase fraction, clamped to [0, 1]: a renewal equal to the first term scores 1, a 100% renewal jump scores 0, an unknown renewal scores 0.5.
- spec_value (0.10)
- Rank of the plan's USD price per GB of RAM across the whole dataset (1 = cheapest per GB). Plans with unknown RAM score 0 on this component.
- freshness (0.10)
- The freshness tier of the row's latest check (see below): fresh = 1.0, recent = 0.8, needs review = 0.5, stale = 0.2.
While the dataset holds a single observation per plan, most components score neutral and the score hovers around its baseline. That is honest: with one data point there is no deal yet — the structure exists so history improves the signal as re-checks accumulate.
FX snapshot policy
USD equivalents use approximate exchange rates from a manually refreshed snapshot (data/fx_rates.json, dated 2026-09-10). Rates exist only for sorting and cross-currency comparison — the native currency amount on every row is always the authoritative price, and every converted figure is marked "≈". A stale snapshot is acceptable for ordering; it is never presented as a quote.
Freshness tiers
A price capture is a snapshot of a page that can change at any time, so every verified row carries a mechanical freshness badge computed from its last check date:
- fresh — ≤ 1 day
- checked today or yesterday; score 1.0
- recent — ≤ 7 days
- checked this week; score 0.8
- needs review — 8–30 days
- due for a re-check; score 0.5
- stale — > 30 days
- treat every figure as historical; score 0.2
Promo-priced rows display the stricter framing: a discounted price on a stale page is the least trustworthy combination there is, so the badge never reads better than the evidence deserves.
Affiliate policy
Affiliate links are not currently enabled. If that changes, we will update the disclosure. The deal score, ordering and verification tiers above are computed from recorded data only, and we do not accept payment for placement.
Build-time, versioned data
The entire dataset lives in the public GitHub repository as JSON, validated by a zod schema on every build. The site is fully static: if the build passes, the numbers you see are exactly the numbers in the repo at that commit.