Skip to content

Web Scraping With Zapier: Send Scraped Data Anywhere

How to connect web scraping to Zapier: start a Scrape.ly scraper from a Zap, catch the results when a run finishes, and send rows to Google Sheets, Slack, a CRM or any of Zapier's apps. Step-by-step recipes, the request each step sends, and when you don't need Zapier at all.

Published
Reading time
6 min read
Pixel-art robot with an orange >_ on its terminal head pulls a data card out of a board headed by the Zapier logo, whose three linked steps show an orange lightning bolt, a web page and a green sheet, and drops it into a crate
In this article
  1. What you need
  2. Recipe 1: start a scrape from Zapier and use the results
  3. Recipe 2: send every finished run to Zapier
  4. Recipe 3: enrich new CRM records
  5. Keep it secure
  6. When you don't need Zapier
  7. What it costs
  8. FAQ
  9. Can Zapier scrape websites by itself?
  10. Is there a Scrape.ly app in Zapier?
  11. Do I need a paid Zapier plan?
  12. How do I send scraped data to Google Sheets with Zapier?
  13. Can a Zap start a scraper on a schedule?

Zapier web scraping works best when each tool does what it's good at: a scraper collects the data, and Zapier moves it to the apps your team uses. Zapier on its own can't render pages, rotate proxies or page through a thousand results; a scraper on its own doesn't know your CRM. Joined with two webhook steps, a Scrape.ly Actor can run whenever something happens in Zapier, and every finished run can land in Google Sheets, Slack, HubSpot, Airtable or any of the thousands of apps Zapier connects.

This guide covers what you need, two recipes (Zapier starts the scraper, and the scraper triggers Zapier), the exact request each step sends, how to keep it secure, what it costs, and when Scrape.ly's built-in integrations make Zapier unnecessary.

What you need

  • A Scrape.ly account and API key. Create the key under Settings → API & Integrations → API keys. A scoped key limited to running Actors and reading datasets is the safer choice for an automation.
  • A Zapier plan with Webhooks by Zapier. Webhooks by Zapier is a Premium app. Zapier's help center says it's available on paid plans, and its pricing page lists the Professional plan "Starting from $19.99/month" and offers new accounts "a free 14-day trial of the Zapier Professional plan."
  • An Actor and input. Pick a ready-made scraper in the Store, test it with a preset, and save the input you want as a task if you'll reuse it.

Scrape.ly connects to Zapier through these generic HTTP steps; the integrations page describes it as starting runs and fetching results "from Make, Zapier or Pipedream with a Bearer token, and trigger workflows from webhooks."

Recipe 1: start a scrape from Zapier and use the results

Use this when something in another app should trigger a scrape: a new row in a sheet, a form submission, a new deal in the CRM. Example: a new keyword in a Google Sheet starts a Google search and writes the top results back.

  1. Trigger: Google Sheets → New Spreadsheet Row in your keyword sheet.
  2. Action: Webhooks by Zapier → Custom Request.
  • Method: POST
  • URL: https://api.scrape.ly/v2/actors/querystone~google-search-scraper/run-sync-get-dataset-items
  • Headers: Authorization = Bearer YOUR_API_KEY, Content-Type = application/json
  • Data: the Actor input, with the keyword from step 1 mapped in:
json
{
  "queries": "{{keyword from step 1}}",
  "maxPagesPerQuery": 1,
  "countryCode": "us",
  "languageCode": "en"
}
  1. Action: Google Sheets → Create Spreadsheet Row(s) with the fields the response returns, for example the top result's position, title and URL.

The run-sync-get-dataset-items endpoint starts the run, waits for it and answers with the results as a JSON array, so the next step can use them directly. It fits short runs like a single results page, which takes a few seconds. For runs that take longer, start the run with POST https://api.scrape.ly/v2/actors/querystone~google-search-scraper/runs instead, and let recipe 2 pick up the results when the run finishes.

The same pattern works for any Actor: swap the Actor ID in the URL and the JSON for that Actor's input. The Google Search API page lists this Actor's fields, and our guide to SEO rank tracking shows a full keyword setup.

Recipe 2: send every finished run to Zapier

Use this for scheduled scrapes: Scrape.ly runs the scraper on a schedule, and each finished run triggers a Zap that delivers the rows.

  1. In Zapier, create the trigger. Webhooks by Zapier → Catch Hook. Zapier gives you a URL like https://hooks.zapier.com/hooks/catch/1234567/abcdefg/.
  2. In Scrape.ly, add an automation. Open Automations (or the Actor's Automations tab) → New automation → Call a webhook when a run finishes. Pick the Actor or saved task, the events (for example Run succeeded), and paste the Catch Hook URL. Add a payload template so Zapier gets clean fields:
json
{
  "event": {{eventType}},
  "runId": {{actorRunId}},
  "status": {{status}},
  "datasetId": {{resource.defaultDatasetId}},
  "finishedAt": {{finishedAt}}
}

Variables outside quotes are replaced with their JSON values, per the webhook docs.

  1. Send a test from the automation's page so Zapier sees a sample payload.
  2. In Zapier, fetch the results. Webhooks by Zapier → GET, URL https://api.scrape.ly/v2/actor-runs/RUN_ID/dataset/items?format=json with RUN_ID replaced by the runId field from step 1, and the same Authorization: Bearer header. Zapier turns the returned array into line items.
  3. Deliver. Google Sheets → Create Spreadsheet Row(s), Slack → Send Channel Message, HubSpot → Create or Update Contact, or whatever comes next.

Each delivery from Scrape.ly carries an X-Scrapely-Webhook-Dispatch-Id header that stays the same across retries, and failed deliveries (network errors, timeouts, 5xx and 429) are retried up to five times. Our guide to webhooks for scraping covers the delivery rules in depth.

Recipe 3: enrich new CRM records

A third pattern combines the two: something new appears in your CRM, Zapier asks a scraper for public details, and writes them back.

  1. Trigger: HubSpot → New Company (or the equivalent in your CRM).
  2. Action: Webhooks by Zapier → Custom Request to https://api.scrape.ly/v2/actors/cornerledger~linkedin-company-details/run-sync-get-dataset-items, with the company's LinkedIn URL from the trigger in the input. The LinkedIn scraper tutorial lists the fields this Actor returns, such as industry, size and headquarters.
  3. Action: HubSpot → Update Company with the fields you want on the record.

Keep the input to one company per run so the call returns in seconds, and add a Filter step so companies without a LinkedIn URL don't start a run at all. For bulk backfills, export the list, run the Actor once on all URLs, and import the result instead of running a Zap per row.

Keep it secure

  • Treat the Catch Hook URL as a secret. Zapier's webhook guide says the URL "is secured by obscurity" and to "Treat it as a password or any other secret!"
  • Use a scoped Scrape.ly key in Zapier. Running Actors and reading datasets is all these Zaps need.
  • Don't put your API key in a webhook payload. If you paste your account API key into a Scrape.ly webhook's headers, Scrape.ly swaps it for an integration token bound to that webhook when you save.
  • Add a shared secret. A header such as X-Webhook-Token in the webhook's headers template, checked in a Zapier Filter step, keeps random requests from triggering your Zap.

When you don't need Zapier

Scrape.ly delivers several things directly, without a Zapier plan or task usage:

  • Slack, Discord, Telegram and email. The Notify me on Slack when a run fails and Email me the results recipes post a ready-made message with status, result count, cost and up to five preview rows. See Slack, Discord, Telegram and email.
  • Google Sheets. Results can go straight to a sheet; see Google Sheets and our tutorial on scraping a website to Google Sheets.
  • The next scraper. Start another actor after this one chains a search Actor into a detail Actor, with values from the finished run, inside Scrape.ly.
  • Your own server. A plain HTTP webhook can call any public URL.

Zapier earns its place when the destination is an app Scrape.ly doesn't deliver to, or when the scrape is one step in a longer business workflow with filters, formatting and approvals.

What it costs

Two meters run. On Zapier, each successful action step counts as a task against your plan. On Scrape.ly, the Actor charges per result; for the Google Search Scraper in recipe 1, that's $0.0033 per results page with platform usage included (Store price on 27 October 2026). A daily check of 20 keywords is 20 results pages, about $0.07 a day on Scrape.ly, plus the Zapier tasks for each row you create.

To keep Zapier tasks down, filter or aggregate before the delivery step: send one Slack message per run with a summary rather than one per row, or let Scrape.ly's own Sheets and Slack integrations handle high-volume deliveries.

FAQ

Can Zapier scrape websites by itself?

Zapier can fetch a URL with its webhook and polling steps, but it doesn't render JavaScript, rotate proxies or page through results. Let a scraper do the collecting and Zapier the moving.

Is there a Scrape.ly app in Zapier?

Scrape.ly connects through Webhooks by Zapier: a Custom Request or POST step starts runs with your API key, and a Catch Hook trigger receives Scrape.ly's run-finished webhooks.

Do I need a paid Zapier plan?

For these recipes, yes. Webhooks by Zapier is a Premium app on paid plans, and new Zapier accounts get a 14-day trial of the Professional plan.

How do I send scraped data to Google Sheets with Zapier?

Use recipe 2: a Catch Hook trigger, a GET step for the run's dataset items, and Google Sheets → Create Spreadsheet Row(s). Or skip Zapier and use Scrape.ly's built-in Google Sheets integration.

Can a Zap start a scraper on a schedule?

Yes, with Schedule by Zapier as the trigger and the Custom Request from recipe 1. Scrape.ly's own schedules do the same without using Zapier tasks.

  • zapier
  • automation
  • no-code
  • webhooks
  • web scraping

About the author

The team behind Scrape.ly

Scrape.ly is the web data platform from TeraShift GmbH in Switzerland, powered by Evomi: ready-made scrapers in the Scrape.ly Store, a cloud runtime, an API with JavaScript and Python SDKs, proxies, a hosted anti-bot browser and an MCP server for AI agents.

//Keep reading\\

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.