Guide · Make and Zapier
Zapier and Make web scraping: HTTP steps and iterators
Zapier and Make.com web scraping for public pages: the generic HTTP step, looping over a URL list, rate limits, failure routing and a comparison with n8n.
Guide
This article was drafted with AI assistance from the sources listed below and edited and published by Teneo Labs. Disclosure: this site is run by Teneo Labs, the company behind Live Web Data API, which this article mentions.
| Criterion | Make | Zapier | n8n |
|---|---|---|---|
| Generic HTTP step | HTTP > Make a request | Webhooks by Zapier > Custom Request | HTTP Request node |
| Loop over a list | Iterator | Looping by Zapier | One item per URL, Loop Over Items |
| Pacing | Sleep module, scheduling | Delay by Zapier | Batching option, Wait node |
| Route failures | Filters, Router, error handlers | Filter, Paths | IF node, error output |
| Plan note | Operations count per module run | Webhooks not on Free plan | Self-host or Cloud plans |
Make and Zapier are not scraping tools. They are glue: a trigger, a few steps, an output. That is exactly why they work well for collecting a known list of public pages, as long as the page fetch itself is one clean HTTP call. This guide covers that call in both tools, how each one loops over a list, where each one fails quietly, and how they compare with n8n.
Make: HTTP > Make a request
Make's HTTP app has a generic Make a request module. For a fetch API that returns page content as JSON, the settings are:
| Field (HTTP → Make a request) | Value |
|---|---|
| Authentication type | API key (stored in a keychain), or No authentication plus a header |
| URL | the /v1/contents endpoint from the docs |
| Method | POST |
| Headers | Authorization = Bearer YOUR_KEY |
| Body content type | application/JSON |
| Body input method | JSON string |
| Body content | {"urls": ["{{1.url}}"]} |
| Parse response | Yes |
With Parse response on, later modules can map statuses[].status, statuses[].error.tag and results[].markdown directly. The exact copy-paste values are in the no-code recipes.
Zapier: Webhooks by Zapier > Custom Request
Zapier's Webhooks by Zapier app offers GET, POST and PUT events plus Custom Request. It is not available on the Free plan, and Zapier caps action payloads at 5 MB.
| Field (Custom Request) | Value |
|---|---|
| Method | POST |
| URL | the /v1/contents endpoint from the docs |
| Data Pass-Through? | False |
| Data | {"urls": ["https://example.com/changelog"]} |
| Headers | Authorization = Bearer YOUR_KEY, Content-Type = application/json |
The JSON response becomes fields you can use in the next step. Keep the page short with "text": {"maxCharacters": 8000} if the next step is a model or a Sheets cell, which has its own size limit.
Lists and rate limits
Both tools run one module per item, and both will happily send requests faster than an API allows.
In Make, the URL list usually arrives as an array: rows from Google Sheets > Search Rows, records from Airtable, or a text field split into lines. Put an Iterator in front of the HTTP module. Make's docs describe it as a module that "converts an array into a series of bundles", so each URL becomes its own bundle and its own request. To stay under a rate limit, add the Tools > Sleep module after the HTTP module, or split a long list across several scheduled runs.
In Zapier, a Zap normally handles one trigger event at a time. For a list in a single run, use Looping by Zapier on line items or text, then the Custom Request. Pacing is coarser: Delay by Zapier or, more simply, one Zap run per row (a "New or Updated Spreadsheet Row" trigger) so Zapier's own queue spreads the calls out.
Either way, check your rate limit with GET /v1/account before a large run. Sending 10 URLs in one request is allowed and counts as 10 against the rate limit, which counts URLs, not requests, so batching URLs does not make a job faster than your plan allows.
Routing failures
Failed pages come back inside a 200 response with statuses[0].status set to error. Both tools treat that as success unless you look.
- Make: add a Filter after the HTTP module (
statuses[].statusequal tosuccess) on the main path, and a Router branch for errors that writes the URL anderror.tagto an error sheet. For request-level failures (429,402), attach an error handler to the HTTP module: Break to retry later, or Ignore to skip and log. - Zapier: add a Filter step that only continues on
success, or use Paths to send errors to a separate row. Zapier's Zap history marks the run as successful either way, so the error row is your only record.
What to retry follows the same policy as every guide on this site: retry 429, 5xx and CRAWL_LIVECRAWL_TIMEOUT up to 3 times with backoff, retry no other per-URL error in the same run, and stop the scenario or Zap on 402, 401 or 403. Never retry RESTRICTED_TARGET. The full table is in the retry rules for URL lists. Failed pages cost 0 credits, but every retry still costs a Make operation or a Zapier task.
Choosing a platform
| Question | Make | Zapier | n8n |
|---|---|---|---|
| Long lists (hundreds of URLs) | Workable with Iterator and scheduling | Awkward; one run per row is easiest | Best fit, with sub-workflows |
| Branching on status | Router and filters | Paths and filters | IF node and error output |
| What you pay per page | Operations per module run | Tasks per action step | Executions (Cloud) or your server |
| Self-hosting | No | No | Yes |
| Easiest for a non-developer | Visual, data-heavy | Simplest for linear flows | Most settings to learn |
A practical rule: if the job is "for each new row, fetch one page and summarize it", Zapier is fine. If it is "every morning, fetch 300 pages and route failures", use Make or n8n. If it is thousands of pages, a plain script is cheaper and easier to debug; see scrape a list of URLs.
What this means for your workflow
- Use the generic HTTP step in both tools; native apps are announced as coming soon.
- Turn lists into one item per URL: Iterator in Make, one run per row or Looping by Zapier in Zapier.
- Pace calls below your rate limit and count operations or tasks per page before you schedule.
- Filter on
statuses[0].status; log every error tag to a separate sheet. - Move to n8n or a script when the list grows past what one run handles comfortably.
Frequently asked questions
Can Zapier scrape a website?
Zapier can call any HTTP endpoint with Webhooks by Zapier, which is not available on the Free plan. Point a Custom Request at a fetch API that returns page text and use the response fields in later steps. Zapier has no built-in HTML parser, so a fetch API that returns Markdown or text saves a Code step.
How do I scrape a list of URLs in Make?
Get the list as an array (from Google Sheets, Airtable or a text field), put an Iterator before the HTTP module so each URL becomes its own bundle, and keep the pace within your rate limit. Add a filter on the status field after the HTTP module.
Make, Zapier or n8n: which is best for web scraping workflows?
For a short list and simple steps, any of them works. Make handles arrays and branching well and counts operations per module run. Zapier is easiest for linear flows but looping is more limited. n8n can be self-hosted and is the most flexible for long lists and error routing.
Is there a native Make or Zapier app for Live Web Data API?
Not yet. Native integrations are announced as coming soon. Until then, use Make's HTTP > Make a request module or Zapier's Webhooks by Zapier > Custom Request, as shown here.
Sources
- HTTP app (Make docs) (Documentation)
- Iterator (Make Help Center) (Documentation)
- Send webhooks in Zaps (Zapier Help) (Documentation)
- Zap limits (Zapier Help) (Documentation)