# Sitemap Delta: New Pages & Confirmed Removals (`burnzzz/sitemap-delta`) Actor

Compare complete public XML sitemaps, detect additions and metadata changes, and confirm missing URLs across two observations. Failed or truncated traversals preserve prior state. Export structured change reports for SEO and content workflows.

- **URL**: https://apify.com/burnzzz/sitemap-delta.md
- **Developed by:** [burnzzz Tools](https://apify.com/burnzzz) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Sitemap Delta

Turn public XML sitemap changes into structured reports for content pipelines and SEO workflows. Find new URLs, changed sitemap metadata, and URLs missing from two consecutive complete observations. No LLM, browser renderer, or proxy is required.

#### Start a run

Enter one to three complete sitemap URLs in `sitemapUrls`. The first run creates a baseline. Download the `SNAPSHOT` key-value record and pass its complete JSON as `previousSnapshot` on your next run. Your calling automation owns scheduling and passing state. This Actor does not automatically reuse another run's storage.

```json
{"sitemapUrls":["https://www.sitemaps.org/sitemap.xml"]}
```

#### What you receive

One dataset report per successfully completed sitemap root: `sitemapUrl`, `status`, `urlCount`, `sitemapFiles`, `counts`, `changes`, and a stable metadata fingerprint. Each change includes a URL and a classification: `added`, `metadata_changed`, or `no_longer_in_sitemap`.

The first absence is pending, not a removal. A second complete absence confirms that the URL is no longer listed in the sitemap. This does not establish that the page is deleted, deindexed, unavailable, or that its content changed. `lastmod`, `changefreq`, and `priority` are publisher declarations, not independently verified facts. Page contents are not fetched.

`SNAPSHOT` holds complete state for the next comparison. `DIAGNOSTICS` lists failures. `DELIVERY` reports whether all reports reached the dataset. A failed root preserves its previous state. A truncated traversal does not produce a misleading complete report. A spending-limit interruption withholds the next snapshot; retain your preceding snapshot.

#### Pricing

Launch price: $0.02 per completed sitemap report, plus $0.005 per start at 256 MiB. Platform usage is included. One report can cover up to 5,000 URLs across up to 20 sitemap files. A completed baseline or unchanged sitemap is still a billable report. Failed roots are not report charges; the start charge still applies. The price displayed before your run is authoritative.

#### Scope and limits

XML `urlset` and `sitemapindex`, XML namespaces, gzip payloads, and same-host child sitemaps are supported. Up to three roots, 20 files and 5,000 current URLs per root; 2 MiB compressed and decompressed per response; a 45-second traversal deadline per root. Cross-host sitemap entries, oversized results, inconsistent duplicates, and unsafe network destinations are rejected. HTTP redirects are bounded. A site may block requests; no CAPTCHA or access-control bypass is attempted.

Text sitemaps, robots.txt discovery, RSS, hreflang, image/video extensions, content hashing, page-status checks, and automatic snapshot persistence are outside this version's scope. Use a child sitemap directly if a root index exceeds the traversal limits.

#### Support

Open an Actor issue with the public sitemap URL and run ID. Do not include credentials or private data. This is an independent utility, not affiliated with search engines or the websites it reads. Use only sources and data you are entitled to access.

Protocol reference: [Sitemaps XML format](https://www.sitemaps.org/protocol.html).

# Actor input Schema

## `sitemapUrls` (type: `array`):

Public HTTP(S) URLs. One to three XML sitemap roots.

## `previousSnapshot` (type: `object`):

Paste the complete SNAPSHOT JSON from the preceding run. Missing input creates a baseline. Your calling automation must pass state between runs.

## Actor input object example

```json
{
  "sitemapUrls": [
    "https://www.sitemaps.org/sitemap.xml"
  ],
  "previousSnapshot": {}
}
```

# Actor output Schema

## `reports` (type: `string`):

No description

## `diagnostics` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sitemapUrls": [
        "https://www.sitemaps.org/sitemap.xml"
    ],
    "previousSnapshot": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("burnzzz/sitemap-delta").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sitemapUrls": ["https://www.sitemaps.org/sitemap.xml"],
    "previousSnapshot": {},
}

# Run the Actor and wait for it to finish
run = client.actor("burnzzz/sitemap-delta").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sitemapUrls": [
    "https://www.sitemaps.org/sitemap.xml"
  ],
  "previousSnapshot": {}
}' |
apify call burnzzz/sitemap-delta --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,burnzzz/sitemap-delta"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/B9aU6lLWnShZgUoHp/builds/IrW9ww6hVoMJaswBD/openapi.json
