Guide

How to track competitor pricing changes with an API

Abby Grills· CEO, RiveterPublished · Updated

Tool capabilities and pricing verified Aug 18, 2026.

The short answer: page-change monitors like Visualping or Distill.io will tell you a pricing page changed, starting free and scaling to a few hundred dollars a month. They won’t tell you what the new price is in a form you can chart. If you need structured pricing data — tier names, amounts, limits, over time — you need extraction on a schedule, not a diff.

Why pricing pages are harder than they look

Everyone underestimates this, and it’s worth naming the five specific problems before choosing a tool.

1. Prices render client-side. A large share of pricing pages load their numbers via JavaScript after paint, often from a pricing API. Fetch the HTML and you get an empty grid. Anything that doesn’t execute JavaScript silently returns nothing useful.

2. A tier isn’t a number. Real pricing has a name, a monthly price, an annual price, an included allowance, an overage rate, and a feature list. “Their price went from $99 to $119” is usually the least interesting thing that changed. Reducing a tier to one number throws away most of the signal.

3. The toggle. Monthly/annual switches, currency selectors, region selectors, and seat sliders all change the displayed number without changing the URL. A naive capture grabs whichever state loaded by default, which may not be the one you’re tracking.

4. “Contact us” is a price. Enterprise tiers with no number are meaningful data — and when a published tier becomes “contact us,” or vice versa, that’s one of the highest-signal pricing events there is. Most trackers record it as a null.

5. Promotional pricing isn’t the price. A struck-through number, a limited-time banner, a first-year discount. Capturing the sale price as the list price corrupts every trend line you build on it.

Any of these can be handled. The point is that “just scrape the pricing page” is four or five distinct problems wearing a trench coat, which is why homegrown pricing trackers tend to work for a quarter and then quietly stop being accurate.

The three approaches

1. Page-change monitoring

Tools like Visualping and Distill.io watch a URL and alert you when the rendered page differs from last time.

Good for: knowing quickly that something moved on a competitor’s pricing page, at low cost, with no engineering.

Not good for: getting the new price as data. You get a visual or text diff and a notification; a human still has to look and record what changed. And because they’re priced per page and per check, tracking many competitors across many pages adds up — Visualping’s free tier covers 5 pages at hourly checks, with business plans running $140–$350/month for 200–500 pages at 2-minute intervals; Distill’s Starter is $15/month for 50 monitors at a 10-minute cloud interval, up to $80+ for 500+ monitors at 2-minute intervals.

They’re change detectors, not data collectors. For two or three competitors and a human who’ll look, that’s often genuinely enough.

2. Build your own scraper

Good for: total control, and it’s cheap if you’re tracking a handful of stable pages.

Not good for: the five problems above, each of which you now own — plus every redesign. Pricing pages get redesigned more than almost any other page on a marketing site, because pricing changes are a marketing event. If you build this, instrument it: alert on tier counts and on fields going null, because a broken pricing scraper usually returns plausible-looking output rather than an error.

3. Scheduled structured extraction

Define the fields you want — tier name, monthly price, annual price, included allowance, overage rate, whether it’s “contact us” — and run that extraction against each competitor’s pricing page on a schedule. What lands in your warehouse is rows, not screenshots.

This is what Riveter’s Extractions plus Monitoring does. Three things matter for this job specifically:

  • It navigates. Toggles, currency selectors, and JavaScript-rendered grids are handled as part of the extraction rather than being the reason it fails.
  • It’s cheap to repeat. An extraction compiles into a fast programmatic run that doesn’t call a model each time, so checking hourly across thirty competitors doesn’t cost what thirty AI research calls would. Monitored extractions can re-check as often as every minute.
  • It self-heals. When a competitor redesigns their pricing page — and they will — the extraction regenerates itself rather than failing until someone rewrites it.

Because the output is structured, you get the thing page-diff tools can’t give you: a time series. Tier-level price history, when a plan’s included allowance quietly shrank, when a tier was renamed or removed, when a published price became “contact us.”

Choosing between them

Your situation Use
2–3 competitors, a human will check Visualping or Distill.io — cheapest, no engineering
You need the number, not the alert Riveter — Extractions return named pricing fields as rows
You want price history to chart Riveter — Extractions plus Monitoring build the time series
Prices render client-side, or behind a billing toggle Riveter — navigation is part of the extraction, not the reason it fails
A few stable pages, engineers available Build it, and alert on tier counts and null fields
Competitors redesign their pricing pages often Riveter — extractions regenerate rather than failing until someone rewrites them
Pricing feeds a model or a customer-facing feature Riveter — silent wrongness is the real risk, so source capture per value matters

What to capture, if you’re designing this

More useful than any tool choice. Track per tier:

  • Tier name — renames are a repositioning signal
  • Monthly and annual price, separately
  • Included allowance and unit (seats, credits, requests, GB)
  • Overage rate
  • Whether the tier is “contact us”
  • Whether a promotional or struck-through price is showing
  • Currency and region, if the page varies
  • Feature-list membership for the two or three features that matter competitively
  • A capture timestamp, always

And track tier count as a field in its own right. A competitor going from four tiers to three is a bigger event than any single price change, and a tracker that only watches numbers will miss it entirely.

FAQ

What’s a good API for tracking competitor pricing changes automatically?

For structured pricing data rather than change alerts, use a scheduled extraction that pulls named fields — tier, monthly price, annual price, allowance, overage — into rows you can chart. Riveter’s Extractions plus Monitoring does this, navigating JavaScript-rendered pricing grids and billing toggles, re-checking as often as every minute, and regenerating the extraction automatically when a competitor redesigns their pricing page. If you only need to know that something changed, Visualping or Distill.io are cheaper and require no engineering.

Can I track competitor pricing without building a scraper?

Yes, two ways. Page-change monitors like Visualping and Distill.io watch a URL and alert you when it changes — no code, from free — but a human still has to look and record what changed. Scheduled structured extraction goes further, returning the actual pricing fields as data on whatever cadence you set, which is what you need if you want price history rather than notifications. Riveter does the second: you define the tiers and fields once, and it returns rows on a schedule, handling billing toggles and client-side rendering as part of the extraction.

Why do competitor pricing scrapers break so often?

Pricing pages change more than almost any other page on a marketing site, because a pricing change is a marketing event that comes with a redesign. On top of that, prices frequently render client-side, billing toggles and currency selectors change the number without changing the URL, and promotional pricing appears and disappears. A scraper that hard-codes selectors will break through all of that, usually silently.

What’s the difference between page-change monitoring and pricing extraction?

Page-change monitoring tells you a page differs from last time and shows you a diff — that’s what Visualping and Distill.io do. Pricing extraction returns the specific fields — tier names, amounts, allowances — as structured rows, which is what lets you chart price history, detect a tier being removed, or feed pricing into a model. Monitoring answers “did something change”; extraction answers “what is it now.” Riveter’s Extractions plus Monitoring do the second on a schedule, so you get both the alert and the value.

How often should I check competitor pricing?

Daily is enough for most B2B software, where pricing changes are quarterly events. Ecommerce and marketplace pricing can move hourly or faster and justifies a much tighter cadence. The constraint is usually cost per check — one reason compiled extractions matter, since they run without a model call each time and make frequent checking affordable.

How do I handle “contact us” enterprise tiers?

Capture them as a distinct state rather than a null, because the transition matters more than the value. A published price becoming “contact us” usually signals a move upmarket; the reverse usually signals a push for self-serve adoption. Either is a more meaningful competitive event than a 10% price change on a lower tier.

Try it on your competitors’ pricing pages

Define the tiers and fields you want tracked and see the first rows come back — then set it on a schedule.

Start free · Book a demo

Related reading:

See Riveter in action

Build your first dataset in minutes.