Broken Link Checker - 404s, Redirects & Slow Pages Site-Wide avatar

Broken Link Checker - 404s, Redirects & Slow Pages Site-Wide

Pricing

$0.70 / 1,000 url checkeds

Go to Apify Store
Broken Link Checker - 404s, Redirects & Slow Pages Site-Wide

Broken Link Checker - 404s, Redirects & Slow Pages Site-Wide

Check every URL a website publishes in its sitemaps: 404s, 5xx, timeouts, SSL errors, redirect chains and slow pages. No crawling needed, no proxy. Delta mode shows which problems are new since your last run and which got fixed. Pay per URL checked.

Pricing

$0.70 / 1,000 url checkeds

Rating

0.0

(0)

Developer

Luca Pietrini

Luca Pietrini

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Broken Link Checker — find 404s, redirects and slow pages across a whole website

Paste a website and every URL it publishes in its sitemap gets checked: dead pages (404, 410), server errors (5xx), timeouts, expired SSL certificates, redirect chains and slow responses. No crawling, no proxy, no login — the sitemap already tells us what the site claims to publish, so a 10,000-page site is checked in minutes, not hours.

Or paste your own list of URLs (from a CMS export, a spreadsheet, another Actor) and check exactly those.

Three things set it apart from the other link checkers on Apify Store:

  • Sitemap-driven, not crawl-driven. Crawlers miss pages that are not linked and waste time on pages that are. The sitemap is the site owner's own inventory; checking it answers the SEO question that matters: does every URL I submit to Google actually work?
  • Delta mode. Turn it on and every run tells you which problems are new since your last run, which are persisting, and which got fixed. Schedule it weekly and the dataset is your change log.
  • Full redirect chains. Every hop is recorded (301 → 302 → 200), so migration mistakes and redirect loops are visible, not hidden behind a final 200.

What you get

By default only problems are reported, so the dataset stays small. One row per URL:

{
"url": "https://example.com/old-page",
"status": 404,
"category": "client-error",
"ok": false,
"finalUrl": null,
"redirects": 0,
"redirectChain": [],
"responseMs": 212,
"contentType": "text/html",
"method": "HEAD",
"error": null,
"sitemap": "https://example.com/sitemap-pages.xml",
"lastmod": "2026-08-30",
"site": "https://example.com",
"checkedAt": "2026-09-18T12:00:00+00:00",
"change": "new"
}
categoryMeaning
ok2xx within the slow threshold, no redirect
redirectReached a 2xx only through one or more redirects (redirectChain lists every hop). Off by default? No — sitemap URLs should answer directly; turn off Treat redirects as problems if you disagree
slow2xx but slower than Slow page threshold (default 3 s)
client-error4xx — the classic broken link (404, 410, 403…)
server-error5xx
timeoutNo response within the timeout
connectionDNS failure, refused connection, host unreachable
sslCertificate problem (expired, wrong host, untrusted)
redirect-loop / too-many-redirectsThe chain never ends or exceeds Maximum redirect hops
changeDelta mode only: new, persisting or fixed

Switch What to report to All URLs to also get the healthy pages with their status and response time — useful for a full site health export.

A run summary — URLs checked, problems by category, status-code histogram, per-site counts, delta totals, timing — is saved as the SUMMARY record of the run's key-value store.

Input

OptionDefaultWhat it does
Websites or sitemap URLsA domain (sitemap discovered via robots.txt and common paths) or a sitemap / sitemap index URL. Nested indexes, .xml.gz and text sitemaps are handled.
Or: a list of URLs to checkExact URLs, one per line. Can be combined with sites.
What to reportproblems onlyOr all URLs.
Maximum URLs to check0 (no limit)Exact cap across all sites.
Check only / Skip URLs matchingCase-insensitive regular expressions.
Delta modeoffFlag problems as new / persisting, report fixed URLs. Snapshots live in a named key-value store, one per site.
Treat redirects as problemsonSee the redirect category above.
Slow page threshold (ms)3000
Parallel checks20Never more than 8 concurrent requests per host, whatever the total.
Use GET instead of HEADoffEach URL is probed with HEAD and falls back to GET when the server refuses HEAD (403/405/501). Bodies are never downloaded either way.

How the check works

  1. Sitemaps are discovered and parsed as a stream: checks start while the sitemap files are still downloading, and memory stays flat on huge sites.
  2. Each URL gets a HEAD request. Servers that reject HEAD get a streamed GET that is closed as soon as the headers arrive.
  3. Redirects are followed by hand, one hop at a time, so the chain is recorded exactly.
  4. Transient failures (timeouts, 429, 5xx) are retried once with back-off before being reported.
  5. Requests are limited to 8 in flight per host — polite by construction, fast across many hosts.

Delta mode: new, persisting, fixed

The problem URLs of each site are remembered between runs. Next run:

  • a problem not seen before → new
  • a problem seen last time too → persisting
  • a URL that was a problem last time and is healthy now → fixed (reported even in problems only mode, because that is exactly what you want to know)

A run cut short by Maximum URLs or by your maximum charge does not overwrite the snapshot, so a partial check can never make the next run report hundreds of false fixed URLs.

Pricing

Pay per event: one event per URL checked. Reporting problems only or all URLs costs the same — the work is the same. Set Maximum URLs or a maximum charge on the run to cap the cost on very large sites; the Actor stops cleanly when the budget is reached and keeps everything already found.

Use cases

  • SEO hygiene — everything you submit to Google in your sitemap answers 200, directly. Find the 404s and redirect chains that waste crawl budget.
  • Site migrations — run before and after; the fixed and new flags tell you exactly what the migration broke or repaired.
  • Weekly monitoring — schedule it and pipe the dataset to Slack, email or a sheet through Apify integrations.
  • Link lists — check the thousands of external links in your CMS or knowledge base from an exported list.
  • AI agents — deterministic JSON, exact caps, no proxies, no login: safe to call programmatically and pay per event.

Run it from code

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("bruco3/broken-link-checker").call(run_input={
"startUrls": [{"url": "https://example.com"}],
"deltaMode": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["category"], row["status"], row["url"], row.get("change"))

FAQ

Why does it flag redirects? A URL in a sitemap is a promise: "this page lives here". If it answers with a redirect, search engines follow it but count it against you, and the sitemap is stale. Turn Treat redirects as problems off if you only care about hard failures.

Does it download the pages? No. HEAD requests, or GET requests closed after the headers. Bandwidth is negligible and servers barely notice.

HEAD says 404 but the page works in my browser. Some servers answer HEAD incorrectly. Turn on Use GET instead of HEAD and the check uses GET for every URL.

Can it crawl a site without a sitemap? No, by design. That is a different tool with different costs and a different failure mode. Pair this Actor with a crawler if you need link discovery.

Is it legal? It requests only pages the site publishes for the public, identifies itself with a clear User-Agent, never downloads bodies, and never exceeds 8 concurrent requests per host.

Feedback

A site this Actor cannot check, or a field you are missing? Open an issue on the Issues tab. If it saved you time, a review helps others find it.

Changelog

  • 0.1 — initial release: sitemap-driven and list-driven checks, HEAD with GET fallback, full redirect chains, slow/SSL/timeout detection, delta mode with new / persisting / fixed, exact caps, pay per URL checked.