Broken Link Checker avatar

Broken Link Checker

Pricing

from $0.50 / 1,000 links

Go to Apify Store
Broken Link Checker

Broken Link Checker

Crawl same-site HTML pages and check anchors, images, scripts and stylesheets for broken URLs, redirects and blocked external checks.

Pricing

from $0.50 / 1,000 links

Rating

0.0

(0)

Developer

Deepak Ganesh

Deepak Ganesh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

Broken Link Checker

Broken Link Checker crawls same-site HTML pages and checks every unique target URL it finds. It reports broken links, redirects, blocked external checks, and the pages where each URL was discovered.

The Actor uses fast HTTP requests (no browser), follows internal links only, and treats example.com and www.example.com as the same site. It skips mailto:, tel:, javascript:, data: and fragment-only URLs.

Use cases

  • Audit a website before migration or launch.
  • Find broken navigation, missing images and bad stylesheet/script URLs.
  • Monitor redirect chains after changing CMS, domains or URL structure.
  • Export a clean dataset of checked links with source pages and anchor text.

Input

FieldTypeDefaultDescription
startUrlsstring listrequiredSites or pages to crawl. Plain domains are converted to HTTPS.
maxPagesPerSiteinteger50Maximum same-site pages crawled per input site.
checkExternalLinksbooleantrueCheck outbound URLs. External 429, 999 and Cloudflare 403 responses are marked blocked, not broken.
checkImagesbooleantrueCheck image src URLs.
checkScriptsbooleanfalseCheck script src URLs.
checkStylesheetsbooleanfalseCheck stylesheet link[href] URLs.
onlyReportBrokenbooleanfalseIf true, the dataset includes only broken, redirected or blocked results. Billing remains per checked link.
maxConcurrencyinteger10Maximum parallel page/link work, with extra per-host politeness.
requestTimeoutSecsinteger30Page-load timeout. Link checks use a 15-second timeout.

Example input:

{
"startUrls": ["https://books.toscrape.com"],
"maxPagesPerSite": 5,
"checkExternalLinks": true,
"checkImages": true,
"onlyReportBroken": false,
"maxConcurrency": 5
}

Output

The default dataset contains one item per reported unique target link. foundOn is capped at 20 source pages per target.

{
"url": "https://books.toscrape.com/index.html",
"finalUrl": "https://books.toscrape.com/index.html",
"status": "ok",
"statusCode": 200,
"ok": true,
"isBroken": false,
"errorMessage": null,
"redirectChain": [],
"isExternal": false,
"linkType": "a",
"foundOn": [
{
"pageUrl": "https://books.toscrape.com/",
"anchorText": "Books to Scrape"
}
],
"checkedAt": "2026-10-06T16:58:52.943Z"
}

A per-site summary is saved to key-value store record SUMMARY:

{
"totals": {
"sites": 1,
"pagesCrawled": 5,
"linksFound": 153,
"linksChecked": 153,
"brokenCount": 0,
"redirectCount": 0
}
}

Pricing

This Actor uses pay-per-event pricing.

EventPriceCharged when
Actor Start$0.00005The Actor starts.
Link (link-checked)$0.0005Each unique target URL is checked.

If onlyReportBroken is enabled, the Actor still charges for every checked link, even though it pushes only broken, redirected or blocked records to the dataset. Pages that fail to load are recorded in the summary and are not charged as links.

FAQ

Are redirects broken?

No. Redirects are reported with status: "redirect", redirectChain, and finalUrl, but isBroken is false unless the final response is HTTP 400+ or a network error occurs.

Why is a 403 not always broken?

External Cloudflare 403 responses and external 429/999 bot/rate-limit responses are marked blocked to avoid false positives. Ordinary HTTP 403 responses are reported as broken.

Does it respect robots.txt?

The Actor is polite (HTTP-only, modest concurrency, per-host limits) but does not currently parse robots.txt. Lower maxConcurrency for sensitive sites.

What does same-site mean?

Only the exact hostname and its www variant are crawled as pages. Subdomains such as blog.example.com are external.

Changelog

0.1

  • Initial release: same-site crawl, unique URL checks, HEAD-to-GET fallback, redirect chains, blocked external classification, per-site summary and pay-per-link pricing.