Broken Link Audit
Pricing
$4.99/month + usage
Broken Link Audit
Broken Link Audit is an Apify actor that crawls websites to find broken links, dead URLs, and failed HTTP requests. It scans internal pages, extracts all links, and performs live HTTP checks to detect 404 errors, timeouts, and server issues, helping you fix problems before they harm SEO.
Broken Link Audit — Find & Fix Dead Links on Any Website
Broken Link Audit is an Apify actor that automatically crawls any website and detects broken links, dead URLs, and failed HTTP requests. Point it at any starting URL and it will spider through your internal pages, extract every anchor link, and validate each one with a live HTTP check — so you can find and fix 404 errors, timeouts, and server failures before they damage your SEO or frustrate your users.
What This Broken Link Checker Does
This actor performs a full dead link audit by:
- Crawling the starting URL and following internal links up to your configured depth
- Extracting all anchor
hreflinks from each page (internal and external) - Sending HTTP requests to every unique link and recording the response
- Classifying each link as
ok,broken,redirect,timeout, orerror - Reporting the exact source page, anchor text, status code, and response time for every result
Use Cases
- SEO auditing — Automatically find broken links dragging down your search rankings and fix 404 errors that harm crawlability
- Site maintenance — Monitor hundreds of pages for dead URLs without any manual checking
- QA testing — Validate all internal and external links before publishing or deploying a new site
- Content migration — After a site redesign or URL restructure, identify every broken redirect or dead link
- Competitor research — Audit competitor sites to discover broken outbound links for link-building opportunities
- Ongoing monitoring — Schedule regular broken link checks to catch dead URLs as soon as they appear
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | (required) | The website URL to start crawling from |
maxDepth | integer | 2 | How many levels deep to crawl internal pages (0 = start page only) |
maxLinks | integer | 500 | Maximum number of unique links to collect and check |
checkExternal | boolean | true | Whether to validate links pointing to external domains |
concurrency | integer | 10 | Number of links to check simultaneously |
timeout | integer | 30 | Request timeout in seconds before a link is marked as timed out |
Example Input
{"url": "https://example.com","maxDepth": 2,"maxLinks": 500,"checkExternal": true,"concurrency": 10,"timeout": 30}
What Data Does This Actor Extract?
The actor stores one result per checked link in the Apify dataset. Each entry contains:
{"url": "https://example.com/old-page","finalUrl": null,"statusCode": 404,"status": "broken","foundOn": "https://example.com/blog","linkText": "Read our guide","responseTimeMs": 312,"checkedAt": "2025-06-01T10:23:45.123Z","error": null}
| Field | Type | Description |
|---|---|---|
url | string | The link URL that was checked |
finalUrl | string | null | Final URL after redirects (null if no redirect) |
statusCode | integer | null | HTTP status code returned (null for timeouts or network errors) |
status | string | Result: ok, broken, redirect, timeout, or error |
foundOn | string | URL of the page where this link was discovered |
linkText | string | Visible anchor text of the link |
responseTimeMs | integer | Time in milliseconds to receive a response |
checkedAt | string | ISO 8601 timestamp of when the check was performed |
error | string | null | Error message for timeout/error results, null otherwise |
How It Works
- Crawl — The actor fetches the start URL and parses all anchor links using BeautifulSoup
- BFS expansion — Internal pages are crawled breadth-first up to
maxDepthto discover more links - Deduplication — Each unique URL is only checked once, regardless of how many pages link to it
- HEAD-first checking — Links are validated with a fast HTTP HEAD request; if the server blocks HEAD (405/403), it falls back to GET
- Concurrent checking — All collected links are checked in parallel using
concurrencyto minimise run time - Classification — Each result is tagged as
ok(2xx/3xx),broken(4xx/5xx),redirect(final URL differs),timeout, orerror
FAQ
How many links can this actor check per run?
By default up to 500 links. You can increase maxLinks up to 10,000. For very large sites, run multiple actors with different start URLs.
Does it check JavaScript-rendered links? No — this actor parses static HTML. Links injected by JavaScript after page load will not be detected. For JS-heavy sites, consider a Playwright-based actor.
What counts as a broken link?
Any link returning a 4xx or 5xx HTTP status code. Timeouts and network errors are also flagged separately as timeout or error.
Can I check only internal links?
Yes — set checkExternal to false to skip links pointing to other domains.
Will it follow redirects?
Yes. The actor follows redirects automatically and records the final URL. If the final URL differs from the original, the result is tagged as redirect.
Integrations
Connect Broken Link Audit with other apps and services using Apify integrations. You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and many more. You can also use webhooks to trigger actions whenever results are available.
Run Broken Link Audit on a schedule to continuously monitor your website for dead links — and automatically notify your team the moment a broken URL is detected.
