Bulk URL Status Checker
Pricing
from $0.15 / 1,000 url checkeds
Bulk URL Status Checker
Check large URL lists for status codes, redirects, broken links, response timing, headers, titles, canonical URLs, and robots meta.
Pricing
from $0.15 / 1,000 url checkeds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Check thousands of URLs for HTTP status codes, broken links, redirect chains, response timing, content headers, page titles, meta descriptions, canonical URLs, and robots meta tags.
Use this Actor for SEO audits, website migrations, QA checks, content operations, campaign link validation, and scheduled link-health monitoring.
At a glance
- Primary job: Turn a URL list, pasted text block, hosted list, or sitemap into a structured URL health report.
- Input: URLs,
urlsText,listUrl, orsitemapUrlwith configurable method, redirects, timeout, and concurrency. - Output: One dataset row per attempted URL, including both successful responses and failures.
- Best for: SEO teams, agencies, site migration teams, QA teams, marketers, and developers building monitoring workflows.
Who is it for?
- SEO teams and agencies validating migrations, redirects, canonical tags, and broken links.
- QA teams checking landing pages before launches.
- Content operations teams finding removed, redirected, or slow pages.
- Developers feeding URL health data into dashboards, alerts, and CI workflows.
Input recipes
Start from a verified public Example task when you want a ready-made configuration:
- Check website status codes and SEO metadata
- Find broken links and redirect chains
- Check a pasted list of URLs in bulk
- Check URLs from an XML sitemap
Example input
{"urls": ["https://example.com/", "https://www.iana.org/domains/example"],"maxUrls": 20,"concurrency": 10,"method": "head-get-fallback","followRedirects": true,"includeSeoMeta": true}
What data can you export?
| Field | Description |
|---|---|
inputUrl | Original URL supplied by the user. |
normalizedUrl | URL after scheme normalization and fragment removal. |
finalUrl | Final URL after redirects. |
statusCode / statusText | Final HTTP response status. |
ok | True for final 2xx or 3xx responses. |
isBroken | True for request errors or final 4xx/5xx responses. |
isRedirect / redirectCount | Redirect classification and number of followed hops. |
redirectChain | Redirect hops with source URL, status code, and Location. |
responseTimeMs | Elapsed check time in milliseconds. |
contentType / contentLength | Response headers commonly used for QA and SEO exports. |
title | HTML page title when SEO extraction is enabled and available. |
metaDescription | HTML meta description when available. |
canonicalUrl | HTML canonical URL when available. |
robotsMeta | HTML robots meta tag content when available. |
errorType / errorMessage | Request failure details for DNS, TLS, timeout, and invalid URL cases. |
responseHeaders | Optional raw response headers. |
checkedAt | ISO timestamp for the check. |
Input configuration
| Setting | JSON key | Use it for | Default |
|---|---|---|---|
| URLs | urls | Direct list of URLs to check. | sample URLs |
| URLs as text | urlsText | Paste newline, comma, tab, semicolon, or space separated URLs. | empty |
| Hosted URL list | listUrl | Fetch a remote text/CSV-like URL list. | empty |
| Sitemap URL | sitemapUrl | Extract and check <loc> entries from an XML sitemap. | empty |
| Max URLs | maxUrls | Cap unique URLs after de-duplication. | 20 |
| Concurrency | concurrency | Parallel checks. Lower for fragile sites. | 20 |
| Timeout | timeoutSecs | Per-URL request timeout. | 15 |
| Request method | method | head-get-fallback, get, or head. | head-get-fallback |
| Follow redirects | followRedirects | Follow redirects and report final destination. | true |
| Max redirects | maxRedirects | Redirect-hop limit per URL. | 10 |
| Include SEO meta | includeSeoMeta | Extract title, description, canonical, and robots meta for HTML pages. | true |
| Include headers | includeResponseHeaders | Include raw response headers. | false |
| User-Agent | userAgent | Send a custom User-Agent. | built-in crawler UA |
| Proxy | proxyConfiguration | Optional Apify Proxy routing. | off |
Example output
{"inputUrl": "https://example.com/","normalizedUrl": "https://example.com/","finalUrl": "https://example.com/","statusCode": 200,"statusText": "OK","ok": true,"isBroken": false,"isRedirect": false,"redirectChain": [],"redirectCount": 0,"responseTimeMs": 184,"contentType": "text/html","contentLength": 1256,"title": "Example Domain","metaDescription": null,"canonicalUrl": null,"robotsMeta": null,"errorType": null,"errorMessage": null,"checkedAt": "2026-07-10T00:00:00.000Z"}
Pricing
This Actor uses pay-per-event pricing.
| Event | Free | Bronze | Silver | Gold | Platinum | Diamond | Charged when |
|---|---|---|---|---|---|---|---|
| Run start | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | Once when the Actor starts. |
| URL checked | $0.000030025 | $0.000026108 | $0.000020365 | $0.000015665 | $0.000010443 | $0.0000073103 | Each URL is checked and saved as a dataset row, including failures. |
Tips for best results
- Start small: Run 10-20 URLs first to verify target behavior and output columns.
- Use
head-get-fallbackby default: It is fast and falls back when servers reject HEAD or HTML meta is requested. - Use GET-only when needed: Some servers return inaccurate HEAD responses.
- Lower concurrency for one domain: If many URLs hit the same small site, lower
concurrencyto avoid rate limits. - Keep raw headers off unless needed:
includeResponseHeadersincreases dataset size.
Limits and caveats
- Some websites block automated checks or return different results by User-Agent, method, region, or proxy.
- 403, 429, timeout, DNS, TLS, and invalid URL cases are recorded as rows, not treated as actor failures.
- The Actor reports the observed HTTP result; it does not bypass access controls.
API usage
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/bulk-url-status-checker').call({urls: ['https://example.com/', 'https://httpstat.us/404'],followRedirects: true,});console.log(run.defaultDatasetId);
Python:
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('fetch_cat/bulk-url-status-checker').call(run_input={'urls': ['https://example.com/', 'https://httpstat.us/404'],'followRedirects': True,})print(run['defaultDatasetId'])
cURL:
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~bulk-url-status-checker/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"urls":["https://example.com/","https://httpstat.us/404"],"followRedirects":true}'
MCP and AI agents
Use the Actor from MCP-compatible clients through the Apify MCP Server:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/bulk-url-status-checker"
Claude Desktop JSON configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/bulk-url-status-checker"}}}
Example prompts:
- "Check these landing page URLs and summarize broken links."
- "Run a sitemap status audit and group results by status code."
- "Find redirect chains in this migration URL map."
Related actors
FAQ
Can I check thousands of URLs?
Yes. Increase maxUrls and choose a safe concurrency for the target sites.
Does this use a browser?
No. It is a lightweight HTTP checker for status, redirects, headers, and basic HTML meta signals.
Why do I see 403 or 429?
The target server is refusing or rate limiting the request. Try lower concurrency, GET-only mode, a custom User-Agent, or an approved proxy setup.
Can I export the results?
Yes. Apify datasets can be exported as JSON, CSV, Excel, XML, RSS, HTML, or through the API.
Legality and responsible use
Only check URLs you are allowed to audit. Respect target websites, rate limits, robots policies, contracts, and applicable laws. Do not use the Actor to overload third-party servers.
Support
Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL.
Changelog
-
2026-07-15 - Feature: Added ready-to-run example tasks on the Apify Store
-
2026-07-15 - Feature: Launched Bulk URL Status Checker on Apify Store