URL Status Checker: Broken Links & Redirects
Pricing
from $0.83 / 1,000 url checkeds
URL Status Checker: Broken Links & Redirects
Bulk-check any list of URLs. Returns HTTP status, the full redirect chain with each hop, final URL, cross-domain redirect detection, response time, content type, page title and meta robots. Built for broken-link reports, migration QA and link inventory checks.
Pricing
from $0.83 / 1,000 url checkeds
Rating
0.0
(0)
Developer
Axiora Solutions
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
URL Status Checker — bulk broken link checker and redirect audit
URL status checker and broken link checker for bulk link audits: paste thousands of URLs and get each one's HTTP status, redirect chain, response time and page facts in a single dataset. No API key and no configuration — run it on Apify and export to JSON, CSV, Excel or Google Sheets. Built for broken-link reports, migration QA and link-inventory checks.
What you get
httpStatusandstatusCategory— the raw status code plus2xx-success,3xx-redirect,4xx-client-erroror5xx-server-errorfor one-click pivots.redirectChain— every hop with its status and destination, plusisCrossDomainRedirectwhen the trail changes domain.isBroken—truefor 404 and 410, so a single filter gives you the dead-link report.responseMs— per-URL timing, including redirect hops, so slow endpoints surface alongside broken ones.title,h1,canonicalUrlandmetaRobots— page facts parsed from the same response, withcanonicalIsSelfandisNoindexderived from them.errorCodeon unreachable hosts — DNS failures and timeouts become data rows instead of crashing the run.
Quick start
- Open the Actor on Apify and paste your URLs into URLs to check — bare domains are upgraded to
https://automatically. - Keep the defaults:
GET, follow redirects, collect page facts. Nothing else is required. - Click Start. The run stops cleanly at Max URLs for the whole run and reports filtered URLs as not billed.
- Read the URL checks, Broken links and Redirects dataset tabs, or export or schedule the run.
Minimal input — the only required field is urls:
{"urls": ["https://apify.com","https://apify.com/this-page-does-not-exist","http://github.com"]}
Example output
One dataset row per URL. Here is a cross-domain redirect — the migration case:
{"ok": true,"errorCode": null,"requestedUrl": "https://oldbrand.com/pricing","method": "GET","httpStatus": 200,"statusCategory": "2xx-success","isOk": true,"isRedirect": false,"isError": false,"isBroken": false,"finalUrl": "https://newbrand.com/pricing","redirectCount": 2,"redirectChain": [{ "status": 301, "to": "https://www.oldbrand.com/pricing" },{ "status": 301, "to": "https://newbrand.com/pricing" }],"isCrossDomainRedirect": true,"finalDomain": "newbrand.com","responseMs": 612,"contentType": "text/html","contentBytes": 14234,"title": "Pricing","h1": "Simple pricing","metaRobots": "index, follow","canonicalUrl": "https://newbrand.com/pricing","canonicalIsSelf": true,"isNoindex": false,"scrapedAt": "2026-10-02T12:00:00.000Z"}
What this URL checker returns
Check thousands of URLs in one run. Every URL gets its HTTP status, the full redirect chain with each hop, the final URL, cross-domain redirect detection, response time, content type and — for HTML pages — title, h1, canonical and meta robots.
- 🚦 Every status, categorised —
statusCategorygroups rows into2xx-success,3xx-redirect,4xx-client-errorand5xx-server-error, so you can pivot a 20,000-row dataset in one click. - 🔗 The whole redirect chain, not just the endpoint —
redirectChainlists each hop with its status code and destination. More than two hops is a real finding: it wastes crawl budget and slows real users. - 🌐 Cross-domain redirect detection —
isCrossDomainRedirectandfinalDomainflag the signature of a migration, a domain handover or an acquired brand being folded in. This is how you find the 301s you forgot about. - 💀
isBrokenfor the list that matters — true for 404 and 410 specifically, the two statuses that mean content is genuinely gone. Filter on it and you have a dead-link report. - ⏱️ Response times —
responseMsfor every URL, including the redirect hops, so slow endpoints surface alongside broken ones. - 📄 Page facts without extra requests — title, first h1, canonical and meta robots are parsed from the same response.
canonicalIsSelfandisNoindextell you when a reachable page is nonetheless excluded from search. - 🧱 Handles tens of thousands of URLs — bounded concurrency scaled to your allocated memory, per-host pacing so you do not hammer one server, and a graceful stop at your run-cost ceiling.
- 🛟 Invalid URLs are data, not crashes — a malformed entry or an unreachable host produces an error row with a stable code, and every other URL still gets checked.
Running on Apify adds scheduling, webhooks, monitoring, API and SDK access, and one-click export to JSON, CSV, Excel, Google Sheets and 20+ integrations.
How to use it
- Paste your URLs into URLs to check. Bare domains are upgraded to
https://automatically. - Leave Follow redirects on to get the full chain, or turn it off to see the raw first response.
- Leave Collect page title and meta robots on unless you only want statuses — it adds no requests.
- To get a clean broken-link list, put
404and410in Report only these status codes. - Click Start, then use the URL checks, Broken links and Redirects dataset tabs.
How do I check every link on my site?
Run the Sitemap & Indexability Audit Actor first and export the internalLinks column, or just the url column for every page. Paste that list here. One Actor maps your URLs, the other verifies them.
Full input example
Every option, with the defaults shown:
{"urls": ["https://example.com","example.com/old-page","http://example.com/redirect-me","https://example.com/removed-product"],"method": "GET","followRedirects": true,"fetchPageFacts": true,"filterByStatus": [],"maxUrlsTotal": 10000,"requestTimeoutSecs": 20}
What an error row looks like
An unreachable host still produces a row — the rest of the run continues:
{"ok": false,"errorCode": "NETWORK_ERROR","requestedUrl": "https://this-host-does-not-resolve.example","error": {"code": "NETWORK_ERROR","message": "DNS lookup failed for this-host-does-not-resolve.example: ENOTFOUND","httpStatus": null,"hint": "The host could not be reached. Check the hostname and DNS."}}
Use cases
- Broken-link reports — filter to
isBrokenand hand the list to whoever owns the content. - Site migration QA — check every legacy URL and confirm each one lands on the right new page with no cross-domain surprise.
- Redirect-chain cleanup — find chains longer than two hops and collapse them to a single 301.
- Link inventory and hygiene — verify outbound links, affiliate parameters and partner URLs still resolve.
- Uptime spot checks — schedule the Actor over your critical URLs and alert on any non-2xx.
- Noindex audits —
isNoindexfinds pages that respond 200 but are silently excluded from search. - Vendor and citation checking — validate a list of source URLs before publishing.
How much does it cost
Pricing is pay per event with one event:
| Event | What triggers it | Billed |
|---|---|---|
| URL checked | One URL requested and a result row written | per URL |
| Actor start | Once per run, platform fee | per run |
URLs removed by Report only these status codes or Report only URLs matching are not billed, because they are never written. A URL that cannot be resolved at all (DNS failure, timeout, private address) is reported but is not billed as a check.
10,000 URLs is 10,000 check events — that is the whole calculation. Compute, bandwidth and storage are included; there is no separate platform-usage charge on top.
Set Max cost per run in the run options for a hard ceiling. Higher Apify plans get progressively lower per-URL pricing through Apify Store tier discounts.
Zero-cost verification: leave the prefilled rows in place and run once. You will see a live 200, a live 404 and a live redirect from your own first run, for a fraction of a cent.
Frequently asked questions
GET or HEAD?
GET is the default and the honest choice: it is what a browser and a crawler actually do. HEAD is roughly twice as fast and downloads nothing, but a minority of servers return 405 or 403 to HEAD while answering GET perfectly well, so you may see false failures. Use HEAD only for very large sweeps where you do not need page facts.
Why is contentBytes not the real page weight?
Because the response is capped at 512 KB. That keeps a 20,000-URL run affordable and stops one enormous page from consuming your transfer budget. Treat the number as a lower bound and a rough signal, not a measurement.
How do I get only the broken links?
Put 404 and 410 in Report only these status codes. Those are the two statuses that mean content is gone. If you also want to catch soft failures, add 500 and 503 for server-side problems. Everything else is filtered out and not billed.
What counts as a cross-domain redirect?
The chain ending on a different registrable domain from the one you requested. www.example.com to example.com is same-domain and correctly reported as such; oldbrand.com to newbrand.com is cross-domain. Subdomain changes within one registrable domain do not trigger it.
How many URLs can one run handle?
Tens of thousands, bounded by Max URLs for the whole run and your run-cost ceiling. Concurrency scales with the memory you allocate, and requests to a single host are paced so you do not trip rate limits. For very large lists, split by domain across a few runs.
Should I use a proxy?
Usually not. A status check should report what an ordinary visitor receives. Enable datacenter proxy rotation only when one host rate-limits a large sweep, and remember that a proxy can change what the server returns — which is the opposite of what you want from an availability check.
Does it run JavaScript?
No. It reports the server's response. Because page facts are read from the raw HTML, a client-rendered page may show no title here even though a browser displays one. For indexability of rendered content you need a browser-based crawler; that is a different trade-off and a different Actor.
Something looks wrong — how do I report it?
Open the Issues tab on this Actor page with the URL and the status you expected. A wrong status is treated as a bug.
Related Actors by Axiora Solutions
| Actor | Use it for |
|---|---|
| Sitemap & Indexability Audit | Produce the URL list from sitemaps, with full on-page SEO findings |
| Domain Contact Enricher | Contact and technology enrichment for the domains you are checking |
| Shopify Product & Variant Scraper | Track competitor catalogues and pricing |
Runnable examples and how-to guides for these Actors: github.com/batow133/axiora-apify-actors