Broken Link Checker: Crawl Sites, Find Dead Links avatar

Broken Link Checker: Crawl Sites, Find Dead Links

Pricing

from $1.40 / 1,000 page crawleds

Go to Apify Store
Broken Link Checker: Crawl Sites, Find Dead Links

Broken Link Checker: Crawl Sites, Find Dead Links

Crawls whole websites and checks every link, image and optional script or stylesheet. Reports 404s, server errors, dead domains, timeouts and redirect chains with the exact page and anchor text, plus mixed content and links to localhost or staging hosts. Pay per crawled page.

Pricing

from $1.40 / 1,000 page crawleds

Rating

0.0

(0)

Developer

Batu T.

Batu T.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Security

Limited permissions

Share

Broken Link Checker: 404s, Redirects, Mixed Content

Crawl a whole website and check every link on it: pages, images and, if you want, scripts and stylesheets. You get one row per problem with the exact page it sits on and the anchor text, so you can fix it in minutes. Plus one summary per website with the numbers and the worst offenders.

What it finds

statusmeaning
brokenthe link answers 4xx or 5xx (404 Not Found, 410 Gone, 500 Server Error ...)
dns-errorthe domain does not exist any more
connection-errorconnection refused or reset, TLS certificate errors
timeoutno answer within the timeout
too-many-redirectsredirect loops and chains longer than the limit
invalid-urlmalformed href in the HTML
redirectworks, but via 301/302/307/308; finalUrl and the full redirectChain show where it ends
blockedthe server refused the bot (429 rate limit, or 401/403/999 on external sites). Check these by hand
skippeddisallowed by robots.txt (only listed with output "All checked links")

Extra flags in issues:

  • mixed-content: an http image, script or stylesheet on an https page
  • staging-host: links to localhost, private IPs, .local/.test hosts, tunnels or subdomains like staging., dev., preview.

Output

One item per problem link occurrence:

fieldexample
sourcePagehttps://www.example.de/kontakt
linkUrlhttps://www.example.de/alte-seite
href/alte-seite (as written in the HTML)
anchorTextZur Anfahrt (alt text for images)
elementa, img, script, link
isExternalfalse
status, statusCodebroken, 404
finalUrl, redirectChainafter redirects: ["301 http://example.de/x", "301 https://example.de/x"]
issues["mixed-content"]
errorHTTP 404, Domain does not resolve (ENOTFOUND)
countOnPagehow often this link appears on that page

Plus one item with type: "summary" per website: pagesCrawled, linksFound, linksChecked, ok, broken, brokenInternal, externalBroken, redirects, blocked, timeouts, mixedContent, stagingLinks, pagesWithProblems, topBrokenUrls and topRedirects (each with occurrences and example pages), robotsTxt, stoppedBy, durationSecs. The summaries are also saved as SUMMARY in the key-value store.

Filter the dataset by type = link or summary when you export to CSV or Excel.

How it checks

  • Crawls pages on the start host (www and non-www count as one site, subdomains optional), breadth first, up to maxPagesPerSite. Links on crawled pages are all checked, also those the page limit stops it from opening.
  • HEAD request first; GET when the server rejects or mishandles HEAD (400, 403, 404, 405, 429, 5xx, empty response). This avoids the false 405s and 404s that simpler checkers report.
  • Redirects are followed one by one, so you see every hop and loops are detected.
  • Every unique external URL is checked once per run, even across several websites.
  • At most 5 parallel requests per host, one slower retry on 429, honest user agent, robots.txt respected (also for redirect targets).
  • Output: problems only (default) or every checked link. Report redirects: all, only for links to your own site, or none (wa.me or link shortener redirects are usually intended).
  • Exclude URLs matching skips URLs by regular expression, for example linkedin\.com or \?sort=. Only crawl URLs matching limits the crawl to a section such as /blog/.

Pricing

You pay per crawled page (an HTML page of your site that was opened and checked). Link checks, images and external URLs are included. Start URLs that fail (invalid, not reachable, not HTML, disallowed by robots.txt) are not charged; they appear as a summary item with an error.

Limits

  • No JavaScript rendering: links that only appear after client-side rendering are not found. Server-rendered sites, WordPress, Next.js static export and most CMS sites work fine.
  • Some sites (LinkedIn, Instagram, sites behind bot protection) refuse automated requests. Those links are reported as blocked, not broken. A proxy can be set as fallback for them.
  • No login, no forms, no cookies. Sites that need a cookie to load may show as redirect loops.

Input example

{ "startUrls": ["https://www.example.de/"], "maxPagesPerSite": 200, "checkScriptsAndStyles": true }

FAQ

What am I charged for? One event per crawled HTML page of your website. Checking links, images and external URLs is included. Start URLs that fail are not charged and show up as a summary item with an error. When your charge limit is reached, the crawl stops and the summary says stoppedBy: "charge limit".

What happens when maxPagesPerSite is reached? The crawler stops opening new pages, but every link found on the pages it already crawled is still checked. The summary then says stoppedBy: "maxPagesPerSite".

Do I need a proxy? No. Requests go out directly by default. If you configure a proxy, the default fallback strategy retries links that answer 401, 403, 429 or 999 or fail to connect once through the proxy; the always strategy sends every request through it.

Why is a link blocked and not broken? Rate limits (429) and bot refusals from other websites (401, 403, 999) say nothing about whether the page exists, so they are listed as blocked for a manual check instead of being counted as broken.

Does it render JavaScript or log in? No. It reads the HTML the server sends, without login, forms or cookies. Links that only appear after client-side rendering are not found.

Use with AI agents (MCP)

This Actor works as a tool for Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server. Add only this Actor:

https://mcp.apify.com?tools=webify-lab/broken-link-checker

On first use the server signs you in with OAuth. Alternatively send the header Authorization: Bearer <APIFY_TOKEN>. Agents on the default Apify MCP setup can also find this Actor with search-actors and run it with call-actor. Pricing is the same as in Apify Console: you pay per result.