HTTP URL Probe
Pricing
$0.40 / 1,000 url probeds
HTTP URL Probe
Check up to 50 URLs per run with HEAD or GET: HTTP status code, final URL after redirects, redirect count, Content-Type header, and timing. No page body is read.
Pricing
$0.40 / 1,000 url probeds
Rating
0.0
(0)
Developer
EchoEmpire Machine Foundry (EchoEmpire LLC)
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Security
Limited permissionsShare
First run in two steps
- Cheapest single probe. Run with one public URL and default
HEAD. Cost = $0.0004 for that URL on the current Pricing tab (url-probed; no start fee; rates can change). Set a run spending limit (maxTotalChargeUsd) before you run so a larger batch cannot overspend.
{"urls": ["https://example.com/"],"method": "HEAD","timeoutSecs": 15,"followRedirects": true}
You get one dataset row: status code, final URL after redirects, redirect count, Content-Type, and timing. The page body is never read.
- Same shape, two outcomes. Re-run with a small list so you see a success row and an HTTP-error row in one batch. Still $0.0004 × number of URLs that got a network attempt (invalid or private/loopback URLs are not charged; do not use those as a free path).
{"urls": ["https://example.com/","https://httpbin.org/status/404"],"method": "HEAD","timeoutSecs": 15,"followRedirects": true}
If a host answers HEAD with 405 (or you need headers that only arrive on GET), keep the same urls and set method to "GET". The body is still not downloaded.
Store API / client examples for this Actor: the API section on the listing page.
Check whether URLs answer over HTTP, and where they end up. For each URL the Actor sends one HEAD (default) or GET request, follows redirects if you allow it, and returns one flat row with the status code, final URL, redirect count, Content-Type header and timing.
It is meant as a cheap first step before heavier work: prune dead links, record final URLs after redirects, or decide which URLs are worth sending to a content extractor.
What it does not do
- It does not read, return or analyze the page body.
GETis only used to get headers. - It does not check SEO, indexability, robots.txt, content or "uptime".
- It does not use proxies, rotate IPs or bypass bot protection. Requests come from Apify datacenter IPs, so some sites answer
403,429or refuseHEAD. That status is what you get back. - It does not switch from
HEADtoGETon its own. If a host answersHEADwith405, run it again withmethod: "GET".
Input
| Field | Type | Default | Notes |
|---|---|---|---|
urls | array of strings | required | 1 to 50 absolute http:// or https:// URLs per run. |
method | HEAD or GET | HEAD | |
timeoutSecs | integer | 15 | 1 to 30. Total time per URL, including redirects. |
followRedirects | boolean | true | Up to 10 hops. If false, the first response (e.g. 301) is reported. |
userAgent | string | EchoEmpire-HTTP-URL-Probe/0.1 (+https://apify.com/skilled_glee/http-url-probe) | Up to 200 printable characters. |
{"urls": ["https://example.com/", "https://httpbin.org/status/404"],"method": "HEAD","timeoutSecs": 15,"followRedirects": true}
If urls is missing or empty, the run fails with a clear message. There is no built-in example input that runs in its place.
Output
One dataset row per input URL, in input order:
| Field | Meaning |
|---|---|
url | The input URL as given. |
finalUrl | URL of the last response after redirects, or null if there was no HTTP response. |
statusCode | HTTP status of the last response, or null. |
ok | true when statusCode is 200–399 and there is no error. |
redirectCount | Redirects followed. |
contentType | Content-Type response header as sent by the server, or null. |
elapsedMs | Milliseconds until response headers, or until the failure. |
error | null, or one of: http_status (status 400+), timeout, dns, tls, connection, too_many_redirects, invalid_url, blocked_address. |
Rows from a real cloud run (2026-10-25):
{"url": "http://github.com/", "finalUrl": "https://github.com/", "statusCode": 200, "ok": true, "redirectCount": 1, "contentType": "text/html; charset=utf-8", "elapsedMs": 109, "error": null}{"url": "https://httpbin.org/status/404", "finalUrl": "https://httpbin.org/status/404", "statusCode": 404, "ok": false, "redirectCount": 0, "contentType": "text/html; charset=utf-8", "elapsedMs": 91, "error": "http_status"}{"url": "https://does-not-exist.invalid/", "finalUrl": null, "statusCode": null, "ok": false, "redirectCount": 0, "contentType": null, "elapsedMs": 76, "error": "dns"}
Partial failures are isolated: a bad URL never stops the batch. It becomes a row with ok: false and an error. A run summary (counts per outcome, URLs charged, whether a spending limit stopped the run) is saved as SUMMARY in the default key-value store.
invalid_url means the string is not an absolute http(s) URL, or it contains credentials. blocked_address means the host resolves to a private, loopback or link-local address; such URLs are not requested.
Pricing (pay per event, platform costs included)
| Event | When | Price |
|---|---|---|
url-probed | Once per URL that got a network attempt, whatever the outcome (ok, http_status, timeout, dns, tls, connection, too_many_redirects) | $0.0004 |
No start fee and no minimum charge. Not charged: rows with invalid_url or blocked_address (no request was sent), and dataset items as such. Example: 50 URLs in one run cost 50 × $0.0004 = $0.02.
If you set a maximum charge per run, the Actor stops before it would exceed it; URLs that were not probed get no row and are counted in SUMMARY.skippedForSpendingLimit.
Limitations
- 50 URLs per run; 10 requests in parallel.
- Redirects: at most 10 hops; more gives
too_many_redirects. - TLS certificates are verified; an invalid certificate gives
tls. - Many sites answer
HEADwith405, or block datacenter IPs with403/429. These are reported as the real status (ok: false,error: "http_status"), not hidden or retried. elapsedMsis measured from the Apify cloud and is not a latency benchmark for end users.