Broken Link Checker: Find Dead Links & 404s on Any Website avatar

Broken Link Checker: Find Dead Links & 404s on Any Website

Pricing

from $0.50 / 1,000 link checkeds

Go to Apify Store
Broken Link Checker: Find Dead Links & 404s on Any Website

Broken Link Checker: Find Dead Links & 404s on Any Website

Crawl a website and check every internal and external link, image, script and stylesheet. Finds 404s, 5xx errors, dead domains, timeouts and redirect chains, with the pages and anchor text where each link appears. $0.50 per 1,000 links.

Pricing

from $0.50 / 1,000 link checkeds

Rating

0.0

(0)

Developer

Andrew Shamah

Andrew Shamah

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Broken Link Checker: find dead links, 404s and redirect chains on any website

Crawl a website and check every link on it: internal pages, outbound links, images, scripts, stylesheets and iframes. Get a clean table of broken links (404, 410, dead domains), server errors (5xx), timeouts and redirects, with the pages where each link appears and its anchor text, so you know exactly what to fix. No browser, no login, no proxies: fast, plain HTTP checks.

Price: $0.50 per 1,000 links checked ($0.0005 per link) plus a tiny start fee. Crawling pages is free; you only pay for unique links checked. Invalid inputs are free error rows.

What it finds

ResultMeaning
broken404, 410 or other 4xx, unknown domain, refused connection, malformed URL
server-error5xx responses
timeoutNo response within 20 seconds
restricted401, 403, 429, 999 (the server blocks automated checks, e.g. LinkedIn; usually not really broken)
ok2xx/3xx after following redirects (each redirect hop is listed in redirectChain)
skippedLink points to a private/local network address

Features

  • 🕸️ Whole-site crawl (breadth first) with page and depth limits, include/exclude URL patterns and optional subdomains.
  • 🔗 Every link type: <a> links, images, scripts, stylesheets and iframes (turn assets off with checkResources: false).
  • 🌍 External links too: check outbound links (on by default), with at most 2 parallel requests per host so you never hammer anybody.
  • 📍 Where to fix it: each link lists up to 10 pages that contain it, how many times it was found, and its anchor texts.
  • ↪️ Redirect audit: full redirect chain for every link; optionally report all redirected links as problems for SEO clean-ups.
  • 🎯 Only problems mode: save just the broken links for a short to-do list.
  • 🤖 Respects robots.txt and crawl-delay while crawling; HEAD first, GET fallback, so checks are light.
  • 📊 A per-site REPORT (key-value store) with counts by result.
  • ⏱️ Bulk: check many websites in one run (startUrls or a pasted list).

Input examples

Check a whole site (up to 100 pages and 2,000 links):

{ "startUrls": ["https://example.com"] }

Only broken links of the blog, internal links only:

{ "startUrls": ["https://example.com/blog/"], "includePatterns": ["/blog/*"], "checkExternalLinks": false, "onlyProblems": true }

Quick check of the links on a few pages (no crawling beyond the start pages):

{ "startUrls": ["https://example.com", "https://example.org/pricing"], "maxDepth": 0 }

Output

One row per unique link:

FieldDescription
site, urlWebsite and the checked link
status, statusCode, isBrokenResult (see table above), HTTP status, true for broken/server-error
errorNetwork error, e.g. DNS failure or timeout
finalUrl, redirected, redirectChainWhere the link ends up and each hop (301 https://...)
linkTypeinternal, external or invalid
resourceTypelink, image, script, stylesheet, iframe
foundOnCount, foundOn, anchorTextsHow often, on which pages and with what text the link appears
contentType, responseTimeMs, checkedAtExtra details

Example row:

{
"site": "example.com", "url": "https://example.com/old-page", "status": "broken", "statusCode": 404, "isBroken": true,
"linkType": "internal", "resourceType": "link", "foundOnCount": 3,
"foundOn": ["https://example.com/", "https://example.com/blog/post-1"], "anchorTexts": ["Read more"],
"redirectChain": [], "finalUrl": "https://example.com/old-page", "responseTimeMs": 112
}

Cost examples

  • 500-link small business site: $0.25
  • 2,000 links (default cap per site): $1.00
  • Set Max links or a maximum cost per run in the run options to stay within any budget; the Actor stops cleanly when the limit is reached.

FAQ

Why is a link "restricted" and not broken? Some sites (LinkedIn, Cloudflare-protected pages, rate-limited APIs) refuse automated requests with 403/429/999 even though the page works in a browser. They are reported separately so they don't pollute your broken list.

Does it render JavaScript? No. It reads the HTML your server sends, which is what search engines see first. Links injected only by JavaScript are not found.

Will it overload my site? No. Crawling uses up to 5 parallel requests (configurable) and honours crawl-delay; link checks are capped at 2 parallel requests per host.

Is it legal? It requests public pages exactly like a browser or search engine would, and only reads link targets' status codes. Only check sites you are allowed to crawl.

SEO & web suite

Documents suite

Jobs suite

Also by us