Bulk HTTP Request & Webhook Sender [$0.80/1K 💰] avatar

Bulk HTTP Request & Webhook Sender [$0.80/1K 💰]

Pricing

$0.80 / 1,000 request answereds

Go to Apify Store
Bulk HTTP Request & Webhook Sender [$0.80/1K 💰]

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

CyberMax

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 hours ago

Last modified

Features

Limited permissions

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):

methodurlstatusmsextracted
GEThttps://jsonplaceholder.typicode.com/posts/120031title: "sunt aut facere repellat provident…"
GEThttps://jsonplaceholder.typicode.com/users/120011name: "Leanne Graham"
POSThttps://postman-echo.com/post (body {"hello": "world"})20064json.hello: "world"
GEThttps://jsonplaceholder.typicode.com/nope40410
GEThttp://169.254.169.254/latest/meta-data/blockedprivate/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

WayInput
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

FieldWhat it is
label, method, url, finalUrlThe request (and where redirects ended).
status, ok, statusTextHTTP status; ok is true for 2xx.
bodyParsed JSON, or text; cut at maxResponseKb (truncated: true).
extractedValues of extractFields (dotted paths such as data.price or items.0.id).
headersResponse headers (when includeResponseHeaders is on).
durationMs, totalMs, attemptsLast attempt's time, total time with retries, and how many attempts it took.
inputRowThe dataset row the request came from (when includeInputRow is on).
changenew or changed in monitor mode.
errorWhy 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, honouring Retry-After.
  • Rate limits: maxRequestsPerSecondPerHost (default 5) and maxConcurrency (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)

  1. Turn on "monitor": true with a monitorKey, save as a task.
  2. Schedules → Create: hourly or daily.
  3. 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-requests with {"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

HookvolleyTypical HTTP request Actor on the Store
One request per dataset row, batches to webhooksYes, with templatesOften a plain URL list
Retries, Retry-After, per-host rate limitBuilt inOften a fixed retry or none
JSON field extractionYesRare
Monitor modeChanged responses only, unchanged = freeRare
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

Found this useful? A quick rating helps others find it.

© 2026 CyberMax. All rights reserved.