HTTP Request
Pricing
from $0.20 / 1,000 responses
HTTP Request
Call any public API, one endpoint or thousands per run, and get one tidy row per call: status, headers, decoded body, timing and typed errors. Retries, proxy and webhook delivery included. Works with Clay, n8n, Make, Zapier and AI agents.
Pricing
from $0.20 / 1,000 responses
Rating
0.0
(0)
Developer
Data Xplorer
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share
HTTP Request calls any public API for you and hands back a tidy table: one row per call, with the status, the headers, the decoded body, the time it took and, when it fails, the exact reason. Make a single call or 10,000 in one run. Works with Clay, n8n, Make, Zapier and AI agents.
๐ What is HTTP Request?
It is an HTTP client hosted on Apify. Instead of writing a script, you describe the calls you want (address, method, headers, body) and the Actor performs them in parallel, retries the ones that fail for a temporary reason, and stores every answer in a dataset.
From there you can download the results as JSON, CSV or Excel, read them from your code, or have each row pushed to a webhook.
โจ What can this HTTP request tool do?
- ๐ฆ Thousands of calls per run: up to 10,000, with up to 50 running in parallel
- ๐ข Results in your order: the first row is your first request, whatever finished first
- ๐งฐ All the usual methods: GET, POST, PUT, PATCH, DELETE, HEAD and OPTIONS, with a JSON or text payload
- ๐๏ธ Defaults for the whole list: write an API key once, and let any request replace or drop it
- ๐ List parameters done right:
{"tag": ["a", "b"]}goes out astag=a&tag=b - ๐ Retries with judgement: temporary failures (network trouble, 429, 5xx) get new tries with growing pauses, and
Retry-Afteris honoured. Final answers such as 404 or 401 come back immediately - ๐ Any kind of answer: JSON becomes structured data, text stays text, files and images arrive as base64
- โช๏ธ Redirects made visible: each row shows where the call ended up and how many hops it took
- ๐จ Named failures:
dns_error,timeout,connection_error,tls_error,proxy_error... so you know what to fix - ๐ฌ Webhook delivery: rows can be posted to your endpoint one by one, while the run is still going
- ๐ Proxy on demand: appear in the country you choose or vary the outgoing IP address
- ๐ Credentials masked: keys, tokens and cookies never show in the dataset, yet the API receives them intact
- ๐ธ Billing on answers only: a call that gets no HTTP response costs nothing, and neither do retries
๐ก What is it used for?
- ๐งฑ Enrichment in Clay: query an API that Clay has no connector for, once per row, and bring the answer back into the table
- โ๏ธ Loops in n8n, Make and Zapier: replace a slow loop of HTTP modules by one Actor run that returns every answer together
- ๐ Uptime and contract checks: put your endpoints on a schedule and watch
statusCodeanddurationMsover time - ๐ฃ Notifications to several systems: deliver one event to a list of webhooks, each with its own credentials
- ๐บ๏ธ Localised data: read the price, stock or ranking an API serves to visitors of a given country
- ๐ค Tools for AI agents: let an agent reach any REST API through a single, predictable tool
๐ How to send HTTP requests in bulk
- Click Try for free and open the Input tab.
- List your calls in Requests. A URL is enough for a GET.
- Put what the calls have in common (API key, shared parameters) in the section below, once.
- Press Start.
- Open the Output tab: there is one row per call, in the order of your list.
- Export the table, fetch it through the API, or fill in Webhook URL before starting to receive rows live.
For a single call, leave Requests empty and fill in URL.
๐ฐ How much does it cost to send HTTP requests?
The price is per HTTP response received, and it includes platform usage.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| 1,000 responses | $0.30 | $0.27 | $0.24 | $0.20 |
| 1,000 responses through a proxy | $1.00 | $0.90 | $0.80 | $0.70 |
| Run start | $0.00005 |
The proxy price is the same for datacenter and residential proxies.
๐ Never billed:
- extra tries of the same call
- calls that end without an HTTP response (unknown domain, timeout, refused connection, address not allowed)
- entries that could not be sent (invalid URL, run timeout or spending cap reached)
| Calls answered | Free plan, no proxy |
|---|---|
| 1 | $0.00035 |
| 100 | $0.03 |
| 1,000 | $0.30 |
| 10,000 | $3.00 |
Every Apify account receives free credits each month, which cover thousands of calls. If you set a maximum cost in the run options, the Actor stops sending when the cap is reached and marks the remaining entries as skipped_charge_limit.
โฌ๏ธ Input
| Field | Description |
|---|---|
| Requests | Your list of calls. Each entry is a URL or { url, method, headers, params, body, id }. |
| URL | Address for a single call, or default address of the entries. |
| Method | GET by default. |
| Headers | Sent with every call. An entry can replace one, or remove it with null. |
| Query parameters | Appended to the address. A list repeats the name. |
| Body | JSON payload for write calls. A string is accepted through the API. |
| Parallel calls | 1 to 50, 10 by default. |
| Timeout | 1 to 300 seconds per try. |
| Retries | 0 to 10 new tries, 2 by default. |
| Statuses worth retrying | 408, 425, 429, 500, 502, 503, 504 by default. |
| Follow redirects, Redirect limit | Up to 20 hops, or none at all. |
| Decode JSON | Structured data, or raw string. |
| Size limit per response | 1 MB by default, 10 MB at most. With a residential proxy: 100 kB. |
| Mask credentials in results | Enabled by default. |
| Webhook URL | Receives each row as it is produced. |
| Proxy | Apify Proxy (country and group) or your own proxy servers. |
A list of calls with a shared API key:
{"headers": { "X-API-Key": "YOUR_KEY" },"requests": [{ "id": "acme", "url": "https://api.example.com/companies", "params": { "domain": "acme.com" } },{ "id": "globex", "url": "https://api.example.com/companies", "params": { "domain": "globex.com" } },{ "id": "new-contact", "url": "https://api.example.com/contacts", "method": "POST", "body": { "email": "jane@acme.com", "tags": ["lead", "2026"] } }],"maxConcurrency": 5}
One call:
{"url": "https://jsonplaceholder.typicode.com/todos/1"}
A call seen from the United States, with rows pushed to a webhook:
{"requests": [{ "id": "sku-1042", "url": "https://shop.example.com/api/products/1042" }],"proxy": { "useApifyProxy": true, "apifyProxyCountry": "US" },"webhookUrl": "https://your-app.example.com/hooks/http-results"}
โฌ๏ธ Output
| Field | Description |
|---|---|
id | The id of your entry, or request-1, request-2... |
index | Rank of the entry in your list, from 0 |
url | Address called, parameters included |
finalUrl | Address that answered, once redirects were followed |
method | HTTP method |
statusCode, statusText | Status returned by the server |
ok | true when the status is between 200 and 299 |
requestHeaders | Headers you supplied, credentials masked |
responseHeaders | Headers of the answer |
body | The answer: structured JSON, text, or base64 |
bodyEncoding | json, text, base64 or none |
bodyBytes | Size of the answer in bytes |
truncated | true when the size limit cut the answer |
durationMs | Time spent on the call, retries included |
attempts | Number of tries |
redirectCount | Number of redirects followed |
proxyUsed | Whether the call went through a proxy |
errorType, errorMessage | Reason, when there is no HTTP response |
webhookStatus | What your webhook answered, when one is set |
fetchedAt | Date and time of the call |
A row for a successful POST:
{"id": "create-post","index": 1,"url": "https://jsonplaceholder.typicode.com/posts","finalUrl": "https://jsonplaceholder.typicode.com/posts","method": "POST","statusCode": 201,"statusText": "Created","ok": true,"requestHeaders": { "content-type": "application/json" },"responseHeaders": { "content-type": "application/json; charset=utf-8" },"body": { "title": "Hello", "userId": 1, "id": 101 },"bodyEncoding": "json","bodyBytes": 50,"truncated": false,"durationMs": 212,"attempts": 1,"redirectCount": 0,"proxyUsed": false,"errorType": null,"errorMessage": null,"fetchedAt": "2026-10-06T21:40:07.115Z"}
A row for a call that never got an answer:
{"id": "old-partner","url": "https://api.partner-that-closed.example/v2/status","statusCode": null,"ok": false,"attempts": 1,"errorType": "dns_error","errorMessage": "getaddrinfo ENOTFOUND api.partner-that-closed.example"}
errorType | What happened | New try? |
|---|---|---|
dns_error | The domain name does not resolve | Only if the resolver itself was unavailable |
timeout | The answer did not arrive in time | Yes |
connection_error | The server refused or dropped the connection | Yes |
tls_error | The HTTPS certificate is not valid | No |
proxy_error | The proxy failed, or your plan has no access to it | Yes, unless access was denied |
network_error | Another transport problem | Yes |
blocked_url | The address is not on the public internet, or uses a port reserved for another protocol | No |
too_many_redirects | The redirect limit was exceeded | No |
invalid_request | The entry has no valid URL or an unknown method | No |
skipped_timeout | The run was about to time out before this entry | No |
skipped_charge_limit | Your spending cap was reached before this entry | No |
๐งฉ How to use HTTP Request with Clay, n8n, Make and Zapier
Any tool able to send a POST can drive the Actor. This endpoint launches a run and replies with the rows once they are ready:
POST https://api.apify.com/v2/acts/data_xplorer~http-request/run-sync-get-dataset-items
- Clay: make one run per table row with
url, your headers and anid, then map fields of the returnedbodyto columns. - n8n, Make, Zapier: turn your items into the
requestslist, launch one run, then iterate over the rows. Since the order is kept, row N belongs to item N. - Large lists: fill in Webhook URL and let your scenario be triggered by each row, instead of keeping a connection open until the end.
n8n, Make and Zapier also have an Apify app, if you prefer modules to raw calls.
๐ Can I use HTTP Request as an API?
Yes, through the Apify API or the Apify clients.
cURL:
curl -X POST "https://api.apify.com/v2/acts/data_xplorer~http-request/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"requests":["https://jsonplaceholder.typicode.com/todos/1","https://jsonplaceholder.typicode.com/users/1"]}'
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("data_xplorer/http-request").call(run_input={"requests": [{"id": "todo", "url": "https://jsonplaceholder.typicode.com/todos/1"},{"id": "user", "url": "https://jsonplaceholder.typicode.com/users/1"},],})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["id"], row["statusCode"], row["durationMs"])
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('data_xplorer/http-request').call({requests: [{ id: 'todo', url: 'https://jsonplaceholder.typicode.com/todos/1' },{ id: 'user', url: 'https://jsonplaceholder.typicode.com/users/1' },],});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const row of items) console.log(row.id, row.statusCode, row.durationMs);
๐ค Use HTTP Request with AI agents (MCP)
Through the Apify MCP server, assistants such as Claude, Cursor or VS Code can use this Actor as a tool. The agent decides which endpoints to call, and gets back structured rows it can reason on, including a named error when a call fails.
Server URL restricted to this Actor:
https://mcp.apify.com?tools=data_xplorer/http-request
Claude Code:
$claude mcp add --transport http http-request "https://mcp.apify.com?tools=data_xplorer/http-request"
MCP config file of Cursor, VS Code and similar clients:
{"mcpServers": {"http-request": {"url": "https://mcp.apify.com?tools=data_xplorer/http-request"}}}
Things you can ask:
- "Fetch these 15 product endpoints and list the ones whose price changed since my last note."
- "Are all the URLs in this sitemap answering with a 200? Give me the broken ones and why."
- "Send this JSON to my staging webhook and show me what it replies."
๐ก๏ธ Safety
- Only addresses on the public internet can be called. Loopback, private networks and reserved ranges are refused, and the check is repeated on every redirect and on the IP address the name resolves to.
- When a redirect leaves the original site, your
Authorizationheader and cookies stay behind. - Results are safe to share: credentials are masked unless you decide otherwise.
โ FAQ
๐ฆ How many calls fit in one run?
10,000. Rows are written to the dataset in groups while the run is going, so a long list is never held back until the end.
๐ข Is the order of the results guaranteed?
Yes. Calls are made in parallel, but rows are stored in the order of your list. index and id are there as well if you sort or filter later.
๐ What if the API replies 429 or 503?
Those two are treated as temporary. The Actor pauses, longer after each failure, and follows Retry-After when the API provides it (15 seconds at most). After the last try you receive the answer as it is, billed as one response.
๐ How do I pass an API key?
In Headers (for instance X-API-Key or Authorization) or in Query parameters, depending on the API. It reaches the API unchanged and is masked in the stored results.
๐ช Can I read the cookies a server sets?
Yes: disable Mask credentials in results and set-cookie appears in responseHeaders.
๐ Can it download a file?
Yes, within the size limit. Its content is in body as base64, and bodyEncoding says so.
๐ฅ๏ธ Does it run JavaScript or sign in to websites?
No. It speaks plain HTTP, which is all an API needs and the reason it is quick and inexpensive. Pages that depend on a browser call for a scraper built for them.
๐ Which proxy countries can I pick?
The ones offered by the proxy groups of your Apify plan. If a country is not available to you, the row says so with a proxy_error.
๐ Something is missing or broken. What now?
Tell us in the Issues tab. Every report gets an answer.
๐ Other tools you may like
- Google Flights Scraper: flight prices, schedules and booking links from Google Flights
- Google Trends Scraper: daily trending searches by country and keyword interest over time
- Google News Scraper: Google News articles in real time, with titles, sources, dates, images and URLs
- TikTok Ads Library FAST: competitor ad campaigns and creatives from the TikTok Ads Library


