Broken Link Checker - Find 404 Errors & Redirects on a Website avatar

Broken Link Checker - Find 404 Errors & Redirects on a Website

Pricing

Pay per event

Go to Apify Store
Broken Link Checker - Find 404 Errors & Redirects on a Website

Broken Link Checker - Find 404 Errors & Redirects on a Website

Crawl a website and check every link on it: broken links (404, 500) and redirects (301, 302) with their destination URL, HTTP status and response time. One record per page, plus a site summary listing the dead links that appear on the most pages.

Pricing

Pay per event

Rating

5.0

(2)

Developer

My Smart Digital

My Smart Digital

Maintained by Community

Actor stats

2

Bookmarked

29

Total users

0

Monthly active users

12 days ago

Last modified

Share

Broken Link Checker — Find 404s & Redirects on Any Website

Give it a URL. It reads every link on the page — or crawls the whole site — checks each one, and tells you which links are dead (404, 500), which redirect (301, 302), and where those redirects go.

No account, no API key, no browser extension. One run, one dataset.

What you get

Two kinds of records.

{
"type": "page",
"pageUrl": "https://mysmartdigital.fr",
"title": "Réservations directes pour hôtels indépendants — My Smart Digital",
"httpStatus": 200,
"linksCount": 7,
"brokenLinksCount": 0,
"redirectLinksCount": 4,
"links": [
{
"url": "https://mysmartdigital.fr/tarifs",
"text": "Formules",
"isInternal": true,
"httpStatus": 301,
"responseTime_ms": 111,
"redirectUrl": "https://mysmartdigital.fr/tarifs/"
},
{
"url": "https://mysmartdigital.fr/",
"text": "MSD.My smartdigital",
"isInternal": true,
"httpStatus": 200,
"responseTime_ms": 432
}
]
}

redirectUrl appears on 3xx links only. Redirects are reported, never followed: a 301 keeps its 301 status, shows its destination, and never counts as broken.

One site summary at the end of the run

{
"type": "site-summary",
"pagesCrawled": 1,
"linksTotal": 7,
"brokenLinksTotal": 0,
"redirectLinksTotal": 4,
"byStatus": { "200": 3, "301": 4 },
"byType": { "internal": 7, "external": 0 },
"topBrokenLinks": []
}

topBrokenLinks lists the 20 most frequent dead links with every page they appear on — that is the list to fix first, since one bad link in a menu or a footer breaks on every page at once. pagesCrawled counts pages actually delivered, not pages attempted.

Input

{
"startUrls": ["https://example.com"],
"crawlPages": true,
"maxPages": 50,
"maxConcurrency": 5,
"sameDomain": true,
"checkExternal": false,
"timeout": 10000
}
FieldTypeDefaultWhat it does
startUrlslist of URLsPages to start from. Required.
crawlPagesbooleanfalseOff: only the start URLs are analyzed. On: the actor follows links and analyzes up to maxPages pages.
maxPages1–100050Page ceiling for the crawl. No effect when crawlPages is off.
maxConcurrency1–205Pages processed in parallel.
sameDomainbooleantrueKeep the crawl on the start domain. No effect when crawlPages is off.
checkExternalbooleanfalseAlso check links pointing to other domains. Off by default: external checks are the slow part.
timeout1000–60000 ms10000Time budget per link check.

Two things worth knowing before your first run

Links are checked, pages are crawled. Every link found on an analyzed page is hit for its status code and response time, wherever it points. What crawlPages controls is how many pages get read to collect links from — a single-page run still checks all the links on that page.

A page that runs out of time is dropped, and costs you nothing. A page carrying thousands of links can exceed its processing budget: it is abandoned, produces no page record, and neither it nor the links it had started checking are billed. Raise timeout or lower maxConcurrency to get those pages.

What it costs

Pay per event, at the prices shown on this page: one PAGE_ANALYZED per page record delivered, one LINK_CHECKED per link actually checked and returned. Nothing else is charged — no start fee, and the site summary is free. A 4-page run returning 105 links is billed 4 pages and 105 links, no more.

Limits

  • Links are checked over HTTP, not rendered in a browser: links injected by JavaScript after page load are not seen.
  • A site that blocks automated traffic returns its block status (403, 429) instead of the real status of the link.
  • mailto:, tel: and same-page anchors are not checked.