Discover URLs from nested XML sitemaps, then optionally check HTTP status and indexability
Sitemap Scraper & Analyzer reads public sitemap.xml and nested sitemap index files, extracts URL inventories without a headless browser, and reports structure and freshness metrics (top directories, depth distribution, file types, lastmod, changefreq). Optional checkStatus sends HEAD requests to test whether discovered URLs return HTTP 200. This is sitemap XML discovery for technical SEO — not a known URL-list HTTP status pass, and not page HTML extraction.
From $4.00 per 1,000 results
Open Sitemap Scraper & Analyzer on Apify
Nested XML sitemap discovery, not a known URL list and not page HTML
Use this page when the job is to parse sitemap XML (including nested indexes), produce a URL inventory, and optionally HEAD-check availability. Use Bulk URL Status Checker when you already have URLs and need status codes, redirect chains, and timing. Use Website Content Extractor when you already have page URLs and need cleaned docs, pricing, policy, or product HTML.
| This Actor | Bulk URL Status Checker | Website Content Extractor | |
|---|---|---|---|
| Intent | Discover URLs from nested XML sitemaps; optional HEAD 200 / indexability check | HTTP status, redirect-chain, timing, and broken-URL QA on a known list | Clean docs, product, pricing, policy, and help-center HTML |
| Primary input | Required sitemapUrls (sitemap.xml or a domain that auto-discovers /sitemap.xml) |
Known page URLs in urls (max 1000) |
Known page URLs in urls (max 200) |
| What it reads | Sitemap XML and sitemap index files; optional HEAD on discovered URLs when checkStatus is true |
Live HTTP(S) responses for those URLs; it does not crawl pages | Live page HTML for those URLs |
| Deliverable | URL inventory plus structure and freshness analysis; optional HTTP 200 sampling | Status code, final URL, redirect chain, response time, severity | Markdown, text, or HTML plus title and optional metadata |
| Not this job | Status QA of a URL list you already have; page-body extraction | Discovering URLs from sitemap XML | Parsing sitemap.xml to find URLs |
The live Store description is: Extract thousands of URLs from complex nested XML sitemaps to audit website structure, HTTP status codes, and indexability for technical SEO. The live schema description is: Parse and analyze sitemap.xml files. Discover URL structure, update patterns, and site architecture. Supports sitemap index files. The published SEO description adds: verify HTTP response codes via HEAD requests, and audit directory depth. Optional status/indexability checking is the checkStatus HEAD-for-200 flag (default false). The live schema does not publish robots, canonical, or noindex fields; those are not this Actor’s sitemap-XML job.
Use cases
- Technical SEO audits: assess sitemap completeness, structure, and coverage for search visibility.
- Monitoring site structure and content drift: detect freshness and last-mod change patterns over time.
- Feeding search engines and index management: surface fresh URL lists for submission or reindexing workflows.
- Seeding other scrapers: provide URL inventories as seed lists for content, metadata, or contact extractors.
- Large-scale site audits: bulk analyze multiple sitemaps and summarize architecture, directory distributions, and file types.
- Competitive analysis: map competitor website architecture from public sitemaps.
README Who/Why table: SEO agencies (sitemap completeness and structure), content strategists (update patterns and stale pages), web developers (verify sitemap structure before search engine submission), and competitive analysts (map competitor site architecture from public sitemaps). Users can schedule runs to monitor website structure changes, feed fresh URLs into search engines, or supply seed lists to other tools as an initial step before heavier article or contact-details extractors.
How is Sitemap Scraper & Analyzer different from Bulk URL Status Checker and Website Content Extractor?
This Actor reads sitemap.xml and nested sitemap index files to discover URL inventories, site structure, and update patterns. Required input is sitemapUrls. Optional checkStatus sends HEAD requests to test whether discovered URLs return HTTP 200. Bulk URL Status Checker checks a known URL list you already have (urls, maximum 1000) for live HTTP status, redirect chains, response timing, and broken-URL findings; it does not crawl pages and it does not parse sitemap XML to find URLs. Website Content Extractor fetches known page URLs (maximum 200) and returns cleaned markdown, text, or HTML; it does not parse sitemaps. Use this Actor to discover URLs from nested XML sitemaps, then optionally check status and indexability. Use Bulk URL Status Checker when the URL list is already known. Use Website Content Extractor when you need page body content.
What input is required?
sitemapUrls is required: URLs of sitemap.xml files to analyze. Auto-discovers /sitemap.xml if you provide just a domain. Schema editor is stringList. Schema prefill is https://github.com/sitemap.xml and https://example.com. Optional live schema fields are maxUrls (integer, default 5000, minimum 100, maximum 50000; maximum URLs to process from each sitemap), checkStatus (boolean, default false; send HEAD requests to check if URLs return 200), maxChargeUsd (number, default 1, minimum 0, maximum 100), delivery (dataset or webhook, default dataset), webhookUrl (used when delivery is webhook; Slack, Discord, or any HTTP endpoint), concurrency (integer, default 3, minimum 1, maximum 10), and dryRun (boolean, default false). additionalProperties is false. The live schema description is: Parse and analyze sitemap.xml files. Discover URL structure, update patterns, and site architecture. Supports sitemap index files.
| Field | Type | Default | Notes |
|---|---|---|---|
sitemapUrls |
array | required (prefill https://github.com/sitemap.xml, https://example.com) |
Sitemap.xml URLs, or a domain that auto-discovers /sitemap.xml |
maxUrls |
integer | 5000 | Maximum URLs to process from each sitemap. Schema min 100, max 50000. |
checkStatus |
boolean | false | HEAD requests to check if URLs return 200. Slower; finds dead links. |
maxChargeUsd |
number | 1 | Safety cap (min 0, max 100). Results beyond the cap stay as no-charge limit_reached rows. |
delivery |
string | dataset |
dataset or webhook |
webhookUrl |
string | — | Used when delivery is webhook. Slack, Discord, or any HTTP endpoint. |
concurrency |
integer | 3 | Parallel requests. Schema min 1, max 10. Higher may trigger rate limits. |
dryRun |
boolean | false | Run without saving results or sending webhooks |
Published README Input Example (matches the schema):
{
"sitemapUrls": ["https://apify.com/sitemap.xml"],
"maxUrls": 5000,
"checkStatus": false,
"concurrency": 3
}
Published Store example run input:
{
"sitemapUrls": [
"https://apify.com/sitemap.xml"
],
"maxUrls": 100,
"checkStatus": false,
"concurrency": 3,
"delivery": "dataset",
"dryRun": false
}
Key Features from the README: nested sitemap index support; structure analysis (top directories, depth distribution, file extensions); update pattern detection (lastmod distribution, changefreq analysis); optional HEAD sampling for dead links; architecture insights from the sitemap alone; bulk processing of multiple sitemaps per run. README Tips: keep concurrency ≤ 5 when auditing production sites; enable dryRun before a paid schedule; run a tiny URL count first, then scale. The published FAQ states requests use a standard User-Agent and honor site rate limits, and that an unreachable input URL records an error row while other URLs keep processing.
Run Sitemap Scraper & Analyzer on Apify
Which README input examples are not live schema fields?
README examples labeled Single domain audit, Bulk competitor sitemap snapshot, and Lastmod-only diff for drift send domains, expandIndexes, onlyLastmodChanged, and sinceDays. Those names are not in the live input schema. additionalProperties is false, so do not send them. The schema-valid README Input Example is sitemapUrls, maxUrls, checkStatus, and concurrency. The published Store example run input is sitemapUrls, maxUrls, checkStatus, concurrency, delivery, and dryRun. maxChargeUsd is in the live schema and is omitted from that README input table and from the published Store example run input.
What does a result contain?
The published README output table lists meta, results, and per-result sitemapUrl, finalUrl, status, analysis, error, and checkedAt. The published README sample is one sitemap object (https://apify.com/sitemap.xml) with status ok and an analysis object: type urlset, totalUrls 1247, structure.topDirectories with path/count/percentage, structure.depthDistribution, and updateFrequency.lastModRange plus urlsWithLastmod. finalUrl, error, and checkedAt are in the field table and not shown on that sample. The sample is a README illustration, not a live coverage guarantee. There is no separate published dataset/output JSON schema on the Store page beyond that README table and sample.
Published README output example:
{
"sitemapUrl": "https://apify.com/sitemap.xml",
"status": "ok",
"analysis": {
"type": "urlset",
"totalUrls": 1247,
"structure": {
"topDirectories": [
{ "path": "/store", "count": 890, "percentage": 71 },
{ "path": "/blog", "count": 156, "percentage": 13 }
],
"depthDistribution": { "1": 45, "2": 890, "3": 312 }
},
"updateFrequency": {
"lastModRange": { "oldest": "2023-01-15", "newest": "2026-02-20" },
"urlsWithLastmod": 1100
}
}
}
The README positions this as the sitemap-XML step before heavier extractors. Related Store Actors named in the README (not extra landings on this site) include Bulk URL Status Checker for a known URL list, Meta Tag Analyzer for head metadata, and Website Content Extractor / Article Content Extractor / Contact Details Extractor as downstream seed targets.
How do dataset, webhook, dry-run, and the charge cap work?
delivery defaults to dataset (saves to Apify Dataset; recommended). Set delivery to webhook and provide webhookUrl to send results to a URL. webhookUrl works with Slack, Discord, or any HTTP endpoint. dryRun true runs without saving results or sending webhooks, for testing. maxChargeUsd defaults to 1 as a safety cap; results beyond the cap are kept in output as no-charge limit_reached rows. Store Quickstart: start with store-input.example.json to analyze one public sitemap with a small URL cap; then store-input.templates.json with Quickstart (Dataset) for a fast structural audit, Large Site Audit for deeper coverage and status checks, or Webhook Alert for change-driven monitoring.
README Tips also: use webhook delivery for recurring cron runs; results are dataset-first; use Apify API run-sync-get-dataset-items for JSON in CI. Recurring runs can use Apify Schedules (hourly, daily, weekly) combined with webhook delivery.
How is Sitemap Scraper & Analyzer priced?
Billing is pay per event. The published Store card is from $4.00 / 1,000 results. Live Store events are Actor Start at $0.001 (charged when the Actor starts; number of events depends on Actor memory, one event per GB, minimum one event) and result at $0.004 (single result in the default dataset; the pricing page lists Result as $4.00 / 1,000). Platform usage is listed as included on the pricing page. The README Cost section still quotes actor-start $0.01 plus dataset-item $0.003 ($3.01 for 1,000 items); live Store billing currently uses the $4.00 / 1,000 card and the $0.001 / $0.004 events.
From $4.00 per 1,000 results ($0.004 per default-dataset result; Actor Start $0.001)
See Sitemap Scraper & Analyzer pricing on Apify
Limits to keep in mind
- Required field is
sitemapUrls. Live schema names do not includedomains,expandIndexes,onlyLastmodChanged, orsinceDays. maxUrlsdefault 5000, minimum 100, maximum 50000 per sitemap. Store example run uses 100.checkStatusdefaults to false. HEAD-for-200 is optional and slower.concurrencydefault 3, maximum 10. README tip: keep concurrency ≤ 5 on production sites.- Not known-list HTTP status QA and not page HTML extraction.
- Start with a small URL cap from the Store Quickstart, then expand.
Open Sitemap Scraper & Analyzer on Apify
Related pages
- Bulk URL Status Checker — known URL list HTTP status, not sitemap XML discovery
- Website Content Extractor — docs, pricing, policy, and product HTML, not sitemap parsing
- Article Content Extractor — article HTML cleanup after URL discovery
- Meta Tag & OpenGraph Scraper — head metadata on known URLs, not sitemap XML
- Contact Page Audit & Business Channel Extractor — contact-page channels, not sitemap inventories
- RSS & Atom Feed Extractor — feed XML, not sitemap.xml
- Short URL Resolver & Scraper — expand short links, not sitemap discovery
- Wayback Machine Bulk Checker — Internet Archive availability, not live sitemap XML
- DNS Propagation Checker — public DNS records, not sitemap XML
- DMARC & Email Security Checker — SPF/DKIM/DMARC DNS, not sitemap XML
- HHS Healthcare Data Breach Change Scraper — HHS OCR disclosure changes, not sitemap XML
- Tech Events & CFP Calendar Scraper — conference CFP calendars, not sitemap XML
- Content Intelligence pack
- Review Intelligence pack
- Tools