# Sitemap Delta Monitor | New & Changed URLs (`sbio-apps/sitemap-delta-monitor`) Actor

Compare XML sitemap snapshots for new URLs, metadata edits and entries absent from the latest document. Keep persistent history, return the current inventory and deduplicatable change IDs, and distinguish URL sets from sitemap indexes.

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

## Pricing

$10.00 / 1,000 completed checks

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 Monitor | New & Changed URLs

Compare XML sitemap snapshots for new URLs, metadata edits and entries absent from the latest document. Keep persistent history, return the current inventory and deduplicatable change IDs, and distinguish URL sets from sitemap indexes.

### How it works

Supply the URL of one XML sitemap document. A urlset returns page URLs; a sitemapindex returns child sitemap references. The Actor compares the complete supplied document with its previous successful snapshot. A changed lastmod, changefreq or priority is a metadata update, not proof that page content changed. An absent URL means it is missing from this document; it does not prove the page was deleted. The first run returns the current entries unless you select baseline. Index children are listed but are not downloaded automatically; submit each desired child document as a separate input URL.

### Quick start

1. Enter one or more public URLs in the Input tab, beginning with the supplied example.
2. Set a maximum run charge. A completed check costs $0.01; checking 10 sources once costs $0.1.
3. Start the Actor and inspect the dataset. Download JSON, CSV or Excel, or consume results through the Apify API.
4. Inspect the OUTPUT run summary as well as the dataset: failed or unprocessed inputs appear there. Save the input as a task if you want to schedule future runs.

### Pricing

**$0.01 per completed check ($10 per 1,000), with platform usage included.** There are no separate Actor-start or dataset-item fees. Empty and unchanged successful checks are charged. The maximum charge is checked before each source request and again before output. Failed network or format checks are free; see the specific HTTP-response cases below. Billing is per completed source check, not per nested array item, extracted URL, change or schema block.

### Limits and interpretation

Each document is limited to 5,000 unique entries and 2 MB after HTTP decompression. These limits are smaller than the sitemap protocol maximum. Standalone .gz archives, RSS, text sitemaps and recursive index traversal are unsupported. HTTP Content-Encoding gzip is supported. Malformed XML, custom entities, repeated identifiers or incomplete oversized documents produce a free error and never replace history.

A run accepts 1-50 unique input URLs and requests them sequentially. Each check has an 18-second network deadline; new checks stop after 160 seconds. Use a 240-second run timeout and 512 MB memory. If the time or charge limit stops a batch, OUTPUT lists uncheckedUrls for a later run. No response exceeding the configured byte limit is accepted, and a complete record must fit within 6 MB. The Actor permits only public HTTP(S) destinations on standard ports, pins a validated DNS address per request, and refuses redirects into private networks or from HTTPS to HTTP.

The Actor uses direct HTTP requests, without a browser, residential proxy, login, CAPTCHA solving or access-control bypass. Rate limits and blocks may prevent checks. Avoid secret-bearing URLs. Results describe the source and network observed at check time.

### Persistent history

Reuse the same monitorId, or omit it on a saved task to use the task ID. Use a new ID to reset the baseline. Run one copy of a given monitor at a time, at least five minutes apart. Dataset output is written and charged before the checkpoint is saved. A failure between those steps can replay a transition; deduplicate deterministic eventId values downstream. Overlapping runs are unsupported. Failed checks and rejected charges retain prior history. Current snapshots are stored in a named key-value store and incur platform storage costs covered by this Actor pricing; remove unused monitor stores through Apify when no longer needed.

### Integrations and support

Connect the dataset and OUTPUT summary to your own n8n, Make, Zapier or API workflow. This Actor produces data; it does not automatically send email, Slack messages or webhooks to third parties. No external account credentials are needed for the supplied public examples. Report reproducible issues in the Actor Issues tab, including a non-sensitive input and run link. This is an independent utility and is not endorsed by the websites, standards bodies or services it reads.

### Input example

```json
{
  "urls": [
    "https://www.sitemaps.org/sitemap.xml"
  ],
  "monitorId": "sitemap-monitor",
  "firstRun": "emit"
}
```

See the Input tab for all supported fields. Results are available through the dataset API and can be downloaded as JSON, CSV or Excel.

### Output fields

| Field | Meaning |
|---|---|
| inputUrl | Normalized supplied URL. |
| checkedAt | Check time in ISO format. |
| sourceUrl | Final sitemap URL. |
| documentType | urlset contains page URLs; sitemapindex contains child sitemap references. |
| entryCount | Entries in this complete document. |
| items | Current entries: id, url, lastModified, changeFrequency and priority. |
| monitorId | Persistent history scope. |
| baselineCreated | True on the first complete observation. |
| changeCount | Changes relative to the last successful snapshot. |
| changes | eventId, type (new/updated/absent) and normalized item. Absence describes the source snapshot only. |

### Output example

Example from a public source check; live values vary. Long items, changes, groups and blocks arrays are shortened to two entries here for readability; the actual record contains the complete arrays within the documented limits.

```json
{
  "inputUrl": "https://www.sitemaps.org/sitemap.xml",
  "checkedAt": "2026-09-07T21:05:11.579Z",
  "sourceUrl": "https://www.sitemaps.org/sitemap.xml",
  "documentType": "urlset",
  "entryCount": 84,
  "items": [
    {
      "id": "https://www.sitemaps.org/",
      "url": "https://www.sitemaps.org/",
      "lastModified": "2016-11-21",
      "changeFrequency": "",
      "priority": ""
    },
    {
      "id": "https://www.sitemaps.org/protocol.html",
      "url": "https://www.sitemaps.org/protocol.html",
      "lastModified": "2022-12-15",
      "changeFrequency": "",
      "priority": ""
    }
  ],
  "monitorId": "sitemap-monitor",
  "baselineCreated": true,
  "changeCount": 84,
  "changes": [
    {
      "eventId": "bfab8a67f4d5be0efc10402b909d611d047d696abca3be691c4e39ec51bc81d0",
      "type": "new",
      "item": {
        "id": "https://www.sitemaps.org/",
        "url": "https://www.sitemaps.org/",
        "lastModified": "2016-11-21",
        "changeFrequency": "",
        "priority": ""
      }
    },
    {
      "eventId": "25d2ba5b8e94ed32f6a83be1487df9fea874b8f51aa0998b43d943235ef02f16",
      "type": "new",
      "item": {
        "id": "https://www.sitemaps.org/protocol.html",
        "url": "https://www.sitemaps.org/protocol.html",
        "lastModified": "2022-12-15",
        "changeFrequency": "",
        "priority": ""
      }
    }
  ]
}
```

# Actor input Schema

## `urls` (type: `array`):

1-50 explicit public URLs on standard ports. Exact duplicate input URLs are checked once.

## `monitorId` (type: `string`):

Reuse this ID across runs; omit only when using a saved task. Use a new ID for a fresh baseline.

## `firstRun` (type: `string`):

Emit returns current entities; baseline saves them silently. Both are charged completed checks.

## Actor input object example

```json
{
  "urls": [
    "https://www.sitemaps.org/sitemap.xml"
  ],
  "monitorId": "sitemap-monitor",
  "firstRun": "emit"
}
```

# Actor output Schema

## `checks` (type: `string`):

Priced dataset records, including observed unchanged checks or HTTP audit errors as documented.

## `summary` (type: `string`):

Free errors, spending/time stops and unprocessed inputs.

# 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 = {
    "urls": [
        "https://www.sitemaps.org/sitemap.xml"
    ],
    "monitorId": "sitemap-monitor"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sbio-apps/sitemap-delta-monitor").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 = {
    "urls": ["https://www.sitemaps.org/sitemap.xml"],
    "monitorId": "sitemap-monitor",
}

# Run the Actor and wait for it to finish
run = client.actor("sbio-apps/sitemap-delta-monitor").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 '{
  "urls": [
    "https://www.sitemaps.org/sitemap.xml"
  ],
  "monitorId": "sitemap-monitor"
}' |
apify call sbio-apps/sitemap-delta-monitor --silent --output-dataset

```

## MCP server setup

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

```

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/mZffgKeeMTnCMyDDe/builds/uPoQTOMFivbYC9a3D/openapi.json
