Broken Link Checker: Bulk URL Status & Redirect Chains
Pricing
$0.50 / 1,000 url checkeds
Broken Link Checker: Bulk URL Status & Redirect Chains
Input: a list of URLs, or a site to crawl. Output: broken link checker results with HTTP status, full redirect chain and, in crawl mode, every broken or redirected link with source page and anchor text. $0.50 per 1,000 URLs. No browser.
Pricing
$0.50 / 1,000 url checkeds
Rating
0.0
(0)
Developer
Winters Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
A fast bulk HTTP status checker, redirect checker and broken link checker. Paste a list of URLs to get the final status code, full redirect chain, response time and headers for each, or give it a start URL and it crawls the site and reports every broken (404) and redirected link with the pages it appears on and its anchor text. Useful for SEO migration redirect audits, 404 finding, link rot cleanup and uptime spot checks. HTTP only, no browser, so it is cheap: $0.50 per 1,000 URLs.
Two modes
1. URL list (urls): for each URL you get final status, every redirect hop (URL and status), final URL, response time, content-type, content-length, and for HTML pages the canonical URL, meta robots, title and X-Robots-Tag header. Failures are classified: DNS, TIMEOUT, TLS, CONNECTION, TOO_MANY_REDIRECTS, REDIRECT_LOOP.
2. Broken link crawl (crawlStartUrls + maxPages): crawls same-site pages (respects robots.txt, polite: 3 requests at a time per host), collects every internal and external link, checks each unique link once (HEAD, falling back to GET), and outputs one row per problem link with sourcePages and anchorText. Set onlyProblems to false to also output healthy links.
Use cases
- SEO migration redirect audit: verify old URLs 301 to the right place with no chains or loops.
- Find 404s and broken outbound links on your site or a client's site.
- Check redirect chains (http to https, www to non-www, trailing slashes).
- Spot-check lists of URLs from a sitemap, CRM or backlink export.
Input
{ "urls": ["http://apify.com", "https://example.com", "https://httpbin.org/status/404"], "concurrency": 10, "timeoutSecs": 15, "maxRedirects": 10 }
Crawl mode:
{ "crawlStartUrls": ["https://example.com"], "maxPages": 50, "maxLinks": 500, "onlyProblems": true }
Output
{ "url": "http://apify.com/", "status": 200, "finalUrl": "https://apify.com/", "redirectCount": 1,"redirectChain": [{"url":"http://apify.com/","status":301},{"url":"https://apify.com/","status":200}],"responseTimeMs": 408, "contentType": "text/html; charset=utf-8", "canonical": "https://apify.com/", "metaRobots": "index,follow", "errorType": null }
Crawl mode row:
{ "url": "https://example.com/old", "status": 404, "problem": "broken", "sourcePages": ["https://example.com/"], "anchorText": "Old page" }
Example output
Real output from a default run (some fields omitted for width):
| url | status | finalUrl | redirectCount | responseTimeMs |
|---|---|---|---|---|
| https://httpbin.org/status/404 | 404 | https://httpbin.org/status/404 | 0 | 63 |
| https://example.com/ | 200 | https://example.com/ | 0 | 116 |
Every run also produces a ready-made table view in the Output tab, and you can export to JSON, CSV or Excel.
Pricing
Pay per event: $0.0005 per URL checked ($0.50 per 1,000). In crawl mode you pay per unique link checked (deduplicated across pages), not for the pages crawled. The run stops cleanly at your spending limit.
Limitations
- HTTP and HTTPS only. No JavaScript rendering, so links injected by scripts and JS redirects are not seen; only HTTP redirects (up to 10 by default, max 20) are followed and recorded.
- Defaults: 20 crawled pages (max 1,000), 500 unique links checked (max 20,000), 15 s timeout per request (3 to 60 s), 10 checks in parallel (max 50). Crawling stays on the start site and checks at most 3 links per host at a time.
- Crawl mode reads only the first 500 KB of each page and skips files such as PDFs, images, CSS and JS for crawling.
robots.txtDisallow rules are honored for pages it crawls, but links found are checked with a single request each. - Servers that block bots (403, 429, CAPTCHA, anti-bot walls) are reported as returned. The checker identifies itself honestly and does not evade blocking, so some links show false "broken" results.
- URL fragments (#) are stripped and not checked. Slow servers can be reported as TIMEOUT for a single failed check.
FAQ
Does it run JavaScript? No. Links added by client-side JavaScript are not seen in crawl mode, and JS redirects are not followed; only HTTP redirects are. Are failed URLs charged? Yes, a DNS error or timeout is a valid check result and is charged like any other URL. Some sites return 403/429 to bots. Those are reported as is; the checker identifies itself honestly and does not evade blocking. Are fragments (#) checked? No, they are stripped. Is robots.txt respected? In crawl mode, yes for pages crawled. Link status checks of discovered URLs use a single request each.
Is this legal? Checking the status of public URLs is ordinary web activity, much like a browser or search crawler. The Actor identifies itself with a contact address, honors robots.txt when crawling and keeps request rates low. Crawl only sites you own or have permission to test, and follow each site's terms. You are responsible for how you use it.
Built by Winters Works.
Use from code and AI agents
Call it from any language with the Apify API, or let an AI agent find and run it through the Apify MCP server.
from apify_client import ApifyClientrun = ApifyClient("<YOUR_APIFY_TOKEN>").actor("wintersworks/url-status-link-checker").call(run_input={"urls": ["http://apify.com", "https://example.com", "https://httpbin.org/status/404"]})items = ApifyClient("<YOUR_APIFY_TOKEN>").dataset(run["defaultDatasetId"]).list_items().items
Results land in the run's dataset (JSON, CSV, Excel). Set a maximum charge per run in the run options to cap spend.