Know when a competitor changes a price, on the day they change it

Point PageDiff at the pricing page, then say in plain English what you want to hear about: a plan price changing, a new tier appearing, an included limit moving. PageDiff checks the page on your schedule and sends a summary naming the figure that moved and what it moved to. It renders the page the way a browser does first, so prices that are built with JavaScript after load are read like any other text.

Pricing pages are watched badly. Someone checks a competitor's page before a board meeting, or a supplier's before a renewal, and the rest of the time nobody looks. A price that moved in March gets noticed in June. The page itself is public and changes rarely, which makes it close to the ideal thing to monitor: quiet most of the time, and worth knowing about immediately when it isn't.

A PageDiff monitor watching OpenAI's API pricing page: a daily check on the desktop viewport, alerting by email, set to notify on all changes

What you can watch

  • SaaS plan tables The standard three-or-five column pricing page. Plan prices, the monthly and yearly figures, and the included limits beside them are all ordinary text once the page has rendered.
  • Usage and API pricing Per-token, per-request or per-hour rate cards. These carry the most figures and change the most often, which makes a condition naming what you care about worth writing.
  • Pages that build their prices with JavaScript Plenty of pricing pages fetch their figures from an API after the page loads, so a plain HTTP fetch sees an empty table. We render the page first. On one competitor we monitor, a no-JavaScript fetch returns no prices at all and our capture holds the full five-plan table.
  • New tiers and removed tiers A plan appearing or disappearing is usually more informative than a price moving, and it's the change most likely to go unannounced.
  • Included limits and quotas Seat counts, request caps and storage limits. A price that holds while the included quota halves is a price rise, and it's the kind that gets no announcement at all.
  • Free tier and trial terms Trial length, card requirements and what the free plan includes. These move quietly and they're often the first thing to change before a repricing.

What this won't cover

  • Prices that change with the visitor's location Our checks run from a cloud network and the exit region isn't pinned, so a page that sets currency or plan prices from the visitor's IP can be captured from different countries on consecutive checks. We've observed the exit region move between checks on a page we monitor. On a localising page that can surface as a price change that didn't happen, so treat this use case as reliable for pages that price the same for everyone and unreliable for pages that don't.
  • Prices behind a login, a quote form or a sales call Checks reach what's publicly reachable. Enterprise tiers listed as 'contact us' have nothing to read, and a price you only see after signing in is out of reach.
  • Telling you why a price changed We can tell you a figure went from $5.00 to $4.00 and show you the page before and after. Whether it's a promotion, a repricing or a response to you is your read to make.
  • Sites that refuse automated traffic Some pricing pages block datacenter traffic outright. That shows up immediately as a failed check when you first paste the URL, rather than as a monitor that quietly never fires.
  • A whole catalogue across many pages A monitor is scoped to a single URL, so a competitor who prices each product on its own page needs one per page. Add-on and enterprise pricing often live somewhere separate too, and those pages move independently of the main table.
  • Prices inside a PDF rate card PageDiff monitors web pages. We can watch the page linking to the PDF and tell you when the link or its date changes, but not what moved inside the file.

Scope checked against the product in September 2026. Things change. If anything here is out of date, tell us and we'll correct it.

A PageDiff change summary reading that pricing for GPT-5.6 Sol was reduced across all three token-rate categories, scored Significant, above the line-by-line diff showing input pricing change from $5.00 to $4.00, cached input from $0.50 to $0.40, and output from $30.00 to $20.00 per million tokens
A real price cut caught on OpenAI's pricing page: the summary, and the three rates that moved.

Why this page is worth watching and hard to watch

A pricing page is public, it’s the clearest single statement a company makes about its position, and it changes without announcement. Nobody sends an email when a tier goes up 20%.

The obvious approaches both fail slowly. A calendar reminder to check quarterly finds a change up to three months after it happened. A scraping script works until the page is redesigned, and modern pricing pages are redesigned often. Many of them also build their prices in the browser after the page loads, so a script fetching the HTML gets an empty table and reports nothing, which looks exactly like a page that hasn’t changed.

Setting one up

Three fields, about a minute.

  1. Paste the pricing page URL. You get a live capture straight away. If the page blocks automated traffic, or if the prices don’t render, you find out now rather than after a month of silence.
  2. Say what counts as a change. In plain English. “Notify me when a GPU price or its availability changes” is a real condition from a monitor we run. PageDiff reads the page and suggests conditions to start from. You can also leave it watching everything, which is how the OpenAI monitor above is set up, and let the significance score decide what reaches you.
  3. Choose the schedule and the channels. Daily is plenty for most pricing pages. Hourly suits fast-moving rate cards. Alerts go to email with up to five people cc’d, or to Slack, Discord, or a signed webhook.

What lands in your inbox

The figures, both sides. A summary from one of our own monitors reads that a model’s input rate went from $5.00 to $4.00 per 1M tokens, cached input from $0.50 to $0.40, and output from $30.00 to $20.00. That’s a sentence you can paste into a channel without opening anything.

Underneath it are the text and visual diffs and a stored snapshot of both versions, which is what lets you show what a competitor charged on a given date rather than relying on someone’s memory of it.

Two things decide whether a change reaches you, and they run in that order:

Page changed → does it match your watch condition? → is it significant enough? → alert.

With a condition set, a change has to clear both. With no condition, the significance score decides on its own. The OpenAI monitor above runs the second way, which is why a rate cut reached us without anyone having written a condition for it.

Pricing pages carry a lot of furniture: rotating banners, promotional strips, cookie notices, footers. On one GPU pricing page we watch, the company swapped its header promotion and changed its office address in the footer on the same day. The change was scored low, it didn’t match a condition about prices, and nothing was sent.

What three weeks of running this looked like

We validated this use case on three real pricing pages before writing the page, and kept the log.

An API pricing page. Caught a model’s rates being cut, with all three figures named to the cent, on a page that builds its content with JavaScript. This monitor runs with no watch condition at all, so the score alone decided that the change was worth sending. Also caught the page being rebuilt from one product’s pricing into another’s, and an interactive pricing calculator being removed from an FAQ section.

A GPU cloud rate card. Caught two new configurations being listed at $1.09/hr and $0.59/hr. Over the same nineteen days, no existing GPU’s price moved, which is worth saying plainly: this page proves we catch a new option appearing at a stated price, and it didn’t get the chance to prove we catch $2.89 becoming $2.69.

A competitor’s home page with the plan table on it. Reported nothing for nineteen days, because the company didn’t change its prices. The capture held all five plans with both billing periods throughout, on a page where fetching the HTML without JavaScript returns no prices at all.

Who gets the alert

A price change lands on different desks depending on who you are, and it’s worth deciding that before you set the monitor up rather than forwarding it around afterwards.

Product and founders. A competitor collapsing five tiers into three, or moving a feature up a plan, is a repositioning. The figure matters less than the shape of the change.

Sales. Any price you quote in a deal or a battlecard. Being corrected by a prospect on a competitor’s current pricing is a bad way to find out it moved.

Finance and procurement. Suppliers you renew with, watched ahead of the renewal rather than during it. This is the case where a quiet monitor pays for itself once.

Alerts go to email with up to five people cc’d, or to Slack, Discord, or a signed webhook, so the change can reach the desk that acts on it without a forwarding step.

Which pages are worth a monitor

  • Your two or three closest competitors’ pricing pages. The ones you’d want to know about the same day.
  • Suppliers you renew with, watched ahead of the renewal rather than during it.
  • The pricing page of anything you resell or build on, where their change becomes your margin.
  • Free tier and trial terms, which move before headline prices do.

On plans: Starter at $10/month gives you 10 monitors and hourly checks, which covers a competitive set and the suppliers behind it. Daily checks are enough for most pricing pages, so the reason to move to Pro at $30 is usually the count rather than the frequency. Every plan is fully featured; they differ only by scale.

Try it on the page you have in mind

Paste a public URL to see the live capture and the watch conditions PageDiff suggests. No signup needed.

See it work on any URL. No signup, no credit card.

Your preview appears here

Competitor & vendor pricing — FAQ

How do I track a competitor's pricing page for changes?

Add the pricing page URL as a monitor, then describe what you want to hear about in plain English, for example "notify me when a GPU price or its availability changes." You can also leave the condition off entirely and let the significance score decide, which is how we run our own OpenAI pricing monitor. Choose the check frequency and where alerts go: email, Slack, Discord, or a signed webhook. When a figure moves, PageDiff sends a summary naming what changed and what it changed to, with text and visual diffs and a stored snapshot of both versions.

Does this work if the prices are loaded by JavaScript?

Yes, and it's one of the reasons to use a monitor rather than a script. We render the page the way a browser does before comparing anything, so prices fetched from an API after load are read as ordinary text. On one competitor's page we watch, fetching the HTML without JavaScript returns no pricing at all while our stored capture holds all five plans with both the monthly and yearly figures.

How often do pricing pages actually change?

Less often than you'd hope, which is the argument for monitoring rather than checking. Over three weeks watching three pricing pages, we caught a model price cut on one, two new GPU configurations listed on another, and no change at all on the third. None of that would have been found by a page you remember to open.

Will I get alerts every time they change a banner?

That's what the significance score and the watch condition are for. On a GPU pricing page we monitor, the site swapped its header promotion and moved its office address in the footer. The change was scored low, didn't match a condition about prices, and no alert was sent. Marketing furniture on a pricing page is common and it's the main thing the condition exists to keep out.

Can it tell me the old price and the new price?

Yes. A summary from a monitor we run reads that a model's input rate went from $5.00 to $4.00 per 1M tokens, cached input from $0.50 to $0.40, and output from $30.00 to $20.00. You get the figures both sides, not just a note that something changed.

What about pages that show different prices in different countries?

Be careful with those. Our checks come from a cloud network without a pinned exit region, so a page that localises by IP can be captured from two countries on consecutive checks and report a change that never happened. If your target prices identically everywhere, this isn't a concern. If it doesn't, treat the alerts as prompts to look rather than as facts.

How much does it cost to watch a set of competitors?

Starter is $10/month for 10 monitors, enough for the pricing pages of several competitors plus the suppliers you renew with. Pro at $30 gives you 50 monitors and 15-minute checks; Business at $100 gives you 200 monitors, 5-minute checks and 365-day history. Every plan is fully featured and plans differ only by scale. There's a 14-day free trial on Starter, plus a free preview with no account at all.