Bulk URL Status & Redirect Checker
Pricing
from $0.56 / 1,000 url results
Bulk URL Status & Redirect Checker
Check thousands of URLs for HTTP status, full redirect chains, broken links, redirect loops, HTTPS downgrades and canonical mismatches. Fast HEAD requests, polite per-host limits.
Pricing
from $0.56 / 1,000 url results
Rating
0.0
(0)
Developer
Fleet
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Features
Share
Paste a list of URLs and get, for each one: the final HTTP status, every redirect hop (status and Location), the final URL, response time, content type, and clear flags for broken links, redirect loops, too many redirects, HTTPS-to-HTTP downgrades and, optionally, canonical-tag mismatches.
It uses lightweight HEAD requests (falling back to GET when a server mishandles HEAD), runs up to 50 requests in parallel, and keeps at most 2 parallel requests per website by default, so it is quick without hammering anyone's server.
Use it for
- Site migrations and redirect maps: check that every old URL lands on the right new page in one hop.
- Broken-link audits: run a list of URLs (for example from a sitemap export) and keep only the problems.
- SEO hygiene: find redirect chains, HTTP downgrades and pages whose canonical tag points elsewhere.
- Monitoring: schedule it daily on your key pages and get alerted on failures through Apify's integrations.
Input
| Field | What it does |
|---|---|
| URLs to check (required) | One per line, up to 100,000 per run. Missing scheme → https://. Duplicates are checked once. |
| Return only problem URLs | Return only broken, redirecting, downgrading or canonical-mismatch URLs. You pay only for the results returned. |
| Check the canonical tag | Reads the start of each final HTML page (max 512 KB) to compare <link rel="canonical"> with the final URL. Slower (GET instead of HEAD). |
| Max redirects to follow | Default 10; more is reported as "too many redirects". |
| Timeout per request | Default 15 s. |
| Parallel requests (total / per host) | Defaults 10 / 2. |
| Use HEAD requests | Default on. Off = always GET. |
Output
One item per URL. A real example from a test run:
{"url": "http://gov.uk/","finalUrl": "https://www.gov.uk/","statusCode": 200,"ok": true,"broken": false,"redirectCount": 2,"redirectChain": [{ "url": "http://gov.uk/", "status": 301, "location": "https://gov.uk/" },{ "url": "https://gov.uk/", "status": 301, "location": "https://www.gov.uk/" },{ "url": "https://www.gov.uk/", "status": 200, "location": null }],"responseTimeMs": 201,"contentType": "text/html; charset=utf-8","contentLength": 11261,"server": "nginx","canonicalUrl": "https://www.gov.uk/","canonicalMismatch": false,"redirectLoop": false,"tooManyRedirects": false,"httpsDowngrade": false,"error": null,"checkedAt": "2026-11-15T05:29:32.646Z"}
broken is true for a final status of 400 or above, a network error (DNS, timeout, refused connection, TLS), a redirect loop, or too many redirects; error then says which. A RUN_SUMMARY record in the run's key-value store has the totals and any invalid input lines.
Pricing
Pay per result: $0.0008 per URL result returned ($0.80 per 1,000), plus Apify's small run-start fee. Invalid lines and duplicates are not charged; with "Return only problem URLs", healthy URLs are not charged either. You can set a maximum cost per run; the Actor stops cleanly when it is reached.
Limits and honest notes
- Status codes are what the server returns to this Actor's requests from Apify's data centers. Some sites (behind bot protection such as Cloudflare challenges) answer automated requests with 403 or 429 even though the page works in a browser. Such results are real responses, but not proof that the page is down for people.
- Only HTTP-level redirects (3xx with Location) are followed. JavaScript and
<meta refresh>redirects are not. - Response times are measured from Apify's servers and include network distance; use them for comparisons, not as page-speed scores.
- Check only sites you have a legitimate reason to check, at sensible concurrency. The defaults are deliberately polite.
- No personal data is collected: only URLs, status codes and response headers listed above.
Use it from the API, a schedule or an AI agent
API. Start a run and get the results in one call (replace YOUR_APIFY_TOKEN):
curl -X POST "https://api.apify.com/v2/actors/fleet261114~url-status-checker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["http://python.org", "https://example.com"]}'
This waits up to 5 minutes. For bigger jobs, start a run with POST /v2/acts/fleet261114~url-status-checker/runs and read its dataset when it finishes. Apify's JavaScript and Python clients wrap the same calls.
Schedules and integrations. Create a task with your input and attach an Apify schedule (for example daily). Use Apify's integrations (webhooks, Make, Zapier, n8n, Google Sheets and others) to send the results onward.
AI agents (MCP). Add this Actor as a tool in any MCP client (Claude, Cursor and others) through Apify's hosted MCP server:
https://mcp.apify.com?tools=fleet261114/url-status-checker
The agent sees the input schema and the field descriptions above and can call the Actor directly. Set a maximum cost per run in the call options to cap spending.
FAQ
Why does a page that works in my browser show 403? Some sites block automated requests from data centers (bot protection). The result is the server's real answer to this Actor, not proof the page is down for people.
Does it follow JavaScript redirects? No, only HTTP redirects (3xx with a Location header).
Can I check a whole website? Give it the list of URLs, for example from a sitemap export. It checks the URLs you supply; it does not crawl links.
What does a typical run cost? At $0.0008 per result: 1,000 URLs cost about $0.80. With "Return only problem URLs" you pay only for the problems.
Questions and problems
Open an issue on the Actor's Issues tab with the run link.