First CH Apps / Bulk URL Checker — HTTP Status Codes
Paste a list of URLs, one per line (up to 20), and our server checks each one and lists its HTTP status code, response time and final URL after redirects. Use it to confirm key pages still respond after a relaunch or migration, or to find dead entries in a prospect or link list.
To see every hop of a single URL's redirect chain, use the Redirect Chain Tracer; to grade the header values, use the Security Header Grader. This page answers three questions in bulk: is it alive, is it fast, and where does it end up?
This page checks the URLs you paste. To find broken links inside a single page, use the Broken Link & Image Alt Checker.
Each run checks the list once, at the moment you press the button. Nothing is scheduled, nothing is stored and no alerts are sent, so it cannot replace an uptime monitor. Run it again whenever you want a fresh result, up to 20 URLs per run.
The status is the one returned at the end of the chain (we follow up to five redirects and report the final code). Rows that redirected show their final URL.
Response times are measured from our server (Cloudflare Workers) and exclude the body, which we never download — we read the status and close the connection. They vary by network and region, so compare URLs with each other rather than reading absolute values.
404 (gone missing) and 410 (deleted) usually mean a redirect was never set up; 403 means our server was refused. Some sites open fine in a browser but return 403 to automated requests (bot protection).
Each URL times out after 8 seconds and follows at most 5 redirects. Only public GET requests are made — no cookies, no credentials.
A single run handles up to 20 URLs (to stay inside the free-tier subrequest limit). If the budget runs out, the remaining rows are labelled “not checked” rather than silently dropped.
Sent: only the list of URLs you paste. Our server (Cloudflare Workers) fetches each one with a public GET. No cookies and no credentials are sent.
Stored: nothing. The check lives entirely inside one request and writes neither the URLs nor the results to any database (no KV, no D1). It leaves memory when the request ends. There is no login and no account.
Returned: the status, response time and final URL for each entry. We never read the page body (not one byte) and never re-serve it — this app cannot be used to browse other sites through us.
Note: there is no scheduled monitoring (no stored results means no alerts and no history). URLs pointing at internal networks, localhost or private IPs are rejected.
POST /status-check/api/check with JSON ({"urls": ["https://example.com/", "https://example.net/"]}) and you get the same results back as JSON. Up to 10 URLs per request (the JavaScript on this page calls the same endpoint in batches of 5).