Broken Link Checker avatar

Broken Link Checker

Pricing

Pay per event

Go to Apify Store
Broken Link Checker

Broken Link Checker

Broken Link Checker crawls your website, discovers all internal and external links, and verifies each one. It finds 404 errors, server errors, timeouts, and other broken links — then tells you exactly which page links to each broken URL and what the anchor text says.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Broken Link Checker — Find Dead Links on Any Website

Broken Link Checker crawls your website, discovers all internal and external links, and verifies each one. It finds 404 errors, server errors, timeouts, and other broken links — then tells you exactly which page links to each broken URL and what the anchor text says.

  • Full-site crawling — automatically discovers and follows internal pages up to your depth limit
  • External link checking — verifies links to other websites, not just your own domain
  • Source tracking — every broken link shows which page contains it and the exact anchor text
  • Smart retry with backoff — retries timed-out requests with exponential backoff to reduce false positives
  • Timeout/broken separation — clearly distinguishes confirmed broken links (4xx/5xx) from timeouts and connection issues
  • No proxy by default — runs direct for speed and low cost; optional proxy with fallback-to-direct on timeout
  • HEAD-first checking — uses lightweight HEAD requests with GET fallback to minimize load on target sites
  • Structured output — results include status code, error type, severity, confirmation status, and diagnostics

How much does it cost?

Uses pay-per-event pricing:

EventPriceWhen charged
startper runOnce when the actor starts
page-crawledper pageEach internal page crawled and analyzed

Example: Crawling a 50-page website costs 1 start + 50 page-crawled events. Platform compute and proxy costs are billed separately by Apify.

What data can you extract?

FieldExample
url"https://example.com/old-page"
statusCode404
statusText"Not Found"
isBrokenConfirmedtrue
errorType"http", "timeout", "dns", "tls", "blocked"
sourceUrl"https://example.com/blog/post-1"
anchorText"Click here for details"
linkType"internal" or "external"
severity"error" (confirmed broken) or "warning" (timeout/unreachable)
retryCountUsed2
usedProxyfalse
finalMethod"HEAD" or "GET"
checkedAt"2026-02-28T12:00:00.000Z"
  1. Open Broken Link Checker on Apify Console.
  2. Enter the Website URL to crawl (e.g., https://your-site.com).
  3. Set Max pages to control crawl depth (default: 100).
  4. Enable or disable Check external links.
  5. Click Start and review broken links in the dataset.

Example input

{
"startUrl": "https://example.com",
"maxPages": 50,
"checkExternalLinks": true
}

Input parameters

ParameterTypeRequiredDefaultDescription
startUrlstringYesWebsite URL to crawl
maxPagesintegerNo100Max internal pages to crawl (1–1000)
checkExternalLinksbooleanNotrueAlso check links to other domains
maxConcurrencyintegerNo5Parallel requests (1–20)
requestTimeoutSecsintegerNo15Timeout per request in seconds
retryCountintegerNo2Retries for timed-out requests (0–5), uses exponential backoff
useProxybooleanNofalseEnable proxy for requests
proxyGroupstringNodatacenterProxy group: datacenter, residential, or auto
timeoutFallbackToDirectbooleanNotrueOn proxy timeout, retry without proxy
proxyConfigurationobjectNoAdvanced: custom Apify proxy settings

Output example

{
"url": "https://example.com/deleted-page",
"statusCode": 404,
"statusText": "Not Found",
"sourceUrl": "https://example.com/blog/post-3",
"anchorText": "Read our case study",
"linkType": "internal",
"severity": "error",
"isBrokenConfirmed": true,
"errorType": "http",
"retryCountUsed": 0,
"usedProxy": false,
"finalMethod": "HEAD",
"checkedAt": "2026-02-28T12:34:56.789Z"
}

Tips for best results

  • Start with a small maxPages (10–20) to get a quick overview before running a full crawl.
  • Enable external link checking to catch broken outbound links — these hurt SEO too.
  • Leave proxy off for most sites. Only enable if you get blocked or need geo-specific checking.
  • Increase requestTimeoutSecs if you see many timeout warnings (slow CDNs, overseas servers).
  • Use retryCount: 2 (default) to reduce false positives from transient network issues.
  • Filter by isBrokenConfirmed: true to see only confirmed broken links (4xx/5xx responses).
  • Lower maxConcurrency if the target site starts rate-limiting your requests.
  • Use the sourceUrl field to quickly find and fix the pages containing broken links.
  • Schedule regular runs with Apify Scheduler to catch new broken links as your site changes.

Integrations

Connect with Make, Zapier, n8n, or any HTTP tool. Use Apify webhooks to get notified when broken links are found. Feed results into your SEO dashboard or ticketing system.

Using the Apify API

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('automation-lab/broken-link-checker').call({
startUrl: 'https://your-site.com',
maxPages: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log('Broken links found:', items.length);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('automation-lab/broken-link-checker').call(run_input={
'startUrl': 'https://your-site.com',
'maxPages': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(f'Broken links found: {len(items)}')

FAQ

Does it check external links? Yes, by default. Disable with checkExternalLinks: false to only check same-domain links.

Will it overload my website? No. It uses maxConcurrency: 5 by default and HEAD-first requests. For sensitive sites, lower concurrency to 1–2.

What counts as a broken link? Any HTTP 4xx or 5xx response after retries. Timeouts and connection failures are reported as warnings, not confirmed broken.

How do I filter confirmed broken links? Filter the dataset by isBrokenConfirmed: true to exclude timeouts and unreachable links.

Does it follow redirects? Yes. Redirected links are considered OK. Only the final status matters.

Do I need a proxy? Usually no. Proxy is off by default. Enable it only if the target site blocks direct requests.

Can I schedule regular checks? Yes. Use Apify Scheduler to run weekly or daily checks and get notified of new broken links.

Does it need a browser? No. It uses fast HTTP requests only — no Chromium/Playwright overhead.