Broken Link Checker: Dead Links, Images & Redirects avatar

Broken Link Checker: Dead Links, Images & Redirects

Pricing

from $0.70 / 1,000 link checkeds

Go to Apify Store
Broken Link Checker: Dead Links, Images & Redirects

Broken Link Checker: Dead Links, Images & Redirects

Crawl your website and check every link, image and script. Get a list of broken links (404, timeouts, dead domains) with the page each one is on. Billed per link checked.

Pricing

from $0.70 / 1,000 link checkeds

Rating

0.0

(0)

Developer

Brandon Ob

Brandon Ob

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Security

Limited permissions

Share

Broken Link Checker: find dead links, images and redirects on your website

This broken link checker crawls your website and checks every link, image, script and stylesheet it finds. You get each one back with its HTTP status and the page where it sits, so you can filter the 404s, dead domains and timeouts and send the list to whoever fixes the site. It works on any public site, without a browser and without a login. You are charged per link checked, and you can tick Only return broken links to pay only for the problems.

  • Crawls your site from the start pages you give it, following links on the same website up to a page and depth limit.
  • Checks every link it finds: clickable links plus image, script, stylesheet and icon files, inside and outside your site.
  • Marks each link ok, broken (404, dead domain, timeout, connection error) or blocked (the server refused a bot with 401, 403 or 429).
  • Records the status code, error, redirect target and number of redirects, response time, link text and up to 5 pages that contain the link.
  • Checks each distinct link once per run, however many pages contain it.
  • Writes a SUMMARY record: pages crawled, links checked, broken and blocked counts, pages that failed to load, and whether the link limit cut the run short.

Use cases

  • Website owners and marketers: find 404s and dead outbound links before they hurt visitors and search rankings.
  • SEO agencies: run a link audit for a client and hand over a filtered CSV of broken links with the page each sits on.
  • Developers and QA: check a site after a migration, redesign or URL change for broken internal links and missing images.
  • Content teams: clean up old blog posts whose outbound references have died or now redirect.
  • Ongoing monitoring: schedule a weekly run with Only return broken links and get just the new problems.

How to use it

  1. Open the Actor in Apify Console and add your website address. The Actor follows links on the same site from there.
  2. Set Max pages to crawl and Max links to check to cover your site. Optionally turn off external links or image and script files.
  3. Click Start.
  4. Open the Checked links view and filter result = broken, or download the results.
  5. For regular checks, save the input as a task and schedule it, or call the Actor from the API.

Input

FieldWhat it does
startUrlsThe pages to start from.
maxPagesHow many pages of your site to open and read for links (default 25).
maxDepthHow many links deep to follow from the start pages (default 3; 0 checks only the start pages).
maxLinksUpper limit of distinct links checked in one run (default 500).
checkExternalAlso check links that leave your site; those pages are checked, not crawled (on by default).
checkImagesAndScriptsAlso check image, script, stylesheet and icon files (on by default).
onlyBrokenReturn only broken links; you are charged only for the rows returned.
timeoutSecsHow long to wait for each link before marking a timeout (default 15).
concurrencyParallel checks (default 10). Lower it if your server rate-limits you.

Example input:

{
"startUrls": ["https://books.toscrape.com/"],
"maxPages": 25,
"maxDepth": 3,
"maxLinks": 500,
"checkExternal": true,
"checkImagesAndScripts": true,
"onlyBroken": false
}

Output

One dataset item per distinct link. Example row:

{
"url": "https://books.toscrape.com/catalogue/category/books/travel_2/index.html",
"status": 200,
"result": "ok",
"error": null,
"finalUrl": null,
"redirects": 0,
"responseMs": 184,
"type": "link",
"scope": "internal",
"anchorText": "Travel",
"foundOn": ["https://books.toscrape.com/"]
}

A broken link looks like "status": 404, "result": "broken", or "status": null, "result": "broken", "error": "timeout" when the server did not answer. The default run (books.toscrape.com) crawled 25 pages and checked 500 links, none broken. The dataset can be downloaded as JSON, CSV, Excel, XML or HTML, or read through the API.

Pricing

Pay per event: $1.00 per 1,000 links checked, plus a $0.00005 charge per Actor start. With Only return broken links on, you pay only for the broken rows returned. You can set a maximum cost per run and the Actor stops cleanly at it.

Discounts apply automatically on paid Apify plans: 10% off on Starter, 20% on Scale and 30% on Business.

Example: a 200-page site with about 3,000 distinct links costs about $3.00 for a full report, or a few cents with only broken links returned.

Integrations and API

Run it and get the results back in one call:

curl -X POST "https://api.apify.com/v2/acts/adhistory~broken-link-checker/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls": ["https://example.com/"], "maxPages": 100, "onlyBroken": true}'

Python, with the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("adhistory/broken-link-checker").call(run_input={
"startUrls": ["https://example.com/"],
"maxPages": 100,
"onlyBroken": True,
})
for link in client.dataset(run["defaultDatasetId"]).iterate_items():
print(link["status"], link["url"], link["foundOn"])

Like every Apify Actor, it also works with Make, Zapier and n8n, with webhooks and schedules, and as a tool for AI agents through the Apify MCP server.

FAQ

It reports a link as broken but it opens for me. Some servers answer bots differently. Check status and error, and open an issue with the URL so I can look at it.

What does blocked mean? The server answered 401, 403 or 429, which usually means it refuses automated requests. The link may still work in a browser, so it is not counted as broken.

Does it see links added by JavaScript? No. It reads the HTML the server sends. Links added by JavaScript after the page loads (single-page apps) are not seen.

Which links are skipped? mailto:, tel: and #anchor links are skipped, and anchors within a page are not verified. Links to other websites are checked but not crawled.

Did it check my whole site? Only up to your page, depth and link limits. SUMMARY.truncated is true when links were left unchecked because of Max links to check.

Does it respect robots.txt? It does not read robots.txt. Run it only on sites you own or are allowed to check, and lower Parallel checks if your server is slow.

Found a bug or need a feature? Open an issue on the Issues tab — I usually reply within a day.