Sitemap URL Extractor & Sitemap Validator
Pricing
from $0.50 / 1,000 url extracteds
Sitemap URL Extractor & Sitemap Validator
Get every URL from a site's sitemaps with lastmod, changefreq and priority. Finds sitemaps via robots.txt, follows sitemap indexes, reads .xml.gz and text sitemaps, removes duplicates and flags invalid entries. An unreadable sitemap is billed as one URL; blocked hosts are free.
Pricing
from $0.50 / 1,000 url extracteds
Rating
0.0
(0)
Developer
kelp forest
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Give it domains (or sitemap URLs). It finds every sitemap and returns one row per unique page URL with
lastmod, changefreq, priority and validation warnings.
Use cases
- Build a URL list for a crawl, a migration or a content audit.
- Find stale pages by
lastmod. - Check that a new sitemap is valid before submitting it to search engines.
- Feed page lists to RAG or monitoring pipelines.
What it does
- Discovers sitemaps from
robots.txtSitemap:lines, falling back to/sitemap.xmland/sitemap_index.xml(also when every sitemap robots.txt lists is broken; the broken ones are still reported). - Follows sitemap indexes, reads gzip (
.xml.gz) and plain-text sitemaps, removes duplicate URLs. - Flags invalid
lastmoddates, invalidchangefreq, out-of-rangepriority, and URLs on a different host. - Skips malformed entries (a
<loc>or robots.txtSitemap:line that is not a valid absolute URL) and reports each as a free row, while keeping every valid URL in the same file. - Reports each broken sitemap (404, invalid XML, timeout) as its own row so you can fix it.
- Identifies itself with a named user agent and waits between sitemap files (default 0.5 s).
- A
SUMMARYrecord per run: URLs per domain,cappedwith the reason (maxUrlsPerDomain,maxSitemapsPerDomainorcharge_limit), sitemaps read and failed, and whether the fallback was used. - Rows are saved in batches of up to 100; when your maximum charge for the run is reached, only the rows that were paid for are saved and the run stops.
Pricing (pay per event)
| Event | Price |
|---|---|
url (one unique URL row) | US$0.0005 |
Read errors are billed like a URL row: a sitemap that can't be fetched or parsed (404, invalid XML, timeout), and
a domain where no readable sitemap is found, are each billed as one url event (US$0.0005), following Apify's
pay-per-event guidance for input that looks valid but leads to an error. A domain is billed at most once for "no readable
sitemap found", and not at all for it when one of its broken sitemaps was already billed.
Still free: blocked or private addresses and DNS failures (nothing is fetched), invalid entries skipped inside a good
sitemap, and unexpected errors on our side. Each row says not charged when it is free.
Use maxUrlsPerDomain to cap spend.
Each run also has Apify's run-start charge of US$0.00005 per GB of run memory (US$0.00005 at the default 512 MB), charged when the run starts, even if every domain fails.
How to use
- Open the actor in Apify Console and fill in the input form (or paste the JSON example below into the JSON editor).
- Optional: set a maximum charge for the run under the run options to cap what a run can cost.
- Click Start. Results appear in the Output tab as they are produced; export them as JSON, CSV, Excel or HTML.
You can also start runs from the Apify API or CLI, run the actor on a schedule (for example weekly), and send results to other apps with Apify integrations and webhooks.
Input example
{"domains": ["docs.apify.com"], "maxUrlsPerDomain": 1000}
Output example
{"domain": "https://docs.apify.com", "url": "https://docs.apify.com/api", "lastmod": null, "changefreq": null, "priority": null, "sitemap": "https://docs.apify.com/sitemap_base.xml", "sitemapKind": "urlset", "warnings": [], "status": "ok"}
FAQ
Does it crawl the website? No. It reads only robots.txt and the sitemap files, which sites publish for machines.
What if a site has no sitemap? You get one row saying no readable sitemap was found, with the locations tried. It is billed as one URL row (US$0.0005); a domain that is blocked, private or does not resolve is free.
How do I control cost?
Set maxUrlsPerDomain. 1,000 URLs cost US$0.50. Each run adds Apify's run-start charge
(US$0.00005 per GB of memory, US$0.00005 at the default 512 MB).
Can I give a sitemap URL directly?
Yes, put the sitemap URL in domains or startUrls.
Limits: what this actor does not do
- It does not crawl pages or check that each URL responds (that is a link checker's job).
- No private or loopback targets; redirects are re-checked at every hop.
- Each sitemap file must download within 60 seconds and be at most 50 MB uncompressed (the sitemap protocol limit); otherwise it is reported as an error row (billed as one URL row) and the next one goes ahead.
Changelog
- October 8, 2026: a sitemap that can't be fetched or parsed, and a domain with no readable sitemap, are now billed as one URL row each (US$0.0005). Blocked, private and unresolvable targets stay free.
- 1.0 (October 2026): first public version.