Broken Link Checker & Scraper - 404 Audit API avatar

Broken Link Checker & Scraper - 404 Audit API

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Broken Link Checker & Scraper - 404 Audit API

Broken Link Checker & Scraper - 404 Audit API

Scan pages for broken links, dead URLs, 404s, redirects, TLS failures, timeouts, and resource errors. Bulk link checker/scraper for SEO audits, content QA, migrations, and link-rot monitoring with source evidence, safe URL handling, and bounded paid output.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Ava Torres

Ava Torres

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

0

Monthly active users

21 days ago

Last modified

Share

Broken Link Checker & Scraper — 404 Audit API

Scan the static HTML of one or more web pages, extract unique links and resources, and check each target for HTTP, DNS, TLS, timeout, and request failures. The actor preserves source-page evidence, follows redirects, retries blocked HEAD checks with GET, and saves large jobs in bounded batches.

The default scans BadSSL and returns 10 working/TLS-failure examples for at most $0.0201 including the minimum actor-start event.

Use cases

  • Technical SEO audits — find 404/5xx links and dead resources
  • Site migrations — check links after URL or CMS changes
  • Link-rot monitoring — schedule repeated point-in-time audits
  • Content QA — validate cited external links before publishing
  • Frontend asset checks — inspect img, script, and stylesheet URLs

Input

FieldTypeDefaultDescription
urlsstring arrayhttps://badssl.com/Pages whose static HTML should be scanned
maxResultsinteger10Total paid result cap across every supplied page; up to 50,000
concurrencyinteger10Parallel link checks; 1–50
timeoutSecondsinteger15Per-request timeout; 3–60 seconds

If the input is empty, runtime uses the same BadSSL/10-result Store default. Apify maximum-total-charge limits are applied before checks begin and can reduce maxResults further.

What is extracted

The actor reads URLs from static HTML:

  • <a href>
  • <link href>
  • <img src>
  • <script src>

Relative URLs are resolved against the fetched page's final URL, fragments are removed, and duplicate targets are checked once per page. Private, loopback, link-local, credential-bearing, and non-HTTP(S) targets are rejected to prevent unsafe network access.

Output

Every dataset row uses stable evidence fields:

FieldDescription
resultTypeLINK_CHECK, SOURCE_ERROR, or NO_LINKS
sourceUrl, sourceFinalUrlRequested and final scanned page URLs
sourceStatusCode, sourceContentType, sourceResponseTimeMsSource fetch evidence
linkUrl, elementType, anchorTextDiscovered target and its HTML context
statusCode, statusText, finalUrlChecked target response evidence
redirectCount, responseTimeMs, contentTypeRedirect, timing, and response metadata
checkMethodHEAD or fallback GET
isBroken, errorBroken/error classification and diagnostic detail
retrievedAtUTC observation time
coverageNote, interpretationMandatory scope and evidence limitations

Example TLS failure:

{
"resultType": "LINK_CHECK",
"sourceUrl": "https://badssl.com/",
"sourceStatusCode": 200,
"linkUrl": "https://expired.badssl.com/",
"elementType": "a",
"statusCode": 0,
"statusText": "",
"redirectCount": 0,
"checkMethod": "GET",
"isBroken": true,
"error": "tls: failed to verify certificate: x509: certificate has expired...",
"retrievedAt": "2026-07-25T10:07:30Z"
}

Source pages that cannot be fetched return one explicit SOURCE_ERROR row instead of silently producing an empty dataset. Successfully fetched pages with no supported links return one NO_LINKS row.

Reliability and scale

  • Bounded concurrency prevents unbounded request fan-out.
  • Output is persisted in batches of at most 500 rows, below Apify's dataset-request limit.
  • HEAD checks that receive 403, 405, or 501 retry with a small GET request to reduce false broken-link classifications.
  • DNS resolution rejects private/local targets before connecting.
  • TLS certificates are verified; certificate failures remain visible evidence rather than being bypassed.
  • Output order follows document order even though checks run concurrently.

Interpretation limits

This is a point-in-time network and static-HTML audit, not proof of continuous uptime or page correctness. The actor does not execute JavaScript or crawl beyond each supplied page. Client-rendered links, authenticated content, form actions, CSS url(...) references, and links beyond maxResults are outside the result set.

A 2xx response does not prove useful content. A broken/error result can reflect bot defenses, authentication, geolocation, rate limiting, transient network conditions, or source policy rather than a permanently dead target. Re-run important failures and inspect the target directly before changing production links.

Pricing

Pay per event: $0.0001 minimum actor-start event plus $0.002 per dataset row (about $2 per 1,000 rows, plus the start event). The 10-row default costs at most $0.0201. Source-error and no-links evidence rows are paid dataset items.