Broken Link Checker: Find 404s, Redirects & Dead Links avatar

Broken Link Checker: Find 404s, Redirects & Dead Links

Pricing

Pay per event

Go to Apify Store
Broken Link Checker: Find 404s, Redirects & Dead Links

Broken Link Checker: Find 404s, Redirects & Dead Links

Crawl a website and check every link, or bulk-check a URL list. Status codes, full redirect chains, response times, the pages and anchor text where each broken link appears. Robots-aware. $0.40 per 1,000 links.

Pricing

Pay per event

Rating

0.0

(0)

Developer

A Q

A Q

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Broken Link Checker: find 404s, redirects and dead links

Crawl any website and check every link on it, or paste a list of URLs to bulk-check their HTTP status. You get one clean row per unique link: status, HTTP code, full redirect chain, response time, and the exact pages and anchor text where the link appears, so you know what to fix and where.

$0.40 per 1,000 links checked. Pages crawled are free. A 25-page site with 1,000 links costs about $0.40.

What it does

  • Site crawl: starts from your homepage (or any page), follows internal links up to maxPages, and checks every internal and external link it finds.
  • Bulk URL checker: turn crawl off and it checks just the URLs you list: status codes, redirects, final URL, timing.
  • Clear status for every link: broken (4xx/5xx), error (DNS not found, connection refused, timeout, expired or invalid SSL certificate, redirect loop), blocked (401/403/429/999, usually bot protection rather than a dead link), redirected (works, but through 301/302 hops), ok.
  • Where it's broken: foundOn lists up to 10 source pages per link with anchor text, tag and nofollow flag, plus a total occurrences count.
  • Accurate: tries a fast HEAD request first and confirms every failure with GET, because many servers mishandle HEAD. Redirect chains are followed hop by hop.
  • Polite: honours robots.txt when crawling, at most 5 parallel requests per host, identifies itself with a clear user agent, retries 429/503 with backoff.
  • Problems first: rows are sorted broken, error, blocked, redirected, ok. SUMMARY record has counts for every status.
  • Optional checks of images, scripts, stylesheets, iframes and media (checkAssets).

Input example

{ "urls": ["https://example.com"], "maxPages": 200, "maxLinks": 10000, "onlyBroken": true }

Output example

{
"url": "https://example.com/old-pricing",
"status": "broken",
"isBroken": true,
"statusCode": 404,
"error": null,
"finalUrl": "https://example.com/old-pricing",
"redirectCount": 0,
"redirectChain": [],
"responseTimeMs": 182,
"contentType": "text/html",
"isInternal": true,
"linkType": "a",
"occurrences": 3,
"foundOn": [{ "pageUrl": "https://example.com/blog/launch", "anchorText": "see pricing", "tag": "a", "nofollow": false }],
"checkedAt": "2026-10-23T06:00:00.000Z"
}

Pricing compared

ActorPrice per 1,000 links
This Actor$0.40
khadinakbar/broken-link-checker$1.00
parseforge/broken-link-checker$1.20 + $0.04 per run
logiover/bulk-url-status-checker$2.50
logiover/broken-link-checker$5.00

Prices from the Apify Store, October 2026. Set a maximum cost per run in Apify and the Actor stops cleanly at the limit.

Use cases

  • SEO audits and link rot clean-up
  • Site migrations: verify every old URL redirects correctly
  • Monitoring: schedule a weekly run with onlyBroken and get only what broke
  • Bulk HTTP status and redirect checks for URL lists, sitemaps or backlinks

FAQ

Why is a link "blocked" and not "broken"? Sites like LinkedIn or some CDNs refuse automated requests (403, 429, 999). The page probably works in a browser, so it's kept separate from real 404s.

Does it run JavaScript? No. It reads the HTML your server returns, which is what search engines and most link checkers see. That makes it fast and cheap.

Does it follow nofollow links? Yes, it checks them and marks them nofollow: true.

API

curl -X POST "https://api.apify.com/v2/acts/best_apis~broken-link-checker/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" -d '{"urls":["https://example.com"],"onlyBroken":true}'