HTTP Request Runner: Bulk API Calls with Retries avatar

HTTP Request Runner: Bulk API Calls with Retries

Pricing

from $0.61 / 1,000 http responses

Go to Apify Store
HTTP Request Runner: Bulk API Calls with Retries

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

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

4 days ago

Last modified

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.

FieldTypeRequiredDescription
requestsarrayConditionalRequest objects: id, label, url, method, headers, query, body, expectedStatusCodes. Only url is required per item.
curlCommandstringConditionalA single curl command to parse into a request, in addition to requests.
maxConcurrencyintegerNoRequests running at the same time.
requestsPerSecondintegerNoExtra rate limit independent of concurrency. 0 disables it.
timeoutSecsintegerNoSeconds to wait per attempt.
maxRetriesintegerNoRetry attempts after a network error or a retryable status code.
retryOnStatusCodesarray of integersNoStatus codes that trigger a retry.
followRedirectsbooleanNoFollow HTTP redirects automatically.
maxRedirectsintegerNoMaximum redirect hops per request.
parseJsonbooleanNoParse JSON responses into a structured json field.
maxResponseBytesintegerNoResponse bodies larger than this are truncated inline.
saveOversizedBodyToKeyValueStorebooleanNoSave oversized or binary bodies in full instead of truncating.
failOnErrorStatusbooleanNoAlso populate errorMessage for non-2xx responses.
expectedStatusCodesarray of integersNoDefault status-code assertion applied to every request without its own.
authTypeenumNonone, bearer, or basic, applied to requests without their own Authorization header.
authBearerTokenstring (secret)NoUsed when authType is bearer.
authBasicUsernamestringNoUsed when authType is basic.
authBasicPasswordstring (secret)NoUsed when authType is basic.
proxyConfigurationobjectNoOptional Apify Proxy configuration. Off by default.
callbackUrlstringNoPOST 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

FieldTypeDescription
requestId, labelstringYour own identifiers, echoed back for correlation.
requestedUrl, finalUrlstringThe URL you sent and the URL after any redirects.
methodstringHTTP method used.
statusCode, statusTextinteger, stringResponse status.
okbooleantrue for 2xx responses.
isBrokenbooleantrue for 4xx, 5xx, or no response.
isRedirect, redirectChain, redirectCountboolean, array, integerWhether the request redirected, and every hop it took.
contentTypestringResponse Content-Type header.
bodystringRaw response text, or base64 for binary content.
jsonobjectParsed JSON body, when the response is JSON.
bodyBytes, bodyTruncated, bodyStoredKeyinteger, boolean, stringResponse size, whether it was cut off inline, and where the full body was saved if so.
assertionPassedbooleanWhether the status code matched expectedStatusCodes, when set.
durationMs, attemptsintegerTiming and retry count for the request.
errorType, errorMessagestringFailure details when no response was received.
fetchedAtstringTimestamp 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 maxConcurrency at a time. Add requestsPerSecond on top of that when a target rejects bursts even at low concurrency.
  • retryOnStatusCodes defaults 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 saveOversizedBodyToKeyValueStore to keep full binary or large responses without bloating the dataset.
  • proxyConfiguration is 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