Sitemap Monitor: New, Updated & Removed Pages Tracker avatar

Sitemap Monitor: New, Updated & Removed Pages Tracker

Pricing

from $2.00 / 1,000 page changes

Go to Apify Store
Sitemap Monitor: New, Updated & Removed Pages Tracker

Sitemap Monitor: New, Updated & Removed Pages Tracker

Watch the sitemaps of any website (competitors, clients, your own) and get the new, updated and removed pages since the last run. Finds sitemaps in robots.txt, follows sitemap indexes, reads .xml.gz and text sitemaps. Respects robots.txt.

Pricing

from $2.00 / 1,000 page changes

Rating

0.0

(0)

Developer

Julian Genuario

Julian Genuario

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Know the moment a competitor publishes a new page. Give this Actor a list of websites (or sitemap URLs), schedule it daily or weekly, and every run returns only what changed since the previous one:

  • new pages (in the sitemap now, not last time): new blog posts, landing pages, product pages, docs, job posts, locations;
  • updated pages (the sitemap lastmod date changed);
  • removed pages (gone from the sitemap).

It finds the sitemaps on its own (from robots.txt, then /sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml...), follows sitemap indexes to every child sitemap, and reads gzip (.xml.gz) and plain-text sitemaps. Image, hreflang and Google News extensions are read too.

What does Sitemap Monitor do?

Sitemap Monitor watches the XML sitemaps of any website (competitors, clients or your own) and returns the new, updated and removed pages since the previous run. It discovers sitemaps from robots.txt, follows sitemap indexes and reads .xml.gz and plain-text sitemaps, so you can track competitor content, new landing pages and SEO changes on a schedule.

How to use Sitemap Monitor

  1. Click Try for free on this page (a free Apify account is enough to start).
  2. Fill in the input (see the examples below) or keep the prefilled example.
  3. Click Start and wait for the run to finish.
  4. Download the results from the Output tab as JSON, CSV, Excel or HTML, or read them with the Apify API.
  5. Optional: create a Schedule to run it daily or weekly, and connect a webhook or an integration (Make, Zapier, n8n, Slack).

Who uses it

  • Content and SEO teams: see every article your competitors publish and which pages they refresh, without visiting their blogs.
  • Competitive intelligence: new product, pricing, integration, location or careers pages show up here first.
  • Agencies: monitor clients' sites for unexpected removals (a deleted page in the sitemap is often an SEO accident).
  • Your own site: confirm that new content reaches the sitemap and get a list of URLs to submit or check.
  • Feeds: send the new URLs to Slack, email, a Google Sheet or another Actor (for example a content scraper) with an Apify webhook or integration.

Input

FieldWhat it does
Websites or sitemap URLsexample.com, https://example.com, or a direct sitemap URL. Also from a dataset or a CSV / Google Sheets link. Duplicates are removed.
What to outputOnly changes (default) or All URLs with their change type.
Output all URLs on the first runThe first run saves a baseline. On (default): the baseline is returned too. Off: the first run only saves it, at no charge.
Monitor nameSeparate histories (e.g. one monitor with a /blog/ filter and another for the whole site).
Only URLs containing / Skip URLs containingText filters or /regex/.
Max URLs per site, Max sitemap files per site, Sites in parallel, DelayLimits and politeness.

Example input

{
"startUrls": ["competitor-one.com", "https://competitor-two.com/sitemap_index.xml"],
"outputMode": "changes",
"includeUrlPatterns": ["/blog/", "/pricing"],
"monitorName": "competitors-blog"
}

Output

{
"site": "https://blog.apify.com",
"url": "https://blog.apify.com/best-price-scraping-tools/",
"changeType": "updated",
"lastmod": "2026-10-24T09:12:00.000Z",
"previousLastmod": "2026-09-30T14:03:00.000Z",
"changefreq": null,
"priority": null,
"images": 1,
"hreflangAlternates": 0,
"newsTitle": null,
"sitemapUrl": "https://blog.apify.com/post-sitemap.xml",
"firstSeenAt": "2026-10-01T10:00:00.000Z",
"previousRunAt": "2026-10-25T10:00:00.000Z",
"detectedAt": "2026-10-26T10:00:00.000Z"
}

changeType is one of new, updated, removed, baseline (first run) or unchanged (only in All URLs mode). RUN_SUMMARY in the key-value store has per-site counts, sitemaps read and any sitemap that failed.

Reliable "removed" detection

A page is reported as removed only when every sitemap of the site was read successfully and no limit was hit. If one child sitemap fails (timeout, 5xx) the run does not report removals for that site and keeps the old URLs in the snapshot, so you do not get false alarms.

Pricing

Pay per event:

  • USD 2 per 1,000 changes (new, updated or removed pages).
  • USD 0.50 per 1,000 URLs for baseline / unchanged rows (first run, or All URLs mode).

A run where nothing changed costs almost nothing. Sites that cannot be read are free. The run respects your max charge per run.

Good behaviour

  • robots.txt is always respected (sitemap URLs disallowed for bots are skipped and listed), including Crawl-delay.
  • One request at a time per host with a delay (500 ms by default), identifiable user-agent SitemapMonitorBot, retries with back-off on 429 / 5xx.
  • Only sitemap files are downloaded, never the pages themselves.

Cost examples

Prices at the current pay-per-event rate: USD 2.00 per 1,000 changes, USD 0.50 per 1,000 baseline or unchanged URLs, plus USD 0.01 per run. You can set a maximum charge per run in the run options.

JobApproximate cost
Test run: first 40 URLs of crawlee.dev as baseline (measured: 2 s)about $0.03
First run on a site with 5,000 URLs (baseline)about $2.51
Daily check of that site, 20 changed pagesabout $0.05 per run
Daily check where nothing changed$0.01 per run

Use it from your code, an integration or an AI agent

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("latamdatatools/sitemap-change-monitor").call(run_input={
"startUrls": [
"apify.com",
"https://blog.apify.com/sitemap.xml"
],
"outputMode": "changes",
"monitorName": "competitors"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["changeType"], item["url"], item["lastmod"])

JavaScript / Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('latamdatatools/sitemap-change-monitor').call({
startUrls: [
'apify.com',
'https://blog.apify.com/sitemap.xml'
],
outputMode: 'changes',
monitorName: 'competitors'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.changeType, i.url]));

No code:

  • Schedules: save your input as a Task and run it daily or weekly from Apify Console (Schedules).
  • Integrations: send the results to Google Sheets, Slack, email, Make, Zapier, n8n or Airbyte from the Integrations tab, or call your own webhook when a run finishes.
  • AI agents: add it as a tool in Claude, Cursor, VS Code and other MCP clients through the Apify MCP server (https://mcp.apify.com), so the agent can tell you which pages a site added or removed.

FAQ

The site has no sitemap. The site is marked as failed with the reason. Try entering the sitemap URL directly if you know it.

Can I see pages that changed but kept the same lastmod? No: this Actor reads sitemaps, not page content. Many sites update lastmod reliably (WordPress/Yoast, Shopify, most CMSs), some do not.

Where is the history? In your account's named key-value store sitemap-monitor-state, one compressed snapshot per site and monitor name.

Questions or ideas? Open an issue in the Issues tab.