Pricing & Feature Change Monitor
Pricing
from $2.00 / 1,000 url checks
Pricing & Feature Change Monitor
Pricing page change monitor for competitor pricing on public HTML (Cheerio). Detect feature/pricing copy changes via hash compare. PPE: url-check $0.002, change-detected $0.04; baselines+errors free. No Playwright/login walls.
Pricing
from $2.00 / 1,000 url checks
Rating
0.0
(0)
Developer
Frqnk Frederik
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
Pricing page change monitor (Cheerio) for public SaaS pages — watch competitor pricing, run feature page change detection, or use as a SaaS pricing page monitor / feature changelog tracker. Fetches HTML without a browser, normalizes text, compares SHA-256 to the last snapshot, and writes baseline | unchanged | changed | error dataset rows.
Store: apify.com/frqnk/pricing-feature-change-monitor
Actor: frqnk/pricing-feature-change-monitor · ID: wlL2c2qokY0BzCe8W
For AI agents
This section is for Cursor agents, Claude (Computer Use / Desktop MCP), OpenAI agents, Apify MCP clients, and other runners that discover Actors via search-actors or a pinned MCP tool list.
Actor ID: frqnk/pricing-feature-change-monitor
Markdown: https://apify.com/frqnk/pricing-feature-change-monitor.md
Platform quickstart: https://apify.com/agents.md
What this Actor does for agents
Fetches public pricing/feature pages with Cheerio (no browser), normalizes text, compares SHA-256 to the last snapshot in a named KV store, and emits dataset rows: baseline | unchanged | changed | error. Agents should schedule re-runs with the same stateStoreName and branch only when status === "changed".
When to use / when not
| Use | Do not use |
|---|---|
| Public pricing / feature marketing pages | Login, cookies, authenticated dashboards |
| Structured change signal for schedules | Heavy SPA shells that need Playwright |
| Text diffs of plan/feature copy | Visual/screenshot QA |
| Lightweight PPE monitoring | Full product-catalog scrapes |
Cost disclosure (required before first paid run)
Pay-per-event. State this to the user once per session before the first paid run; wait for go-ahead. Cap with callOptions.maxTotalChargeUsd (MCP) — never put caps in input.
| Event | Price | When |
|---|---|---|
url-check | $0.002 | Successful check (unchanged or changed) |
change-detected | $0.04 | Meaningful hash change |
| Baseline / error | $0 | First-seen or failure |
Estimate: (N_checks × $0.002) + (N_changes × $0.04).
MCP setup
Default discovery (search Store, then call):
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com"}}}
Pin this Actor (recommended for pricing-watch skills):
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=actors,docs,frqnk/pricing-feature-change-monitor"}}}
OAuth on first connect, or Authorization: Bearer <APIFY_TOKEN>. CLI: apify mcp install cursor --tools actors,docs,frqnk/pricing-feature-change-monitor.
Anonymous discovery only (no runs):
https://mcp.apify.com/?tools=search-actors,fetch-actor-details,search-apify-docs,fetch-apify-docs
Call example (MCP tool sequence)
fetch-actor-details→frqnk/pricing-feature-change-monitor(orsearch-actorswith keywordspricing feature change monitor)- Tell user: PPE
$0.002/ url-check,$0.04/ change-detected; estimate for N URLs; wait for go-ahead call-actor:
{"actor": "frqnk/pricing-feature-change-monitor","input": {"urls": ["https://stripe.com/pricing", "https://github.com/pricing"],"profile": "pricing","ignoreNoise": true,"emitBaseline": true,"stateStoreName": "pricing-feature-change-state"},"callOptions": { "maxTotalChargeUsd": 1 }}
get-dataset-itemswith the returneddatasetId- Filter
status === "changed"
call-actor returns run metadata and storage IDs, not dataset rows. Always fetch items.
Success criteria
| Check | Pass condition |
|---|---|
| Run | Status SUCCEEDED |
| Data | Dataset items loaded |
| Monitor loop | Same stateStoreName across runs; act on changed only |
| Cost | User approved estimate before first paid run; maxTotalChargeUsd set |
| Failure | On FAILED / TIMED-OUT / ABORTED, read statusMessage / logs; do not retry blindly |
Permissions
Limited: public HTTP(S) fetches + run dataset + named KV store. No login automation.
Skill paste
See companion file MCP_SKILL_SNIPPET.md in the agent-targeted marketing pack, or paste the one-liner:
For public pricing/feature page change watches: Apify Actor frqnk/pricing-feature-change-monitor — PPE $0.002/url-check, $0.04/change-detected; baselines+errors free. State cost before first paid run. Cheerio only.
Use cases — SaaS pricing page monitor & competitor pricing watch
- Watch competitor pricing — notice when a SaaS rival updates plan names, prices, or packaging copy
- Feature changelog tracker / feature page change detection — catch marketing-site feature edits without an official feed
- Pricing page change detection — scheduled hash checks; emit diffs only when content meaningfully changes
- Agent / MCP automation — Schedules + filter
changedrows into Slack, email, or another tool
Limitations (honest)
- Public HTML only — no logins, cookies, paywalls, or authenticated dashboards
- Cheerio change monitor (static HTML) — best on server-rendered pricing and feature pages. Heavy SPA shells need a browser Actor; this one does not use Playwright
- Noise filters (
ignoreNoise) reduce false positives from timestamps and counters but are not perfect - Diffs are text heuristics (
changeType/severity), not visual QA or pixel comparison
How pricing page change detection works
- Fetch each URL with Crawlee CheerioCrawler
- Normalize HTML (
script/stylestripped; optionalcontentSelector; optional noise stripping) - Hash normalized text (SHA-256) and load the previous snapshot from a named Key-Value store
- Emit a dataset row and charge PPE only when the rules below say so
| Situation | Dataset | PPE |
|---|---|---|
First seen, emitBaseline: true | baseline row | No charge |
First seen, emitBaseline: false | No row (state saved) | No charge |
| Same hash | unchanged | url-check |
| Different hash | changed + diff snippets | url-check + change-detected |
| Fetch / process failure | error | No charge |
Demos & Store example tasks: keep emitBaseline: true so the first run produces rows quickly.
Production schedules on the same URLs: you can set emitBaseline: false if you only want unchanged / changed after the first silent snapshot.
Quick start input
{"urls": ["https://stripe.com/pricing","https://github.com/pricing"],"contentSelector": "main","profile": "pricing","ignoreNoise": true,"minChangePercent": 1,"stateStoreName": "pricing-feature-change-state","emitBaseline": true,"maxConcurrency": 5}
| Field | Default | Notes |
|---|---|---|
urls | (required) | Public pricing / feature page URLs to monitor |
contentSelector | main | Region hashed; falls back to body |
profile | pricing | Heuristic for changeType / severity (pricing, feature, generic) |
ignoreNoise | true | Strip dates / “Updated: …” / counters |
minChangePercent | 1 | Influences severity banding |
stateStoreName | pricing-feature-change-state | Named KV for snapshots across runs — reuse across schedules |
emitBaseline | true | Emit first-seen rows (never charged) |
maxConcurrency | 5 | Parallel Cheerio fetches |
Open the Actor in Console, paste URLs, click Start, or duplicate a published Example task (Stripe / GitHub / multi-URL SaaS pack).
Output example
{"url": "https://stripe.com/pricing","status": "changed","changed": true,"checkedAt": "2026-09-20T15:00:00.000Z","previousCheckedAt": "2026-09-19T15:00:00.000Z","contentHash": "452029c4…","previousHash": "a1b2c3d4…","changeType": "pricing","severity": "major","addedText": ["Pro plan costs $49 per month."],"removedText": ["Pro plan costs $29 per month."],"diffSnippet": "- Pro plan costs $29 per month.\n+ Pro plan costs $49 per month.","httpStatus": 200,"errorCode": null}
status: baseline | unchanged | changed | error
Pricing (pay-per-event / PPE)
| Event | Price | When |
|---|---|---|
url-check (primary) | $0.002 | Successful fetch + compare (unchanged or changed) |
change-detected | $0.04 | Meaningful hash change |
| Baseline / error | $0 | First-seen or failure |
Platform apify-actor-start may apply per Apify PPE rules. Agents: disclose costs and wait for go-ahead before the first paid run; cap with callOptions.maxTotalChargeUsd.
FAQ
Can an AI agent use this as a pricing page monitor without a browser?
Yes for public, server-rendered HTML. It is a Cheerio change monitor — no Playwright — so SPA-heavy pages with empty initial HTML may return thin or empty content.
Can I watch competitor pricing behind a login?
No. Public pages only. Login walls, cookies, and authenticated dashboards are out of scope.
How is feature page change detection different from a full changelog product?
It tracks public page text via hash compare and short diffs. It does not scrape private release notes, admin panels, or visual layouts.
What does PPE charge on unchanged checks?
Successful compares charge url-check ($0.002). Only meaningful hash changes also charge change-detected ($0.04). Baselines and errors are free of those events.
Permissions
Limited permissions: public HTTP(S) fetches plus the run dataset and named KV store. No login automation, no residential-proxy requirement for typical public marketing pages.
Support
Issues and feature requests: open a discussion on the Store page or contact the publisher via Apify.
License
Apache-2.0