Competitor Monitor - SaaS Pricing, Changelog & Messaging avatar

Competitor Monitor - SaaS Pricing, Changelog & Messaging

Pricing

from $10.00 / 1,000 page checkeds

Go to Apify Store
Competitor Monitor - SaaS Pricing, Changelog & Messaging

Competitor Monitor - SaaS Pricing, Changelog & Messaging

Know the hour a competitor changes price. $0.01 per page checked, and the change and signal events only fire when there is news. Watches rival pricing pages, changelogs, positioning and integrations, returning only the delta as typed signals with Slack or webhook alerts.

Pricing

from $10.00 / 1,000 page checkeds

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Share

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track competitor SaaS pricing pages, changelogs, homepage positioning, and integrations on a schedule — and get back only what changed, as typed competitive-intelligence signals, with optional Slack/Discord/webhook alerts and a weekly AI brief.

$0.01 per page checked, plus $0.015 per page that changed, $0.035 per signal emitted, $0.30 per brief, and $0.05 per GB of run memory each time a run starts. This Actor needs at least 2 GB, so a run start costs $0.10 at the minimum and $0.20 at the 4 GB scheduled runs usually get. On a run where nothing moved, the change and signal events never fire — the brief is the one event that is produced every run you leave it switched on for.

What you get

  • Diffs, not dumps. It compares each page against the previous run and returns only the delta — no more eyeballing pricing tables to spot what moved.
  • Typed signals. Changes come back classified (price_change, plan_added, plan_removed, positioning_shift, cta_change, changelog_entry, new_integration, feature_moved) so they drop straight into a dashboard, Notion, or a standup.
  • Cheap to run on a schedule. With only new since last run enabled, a quiet run costs the page checks plus the run start and nothing else — change and signal events only fire when there's actually news.
  • "Why it matters" built in. Optional AI signals add a one-line read on each change ("moved the lowest paid tier $19 → $29 and dropped free — repositioning upmarket").
  • Alerts where you work. Push a compact summary to Slack, Discord, or any webhook the moment something changes.
  • MCP-ready. Callable as a tool from Claude, Cursor, or ChatGPT over the hosted Apify MCP server.

What it monitors

Page typeWhat it tracks
PricingTiers, prices, CTAs, plan features; added/removed plans and add-ons.
ChangelogNewly shipped release entries and updates.
PositioningHomepage hero headline, value proposition, and primary CTA.
IntegrationsPartners/connectors added or dropped (scans docs + changelog).

It runs on a schedule, fetches the page types you select per competitor, compares against the last run, and emits one structured row per target it checked, carrying the signals it found. When generateAiSignals is on, a small LLM sharpens the analysis on changed pages only. When weeklyBrief is on, all moves this run are rolled into one readable digest.

Input

FieldTypeDescription
competitors (required)array of objectsEach competitor: name, plus the URLs to watch — pricingUrl, changelogUrl, homepageUrl, docsUrl. Leave a URL empty to skip that page type for that competitor.
watcharrayPage types to track: pricing, changelog, positioning, integrations. Defaults to all four. positioning reads homepageUrl; integrations reads docsUrl.
onlyNewSinceLastRunbooleanEmit rows only for targets that are new, changed, or failed, instead of a full re-dump each run. Default true — this is what keeps scheduled runs small.
generateAiSignalsbooleanUse a small LLM (Claude Haiku) to sharpen "why it matters" on changed pages only. Needs your own ANTHROPIC_API_KEY, which Anthropic bills to you directly; falls back to deterministic rules if absent. Default true.
weeklyBriefbooleanProduce a Markdown/HTML brief of every move this run, stored in the Key-Value Store and linked in the dataset. Default true. One brief is produced — and billed at $0.30 — on every run this is on, so switch it off on the days you don't want one.
webhookUrlstringSlack, Discord, or generic webhook for a compact summary of new signals. Slack/Discord formatting auto-detected.
proxyConfigurationobjectProxy used to fetch pages. Apify Proxy recommended to avoid blocks and geo-pricing skew.

Example input

{
"competitors": [
{
"name": "Acme",
"pricingUrl": "https://acme.com/pricing",
"changelogUrl": "https://acme.com/changelog",
"homepageUrl": "https://acme.com",
"docsUrl": ""
},
{
"name": "Globex",
"pricingUrl": "https://globex.com/pricing",
"changelogUrl": "",
"homepageUrl": "https://globex.com",
"docsUrl": ""
}
],
"watch": ["pricing", "changelog", "positioning", "integrations"],
"onlyNewSinceLastRun": true,
"generateAiSignals": true,
"weeklyBrief": true,
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"proxyConfiguration": { "useApifyProxy": true }
}

Output

Results go to the default dataset, one row per target checked, with the signals and the field-level change records nested inside it. A target whose page did not move produces no row at all when onlyNewSinceLastRun is on. A row looks like this:

{
"target_key": "acme::pricing",
"competitor": "Acme",
"page_type": "pricing",
"url": "https://acme.com/pricing",
"status": "changed",
"sync_status": "ok",
"signals": [
{
"competitor": "Acme",
"signal_type": "price_change",
"detail": "Plus: $19 → $29 per user/mo",
"before": "$19",
"after": "$29",
"why_it_matters": "Acme raised its lowest paid tier 53% and dropped the free plan — repositioning upmarket.",
"page_type": "pricing",
"url": "https://acme.com/pricing",
"detected_at": "2026-06-21T09:00:00+00:00",
"is_new": false,
"is_changed": true
}
],
"change_records": [
{
"target": "acme::pricing",
"change_type": "modified",
"path": "tiers.Plus.price",
"before": "$19",
"after": "$29",
"detected_at": "2026-06-21T09:00:00+00:00"
}
]
}

status is new the first time a target is seen — that first run builds the baseline, so it has nothing to diff against yet — then changed or unchanged after that, or failed if the page could not be fetched. When weeklyBrief is enabled, the digest is saved to the Key-Value Store and a separate {"type": "weekly_brief", ...} row links to it.

Connect it to Claude, Cursor, or ChatGPT (MCP)

Every Apify actor is callable as a tool over the hosted Apify MCP server (Streamable HTTP) at https://mcp.apify.com. Point your AI client at it, scope it to this actor, and your assistant can launch monitoring runs and read the deltas back in conversation.

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=dami_studio/saas-competitor-change-monitor",
"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }
}
}
}

Claude Desktop and Claude.ai also support OAuth via the connector directory, so you can add Apify without pasting a token.

Pricing

Pay-per-event — no subscription, you pay only for what runs.

EventPrice (USD)When it fires
Actor start$0.05 per GB of run memoryOnce per run. This Actor's minimum memory is 2 GB, so the floor is $0.10 per run; a 4 GB run start is $0.20.
Page checked$0.01Per page fetched and parsed. A page that failed to fetch is not charged.
Change detected$0.015Once per target whose content moved since the last run.
AI signal generated$0.035Per typed signal emitted. It fires whether the wording came from the LLM or from the built-in rules, so it is charged even with generateAiSignals off.
Weekly brief generated$0.30Once per run with weeklyBrief on — not once per week.

Example: watching 5 competitors across 4 page types daily for a week is 140 page-checks ($1.40), plus $0.70 in run-start fees at the 2 GB minimum. Leave the brief on every day and that is another $2.10; switch it on for one run a week instead and it is $0.30. Add $0.015 per page that actually moved and $0.035 per signal it produced. So a quiet week with a single brief lands around $2.40.

Every one of the five events above is the live Store price. There are no volume tiers and no plan gates — the rate is the same on the free plan as on any paid one, and there is no minimum spend.

FAQ

How is this different from just scraping the pages? Scraping returns the whole page every run and leaves you to find the change. This actor diffs each page against the last run and returns only what moved, classified by signal type, with an optional AI read on why it matters.

How do I get alerts in Slack? Add your Slack incoming-webhook URL to webhookUrl. The actor posts a compact summary whenever a change is detected. Discord and generic webhooks work the same way.

Do I need an AI key? Only if you want LLM-sharpened wording on the signals. Set ANTHROPIC_API_KEY to enable it; otherwise generateAiSignals falls back to deterministic rules. That key is yours and Anthropic bills its usage to you directly — this actor does not resell model tokens.

How often does it check? On whatever schedule you set in Apify — daily and weekly are common. With onlyNewSinceLastRun on, each run reports only what changed since the prior one.

Why did the first run report everything as new? There was nothing to diff against yet. The first run stores the baseline snapshot for each target; from the second run on you get real deltas.

Will I get charged when nothing changes? You pay per page checked and per run start either way. Change-detected and AI-signal events only fire when there is something to report. The weekly brief is the exception: it is produced, and billed at $0.30, on every run you leave weeklyBrief on for.