HTTP Request Sender: Batch API Calls, Pagination & Retries avatar

HTTP Request Sender: Batch API Calls, Pagination & Retries

Pricing

from $2.13 / 1,000 http responses

Go to Apify Store
HTTP Request Sender: Batch API Calls, Pagination & Retries

HTTP Request Sender: Batch API Calls, Pagination & Retries

Send hundreds of HTTP requests (GET, POST, PUT, PATCH, DELETE) to any API in one run: headers, JSON/form bodies, {{placeholders}} from a list, retries, pagination, proxy, JSON array splitting. $2.50 per 1,000 responses; network errors free.

Pricing

from $2.13 / 1,000 http responses

Rating

0.0

(0)

Developer

Larkmoor Data

Larkmoor Data

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 to any REST API or URL in one run and get every response back as a clean dataset row: status code, timing, parsed JSON (or text), errors and, if you want, response headers. GET, POST, PUT, PATCH, DELETE, HEAD and OPTIONS all work, with your own headers, query parameters and JSON, form or raw bodies.

It is built for the jobs where a no-code tool or a spreadsheet needs "just one API call per row": enrich a list through a REST API, push records into a CRM, trigger webhooks, warm a cache, check that endpoints answer, or pull every page of a paginated API into one table.

What you can use it for

  • Clay, Make, Zapier and n8n users: call any API without a paid HTTP plan, one run for the whole list instead of one run per call
  • Enrichment: a URL template like https://api.example.com/companies/{{domain}} plus a list of rows = one request per row, results in one dataset
  • Bulk create / update: POST or PATCH a JSON body per record (placeholders work inside the body too)
  • Pull a paginated API: follow page=1,2,3… or a next link and split the returned array into one row per item
  • Webhooks and health checks: fire a batch of webhooks, check that a list of endpoints answers 200, measure response times
  • Geo tests: route requests through Apify Proxy in a chosen country

Why this one

  • $2.50 per 1,000 responses, half the price of the other HTTP-request actors ($5 per 1,000)
  • Network errors and timeouts are free: you pay only when a server actually answered
  • Retries done right: retries on 408/425/429/5xx and network errors with back-off, and it waits for the server's Retry-After
  • Templates: {{placeholders}} from your rows in the URL, headers, query params and body; a placeholder that is the whole value keeps its type (numbers stay numbers in JSON)
  • Pagination built in: page-number, offset (set the step) or next-link (next, links.next, paging.next.url …)
  • Array splitting: splitItemsPath: "data.items" turns one API response into one dataset row per item — ready for CSV or Excel
  • Rate-limit friendly: parallel requests (1–50) plus a global minimum delay between requests
  • Binary files: download images or PDFs as base64 when you need the bytes

Input

FieldWhat it does
RequestsList of URL strings or objects {url, method, headers, queryParams, body, bodyType, label}
URLs (simple mode)Plain URLs sent with the shared settings
URL template + Template rowsOne request per row, {{field}} filled from the row
Shared method / headers / query params / bodyDefaults for every request (a request's own values win)
Body typeJSON (default), form (x-www-form-urlencoded) or raw text
Response formatAuto, JSON, text or base64
Split JSON array into rowsDot path to an array in the response (. = top-level array)
Page parameter, start page, page stepPage-number or offset pagination
Next-page URL pathFollow a next link in the JSON response
Max pages per requestHow far to paginate
Parallel requests, delay, timeout, retries, retry codesSpeed and politeness
Max requestsHard cap per run
ProxyOptional Apify Proxy with country

Example input, three ways at once:

{
"requests": [
{"url": "https://jsonplaceholder.typicode.com/posts", "method": "POST", "body": {"title": "Hello", "userId": 1}, "label": "create post"}
],
"urlTemplate": "https://jsonplaceholder.typicode.com/users/{{id}}",
"templateRows": [{"id": 1, "label": "first"}, {"id": 2, "label": "second"}],
"headers": {"Accept": "application/json"},
"maxConcurrency": 5
}

Pagination example (every page of a list, one row per item):

{
"urls": ["https://pokeapi.co/api/v2/pokemon?limit=100"],
"nextUrlPath": "next",
"splitItemsPath": "results",
"maxPagesPerRequest": 20
}

Output

One row per response (or one row per array item when you split):

{
"requestIndex": 0,
"label": "create post",
"method": "POST",
"url": "https://jsonplaceholder.typicode.com/posts",
"ok": true,
"status": 201,
"statusText": "Created",
"contentType": "application/json",
"contentLength": 47,
"attempts": 1,
"elapsedMs": 252,
"json": {"title": "Hello", "userId": 1, "id": 101}
}

Other fields when they apply: body (text responses), bodyTruncated, bodyBase64, finalUrl (after redirects), responseHeaders, page, pageIndex, itemIndex + item (split mode), error (for example HTTP 404 or the network error).

How much does it cost?

Pay per event: $0.0025 per HTTP response (any status code) plus $0.001 per run start. Requests that fail before a server answers (DNS errors, timeouts, refused connections) are free. Higher Apify plans get tier discounts (Bronze −5%, Silver −10%, Gold and up −15%).

Worked examples (Free tier):

  • 200 enrichment calls from a URL template: 200 × $0.0025 = $0.50 + $0.001
  • A paginated API, 30 pages of 100 items split into 3,000 rows: 30 responses × $0.0025 = $0.075 — you pay per page, not per item
  • 5,000 webhook POSTs: $12.50; at 256 MB the platform compute for such a run is a few cents

Set a maximum cost per run in Apify and the actor stops cleanly when it is reached.

FAQ

Is it legal? The actor sends the requests you define, to the APIs and URLs you choose, like curl or Postman would. You are responsible for having the right to call those endpoints and for respecting their terms and rate limits (use the delay setting).

Where do I put my API key? In the shared headers (for example Authorization: Bearer …) or as a query param. Inputs are stored in your own Apify account; keep runs private if you share the account.

Do placeholders work in the body? Yes, in the URL, headers, query params and body, with dot paths like {{user.id}}.

How are non-2xx responses handled? They are returned with ok: false and error: "HTTP 4xx". 429 and 5xx are retried first. Turn on "Only output successful responses" to keep them out of the dataset.

What is the order of the rows? Rows arrive as responses complete; sort by requestIndex (and pageIndex / itemIndex) to restore input order.

Can it call localhost or cloud metadata addresses? Link-local and metadata addresses are refused.

Can I send files? Bodies are JSON, form or raw text. Multipart file uploads are not supported yet.

Tips

  • Start with maxRequests: 10 to check headers and bodies, then raise it.
  • For APIs with strict rate limits, set parallel requests to 1 and a delay (for example 1,000 ms).
  • For offset pagination, set the page parameter to offset, start page 0 and page step to your page size.

Integrations

Run it from the Apify API, a schedule, Make, Zapier, n8n or Clay, and read the dataset as JSON, CSV or Excel. Chain it after another actor with a webhook to call an API for every row that actor found.

Changelog

  • 0.1 (Oct 2026): first release — batch requests, templates, retries with Retry-After, page/offset/next-link pagination, array splitting, base64 bodies, proxy by country.