Website Change Tracker - Pricing History
Pricing
from $7.00 / 1,000 content changes
Website Change Tracker - Pricing History
When did a competitor last raise prices, rename a plan or swap analytics? The Internet Archive knows but only reports byte changes — measured on one page, 62% of those changed nothing a person would read. This extracts prices, headings and third-party scripts and diffs those instead.
Pricing
from $7.00 / 1,000 content changes
Rating
0.0
(0)
Developer
Datalayer
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Website Change Tracker — Pricing & Copy History
When did your competitor last raise prices? Rename a plan? Swap analytics providers? The Internet Archive has the answer and gives it away free. The problem is that the archive cannot tell you when a page changed — only when its bytes differed.
The problem with archive diffs
The archive stores a content digest per capture, and collapse=digest drops
adjacent duplicates. It is tempting to call what survives "the times this page
changed." Measured on stripe.com/pricing, January 2024 alone:
| Byte-distinct captures | 9 |
| Consecutive comparisons | 8 |
| Comparisons where nothing readable changed | 5 (62%) |
| Real content changes | 3 |
A rotated CSP nonce, a rebuilt asset filename, a new build hash or a fresh session cookie all change the digest. None of them change the page.
This Actor extracts what a person would call the content — title, headings,
prices, rates, third-party scripts — and diffs that. Over the same two and
a half years, stripe.com/pricing has 588 byte-distinct captures in the
archive. Sampled quarterly, 11 comparisons, every one a real change.
What it finds
Price changes, with before and after:
2026-04-01 prices -$249.00, $349.00 +$0.02, $0.03, $0.05, $0.072026-08-01 prices -$0.02, $0.07 +$100,000.00
Messaging shifts — when positioning moved:
2025-01-01 title "Pricing & Fees | Stripe Official Site" -> "Pricing & Fees"
Tech-stack switches — the set of third-party script hosts, capture by capture. When a competitor drops Segment for Amplitude, or adds a support-chat vendor, it shows up here. Usually a bigger signal than the copy edit filed the same day.
New and retired plans — H2 headings on a pricing page are the plan names.
headingsAdded catches a tier launching; headingsRemoved catches one being
quietly killed.
Who uses this
- Competitive intelligence — a dated price history for every competitor, without having monitored them at the time
- Sales and RevOps — "they raised prices in April" is a usable talking point
- Pricing teams — what the market actually did, not what analysts said
- Due diligence — how often a company repositioned, and when
- SEO — when a page's title and headings were rewritten, next to your rank history
Input
{"urls": ["stripe.com/pricing", "vercel.com/pricing"],"startDate": "2024-01-01","cadence": "monthly","watchPricesOnly": true}
| Field | Default | Notes |
|---|---|---|
urls | ["stripe.com/pricing"] | Bare domains or full URLs both work. |
startDate | 2024-01-01 | YYYY-MM-DD. |
endDate | — | YYYY-MM-DD. |
cadence | monthly | all when you need the exact day a price moved. |
maxSnapshotsPerUrl | 40 | Ceiling per page. |
changesOnly | true | Off shows the comparisons that prove nothing moved. |
watchPricesOnly | false | Narrow to currency changes only. |
includeSnapshots | false | Emit the extracted content of every capture. |
includeText | false | Attach visible page text to snapshot rows. |
Output
change — one row per real change:
{"type": "change","url": "stripe.com/pricing","changedBetween": "2026-01-01T14:10:14.000Z -> 2026-04-01T20:32:16.000Z","changeTypes": ["pricing", "rates", "messaging"],"summary": "prices -$249.00, $349.00 +$0.02, $0.03; rates +3.5%; +8 heading(s); -9 heading(s)","priceChanged": true,"pricesRemoved": ["$249.00", "$349.00"],"pricesAdded": ["$0.02", "$0.03", "$0.05", "$0.07"],"previousArchiveUrl": "https://web.archive.org/web/.../https://stripe.com/pricing","archiveUrl": "https://web.archive.org/web/.../https://stripe.com/pricing"}
Both archive links are on the row, so any finding can be eyeballed in one click.
url_summary — how much of the archive's churn was noise:
{ "type": "url_summary", "distinctCapturesInArchive": 588,"snapshotsCompared": 12, "contentChanges": 11, "noiseRatio": 0 }
snapshot — the extracted content of each capture, when requested.
Reliability
- Public, unauthenticated Internet Archive endpoints. Nothing is scraped from the live site, so no target is ever touched.
- Captures are fetched with the
id_suffix, which returns the original archived bytes with no Wayback rewriting and no injected banner. Without it you extract the archive's markup instead of the site's. - Those original bytes are frequently still gzip-compressed. Verified live: a
Stripe capture arrives beginning
1f 8b. Decompression is by magic-byte sniffing, not by trusting a header. - The archive returns 503 under load more than most APIs and recovers in seconds — measured live, two empty responses then a clean 200. Retries use exponential backoff.
- One unreadable capture never fails the page; it lands in
RUN_SUMMARY.
Limits
- Only what the archive captured. Pages behind a login, geo-gated pages and robots-excluded pages have no history to read.
- Prices are read from the rendered HTML. A page that builds its pricing table in JavaScript after load will have been captured without it.
- Currency amounts and percentages are reported separately on purpose. A
marketing page carries statistics ("326% growth") beside its real rates, so
only currency movement is labelled
pricing. - Sampling picks the first capture in each period. Two changes inside one
month at monthly cadence read as one. Use
allfor exact dates. - Amounts inside
<script>and<style>blocks are excluded — a JS string literal is not a published price.


