# Zapier App Directory Email Scraper (`leads-scraper/zapier-app-directory-email-scraper`) Actor

Zapier App Directory Email Scraper SD - Zapier App Directory Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Zapier App Directory results by keyword, location and email domain - Zapier App Directory email extractor.

- **URL**: https://apify.com/leads-scraper/zapier-app-directory-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Zapier App Directory Email Scraper

The **Zapier App Directory Email Scraper** builds a deduplicated contact list of integration vendors and automation partners from Google's public index of `zapier.com`.
It is aimed at partner recruitment, integration partnerships, agency sourcing and competitive research across the SaaS integration landscape.
No login, no Zapier API, no browser automation — publicly indexed search results only.

The Zapier App Directory is arguably the best single map of "which SaaS product connects to which" that exists in public.
Thousands of integration pages sit there, each one naming a vendor, describing what the app does, and very often printing a support or partnership contact.
That is the text the Zapier App Directory Email Scraper reads.

In our measured test runs the Zapier App Directory Email Scraper attached an account identity to **9 of 10** sampled rows — a strong result for this family.
Zapier's app URLs are clean and readable (`zapier.com/apps/<slug>`), so Google usually prints something the parser can resolve into a handle and a profile URL.
Yield still depends on your keywords, domain filter and country.

#### Who the Zapier App Directory Email Scraper is for

Partnership and alliance teams recruiting integration partners, SaaS vendors mapping an integration roadmap, automation agencies sourcing collaborators, and analysts studying a category.
A zapier integration partner contact published on an app page exists to receive exactly this kind of enquiry — it is a business address, not a personal one.
Teams covering the whole B2B app-marketplace surface usually run this beside the [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) and the [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper).

### What the Zapier App Directory Email Scraper actually does

The Zapier App Directory Email Scraper does **not** sign into Zapier, call the Zapier platform API, or open the app directory in a browser.
It builds Google queries with the `site:zapier.com` operator, fetches result pages through the Apify **GOOGLE_SERP** proxy using `aiohttp`, and parses each result block.
There is no headless browser, no JavaScript rendering, no authentication and no cookies.

Result blocks are located structurally — find the `<h3>` title, then take the smallest surrounding block — rather than depending on Google's CSS class names.
A domain-filtered regex pulls addresses from that block text, results are deduplicated globally, and each lead is pushed to the Apify dataset the moment it is found.
A whole-page fallback parser keeps emails flowing if Google's markup changes, degrading account detail rather than output.

That makes the Zapier App Directory Email Scraper a **publicly indexed contact discovery** tool for the integration economy.
It reads what vendors chose to publish. Nothing gated, nothing private.

### Key features of the Zapier App Directory Email Scraper

| Feature | What it means for your integration vendor contact list |
|---|---|
| `site:` targeting | Every query is scoped to `zapier.com`, so results stay inside the app directory and partner pages |
| Query expansion | Base, quoted and `intitle:` phrasings plus one variant per query modifier, per keyword x domain pair |
| Integration-tuned modifiers | Defaults are `email`, `contact`, `support`, `developer`, `publisher` — the words integration pages use |
| Domain filtering | Only addresses ending in your `customDomains` values survive; leading `@` optional |
| Global deduplication | One row per address per run, however many app pages mention it |
| Obfuscation handling | Reads `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` cannot match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same result block |
| Async concurrency | An `asyncio` worker pool runs queries in parallel with a shared stop signal on `maxEmails` |
| Retries and backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Failed-query requeue | Blocked or failed queries get one more attempt at the end of the run |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | Whole-page extraction when Google's layout shifts |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Zapier App Directory Email Scraper works, step by step

1. Reads input: keywords, location, email domains and run limits.
2. Builds Google queries such as `site:zapier.com zapier integration saas support "@gmail.com"`.
3. Fetches Google result pages asynchronously through the Apify GOOGLE_SERP proxy.
4. Locates each organic result block structurally and reads its visible text.
5. Applies the domain filter, junk filter and soft-wrap repair to every candidate address.
6. Deduplicates globally and streams each new lead into the dataset immediately.

Base queries run before expanded ones, so the highest-signal Zapier App Directory Email Scraper rows land first.
Cut a run short and you keep your best matches, not an arbitrary corner of the expansion set.
The shared stop signal halts every worker as soon as `maxEmails` is reached.

### Input reference for the Zapier App Directory Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["zapier integration", "saas"]` | Search terms describing the integration vendors you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain in several phrasings |
| `queryModifiers` | array | `["email","contact","support","developer","publisher"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Example input for the Zapier App Directory Email Scraper

```json
{
  "keywords": [
    "crm zapier integration",
    "form builder app zapier",
    "zapier automation agency"
  ],
  "location": "",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 300,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Category-shaped keywords work best here, because the directory is organised by what an app does.
"form builder app zapier" beats "software company": the Zapier App Directory Email Scraper matches indexed page text, not a vendor database.

### Output reference: what the Zapier App Directory Email Scraper returns

Every dataset item carries all 14 fields, including the ones that come back empty or `null`.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for non-profile results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | App or partner snippet, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output from the Zapier App Directory Email Scraper

```json
[
  {
    "network": "Zapier App Directory",
    "keyword": "form builder app zapier",
    "query": "site:zapier.com form builder app zapier \"@gmail.com\"",
    "title": "FormSprint Integrations | Connect Your Apps with Zapier",
    "accountName": "FormSprint",
    "fullName": "FormSprint",
    "username": "formsprint",
    "profileUrl": "https://zapier.com/apps/formsprint",
    "url": "https://zapier.com/apps/formsprint/integrations",
    "description": "Build forms and route submissions anywhere. Support: formsprint.team@gmail.com",
    "email": "formsprint.team@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T13:15:27Z"
  },
  {
    "network": "Zapier App Directory",
    "keyword": "zapier automation agency",
    "query": "site:zapier.com zapier automation agency contact \"@outlook.com\"",
    "title": "Northwind Automations - Zapier Solution Partner",
    "accountName": "Northwind Automations",
    "fullName": "Northwind Automations",
    "username": null,
    "profileUrl": "",
    "url": "https://zapier.com/partnerdirectory",
    "description": "Certified automation consultancy. New projects: northwind.ops@outlook.com or...",
    "email": "northwind.ops@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T13:16:44Z"
  }
]
```

The first row is the common shape on this platform: a clean handle and a resolvable profile URL.
The second shows the honest minority — a partner-directory page where Google printed no slug, so `username` is `null` and `profileUrl` is empty, plus `possiblyTruncated: true`.
Filter on `possiblyTruncated` before any address reaches a sending tool.

### Use cases for the Zapier App Directory Email Scraper

| Use case | How the Zapier App Directory Email Scraper supports it |
|---|---|
| Integration partner recruitment | Find vendors in a category and propose a native or co-built integration |
| Integration roadmap research | See which apps already connect in your space, then contact the ones that matter |
| Automation agency sourcing | Build a list of consultancies and freelancers who implement workflow automation |
| Co-marketing and bundling | Reach vendors whose customer base overlaps yours for joint campaigns |
| Competitive research | Map who lists in a category, with a contact route for interviews and surveys |
| Ecosystem and API adoption | Recruit SaaS teams who already build integrations onto your own platform |
| Vendor evaluation | Collect direct enquiry addresses for tools you are shortlisting |
| Event and beta recruiting | Invite active integration builders into a private beta or partner programme |

These are B2B vendor contacts, not consumer prospects.
Open with the specific integration and the Zapier App Directory Email Scraper output reads as partnership development rather than cold outbound.

### Tuning the Zapier App Directory Email Scraper for better yield

Broaden `customDomains` and add corporate domains.
Integration vendors are companies, so `@vendorname.com` addresses are common on app pages, and the default free-mailbox pair alone will leave a lot behind.

Keep `expandQueries` enabled. Google caps a single query at roughly 300 results, and expansion is precisely how the Zapier App Directory Email Scraper reaches past that ceiling.
Add directory vocabulary to `queryModifiers` — `integration`, `automation`, `partner`, `app`, `workflow` — to open fresh query surface.

Run one category per set of keywords rather than mixing everything into a single job; the
`keyword` field then tells you cleanly which category produced each lead. Use `countryCode` and
`location` when you are building a regional channel, and raise `maxConcurrency` on paid plans.

Resumable state means a migrated or aborted run continues instead of restarting. Vendors listed
here almost always publish elsewhere too, so the [Salesforce AppExchange Email
Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) and the [Shopify
App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper)
frequently return a second contact for the same company.

### Expected results and honest limitations of the Zapier App Directory Email Scraper

- The Zapier App Directory Email Scraper only finds vendors whose email is **publicly visible in Google's index**. Apps that route support through a form or a help centre will not appear.
- Google caps a single query at roughly 300 results. Query expansion mitigates that; it does not remove it.
- `username` and `profileUrl` are populated only when Google's result exposes a handle. A minority of rows carry `accountName` and `fullName` with an empty `username` and `profileUrl` — a Google limitation, not a bug.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address. Verify those rows before sending.
- The Actor requires the Apify **GOOGLE_SERP** proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at **100 emails per run**; paid plans are uncapped.
- Results vary with keywords, domains, country and location. No volume is guaranteed.

The Zapier App Directory Email Scraper is not affiliated with, endorsed by or supported by Zapier.
It reads public Google search results only.

### Legal and ethical use of Zapier App Directory Email Scraper output

The Actor collects public data; how you contact people is your responsibility.
A published support address does not automatically create a lawful basis for bulk marketing under GDPR, CAN-SPAM or CASL — establish yours first.
Identify yourself, keep the message specific to the app or integration, and honour opt-outs on first request.

### FAQ about the Zapier App Directory Email Scraper

#### Does the Zapier App Directory Email Scraper log into Zapier or use its API?

No. It never authenticates, never opens the app directory and never touches Zapier's platform API. It reads publicly indexed Google search results only.

#### Where do the emails the Zapier App Directory Email Scraper returns come from?

From the visible text of Google result blocks — titles, snippets and site labels — for pages on `zapier.com`.

#### Why is account identity so strong on this platform?

Zapier uses readable app URLs of the form `zapier.com/apps/<slug>`, which Google indexes well. In our sample the Zapier App Directory Email Scraper resolved an identity on 9 of 10 rows.

#### Why does `username` still come back `null` sometimes?

When Google prints only a display name with no slug — common on partner-directory pages — the row keeps `accountName`, `fullName`, `description` and the email, but `username` is `null` and `profileUrl` is empty.

#### How many emails can one Zapier App Directory Email Scraper run return?

`maxEmails` accepts 1 to 10000. Free Apify plans stop at 100 emails per run; paid plans are uncapped. Real yield depends on your keywords and domain filter.

#### What does `possiblyTruncated` mean in Zapier App Directory Email Scraper output?

Google cut the snippet with an ellipsis right at the email, so the address may be incomplete. Treat those rows as needing verification.

#### Can the Zapier App Directory Email Scraper target vendor domains?

Yes, and it is worth doing. Put `@vendorname.com` or any corporate domain into `customDomains`; boundary-correct matching prevents false positives such as `@gmail.company`.

#### Do I need a proxy to run the Zapier App Directory Email Scraper?

Yes. It runs on the Apify GOOGLE_SERP proxy and will not work without Apify proxy credentials.

#### Is a Zapier App Directory Email Scraper run resumable?

Yes. State is persisted in the key-value store keyed by a hash of your input and saved on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Why did my run return fewer results than expected?

Usually a narrow domain filter or generic keywords. Broaden `customDomains` with vendor domains, add directory terms to `queryModifiers`, and keep `expandQueries` on.

#### Are these consumer contacts?

No. They are SaaS vendors, integration builders and automation agencies who published a business contact address. Frame outreach as partnership, not consumer prospecting.

#### Can I schedule the Zapier App Directory Email Scraper?

Yes. Apify Schedules can re-run it on a cadence. Deduplication is per run, so diff each dataset against your CRM to spot newly listed integration vendors.

#### How do I export Zapier App Directory Email Scraper results?

Through the standard Apify dataset export: JSON, CSV, Excel, XML or the Apify API.

### Related Actors

| Actor | What it collects |
|---|---|
| [Zapier App Directory Email and Phone Number Scraper](https://apify.com/neuro-scraper/zapier-app-directory-email-and-phone-number-scraper) | Emails and phone numbers from Zapier App Directory |
| [Zapier App Directory Phone Number Scraper](https://apify.com/neuro-scraper/zapier-app-directory-phone-number-scraper) | Public phone numbers from Zapier App Directory |
| [App Store Email Scraper](https://apify.com/leads-scraper/app-store-email-scraper) | Public contact emails from App Store |
| [Atlassian Marketplace Email Scraper](https://apify.com/leads-scraper/atlassian-marketplace-email-scraper) | Public contact emails from Atlassian Marketplace |
| [Bitbucket Email Scraper](https://apify.com/neuro-scraper/bitbucket-email-scraper) | Public contact emails from Bitbucket |
| [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) | Public contact emails from Chrome Web Store |
| [CodePen Email Scraper](https://apify.com/neuro-scraper/codepen-email-scraper) | Public contact emails from CodePen |
| [Confluence Email Scraper](https://apify.com/neuro-scraper/confluence-email-scraper) | Public contact emails from Confluence |
| [Dev.to Email Scraper](https://apify.com/neuro-scraper/dev-to-email-scraper) | Public contact emails from DEV Community |
| [Docker Hub Email Scraper](https://apify.com/neuro-scraper/docker-hub-email-scraper) | Public contact emails from Docker Hub |
| [Figma Community Email Scraper](https://apify.com/neuro-scraper/figma-community-email-scraper) | Public contact emails from Figma Community |
| [Firefox Add-ons Email Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-scraper) | Public contact emails from Firefox Add-ons |
| [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) | Public contact emails from GitHub |
| [GitLab Email Scraper](https://apify.com/neuro-scraper/gitlab-email-scraper) | Public contact emails from GitLab |
| [Google Play Email Scraper](https://apify.com/leads-scraper/google-play-email-scraper) | Public contact emails from Google Play |
| [Hashnode Email Scraper](https://apify.com/neuro-scraper/hashnode-email-scraper) | Public contact emails from Hashnode |
| [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) | Public contact emails from HubSpot Marketplace |
| [Hugging Face Email Scraper](https://apify.com/leads-scraper/hugging-face-email-scraper) | Public contact emails from Hugging Face |
| [Jira Email Scraper](https://apify.com/neuro-scraper/jira-email-scraper) | Public contact emails from Jira |
| [Maven Central Email Scraper](https://apify.com/neuro-scraper/maven-central-email-scraper) | Public contact emails from Maven Central |
| [Microsoft AppSource Email Scraper](https://apify.com/neuro-scraper/microsoft-appsource-email-scraper) | Public contact emails from Microsoft AppSource |
| [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) | Public contact emails from Salesforce AppExchange |
| [Shopify App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper) | Public contact emails from Shopify App Store |
| [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) | Public contact emails from Slack App Directory |
| [SourceForge Email Scraper](https://apify.com/leads-scraper/sourceforge-email-scraper) | Public contact emails from SourceForge |
| [Stack Overflow Email Scraper](https://apify.com/leads-scraper/stack-overflow-email-scraper) | Public contact emails from Stack Overflow |
| [Unity Asset Store Email Scraper](https://apify.com/leads-scraper/unity-asset-store-email-scraper) | Public contact emails from Unity Asset Store |
| [Unreal Engine Marketplace Email Scraper](https://apify.com/leads-scraper/unreal-engine-marketplace-email-scraper) | Public contact emails from Unreal Engine Marketplace |
| [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) | Public contact emails from WordPress Plugin Directory |
| [WordPress Theme Directory Email Scraper](https://apify.com/leads-scraper/wordpress-theme-directory-email-scraper) | Public contact emails from WordPress Theme Directory |
| [App Store Email and Phone Number Scraper](https://apify.com/leads-scraper/app-store-email-and-phone-number-scraper) | Emails and phone numbers from App Store |
| [Atlassian Marketplace Email and Phone Number Scraper](https://apify.com/neuro-scraper/atlassian-marketplace-email-and-phone-number-scraper) | Emails and phone numbers from Atlassian Marketplace |
| [Bitbucket Email and Phone Number Scraper](https://apify.com/neuro-scraper/bitbucket-email-and-phone-number-scraper) | Emails and phone numbers from Bitbucket |
| [Chrome Web Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/chrome-web-store-email-and-phone-number-scraper) | Emails and phone numbers from Chrome Web Store |
| [CodePen Email and Phone Number Scraper](https://apify.com/neuro-scraper/codepen-email-and-phone-number-scraper) | Emails and phone numbers from CodePen |
| [Confluence Email and Phone Number Scraper](https://apify.com/neuro-scraper/confluence-email-and-phone-number-scraper) | Emails and phone numbers from Confluence |
| [DEV Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/dev-to-email-and-phone-number-scraper) | Emails and phone numbers from DEV Community |
| [Docker Hub Email and Phone Number Scraper](https://apify.com/neuro-scraper/docker-hub-email-and-phone-number-scraper) | Emails and phone numbers from Docker Hub |
| [Figma Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/figma-community-email-and-phone-number-scraper) | Emails and phone numbers from Figma Community |
| [Firefox Add-ons Email and Phone Number Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-and-phone-number-scraper) | Emails and phone numbers from Firefox Add-ons |
| [GitHub Email and Phone Number Scraper](https://apify.com/leads-scraper/github-email-and-phone-number-scraper) | Emails and phone numbers from GitHub |
| [GitLab Email and Phone Number Scraper](https://apify.com/neuro-scraper/gitlab-email-and-phone-number-scraper) | Emails and phone numbers from GitLab |

### Leave a review

If the Zapier App Directory Email Scraper saved you time, please leave a star rating and a
short review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, a bug report or a custom build of the Zapier App Directory Email Scraper? Email **neurodata.apify@gmail.com**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Zapier App Directory accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Zapier App Directory.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "zapier integration",
    "saas"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Zapier App Directory Email Scraper, stored in the run's default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "zapier integration",
        "saas"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/zapier-app-directory-email-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [
        "zapier integration",
        "saas",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/zapier-app-directory-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "zapier integration",
    "saas"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/zapier-app-directory-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/zapier-app-directory-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ZN0ajy2rlxXztC756/builds/iJfbqCQ8JvKHzRZop/openapi.json
