---
title: "Web Scraping With Zapier: Two Recipes | Scrape.ly"
description: "Connect web scraping to Zapier: start Scrape.ly scrapers from a Zap, catch results when a run finishes, and send rows to Sheets, Slack or a CRM."
url: https://scrape.ly/blog/zapier-web-scraping
markdown: https://scrape.ly/blog/zapier-web-scraping.md
---

[Guides](https://scrape.ly/blog/category/guides.md)

# 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.

[Scrape.ly Team The team behind Scrape.ly](https://scrape.ly/blog/author/scrapely-team.md)

- Published

  Oct 27, 2026

- 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](https://scrape.ly/media/zapier-web-scraping.png?w=1080)

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](https://scrape.ly/docs/api-keys.md) 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](https://zapier.com/pricing) 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](https://scrape.ly/store.md), 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](https://scrape.ly/integrations.md) 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"
}
```

3. **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](https://scrape.ly/api/google-search-api.md) page lists this Actor's fields, and our guide to [SEO rank tracking](https://scrape.ly/blog/seo-rank-tracking-scraping.md) 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](https://scrape.ly/docs/integrations.md).

3. **Send a test** from the automation's page so Zapier sees a sample payload.
4. **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.
5. **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](https://scrape.ly/blog/webhooks-for-scraping.md) 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](https://scrape.ly/blog/scrape-linkedin.md) 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](https://help.zapier.com/hc/en-us/articles/8496083355661-How-to-get-started-with-Webhooks-by-Zapier) 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](https://scrape.ly/docs/slack-discord-email.md).
- **Google Sheets.** Results can go straight to a sheet; see [Google Sheets](https://scrape.ly/docs/google-sheets.md) and our tutorial on [scraping a website to Google Sheets](https://scrape.ly/blog/scrape-website-to-google-sheets.md).
- **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.

Scrape.ly Store Google Search Scraper Google results by query and country as JSON: organic positions, People Also Ask and related searches. Start it from a Zap or schedule it and send results to Zapier.

[Try it free](https://scrape.ly/store/querystone/google-search-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## 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.

About the author

[Scrape.ly Team](https://scrape.ly/blog/author/scrapely-team.md) 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.

- [Website](https://scrape.ly/index.md)

Keep reading

## More in Guides

- [![Pixel-art robot with an orange >\_ on its terminal head walks away from a robots.txt file with a robot face on its plate and rule lines ticked green or crossed red, through a raised red-and-white barrier towards a web page](https://scrape.ly/media/robots-txt-web-scraping.png?w=750)](https://scrape.ly/blog/robots-txt-web-scraping.md)
  ### [Robots.txt and Web Scraping: What It Means for Your Scraper](https://scrape.ly/blog/robots-txt-web-scraping.md)
  [What robots.txt means for web scraping: how the rules work under RFC 9309, how to read a real file, how to check URLs in Python (and where the standard library gets it wrong), what robots.txt does and doesn't decide legally, and how to respect it in a Scrape.ly crawl.](https://scrape.ly/blog/robots-txt-web-scraping.md)
- [![Pixel-art robot with an orange >\_ on its terminal head holds up a personal-data card whose name is blacked out, beside a ticked checklist on an easel and the blue EU flag with its ring of gold stars, on its way to a crate locked with an amber padlock](https://scrape.ly/media/gdpr-web-scraping.png?w=750)](https://scrape.ly/blog/gdpr-web-scraping.md)
  ### [Web Scraping and GDPR: What You Can Collect and How](https://scrape.ly/blog/gdpr-web-scraping.md)
  [How the GDPR applies to web scraping: what counts as personal data, why public data still needs a legal basis, what regulators in the Netherlands and France expect, the safeguards that make a scrape defensible, and a practical checklist, with sources quoted and dated.](https://scrape.ly/blog/gdpr-web-scraping.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a data card out of a browser window whose page is still rendering, its top drawn and the rest grey placeholder blocks around an orange loading spinner, and drops it into a crate](https://scrape.ly/media/scrape-dynamic-websites.png?w=750)](https://scrape.ly/blog/scrape-dynamic-websites.md)
  ### [How to Scrape Dynamic Websites: JavaScript Pages, Hidden APIs and Headless Browsers](https://scrape.ly/blog/scrape-dynamic-websites.md)
  [How to scrape dynamic, JavaScript-rendered websites: tell whether a page needs a browser, read the data from embedded JSON or the site's own API, and render the rest in a headless browser. Tested Python code and three real runs from 27 October 2026 with their exact cost.](https://scrape.ly/blog/scrape-dynamic-websites.md)

## 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.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
