Bulk HTTP Request Runner (API Caller) avatar

Bulk HTTP Request Runner (API Caller)

Pricing

Pay per event

Go to Apify Store
Bulk HTTP Request Runner (API Caller)

Bulk HTTP Request Runner (API Caller)

Send hundreds or thousands of HTTP requests (GET, POST, PUT, PATCH, DELETE, HEAD) to any API or URL and get status code, headers, redirects, timing and the parsed JSON or text body of each. Per-request headers, bodies and user data, retries. $0.50 per 1,000 responses.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Scott Williams

Scott Williams

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Send hundreds or thousands of HTTP requests in one run and get a clean dataset of the responses. Works with REST APIs, webhooks and plain web pages. For each request you get the status code, final URL and redirect hops, response time, content type, body size, response headers, and the body itself: parsed JSON in json, or text in body.

At a glance: $0.50 per 1,000 responses, plus $0.00005 per run start. Pay per result with no subscription, set a maximum cost per run, export to JSON, CSV or Excel, or call it from the Apify API, Make, Zapier or n8n.

Use one set of settings for a list of URLs, or give every request its own method, headers, JSON or raw body and a userData tag that is copied to the output so you can join results back to your rows.

Use cases

  • Call a REST API for every ID in a list (for example a product, ticket or order endpoint) and collect the JSON.
  • Bulk-POST records to an API or webhook from a spreadsheet, with a per-row result and status.
  • Health-check API endpoints and measure response times on a schedule.
  • Check that a list of webhook or callback URLs answers with 2xx.
  • Run requests from Apify's infrastructure inside a larger Apify workflow or integration (Make, Zapier, n8n).

Input

Simple mode, same settings for every URL:

{
"urls": [{"url": "https://httpbin.org/get?page=1"}, {"url": "https://httpbin.org/get?page=2"}],
"method": "GET",
"headers": {"Accept": "application/json"}
}

Advanced mode, one object per request:

{
"requests": [
{"url": "https://httpbin.org/post", "method": "POST", "json": {"hello": "world"}, "userData": {"row": 7}},
{"url": "https://httpbin.org/status/503"}
],
"retries": 1
}

Put an API key in Authorization header (stored encrypted) instead of plain headers.

Output example

Real output for the POST above (response headers and part of the echoed body omitted):

{
"url": "https://httpbin.org/post",
"method": "POST",
"finalUrl": "https://httpbin.org/post",
"statusCode": 200,
"ok": true,
"contentType": "application/json",
"bodySize": 471,
"timeMs": 443,
"redirects": [],
"json": {
"args": {},
"headers": {
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (compatible; BulkHttpRequest/1.0; +https://apify.com)"
},
"method": "POST",
"url": "https://httpbin.org/post",
"data": "{\"hello\":\"world\"}",
"files": {},
"form": {},
"json": {
"hello": "world"
}
},
"body": null,
"truncated": false,
"error": null,
"userData": {
"row": 7
},
"requestedAt": "2026-10-28T03:21:24+00:00"
}

Requests that get no response at all (DNS failure, timeout, robots.txt disallowed) still get a row with error set, and those rows are free.

Pricing

Pay per response: $0.50 per 1,000 requests ($0.0005 per request that gets an HTTP response, any status code), plus the standard Apify run start event of $0.00005 per run. Requests with no response are free. Set Maximum cost per run to cap spending.

Behavior and limits

  • Retries on 429 and 5xx with backoff, honoring Retry-After.
  • Requests to the same host are spaced by Min delay per host (default 0.2 s) and by any robots.txt crawl delay. robots.txt is always checked (RFC 9309); disallowed URLs are not requested.
  • Private, loopback and link-local addresses are refused.
  • Bodies are decoded as text; binary files are not stored. Use a file downloader for images or PDFs.

What happens with invalid input? If the input is not a JSON object, a field has the wrong type (for example a number where a list of URLs is expected, or "abc" for a number) or a method is not supported, nothing is sent and the run ends with one free status row (status: error). The status message reads Invalid input, nothing was fetched and no results were charged: <reason>. No results are charged; the standard Apify start event still applies.

You decide which endpoints to call, so you are responsible for having permission and following each API's terms and rate limits. The Actor identifies itself with its own user agent, does not log in to websites on your behalf, and respects robots.txt.