Broken Link & Image Checker avatar

Broken Link & Image Checker

Pricing

from $2.00 / 1,000 page checkeds

Go to Apify Store
Broken Link & Image Checker

Broken Link & Image Checker

Crawl your website and find every broken link, missing image, and dead script or stylesheet, plus the exact page each one sits on. Fast checks with no browser, redirect detection, external-link checking, and a summary of what failed and why.

Pricing

from $2.00 / 1,000 page checkeds

Rating

0.0

(0)

Developer

Aleksandr Jelohhin

Aleksandr Jelohhin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Broken Link & Image Checker (with source pages)

Crawl your website and find every broken link and missing image — plus the exact page each one is on, so you know precisely what to fix. It also checks scripts and stylesheets on request, follows and reports redirects, and can verify external links too.

Fast and inexpensive: it uses lightweight HTTP checks and never opens a browser. Run it on demand, on a schedule, or from the API.

What it finds

  • Broken links — 404s, 410s, server errors, timeouts, DNS failures, connection errors
  • Broken images — the <img> sources that don't load
  • Broken scripts & stylesheets (optional)
  • Redirecting URLs — links that only resolve after a 301/302, so you can update them
  • Bot-protection blocks — external URLs that answer with a Cloudflare/DataDome/Akamai-style anti-bot challenge (a 401/403/429/503 with a challenge header or challenge page). Reported separately as state: "blocked" and not counted as broken, because they normally work fine in a browser. A plain 403/503 with no challenge is still reported as broken.
  • For every problem: the source page it was found on, the resource type, the HTTP status, and a reason code

Input

{
"startUrls": [{ "url": "https://example.com" }],
"crawl": true,
"maxPages": 1000,
"checkExternal": true,
"checkImages": true,
"checkScripts": false,
"checkStylesheets": false
}

Output

One dataset row per page that has problems (or every page — your choice):

{
"pageUrl": "https://example.com/blog",
"checked": 124,
"broken": 5,
"redirecting": 12,
"blocked": 2,
"items": [
{ "url": "https://example.com/old-post", "type": "link", "scope": "internal",
"statusCode": 404, "sourceUrl": "https://example.com/blog", "reason": "not_found", "state": "broken" },
{ "url": "https://crozdesk.com/software/apify", "type": "link", "scope": "external",
"statusCode": 403, "sourceUrl": "https://example.com/blog", "reason": "blocked",
"state": "blocked", "blockedBy": "Cloudflare" }
]
}

Plus a run SUMMARY: total URLs checked, broken count, breakdown by reason, and the worst offenders with the pages that link to them.

Use it for

  • Regular link-rot maintenance on a blog or docs site
  • A pre-launch check that nothing 404s
  • Finding images that silently stopped loading after a CDN or media move
  • Bulk-auditing many sites from the API

Note on 403 / 429 (bot protection)

Some third-party sites sit behind Cloudflare, Akamai, DataDome and similar services that challenge automated requests with a 401, 403, 429 or 503. The scanner sends real browser headers to get past the soft blocks, and when a challenge is unavoidable — confirmed by a challenge header or challenge-page body — it labels the URL state: "blocked" (with blockedBy naming the service) instead of broken. These do not inflate the broken count or the run's brokenTotal. A genuine 403/503 with no challenge fingerprint is still counted as broken.

  • To count them as broken anyway, set treatBlockedAsBroken: true.
  • To skip external checks entirely, set checkExternal: false.

Pricing

Pay per page checked — the link and image checks on that page are included, no matter how many there are.