Broken Link Checker for 404s, Dead Links & Redirects avatar

Broken Link Checker for 404s, Dead Links & Redirects

Pricing

from $0.42 / 1,000 link checkeds

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

Broken Link Checker for 404s, Dead Links & Redirects

Find broken links, 404 errors, dead external links, broken images and redirect chains on any website. Shows the page and link text for each. Fast, no browser.

Pricing

from $0.42 / 1,000 link checkeds

Rating

0.0

(0)

Developer

goldish_fireplace

goldish_fireplace

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Broken Link Checker: Find 404s, Dead Links, Broken Images & Redirect Chains

Online broken link checker and dead link finder for whole websites. Enter a URL, and it crawls your site, checks every internal and external link, image, script and stylesheet, and returns a list of 404 errors, dead external links, broken images and redirect chains, each with the page it is on and the link text. Export to CSV, Excel, JSON or a shareable HTML report.

Broken Link Checker crawls your website and checks every link, image, script and stylesheet. It finds broken links (404, 410, 500…), dead external links, broken images, redirect chains, redirect loops, timeouts and DNS errors. For each problem it tells you which page it is on and the link text, so you can fix it in minutes.

It is a fast website link auditor that uses plain HTTP and no browser, so a full scan costs a fraction of a cent per page. You can use it for SEO audits, QA checks before a release, content migrations, or monthly site health monitoring.

  • 🔎 Crawls your site. It follows internal links from your start URL, up to the page limit you set.
  • 🔗 Checks every unique URL once. That covers internal pages, external links, <img>, <script>, stylesheets, <iframe>, video and audio.
  • 🧭 Shows the full redirect chain. You see each hop with its status code, so you can replace 301/302 chains with direct links.
  • 🛟 Avoids false alarms. It tries HEAD first and falls back to GET when a server rejects HEAD. It retries 429 and 5xx responses and honours Retry-After. Sites that block bots (401, 403, 429, LinkedIn's 999) are reported as uncertain, not broken.
  • 📍 Tells you where to fix it. For each link you get the first page it was found on, the anchor text, how many times it is linked, and up to 10 source pages.
  • 📊 Gives you a summary report. The SUMMARY record has totals per result plus broken links grouped by page.
  • 🖥️ Gives you a shareable HTML report. Open the HTML report in the Output tab: totals at the top, then every broken link, redirect and uncertain link with the page it is on. Send it to a client or teammate as is.
  • 🤖 Crawls politely. It respects robots.txt when crawling and has per-host concurrency limits. External sites are only pinged, never crawled.

Use cases

  • SEO audits: broken links and long redirect chains waste crawl budget and hurt user experience.
  • QA and release testing: catch dead links and missing assets before or after a deployment. You can run it from CI through the Apify API.
  • Website migrations: confirm that old URLs redirect correctly and nothing returns 404.
  • Content teams and agencies: run monthly scheduled audits of client websites and export the results to CSV or Excel.
  • Documentation sites: find links to moved or deleted pages.

How to use it

  1. Enter your website in Website URLs, e.g. https://example.com.
  2. Optionally set Max pages to crawl and What to output (broken only, problems, or all links).
  3. Click Start. When the run finishes, open the Problems overview table, or download the results as JSON, CSV, Excel or HTML.

Input example

{
"startUrls": [{ "url": "https://example.com/" }],
"maxPagesToCrawl": 500,
"maxLinksToCheck": 5000,
"outputMode": "problems",
"checkExternalLinks": true,
"checkAssets": true,
"excludeUrlPatterns": ["/tag/", "\\?replytocom="]
}
FieldDefaultWhat it does
startUrls(required)Pages to start crawling from
maxPagesToCrawl100Pages of your site to open and scan
maxLinksToCheck5000Cap on unique URLs checked. This also caps your cost
outputModeproblemsbroken, problems (broken + redirects + uncertain) or all
checkExternalLinkstrueCheck links to other websites
checkAssetstrueCheck images, scripts, stylesheets, iframes and media
includeSubdomainsfalseCrawl blog.example.com as part of example.com
respectRobotsTxttrueSkip pages disallowed by robots.txt when crawling
excludeUrlPatterns[]Regex or plain-text patterns to skip

Output example

Each dataset item is one checked URL:

{
"url": "https://the-internet.herokuapp.com/asdf.jpg",
"result": "broken",
"status": 404,
"statusText": "Not Found",
"error": null,
"finalUrl": "https://the-internet.herokuapp.com/asdf.jpg",
"redirectChain": [],
"method": "GET",
"responseTimeMs": 412,
"isInternal": true,
"element": "img",
"foundOn": "https://the-internet.herokuapp.com/broken_images",
"anchorText": null,
"occurrences": 1,
"sources": [{ "pageUrl": "https://the-internet.herokuapp.com/broken_images", "anchorText": null, "element": "img" }],
"checkedAt": "2026-11-01T04:09:19.742Z"
}

result is one of:

resultmeaning
broken4xx/5xx response (e.g. 404 Not Found, 410 Gone, 500)
errorNo valid response: DNS failure, timeout, connection refused, redirect loop (error field gives the code)
redirectWorks, but only after one or more redirects (see redirectChain)
uncertain401/403/429/999. The site requires login or blocks automated checks, so verify it manually
ok2xx response (only output in all mode)

The SUMMARY record in the key-value store looks like this:

{
"pagesCrawled": 60,
"linksChecked": 230,
"results": { "ok": 210, "redirect": 2, "broken": 14, "error": 1, "uncertain": 3 },
"pagesWithBrokenLinks": 14,
"brokenByPage": { "https://example.com/hovers": ["https://example.com/users/1"] }
}

Pricing

This Actor uses pay-per-event pricing. You pay a small fixed amount per unique link checked (see the Pricing tab), whatever output mode you choose. Platform compute and proxy-free HTTP requests are included, so there are no surprise usage costs.

What you scanTypical unique linksCost
Small site (20 pages)~300300 × price per link
Medium site (100 pages)~1,5001,500 × price per link
Large site (1,000 pages)~10,00010,000 × price per link

You are never charged twice for a link that appears on many pages.

  • Example: a 100-page site with about 1,500 unique links costs well under a dollar.
  • Set Max links to check or a maximum cost per run, and the Actor stops cleanly at your limit. It still saves every result checked up to that point.

Use it from AI agents, Zapier, Make, n8n or the API

  • AI agents (MCP): Broken Link Checker works with the Apify MCP server, so Claude, Cursor, ChatGPT and other MCP clients can find it and run it for you. Ask something like "Run Broken Link Checker on example.com and list what to fix."
  • No-code: use the Apify app in Zapier, Make or n8n to start a run and send the results to Google Sheets, Slack or email.
  • API and CI: start a run with one HTTP call (POST https://api.apify.com/v2/acts/goldish_fireplace~broken-link-checker/run-sync-get-dataset-items) and read SUMMARY to pass or fail a pipeline.
  • Schedules: run it weekly or monthly with Apify Schedules and get notified when new problems appear.

Limitations

  • No JavaScript rendering. Links that only appear after JavaScript runs in the browser are not found.
  • No logins. Pages behind a login or paywall are not crawled.
  • Some sites block automated checks. These links are reported as uncertain rather than guessed as broken or fine, so check them by hand.
  • Anchors (#section) are not validated. It checks that the page loads, not that the anchor exists on it.
  • One request per external link. External sites are pinged, not crawled, so it cannot tell you about problems deeper inside them.

FAQ

How do I find broken links on my website? Paste your homepage into Website URLs and click Start. When the run ends, open the Problems overview table or the HTML report to see every broken link and the page it is on.

Does it find 404 errors and broken images? Yes. Every link, <img>, script, stylesheet, iframe and media file is checked, and anything that returns 404, 410 or a 5xx error is marked broken.

Why is a link "uncertain" and not "broken"? Sites like LinkedIn, Instagram and some CDNs return 401/403/429/999 to automated requests even when the page works in a browser. We flag these separately so you don't waste time on false alarms.

Does it check JavaScript-rendered links? No. It reads the HTML your server sends, which is what search engines see first. That keeps it fast and cheap. Most sites, including WordPress, Shopify, Webflow and static sites, include their links in the HTML.

Does it crawl external websites? No. External links get one lightweight request each. Only your own site is crawled.

Is it legal? It only requests public URLs on the site you choose, plus the links that site points to. It collects no personal data and respects robots.txt when crawling. Only scan websites you own or have permission to audit.

Can I run it on a schedule or from CI? Yes. Use Apify Schedules for monthly audits, or call the Actor through the Apify API and fail your pipeline when results.broken > 0 in SUMMARY.

Something wrong or missing? Open an issue on the Issues tab and we'll look into it.

  • 🧪 SEO Audit Crawler: audit every page for missing titles, meta descriptions, H1s, canonicals, noindex, duplicate content and alt text, with a 0–100 SEO score per page. Run it together with Broken Link Checker for a complete technical SEO health check.