HTTP Request Runner — Bulk & Proxied
Pricing
$3.00 / 1,000 successful requests
HTTP Request Runner — Bulk & Proxied
Send hundreds of GET, POST, PUT or DELETE requests through datacenter or residential proxies and get status, headers, body and timing per URL.
Pricing
$3.00 / 1,000 successful requests
Rating
0.0
(0)
Developer
Andrew
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
Send hundreds or thousands of GET, POST, PUT, PATCH, DELETE or HEAD requests in one run — through Apify datacenter or residential proxies, with browser-like TLS fingerprints and headers, automatic retries with IP rotation, and configurable concurrency. Every request comes back as one dataset row with status code, response headers, body and timing.
Blocked and failed requests are free. You only pay for rows that return a 2xx or 3xx status. A 403, 429, 5xx, timeout or DNS failure is still recorded in the dataset so you can see what happened, but it is never charged.
What you get
One row per request, containing:
statusCode,statusText,ok— the HTTP outcome (okis true for 2xx/3xx)headers— the full response header object (optional)body— the response as text, parsed JSON or base64 (for images, PDFs and other binaries)bodyLength,bodyTruncated,bodyParseError— so you always know whether you got the whole thingdurationMs(final attempt) andtotalDurationMs(including retries),attempts,redirectCount,finalUrlproxyUsed—datacenter,residential,customornoneerror— a clear message for blocked, timed-out, invalid or refused requestskeyValueStoreUrl— a link to the full, untruncated body when you enable saving to the key-value storeindexandlabel— to match rows back to your input, even though results stream in as they finish
Use cases
- API scraping and bulk data pulls — hit paginated JSON endpoints, sitemaps or feeds in parallel and export straight to CSV, JSON or Google Sheets
- Uptime, geo and block testing — check how a list of URLs responds from datacenter vs residential IPs, or from a specific country
- Webhook and form submission — POST JSON or form bodies to hundreds of endpoints with per-request headers and payloads
- Link checking and redirect auditing — collect status codes, redirect chains and final URLs for every link on your site
- Pre-flight for scrapers — see which targets serve real content, which ones block, and how long they take before you build a full crawler
How to use
- Simple mode: paste your URLs into URLs — one request per line, all using the shared Method, Headers and Body.
- Advanced mode: put an array of request objects into Requests:
A JSON object[{ "url": "https://api.example.com/items?page=1", "label": "page-1" },{ "url": "https://api.example.com/items", "method": "POST", "headers": { "Authorization": "Bearer …" }, "body": { "name": "test" }, "label": "create" }]bodyis sent asapplication/jsonautomatically. Both lists can be used together. - Pick a Proxy. Apify datacenter proxy is the default; choose the
RESIDENTIALgroup (and optionally a country) for targets that block datacenter IPs, or paste your own proxy URLs. Every retry rotates to a fresh proxy session. - Tune Concurrency (1–50), Max retries, Retry on statuses and Request timeout for your target.
- Choose a Response format:
text,json(parsed into an object) orbase64(binary files). - Run the actor. Rows appear in the Dataset tab as requests complete — sort by
indexto restore input order.
Large or binary responses
Bodies are truncated at Max body characters (default 500,000). Turn on Save bodies to key-value store to also keep every complete response as a record named <index>-<url-slug> in the run's key-value store; the row's keyValueStoreUrl links straight to it.
Long runs
If the run approaches its timeout, the actor stops starting new requests, logs which indexes were not attempted and writes them to the NOT_ATTEMPTED record in the key-value store so you can re-run just those. Up to 10,000 requests are accepted per run; use Max requests to process only the first N.
Output format
{"index": 0,"label": "page-1","url": "https://api.example.com/items?page=1","finalUrl": "https://api.example.com/items?page=1","method": "GET","statusCode": 200,"statusText": "OK","ok": true,"headers": { "content-type": "application/json", "cache-control": "no-cache" },"contentType": "application/json","body": { "items": [ { "id": 1 } ], "next": 2 },"bodyLength": 4821,"bodyTruncated": false,"bodyParseError": null,"durationMs": 412,"totalDurationMs": 412,"attempts": 1,"redirectCount": 0,"proxyUsed": "datacenter","error": null,"keyValueStoreUrl": null,"fetchedAt": "2026-09-06T03:21:44.120Z"}
A blocked request looks like this and is not charged:
{"index": 1,"url": "https://example.com/protected","statusCode": 403,"statusText": "Forbidden","ok": false,"attempts": 3,"proxyUsed": "residential","error": "HTTP 403 Forbidden"}
Pricing
Pay per successful result: one request-result event for each row with a 2xx or 3xx status. Rows with 4xx/5xx responses, network errors, timeouts, invalid URLs or refused targets cost nothing.
Limits and safety
- Only
http://andhttps://URLs are accepted. - Requests to localhost, private networks (10/8, 172.16/12, 192.168/16, 169.254/16, IPv6 loopback and ULA) and cloud metadata hosts are refused with a clear per-row error.
- GET and HEAD requests never send a body.
- Redirects are followed up to 10 hops.


