Every price on PlanIntel is a record of what a service's official pricing page showed on a specific date. There are no estimates, no press release prices, and no prices inferred from third-party comparison sites. This is the story of how a price gets from a service's website into our database — and why that process matters more than it might seem.
Step 1: the collector fetches the official page
We run a set of automated collectors — one per service — that periodically visit the official pricing page for that service in each of our 20 tracked markets. "Official pricing page" means the page the service itself uses to sell subscriptions: netflix.com/signup/planform for Netflix, spotify.com/de/premium for Spotify Germany, and so on.
Collectors are not scrapers in the traditional sense. They do not crawl the entire site — they visit one specific page, in one specific market, on a known schedule. Netflix runs daily. Spotify runs weekly (prices change rarely and daily fetches would be wasteful). PlayStation Plus and Kindle Unlimited run monthly. ECB exchange rates are fetched daily for currency conversion.
For services that render prices with JavaScript (ChatGPT Plus, Crunchyroll), we use a headless browser rather than a plain HTTP request. This means we see exactly what a real visitor's browser would see, not just the server-rendered HTML.
Step 2: the parser extracts plan data
Once the page HTML is captured, a parser extracts the relevant data: plan name, price, billing period (monthly, annual), and currency. Parsers are hand-written per service — there's no generic approach that works reliably across all of them, because pricing pages don't follow a common structure.
Each parser goes through a sanity check: is the extracted price within the plausible range for this service in this market? For Netflix Germany, that range is currently €3–€30. If a parser returns €299, that's almost certainly a misparse. Observations outside the sanity band are flagged for review rather than published automatically.
Step 3: change detection
After parsing, the observation is compared against the most recently published price for that plan in that market. Three outcomes are possible:
- No change: the price matches the last published observation. The timestamp is updated but no price event is recorded. The "last verified" date on the market page moves forward.
- Price change: the price differs from the last published price. A change event is recorded with both the old price and the new price. The change appears in the changes feed and triggers any subscribed alerts.
- New plan: a plan that wasn't in the previous observation appears. It's recorded as a new entry.
Step 4: review and publish
Not all observations are published automatically. The sanity-band check handles obvious misparsing, but some edge cases require a human look: a service might show a promotional price during a limited-time offer, or a temporary error page might render a placeholder price. Our review queue surfaces these for a check before they go live.
For clean observations that pass all automated checks, publication happens within minutes of the fetch completing. There's no editorial layer between the parser output and the price shown on the market page.
What we don't do
We do not record prices from press releases or news articles. If a service announces a price change in the press but hasn't yet updated its pricing page, we don't record the change until the page itself changes. This matters because announced prices and published prices sometimes diverge.
We do not record promotional prices or trial offers. If Netflix runs a three-month promotion at a reduced rate, that doesn't enter our index. We record only the standard price shown to a new subscriber with no promotional code applied.
We do not use affiliate links or promotional relationships with any service we track. Our only interest in their prices is accuracy.
Why append-only history matters
The append-only constraint is the most important architectural decision in PlanIntel. When a price changes, the old price is not deleted or updated — it stays in the record with its original timestamp. This means the history chart on any market page is a true log: every price that service charged in that market, in order, with the exact dates those prices were observed.
This is different from how most comparison sites work. Most comparison sites show the current price; some show the previous price. Very few show the full history with reliable dates. The append-only constraint means our history can be cited — a researcher or journalist can point to a specific date in our record and say "on this date, Netflix Standard in Germany cost €13.49." That's a verifiable, specific claim, not an estimate.
If you want to explore the price history for any service in any of our live markets, start with the Germany market page or select a different market from the header. Every history chart uses real observations from our collectors — there are no interpolated values.

