Bulk Broken Link Checker - Sitemap & Redirect Chains
Pricing
from $1.00 / 1,000 results
Bulk Broken Link Checker - Sitemap & Redirect Chains
Find broken links on any website in bulk. Give the Actor a domain, a page URL or a sitemap.xml: it explores the pages, collects every link they publish, and tests each one. You get one row per unique link with the HTTP status, a clear category (ok, redirected, not-found, server-error, timeout,...
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Yoann TUQUET
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Bulk Broken Link Checker – find 404s, redirect chains and dead links from a sitemap or URL
Find broken links on any website in bulk. Give the Actor a domain, a page URL or a sitemap.xml: it explores the pages, collects every link they publish, and tests each one. You get one row per unique link with the HTTP status, a clear category (ok, redirected, not-found, server-error, timeout, dns-error, ssl-error, redirect-loop...), the full redirect chain, the final URL and the page where the link was found, so you know exactly what to fix.
Only links that pages (or sitemaps) publish themselves are tested. The Actor never guesses paths, never scans a site for hidden files and reads no personal data: it uses plain HTTP HEAD and GET requests, exactly like a browser or a search engine would.
Why use it
- ✅ Starts from what you have: a domain (the sitemap is found through robots.txt), a direct sitemap URL (indexes and .gz files are followed), or a single page URL.
- ✅ Tells you where to fix it: every row carries
sourcePage(first page containing the link) andfoundOnPages(how many explored pages contain it). - ✅ Full redirect chains: each hop with its status code (
301,302,307,308), redirect loops and chains that are too long are flagged. - ✅ Honest classification: a 404 is broken; a 403 or 429 from a bot filter is reported as
access-restrictedwithisBroken: nullinstead of a false alarm. Transient errors (timeouts, connection errors, 5xx) are retried once. - ✅ Cheap and fast: HEAD requests first, GET only when a server refuses HEAD. Duplicates are removed across pages and across all sites of a run.
- ✅ Polite by design: respects robots.txt, at most 2 requests per second to any domain, and never requests private or local network addresses.
- ✅ Pay only for results: one charge per link actually tested. Links skipped because of robots.txt, invalid inputs and duplicates are not charged, and Only return broken links lets you pay only for the problems.
Use cases
- SEO audits: find internal 404s, long redirect chains and sitemap entries that no longer resolve before they cost you rankings.
- Site migrations: after a redesign or a domain change, list every old URL that now redirects through several hops or ends in an error.
- Content and documentation teams: schedule a weekly run on your docs or blog and get only the broken links (external ones included) to fix.
- Agencies and freelancers: check dozens of client sites in one run and export a CSV report per site.
- Link building and PR: verify that outbound links you pay for or exchange still work and do not redirect somewhere unexpected.
How to use it
- Click Try for free and paste domains, page URLs or sitemap URLs into Websites, pages or sitemap URLs.
- Set Max pages explored per site and Max links checked per site to control the size (and cost) of the run.
- Click Start. Export the results as JSON, CSV, Excel or HTML, or fetch them through the Apify API.
Tip: turn on Only return broken links and create a Schedule: you only receive, and pay for, new problems.
What is checked
| Area | Details |
|---|---|
| Pages explored | Pages listed in the sitemap (up to Max pages explored per site), the home page, or the page URL you give |
| Links tested | Clickable links (<a>, <area>) of those pages; optionally images, scripts and stylesheets |
| Sitemap entries | Every URL listed in the sitemap is also tested (can be turned off) |
| Status | HTTP status of the final URL after following up to 20 redirects |
| Failures | Timeout, DNS error, SSL/certificate error, connection error, redirect loop, too many redirects |
| Skipped links | mailto:, tel:, javascript: and #anchors are ignored |
Categories: ok, redirected, not-found (404 or 410), client-error (other 4xx), server-error (5xx), access-restricted (401, 403, 407, 429, 999), timeout, dns-error, ssl-error, connection-error, redirect-loop, too-many-redirects, bad-redirect, robots-blocked, blocked-address, other.
Input
{"items": ["www.sitemaps.org", "https://example.com/blog", "https://example.org/sitemap.xml"],"maxPagesPerSite": 50,"maxLinksPerSite": 500,"onlyBroken": true,"linkScope": "all","excludePattern": "linkedin\\.com|/logout"}
| Field | Description | Default |
|---|---|---|
items | Domains, page URLs or sitemap URLs | required |
maxPagesPerSite | Pages downloaded per site to collect links | 50 |
maxLinksPerSite | Unique links tested per input (caps the cost per site) | 500 |
onlyBroken | Return only broken links | false |
linkScope | all, internal or external links | all |
checkSitemapUrls | Also test the URLs listed in the sitemap | true |
includeAssets | Also test images, scripts and stylesheets | false |
excludePattern | Regex: links matching it are not tested | none |
maxRedirects | Redirects followed before too-many-redirects | 10 |
timeoutSecs | Timeout per request | 15 |
Output
One dataset item per unique link (real example from a test run):
{"url": "http://www.w3.org/TR/REC-xml/","finalUrl": "https://www.w3.org/TR/REC-xml/","status": 200,"category": "redirected","isBroken": false,"redirectCount": 1,"redirectChain": [{ "url": "http://www.w3.org/TR/REC-xml/", "status": 301 }],"sourcePage": "https://www.sitemaps.org/protocol.html","foundOnPages": 1,"linkType": "anchor","internal": false,"method": "HEAD","responseMs": 56,"error": null,"site": "sitemaps.org","checkedAt": "2026-09-18T17:27:44.158Z"}
isBroken is true for a broken link, false for a working one, and null when it could not be verified (access-restricted, robots-blocked, blocked-address). A SUMMARY record in the run's key-value store gives totals per category and, for each input, the pages explored and the reason when something stopped the run (no sitemap, limit reached).
Pricing
Pay per event: $0.001 per link tested, which is $1 per 1,000 links. Links that were not requested (blocked by robots.txt or pointing to a non-public address), invalid inputs and duplicate links are not charged. Cap your spending with the maximum charge setting of each run, with Max links checked per site, or with Only return broken links.
Integrations
- API: start runs and download results from any language with the Apify API or clients.
- Schedules and webhooks: run weekly and trigger a webhook when a run finishes.
- Make, Zapier, n8n: send broken links to Slack, Google Sheets, Jira or your ticketing tool.
- AI agents: callable as a tool through the Apify MCP server.
FAQ
Does it respect robots.txt?
Yes. Pages and links disallowed for crawlers are not requested: they appear with the category robots-blocked and are not charged. Requests are limited to 2 per second per domain, robots.txt of every checked domain included.
Why do some links show access-restricted?
Many sites answer 403, 429 or 999 to automated requests. The Actor does not try to get around such protections, so it reports the link as unverified (isBroken: null) instead of calling it broken.
What if a site has no sitemap?
Only the home page is explored and the run says so in the SUMMARY record. Give page URLs (or a sitemap URL) to explore more.
Does it crawl the whole site? No. It explores the pages listed in the sitemap (up to Max pages explored per site) and tests the links found on them. It does not follow links to discover new pages.
Are links in JavaScript-rendered content found? No. Pages are read as plain HTML, so links added by JavaScript after loading are not seen.
Is the same link reported twice?
No. Each unique URL is tested and billed once per run, even if it appears on many pages or on several of your sites; foundOnPages tells you how many pages contain it.
Limitations
- Only links present in the downloaded HTML are tested; pages that need a login or JavaScript rendering are not covered.
- Anchors (
#section) are not verified, only the page they belong to. - Servers that block automated requests cannot be verified; the Actor does not bypass protections.
- Pages above about 3 MB are read only in part, and sitemap files above about 60 MB uncompressed are skipped.
- Local, private and link-local network addresses are never requested.