HTTP Request Runner: Bulk API Calls with Retries
Pricing
from $0.61 / 1,000 http responses
HTTP Request Runner: Bulk API Calls with Retries
Send up to 1000 HTTP requests in one batch with retries, redirect chains, and JSON parsing built in. Paste a curl command from DevTools or Postman instead of hand-building requests. Works with n8n, Make, Zapier, and MCP agents. Skip the retry and concurrency code. From $0.0006 per response.
Pricing
from $0.61 / 1,000 http responses
Rating
0.0
(0)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share
π HTTP Request Runner: Bulk API Calls with Retries
|
Send hundreds of requests, get back clean data Batch HTTP requests with automatic retries, redirect tracking, and JSON parsing built in, so you don't have to write that layer yourself. |
|
π Paste a curl command Skip building request objects by hand, copy one from DevTools or Postman and run it as is. |
π Full redirect visibility See every hop in the chain, not just the final URL. |
π‘οΈ Works behind a proxy Route through Apify Proxy when a target rate-limits or geo-blocks by IP, optional and off by default. |
π¦ Nothing gets truncated Oversized and binary responses are saved in full instead of being cut off. |
Point it at up to 1,000 URLs, or paste a single curl command, and get one dataset row per request: status, redirect chain, parsed JSON, timing, and any error. It runs retries, concurrency, and rate limiting for you, so your pipeline, monitor, or AI agent only has to read the results.
π― Common workflows
- Pipeline builders (n8n, Make, Zapier): Replace a chain of manual HTTP nodes with one batch call, then stream each result to your workflow with a callback webhook as it completes.
- QA and uptime engineers: Check hundreds of endpoints in one run and see instantly which ones failed, redirected, or didn't match the status code you expected.
- AI agent and MCP developers: Give an agent one tool that can call any API: batched, retried, and parsed into JSON it can use directly.
- Data teams: Pull from a list of API endpoints on a schedule and land clean, structured rows in a dataset without maintaining request code.
π How to use it
|
STEP 1 Add your requests List URLs and options, or paste a curl command. |
STEP 2 Set the rules Concurrency, retries, auth, and proxy, all optional. |
STEP 3 Get structured results Status, JSON, redirects, and timing for every request. |
π₯ Input
At least one item in requests or a curlCommand is required.
| Field | Type | Required | Description |
|---|---|---|---|
requests | array | Conditional | Request objects: id, label, url, method, headers, query, body, expectedStatusCodes. Only url is required per item. |
curlCommand | string | Conditional | A single curl command to parse into a request, in addition to requests. |
maxConcurrency | integer | No | Requests running at the same time. |
requestsPerSecond | integer | No | Extra rate limit independent of concurrency. 0 disables it. |
timeoutSecs | integer | No | Seconds to wait per attempt. |
maxRetries | integer | No | Retry attempts after a network error or a retryable status code. |
retryOnStatusCodes | array of integers | No | Status codes that trigger a retry. |
followRedirects | boolean | No | Follow HTTP redirects automatically. |
maxRedirects | integer | No | Maximum redirect hops per request. |
parseJson | boolean | No | Parse JSON responses into a structured json field. |
maxResponseBytes | integer | No | Response bodies larger than this are truncated inline. |
saveOversizedBodyToKeyValueStore | boolean | No | Save oversized or binary bodies in full instead of truncating. |
failOnErrorStatus | boolean | No | Also populate errorMessage for non-2xx responses. |
expectedStatusCodes | array of integers | No | Default status-code assertion applied to every request without its own. |
authType | enum | No | none, bearer, or basic, applied to requests without their own Authorization header. |
authBearerToken | string (secret) | No | Used when authType is bearer. |
authBasicUsername | string | No | Used when authType is basic. |
authBasicPassword | string (secret) | No | Used when authType is basic. |
proxyConfiguration | object | No | Optional Apify Proxy configuration. Off by default. |
callbackUrl | string | No | POST each result to this URL as JSON the moment it completes. |
Curl import example
{"curlCommand": "curl -X POST https://api.example.com/orders -H \"Authorization: Bearer sk_live_xxx\" -d '{\"orderId\":42}'","maxConcurrency": 5}
Batch example with an assertion
{"requests": [{ "id": "home", "url": "https://example.com", "expectedStatusCodes": [200] },{ "id": "api-health", "url": "https://api.example.com/health", "expectedStatusCodes": [200] }],"maxConcurrency": 10,"requestsPerSecond": 20}
π€ Output
One row per request:
{"requestId": "api-health","label": "health check","requestedUrl": "https://api.example.com/health","finalUrl": "https://api.example.com/health","method": "GET","statusCode": 200,"statusText": "OK","ok": true,"isBroken": false,"isRedirect": false,"redirectChain": [],"contentType": "application/json","json": { "status": "ok", "uptimeSeconds": 481293 },"bodyBytes": 34,"bodyTruncated": false,"assertionPassed": true,"durationMs": 214,"attempts": 1,"fetchedAt": "2026-08-19T18:00:43.126Z"}
Three dataset views are ready in the Output tab: Responses for status and timing, Response Bodies for full payloads and parsed JSON, and Redirects & Errors for chains and failures. A run summary with success rate, status code breakdown, and average response time is also saved to the key-value store.
Field reference
| Field | Type | Description |
|---|---|---|
requestId, label | string | Your own identifiers, echoed back for correlation. |
requestedUrl, finalUrl | string | The URL you sent and the URL after any redirects. |
method | string | HTTP method used. |
statusCode, statusText | integer, string | Response status. |
ok | boolean | true for 2xx responses. |
isBroken | boolean | true for 4xx, 5xx, or no response. |
isRedirect, redirectChain, redirectCount | boolean, array, integer | Whether the request redirected, and every hop it took. |
contentType | string | Response Content-Type header. |
body | string | Raw response text, or base64 for binary content. |
json | object | Parsed JSON body, when the response is JSON. |
bodyBytes, bodyTruncated, bodyStoredKey | integer, boolean, string | Response size, whether it was cut off inline, and where the full body was saved if so. |
assertionPassed | boolean | Whether the status code matched expectedStatusCodes, when set. |
durationMs, attempts | integer | Timing and retry count for the request. |
errorType, errorMessage | string | Failure details when no response was received. |
fetchedAt | string | Timestamp the request completed. |
π° Pricing
This Actor is pay per result. You are charged for requests that complete, and an empty or failed run costs nothing beyond the fixed start fee. There is no subscription.
β Enjoying HTTP Request Runner?
|
β β β β β If this Actor saved you from writing retry and concurrency code by hand, leave a rating. A 5-star rating takes 10 seconds and helps other pipeline builders and agent developers find it. Your feedback also tells us what to build next. |
| β Β Β Rate this Actor on Apify |
π‘οΈ Tips and limits
- Requests run up to
maxConcurrencyat a time. AddrequestsPerSecondon top of that when a target rejects bursts even at low concurrency. retryOnStatusCodesdefaults to codes worth retrying (408, 425, 429, 500, 502, 503, 504). A 4xx code outside that list means the request itself is wrong and will fail identically on retry, so it is not retried.- Turn on
saveOversizedBodyToKeyValueStoreto keep full binary or large responses without bloating the dataset. proxyConfigurationis optional and off by default. Turn it on only for targets that rate-limit or geo-block by IP.
β FAQ
Can I import a request straight from my browser or Postman?
Yes. Copy the curl command and paste it into curlCommand. It runs alongside anything in requests.
Does it support proxies?
Yes, optionally through proxyConfiguration. It is off by default since most API calls should go direct.
What happens when a request fails?
It retries according to maxRetries and retryOnStatusCodes, then the row still gets pushed with isBroken: true and an errorMessage, so failures stay visible instead of disappearing from the dataset.
Can I stream results to my own system as they complete?
Yes. Set callbackUrl and each result is POSTed there as JSON the moment it finishes.
Does it run as a standby web server?
No. Each run processes its batch, writes results and a run summary, then exits.
π Other actors
- Google Lens OCR API β - Batch image to text extraction with bounding boxes, for document and RAG pipelines.
- arXiv scraper for RAG β - Research papers as chunked JSON for retrieval pipelines.
- Domain Health Monitor β - WHOIS, DNS, and SSL monitoring for a list of domains.
- Bulk Image Downloader β - Download image batches with metadata, hashes, and Apify storage output.