Broken Link Checker - Find 404s and Dead Links avatar

Broken Link Checker - Find 404s and Dead Links

Pricing

from $3.00 / 1,000 website checkeds

Go to Apify Store
Broken Link Checker - Find 404s and Dead Links

Broken Link Checker - Find 404s and Dead Links

Crawl any website and find broken links, 404 errors, redirect chains, timeouts, and SSL failures. Essential for SEO audits, QA, and content maintenance. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Pricing

from $3.00 / 1,000 website checkeds

Rating

0.0

(0)

Developer

Alessandro Santamaria

Alessandro Santamaria

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

3 days ago

Last modified

Share

Broken Link Checker

Find every broken link on any website — 404s, redirects, SSL errors, timeouts.

Point this actor at any domain and it will crawl internal pages, extract every link, image, stylesheet, script and iframe, then check each one over HTTP. You get back a clean dataset of broken links with status codes, redirect chains, response times and precise error classifications — ready for SEO reports, QA sign-off, or agency deliverables.

No browser, no JavaScript rendering, no heavy frameworks — just fast concurrent HTTP checks at machine speed.

Features

  • Internal + external checking — same-domain crawl plus outbound link validation
  • Every link type — anchors, images, stylesheets, scripts, iframes
  • Smart HEAD → GET fallback — fast by default, accurate when servers misbehave
  • Redirect chain capture — see every hop in a 301 → 302 → 200 sequence
  • Precise error classification — 404, 500, timeout, DNS, SSL, connection reset — each bucketed
  • Depth control — crawl 1 page or 10 levels deep
  • robots.txt aware — respects the site's crawl policy
  • Parallel requests — configurable concurrency, defaults to 10
  • Per-site summary — broken counts, most-broken page, status code breakdown
  • Fast & lightweight — runs at minimal cost with no browser overhead

Example Output

Running against a site with a broken image and a redirected outbound link returns records like:

{
"website": "https://example.com",
"url": "https://cdn.example.com/images/hero.png",
"source_page": "https://example.com/",
"link_text": "Hero banner",
"link_type": "image",
"is_internal": false,
"status_code": 404,
"status_category": "client_error",
"error": "",
"response_time_ms": 142,
"redirect_chain": [],
"final_url": "https://cdn.example.com/images/hero.png",
"checked_at": "2026-04-07T10:15:32Z"
}

A redirected link with the full chain:

{
"website": "https://example.com",
"url": "http://oldblog.example.com/post-1",
"source_page": "https://example.com/blog",
"link_text": "Read the original post",
"link_type": "anchor",
"is_internal": false,
"status_code": 200,
"status_category": "ok",
"response_time_ms": 318,
"redirect_chain": [
"https://oldblog.example.com/post-1",
"https://blog.example.com/post-1",
"https://blog.example.com/posts/post-1"
],
"final_url": "https://blog.example.com/posts/post-1",
"checked_at": "2026-04-07T10:15:33Z"
}

Plus one summary record per website:

{
"website": "https://example.com",
"type": "summary",
"total_links_checked": 842,
"broken_count": 17,
"redirect_count": 34,
"timeout_count": 2,
"external_broken": 12,
"internal_broken": 5,
"pages_crawled": 45,
"most_broken_page": "https://example.com/resources",
"broken_by_category": {
"404": 13,
"500": 1,
"ssl_error": 1,
"timeout": 2
},
"scraped_at": "2026-04-07T10:16:02Z"
}

Input Parameters

ParameterTypeDefaultDescription
websitesarrayrequiredStarting URLs to check.
maxDepthinteger2How many levels of internal links to follow.
maxUrlsPerSiteinteger1000Safety cap on unique links per website.
checkExternalbooleantrueAlso validate links to other domains.
followRedirectsbooleantrueFollow 3xx chains up to 10 hops.
respectRobotsTxtbooleantrueHonor the site's robots.txt.
timeoutSecondsinteger15Per-link HTTP timeout.
concurrencyinteger10Parallel link checks.
userAgentstringdefault bot UACustom User-Agent header.
includeOKbooleanfalseInclude 200 OK links in output.
proxyConfigurationobjectdisabledOptional Apify proxy.

Use Cases

SEO Audits

Google penalizes sites with broken links and dead outbound references. Run this monthly against your whole site, filter the dataset by status_category = "client_error" or "server_error", and ship a prioritized fix list to your content team.

Content Maintenance

Blog posts and documentation rot over time as linked sources disappear. Point the checker at /blog/ and catch every dead reference before readers do.

Broken backlinks on other sites are gold — they point at pages that used to work. Run the checker against your own 404 log sources and prioritize outreach by the most-broken referring pages.

QA Testing

Pre-launch validation: before you push a new site live, run the checker with maxDepth=5 against staging to catch every broken asset, dead internal link, and misconfigured CDN URL.

Agency Reporting

Automate monthly site health reports for clients. Combine the summary record with a dashboard and you've got a recurring deliverable that catches problems before clients do.

Post-Migration Checks

Site moved to a new CMS? Domain changed? Run the checker immediately after launch and diff against the pre-migration baseline to guarantee no page and no asset was lost in transit.

Competitor Intel

Run the checker against competitor domains and use their broken pages as your opportunity — broken content means abandoned topics, missing products, or outreach targets.

Pricing

  • $0.001 per run start
  • $0.003 per website checked

Pricing is per website, not per link. Checking 10,000 links on one site costs the same as checking 10 — run it against large domains without worrying about a surprise bill. 100 sites ≈ $0.30.

Issues & Feedback

Found a bug or have a feature request? Please open an issue on the actor page.