Pricing & Feature Change Monitor avatar

Pricing & Feature Change Monitor

Pricing

from $2.00 / 1,000 url checks

Go to Apify Store
Pricing & Feature Change Monitor

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

Frqnk Frederik

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

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

UseDo not use
Public pricing / feature marketing pagesLogin, cookies, authenticated dashboards
Structured change signal for schedulesHeavy SPA shells that need Playwright
Text diffs of plan/feature copyVisual/screenshot QA
Lightweight PPE monitoringFull 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.

EventPriceWhen
url-check$0.002Successful check (unchanged or changed)
change-detected$0.04Meaningful hash change
Baseline / error$0First-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)

  1. fetch-actor-details → frqnk/pricing-feature-change-monitor (or search-actors with keywords pricing feature change monitor)
  2. Tell user: PPE $0.002 / url-check, $0.04 / change-detected; estimate for N URLs; wait for go-ahead
  3. 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 }
}
  1. get-dataset-items with the returned datasetId
  2. Filter status === "changed"

call-actor returns run metadata and storage IDs, not dataset rows. Always fetch items.

Success criteria

CheckPass condition
RunStatus SUCCEEDED
DataDataset items loaded
Monitor loopSame stateStoreName across runs; act on changed only
CostUser approved estimate before first paid run; maxTotalChargeUsd set
FailureOn 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 changed rows 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

  1. Fetch each URL with Crawlee CheerioCrawler
  2. Normalize HTML (script/style stripped; optional contentSelector; optional noise stripping)
  3. Hash normalized text (SHA-256) and load the previous snapshot from a named Key-Value store
  4. Emit a dataset row and charge PPE only when the rules below say so
SituationDatasetPPE
First seen, emitBaseline: truebaseline rowNo charge
First seen, emitBaseline: falseNo row (state saved)No charge
Same hashunchangedurl-check
Different hashchanged + diff snippetsurl-check + change-detected
Fetch / process failureerrorNo 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
}
FieldDefaultNotes
urls(required)Public pricing / feature page URLs to monitor
contentSelectormainRegion hashed; falls back to body
profilepricingHeuristic for changeType / severity (pricing, feature, generic)
ignoreNoisetrueStrip dates / “Updated: …” / counters
minChangePercent1Influences severity banding
stateStoreNamepricing-feature-change-stateNamed KV for snapshots across runs — reuse across schedules
emitBaselinetrueEmit first-seen rows (never charged)
maxConcurrency5Parallel 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)

EventPriceWhen
url-check (primary)$0.002Successful fetch + compare (unchanged or changed)
change-detected$0.04Meaningful hash change
Baseline / error$0First-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