Broken Link Checker: Pages List, Images, Anchor Text avatar

Broken Link Checker: Pages List, Images, Anchor Text

Pricing

$4.00 / 1,000 page checkeds

Go to Apify Store
Broken Link Checker: Pages List, Images, Anchor Text

Broken Link Checker: Pages List, Images, Anchor Text

Paste a list of pages and get every broken link and image on them, with status code, anchor text and internal or external flag. Redirecting links and bot-blocked links are listed apart, so you fix what is really broken.

Pricing

$4.00 / 1,000 page checkeds

Rating

0.0

(0)

Developer

Luigi Fiano

Luigi Fiano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Paste a list of pages and get every broken link on them. Each page is opened, every link and image on it is checked, and you get one row per page with the broken links, their status code, their anchor text and whether they are internal or external.

No crawl to configure and no surprise bills: the checker looks only at the pages you give it. Ideal when you already know which pages matter (top landing pages, blog posts, a client's money pages, the URLs of a sitemap export).

What it is for

  • SEO audits: find 404s and dead external links on the pages that bring traffic.
  • Content maintenance: old blog posts pointing to sites that no longer exist.
  • After a migration: see which links still go through redirects and should be updated to the final URL.
  • Monitoring: schedule it weekly with onlyProblems and get only the pages that broke.

What it checks

  • Every <a href> on the page, resolved against the page URL and <base>. Same-page #anchors, mailto:, tel:, javascript: and links inside HTML comments are skipped.
  • Images (<img src>), and optionally scripts and stylesheets.
  • Each unique link is checked once per run, even when it appears on hundreds of pages.
  • HEAD first, then GET when the server does not answer HEAD properly (405, 501 and the many servers that answer HEAD with 403 or 404).
  • Redirects are followed hop by hop, with loop protection.
  • Links are sorted into three lists:
    • broken: 4xx (except the bot-blocking ones below), 5xx, DNS errors, timeouts, refused connections, redirect loops, invalid URLs;
    • blocked: 401, 403, 429 and 999 (LinkedIn and others). These usually mean "this site blocks automated checks", not "the page is gone", so they are listed apart and do not mark the page as failed;
    • redirects: links that work but go through one or more redirects, with the final URL.
  • Anchor text (or image alt text) and the nofollow / sponsored / ugc flag for every reported link, so you can find it on the page.

Input

FieldWhat it doesDefault
urlsOne page URL per linerequired
checkExternalAlso check links to other domainstrue
includeImagesAlso check imagestrue
includeAssetsAlso check scripts and stylesheetsfalse
reportRedirectsList links that redirecttrue
maxLinksPerPageMax unique links checked per page500
onlyProblemsOutput only pages with broken or blocked linksfalse
concurrency, linkConcurrency, timeoutSecs, maxRetriesSpeed and resilience3, 10, 15, 1

Example:

{ "urls": ["https://www.example.com/", "https://www.example.com/blog/old-post/"] }

Output

One row per page:

{
"url": "https://www.example.com/blog/old-post/",
"finalUrl": "https://www.example.com/blog/old-post/",
"status": 200,
"linksFound": 64,
"linksChecked": 64,
"brokenCount": 2,
"blockedCount": 1,
"redirectCount": 1,
"broken": [
{ "url": "https://www.example.com/pricing-2019/", "type": "link", "text": "our old pricing", "internal": true, "nofollow": false, "status": 404, "error": null, "finalUrl": "https://www.example.com/pricing-2019/" },
{ "url": "https://some-closed-tool.io/", "type": "link", "text": "this tool", "internal": false, "nofollow": false, "status": null, "error": "ENOTFOUND", "finalUrl": "https://some-closed-tool.io/" }
],
"blocked": [
{ "url": "https://www.linkedin.com/company/example", "type": "link", "text": "LinkedIn", "internal": false, "nofollow": false, "status": 999 }
],
"redirects": [
{ "url": "http://www.example.com/contact", "type": "link", "text": "Contact", "internal": true, "nofollow": false, "status": 200, "finalUrl": "https://www.example.com/contact/", "hops": 2 }
],
"ok": false,
"issues": ["2 broken link(s)", "1 link(s) blocked the checker (401/403/429/999), check them by hand"],
"checkedAt": "2026-10-26T00:00:00.000Z"
}

The Broken links view of the dataset flattens the result to one line per broken link, ready for a spreadsheet. A SUMMARY record in the key-value store counts pages checked, pages with broken links, broken, blocked and redirecting links.

Pricing

Pay per result: $0.004 per page delivered to the dataset ($4 per 1,000 pages), plus the small Apify platform usage of the run. The links checked on a page are included, not charged one by one. With onlyProblems on, clean pages are not delivered and not charged.

Notes

  • It reads only the public HTML of the pages you provide and the HTTP status of the links on them. No login, no cookies, no personal data. It does not crawl beyond the pages you list.
  • Links injected by JavaScript are not seen: the check reads the raw HTML, like most crawlers do.
  • A site that returns 200 for every URL (a parked domain, a soft 404) cannot be detected from the status code alone.