URL Status Checker: Bulk HTTP Status Code & Redirect Checker avatar

URL Status Checker: Bulk HTTP Status Code & Redirect Checker

Pricing

from $1.20 / 1,000 url checkeds

Go to Apify Store
URL Status Checker: Bulk HTTP Status Code & Redirect Checker

URL Status Checker: Bulk HTTP Status Code & Redirect Checker

Bulk URL status and HTTP status code checker. For each URL: final status, every redirect hop, response time, content type and size, page title, canonical, meta robots, X-Robots-Tag, HSTS, server, and DNS, TLS and timeout errors. For SEO migrations and redirect audits. USD 1.50 per 1,000 URLs.

Pricing

from $1.20 / 1,000 url checkeds

Rating

0.0

(0)

Developer

JT Palms

JT Palms

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

13 days ago

Last modified

Share

URL Status Checker: bulk HTTP status codes and redirect chains

Paste a list of URLs and get back, for each one, the final HTTP status code, every redirect hop (URL, status and Location), the final URL, response time, content type and size, page title, canonical URL, meta robots, X-Robots-Tag, HSTS and server header. Dead URLs come back with a clear reason: DNS failure, TLS/SSL certificate error, timeout, connection refused, redirect loop or too many redirects.

USD 1.50 per 1,000 URLs. Malformed input is free.

What people use it for

  • SEO site migrations. Check that every old URL 301-redirects to the right new page in one hop, not through a chain of three, and that the target returns 200 and is indexable.
  • Redirect audits. Find redirect chains, loops, 302s that should be 301s, and http:// URLs that do not go to https://.
  • Link rot. Check the outbound links in your articles, docs, bookmarks or a CSV export and find the ones that now 404, time out or point to dead domains.
  • Uptime spot checks. Check a list of landing pages, APIs or client sites on a schedule and alert when anything is not 2xx.
  • Indexability checks. See which URLs carry noindex in a meta tag or an X-Robots-Tag header, and where the canonical tag points.

Sample output

Real results, trimmed:

{
"input": "http://apple.com",
"url": "http://apple.com/",
"statusCode": 200,
"ok": true,
"finalUrl": "https://www.apple.com/",
"redirected": true,
"redirectCount": 1,
"redirectChain": [
{ "url": "http://apple.com/", "status": 301, "location": "https://www.apple.com/", "timeMs": 187, "method": "GET" },
{ "url": "https://www.apple.com/", "status": 200, "location": null, "timeMs": 457, "method": "GET" }
],
"responseTimeMs": 644,
"contentType": "text/html; charset=utf-8",
"contentLength": 254160,
"title": "Apple",
"canonicalUrl": "https://www.apple.com/",
"metaRobots": null,
"xRobotsTag": null,
"indexable": true,
"hsts": "max-age=31536000; includeSubdomains; preload",
"server": "Apple",
"httpVersion": "2.0",
"errorType": null,
"error": null,
"checkedAt": "2026-09-28T19:21:49.601Z"
}

Failures are just as clear:

{ "input": "https://www.google.com/this-page-does-not-exist", "statusCode": 404, "ok": false, "title": "Error 404 (Not Found)!!1", "responseTimeMs": 371 }
{ "input": "https://expired.badssl.com/", "statusCode": null, "errorType": "TLS", "error": "TLS/SSL error: CERT_HAS_EXPIRED certificate has expired" }
{ "input": "https://this-domain-does-not-exist-9f8e7d.com", "statusCode": null, "errorType": "DNS", "error": "Domain not found (DNS): ENOTFOUND ..." }
{ "input": "http://10.255.255.1/", "statusCode": null, "errorType": "TIMEOUT", "error": "Timed out: ETIMEDOUT Timeout awaiting 'request' for 5000ms" }
FieldWhat it is
statusCodeStatus of the last response (after redirects, if followed). null when there was no response.
redirectChainEvery hop in order: url, status, location (absolute), timeMs, and the method used. The last hop is the final response.
finalUrl, redirectCountWhere the chain ended and how many redirects it took.
responseTimeMsTime to response headers, summed over all hops.
contentType, contentLengthFrom the headers; the length falls back to the downloaded size when the header is missing.
title, canonicalUrl, metaRobotsFrom the HTML head (GET mode). A canonical URL in a Link header is used for PDFs and other non-HTML files.
xRobotsTag, hsts, server, httpVersionResponse headers of the final hop.
indexabletrue when the final status is 200 and neither meta robots nor X-Robots-Tag says noindex or none.
errorTypeDNS, TLS, TIMEOUT, CONNECTION_REFUSED, CONNECTION_ERROR, UNREACHABLE, REDIRECT_LOOP, TOO_MANY_REDIRECTS, REDIRECT_INVALID, INVALID_URL or OTHER.

The run's key-value store also gets a SUMMARY record with counts per status class (2xx, 3xx, 4xx, 5xx) and per error type.

How to use it

  1. Paste your URLs into URLs to check, one per line (or send them as a JSON array through the API).
  2. Pick a Request method:
    • GET (default) reads the page, so you also get the title, canonical and meta robots.
    • HEAD, falling back to GET is lighter and faster: headers only, with GET used only for servers that refuse HEAD.
  3. Optional: turn off Follow redirects to see only the first response, put your own bot name in Custom user agent (the user agent you choose is your responsibility), or add a Proxy to check from another country.
  4. Click Start, then filter the table by status, or export CSV, JSON or Excel.

For uptime or link-rot monitoring, save the input as a task, schedule it daily, and send the results to Slack, Google Sheets or a webhook.

Pricing

WhatPrice
URL checked (any status, including 4xx, 5xx, DNS, TLS and timeout errors: that is the answer)USD 0.0015 (USD 1.50 per 1,000)
Malformed input (not an http or https URL)Free
Duplicate URLs in the listChecked and billed once

Set a maximum cost per run in the run options; the actor stops cleanly when it is reached and keeps everything checked so far.

Limits

  • It checks the HTML the server sends. Redirects done by JavaScript or <meta http-equiv="refresh"> are not followed.
  • In GET mode it reads up to 2 MB of each HTML page to find the title and head tags; the rest is skipped.
  • The actor identifies itself. Every request carries the user agent Mozilla/5.0 (compatible; url-status-checker/1.0; +https://apify.com/JTPalms/url-status-checker), with plain request headers. It never pretends to be Chrome or any other browser, and has no browser presets.
  • Some sites block bots and answer with 401, 403, 429 or a challenge page. That answer is what the actor reports; it does not try to get past bot protection. Residential proxies are not supported, and a data center proxy only helps when a site blocks data-center addresses.
  • Up to 30 redirects per URL (10 by default) and 120 seconds per request.

FAQ

Why is a URL that works in my browser shown as 403? Some sites block bots, and this actor says plainly that it is one. The 403 is that site's answer to automated checks; open the URL in a browser to confirm the page itself works.

Does it follow http to https redirects? Yes, and every hop is listed in redirectChain, so you can see whether a migration takes one hop or several.

Why am I charged for 404s and timeouts? Because that is the answer you asked for: the URL was checked and it is broken. Only malformed input is free.

Is it legal? It requests public URLs that you supply, under its own name, and reads only the response headers and the page head. It does not log in and collects no personal data.

Something missing or wrong? Open an issue with the URL.