Bulk HTTP Request & Webhook Sender [$0.80/1K 💰]
Pricing
$0.80 / 1,000 request answereds
Bulk HTTP Request & Webhook Sender [$0.80/1K 💰]
💰 $0.80 per 1,000 requests answered; no-response requests free, no start fee. Bulk GET, POST, PUT, PATCH or DELETE to any API or webhook, from a URL list or one request per dataset row with {{field}} templates. Retries, rate limits, JSON parsing. Cheaper than memo23's HTTP request ($5/1K).
Pricing
$0.80 / 1,000 request answereds
Rating
0.0
(0)
Developer
CyberMax
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Features
Share
Hookvolley: Bulk HTTP Requests, API Caller & Webhook Sender
Call any API or webhook thousands of times, from a list or one request per dataset row
Hookvolley sends HTTP requests in bulk (GET, POST, PUT, PATCH, DELETE, HEAD) and saves every response: status, timing, parsed JSON or text, and the fields you want pulled out. Build requests from a URL list, a JSON list, or one request per row of a dataset with {{field}} templates, or post rows in batches to a webhook. Retries with backoff, Retry-After, per-host rate limits, redirects and timeouts are built in. $0.80 per 1,000 requests, no start fee.
▶ Try it now with a prefilled input · $0.0008 per request answered (1,000 calls = $0.80) · requests that never get a response are free · Apify's free plan includes $5 of credit a month
Built for: automation builders who need a reliable "HTTP request" step in Apify workflows · developers calling an API for a list of IDs, domains or SKUs · teams pushing scraped rows into a CRM, Slack, Airtable or their own backend · API health and change monitoring · AI agents that need a safe HTTP tool
Real output (real run on Apify, 10 Nov 2026: 5 requests in 1.9 s at 256 MB, platform cost $0.00008):
| method | url | status | ms | extracted |
|---|---|---|---|---|
| GET | https://jsonplaceholder.typicode.com/posts/1 | 200 | 31 | title: "sunt aut facere repellat provident…" |
| GET | https://jsonplaceholder.typicode.com/users/1 | 200 | 11 | name: "Leanne Graham" |
| POST | https://postman-echo.com/post (body {"hello": "world"}) | 200 | 64 | json.hello: "world" |
| GET | https://jsonplaceholder.typicode.com/nope | 404 | 10 | |
| GET | http://169.254.169.254/latest/meta-data/ | blocked | private/internal addresses are refused (not charged) |
A second run posted a 25-row dataset to a webhook in 3 batches of up to 10 rows (3 requests, all 200, 3.1 s).
{"urls": ["https://jsonplaceholder.typicode.com/posts/1", "https://jsonplaceholder.typicode.com/users/1"], "extractFields": ["title", "name"]}
Three ways to build requests
| Way | Input |
|---|---|
| A list of URLs (same method, headers, body) | {"urls": ["https://api.example.com/a", "https://api.example.com/b"], "headers": {"Authorization": "Bearer YOUR_KEY"}} |
| Individual requests | {"requests": [{"url": "https://api.example.com/orders", "method": "POST", "body": {"sku": "A1", "qty": 2}, "label": "order-1"}]} |
| One request per dataset row | {"datasetId": "…", "urlTemplate": "https://api.example.com/companies/{{domain|url}}"} |
| Rows to a webhook in batches | {"datasetId": "…", "method": "POST", "urlTemplate": "https://hooks.example.com/abc", "batchSize": 100} |
Templates: {{field}}, {{nested.field}}, {{field|url}} (URL-encoded), {{field|json}} (JSON-encoded) and {{json}} (the whole row). With POST/PUT/PATCH and no body template, the row (or the batch as a JSON array) is the body.
What you get for each request
| Field | What it is |
|---|---|
label, method, url, finalUrl | The request (and where redirects ended). |
status, ok, statusText | HTTP status; ok is true for 2xx. |
body | Parsed JSON, or text; cut at maxResponseKb (truncated: true). |
extracted | Values of extractFields (dotted paths such as data.price or items.0.id). |
headers | Response headers (when includeResponseHeaders is on). |
durationMs, totalMs, attempts | Last attempt's time, total time with retries, and how many attempts it took. |
inputRow | The dataset row the request came from (when includeInputRow is on). |
change | new or changed in monitor mode. |
error | Why there was no response (DNS, timeout, blocked address, invalid URL). |
Reliability and limits
- Retries: network errors, timeouts, 408, 425, 429 and 5xx are retried (
maxRetries, default 3) with exponential backoff, honouringRetry-After. - Rate limits:
maxRequestsPerSecondPerHost(default 5) andmaxConcurrency(default 5, up to 20) keep you inside an API's limits. - Safety: only http and https; private, loopback, link-local and cloud-metadata addresses are refused, also after redirects.
- Up to 100,000 requests per run.
Run it on a schedule (API and price monitoring)
- Turn on
"monitor": truewith amonitorKey, save as a task. - Schedules → Create: hourly or daily.
- Each run returns only requests whose status or body changed; unchanged responses are free. Add an email, Slack or webhook integration for alerts.
Integrations
- Chain after any scraper: in the scraper's Integrations add "Run Actor" →
cybermax/bulk-http-requestswith{"datasetId": "{{resource.defaultDatasetId}}", "method": "POST", "urlTemplate": "https://your-webhook", "batchSize": 50}. - API (curl):
curl -X POST "https://api.apify.com/v2/acts/cybermax~bulk-http-requests/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" -d '{"urls": ["https://jsonplaceholder.typicode.com/posts/1"]}'
- Python:
ApifyClient(token).actor("cybermax/bulk-http-requests").call(run_input={"urls": [...]}) - Make, Zapier, n8n: use it when a workflow needs thousands of calls with retries and rate limits that a single HTTP module can't handle.
- AI agents (MCP):
https://mcp.apify.com?actors=cybermax/bulk-http-requests.
Why Hookvolley
| Hookvolley | Typical HTTP request Actor on the Store | |
|---|---|---|
| One request per dataset row, batches to webhooks | Yes, with templates | Often a plain URL list |
| Retries, Retry-After, per-host rate limit | Built in | Often a fixed retry or none |
| JSON field extraction | Yes | Rare |
| Monitor mode | Changed responses only, unchanged = free | Rare |
| Price | $0.80 per 1,000 requests, no start fee | $0.92–$5 per 1,000 requests (Store prices on 10 Nov 2026) |
FAQ
Is a 404 or 500 charged? Yes: the request was sent and the API answered (after retries for 5xx). Requests that never get a response, invalid inputs and blocked addresses are free.
Where do API keys go? In headers (e.g. Authorization). They stay in your run's input on your own Apify account.
Can it scrape websites? It sends exactly the requests you define and returns the raw response; for structured website data use a dedicated scraper. Use it only with APIs and sites you are allowed to call, within their terms and rate limits.
How big can responses be? Bodies are saved up to maxResponseKb (512 KB by default, 9 MB max). Use responseFormat: "none" when you only need status codes.
Also from CyberMax
- Rowmeld: Merge & Deduplicate Datasets · clean the rows before you send them.
- Bouncefern: URL Status Checker · status codes and redirects for any list of URLs.
- Pageshuck: PDF to Text & Markdown · documents to text for your pipeline.
Found this useful? A quick rating helps others find it.
© 2026 CyberMax. All rights reserved.