Sitemap URL Delta Monitor avatar

Sitemap URL Delta Monitor

Pricing

Pay per usage

Go to Apify Store
Sitemap URL Delta Monitor

Sitemap URL Delta Monitor

Monitor public sitemap.xml files for new URLs, removed URLs, lastmod changes, and clean stateful deltas for SEO, RAG indexing, and content operations.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Nikita S

Nikita S

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Monitor public sitemap.xml files and emit only URLs that changed since the previous run.

Use it for:

  • SEO change monitoring;
  • RAG indexing queues;
  • documentation/content update alerts;
  • competitor content tracking;
  • n8n, Make, Google Sheets, Slack, or crawler workflows.

Visual demo: Sitemap Delta Monitor

Sitemap Delta Monitor visual overview

Sitemap Delta Monitor workflow diagram

Sitemap Delta Monitor sample output dataset row

These images are hosted in a persistent Apify key-value store so the Store README has stable, clickable visual previews.

Input

{
"sitemapUrls": ["https://woocommerce.com/sitemap.xml"],
"discoverSitemaps": true,
"urlFilterRegex": "^https://woocommerce\\.com/(blog|changelog)/",
"changeTypes": ["new_url", "updated_url", "removed_url"],
"addRemovedUrlsToKvs": true,
"onlyChanged": true,
"persistState": true,
"maxSitemapUrls": 25,
"maxUrls": 5000,
"requestTimeoutMs": 30000
}
FieldRequiredNotes
sitemapUrlsyesPublic sitemap.xml or sitemap index URLs. Root domains (e.g. https://example.com) are also accepted when discoverSitemaps: true — the Actor fetches /robots.txt and enqueues Sitemap entries from it.
discoverSitemapsnoDefault false. When true, fetch each start URL's robots.txt and enqueue every Sitemap: directive found. Brings the Actor to feature parity with tri_angle/sitemap-change-detector on the most common onboarding step.
urlFilterRegexnoDefault "". JavaScript-compatible regex applied to discovered URLs. Matched URLs are included in the output and snapshot; non-matches are skipped. Applies to final URLs, not intermediate sitemaps.
changeTypesnoDefault ["new_url","updated_url","removed_url"]. Whitelist of statuses to emit. Add unchanged to also get rows that did not change.
addRemovedUrlsToKvsnoDefault false. When true, also writes a REMOVED-URLS key to the state key-value store with the full list of URLs that disappeared since the last snapshot.
previousItemsnoOptional previous sitemap URL rows from an earlier run (overrides persisted state if provided).
onlyChangednoDefault true. Backward-compat alias. Equivalent to changeTypes without unchanged.
persistStatenoDefault true. Store the latest sitemap snapshot in a named key-value store.
stateStoreNamenoDefault sitemap-delta-monitor-state.
stateKeynoOptional snapshot key. Leave empty to derive from input sitemap URLs.
maxSitemapUrlsnoDefault 25. Maximum nested sitemaps to fetch from indexes and robots.txt.
maxUrlsnoDefault 5000. Maximum URLs to track per run.
requestTimeoutMsnoDefault 30000. Per-request timeout for sitemap and robots.txt fetches.

Supports sitemap indexes and regular URL sitemaps. Public sources only — no login, no CAPTCHA bypass, no anti-bot workarounds.

Output events

  • new_url — URL is in the current sitemap but was not in the previous snapshot.
  • updated_url — URL was in both, but <lastmod> (or changefreq / priority) changed. Emits the structured changes[] array.
  • removed_url — URL was in the previous snapshot but is no longer in the current sitemap.
  • unchanged — only emitted if changeTypes includes unchanged (or onlyChanged: false).
  • error — per-sitemap error (network, parse, 4xx, 5xx).

Rows include sitemapUrl, url, lastmod, changefreq, priority, status, event, events, event_severity, and changes. The SUMMARY record on the default key-value store contains sitemapsSeen, urlsSeen, rowsEmitted, eventCounts, discoveredSitemaps, urlsFilteredOut, stateKey, stateSaved, and errors.

Monetization hooks

  • delta_result for new / updated / removed URL rows.
  • apify-actor-start once per run on Actor init.
  • New pricing events (updated_url_alert, removed_url_alert) are reserved in the billing model for v0.3; the Apify 2-week pricing-change rule plus 1-month cooldown keep them off the table until 2026-08-21.

No login / CAPTCHA / anti-bot bypass. Public sitemaps and public robots.txt only.

Run it from Claude / Cursor / VS Code via MCP

The Actor is available through the Apify MCP server, so you can ask your AI assistant to "watch my sitemap for new URLs" without setting up a custom crawler.

Add this to your MCP client config (for example claude_desktop_config.json):

{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/mcp-server"],
"env": {
"APIFY_TOKEN": "your-apify-api-token"
}
}
}
}

Once connected, the assistant can discover this Actor and trigger runs with a plain prompt like "Run Sitemap Delta Monitor on https://example.com/sitemap.xml and tell me which new pages appeared today." The remote MCP server at https://mcp.apify.com works the same way without a local install.

Quick start

  1. Open this Actor in Apify Console.
  2. Paste one or more sitemap.xml URLs into the input.
  3. Keep persistState enabled for scheduled monitoring.
  4. Run once to create the baseline snapshot.
  5. Run again on a schedule to receive only delta rows.
  6. Export the dataset to CSV/JSON, or send it to Google Sheets, n8n, Make, Slack, Discord, or a webhook.

Sample output

Use this sample dataset to see the output shape before running it yourself:

The important fields for automation are event, events, event_severity, status, and changes. Filter for event_severity = high when you only want alerts that deserve immediate attention.

Pricing and cost expectations

This Actor is designed for scheduled monitoring and delta-only outputs. It avoids charging or processing unchanged rows where possible. Pay-Per-Event pricing is scheduled/used for meaningful emitted deltas such as new items, removed items, price changes, stock changes, URL changes, or pricing-plan changes depending on the Actor.

Start with a small input list first. Once the baseline looks correct, schedule recurring runs and set a reasonable max charge limit in Apify.

FAQ

Is this a one-time scraper or a monitor?

It is a monitor. The first run creates a baseline. Later runs compare the current data against the stored baseline and emit only the changes.

Can I send alerts to Slack, Discord, Google Sheets, n8n, or Make?

Yes. Use Apify integrations, webhooks, dataset export, or API polling. The event, events, event_severity, and changes fields are meant for automation routing.

Does it bypass CAPTCHA, login walls, or anti-bot systems?

No. This portfolio is intentionally focused on public, low-risk sources such as public APIs, feeds, sitemaps, product pages, or storefront endpoints.

Which rows should trigger alerts?

Use event_severity. High-severity rows are the best candidates for Slack/Discord/email alerts. Low-severity rows are usually better for reports or spreadsheets.

Support and custom monitoring

If a public source does not fit this Actor, check the related monitors below. Open an issue on the Actor page with a sample URL and the output you need.

Which monitor should I use?

This Actor is part of a focused monitoring portfolio. Pick the narrowest Actor that matches your source:

Source you haveUse this ActorBest for
Shopify storeShopify Delta MonitorShopify competitor price/stock/sale monitoring
WooCommerce storeWooCommerce Delta MonitorWooCommerce Store API product deltas
Product page URLs with Schema.org JSON-LDSchema.org Product Delta MonitorMagento, BigCommerce, custom stores, marketplaces
Product feeds / APIs / CSV / XMLProduct Feed Delta MonitorSupplier feeds, affiliate feeds, Google Merchant exports
sitemap.xmlSitemap Delta MonitorSEO, content ops, RAG indexing queues
SaaS pricing pagesSaaS Pricing Page MonitorPlan/price/feature changes on public pricing pages

All monitors are built for scheduled runs, stateful comparisons, delta-only outputs, and workflow automation via Google Sheets, n8n, Make, Slack, Discord, or webhooks.