# Clutch Email Scraper (`leads-scraper/clutch-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/clutch-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

### Clutch Email Scraper

The Clutch Email Scraper builds a contact list of B2B service agencies from publicly indexed Clutch profiles.
Clutch is the directory buyers use to shortlist development shops, marketing firms, design studios and IT consultancies.
This Actor reads what Google has indexed from those profiles and extracts the contact emails they expose.

Give it a few keywords, an optional location and the email domains you care about.
It returns a deduplicated dataset with the agency name, the Clutch handle, the profile URL and a snippet describing the firm.
No login, no Clutch API and no visit to clutch.co is involved.

Everything comes from publicly available Google search results: titles, snippets and site labels.
There is no browser, no JavaScript rendering, no authentication and no cookies.
That is why the Clutch Email Scraper is cheap to run and stable across Clutch's own redesigns.

In a measured live run, the Clutch Email Scraper returned 10 result blocks, 10 identity matches, 9 profile URLs and 8 unique emails.
That is a strong result: almost every block resolved to a named agency, and most carried a usable address.
Yield still depends on your keywords, domains and location, so treat that as a reference point rather than a promise.

#### Why agency contacts are hard to get without the Clutch Email Scraper

Clutch itself routes buyer enquiries through its own contact form rather than publishing an inbox on every profile.
That means the addresses you do find come from profile text, case study blurbs and other indexed content, not from a hidden field.
The Clutch Email Scraper is therefore a discovery tool for the agencies that have chosen to publish an address.

This is also why the modifier defaults matter so much here.
`email`, `contact`, `new business`, `partnerships` and `sales` are the exact phrases an agency uses when it does invite direct contact.
Swapping those words changes which slice of the directory you reach more than changing keywords does.

### Key features of the Clutch Email Scraper

Everything below is behaviour the Clutch Email Scraper actually implements, shared with every Actor in this family.

| Feature | What it does |
|---|---|
| Google `site:` targeting | Restricts every query to `clutch.co`, so results stay on agency profiles and directory pages |
| Query expansion | Base, quoted and `intitle:` variants plus one variant per query modifier |
| Agency-intent modifiers | Defaults of `email`, `contact`, `new business`, `partnerships` and `sales` |
| Domain filtering | Keeps only emails ending in the domains you list |
| Global deduplication | One row per unique email across every query and every page |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` sign |
| Junk filter | Rejects `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not 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 block |
| Structural block parsing | Locates the `<h3>` title and the smallest surrounding block instead of relying on CSS class names |
| Whole-page fallback parser | A Google markup change degrades to emails without account details, not to zero results |
| Concurrency | `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Retries and block detection | Three attempts per page with exponential backoff; CAPTCHA and consent pages are retried, not counted as empty |
| Re-queue pass | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Immediate dataset writes | Each lead is pushed as soon as it is found |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Clutch Email Scraper works

The Clutch Email Scraper reads your input, builds Google queries, fetches result pages and parses each block structurally.
Emails are pulled from block text with a domain-filtered regex, normalised, junk-filtered and deduplicated globally.
Each surviving lead is pushed to the Apify dataset immediately, so a partial run is still usable.

A query looks like `site:clutch.co web development agency "@gmail.com" "Toronto"`.
Pages are fetched through the Apify GOOGLE_SERP proxy over async HTTP with a fresh proxy session per request.
Structural parsing means a Google layout change degrades the run rather than breaking it.

#### Query expansion in the Clutch Email Scraper

Google caps a single query at roughly 300 results, which is nowhere near the size of the Clutch directory.
Query expansion multiplies each keyword by each email domain and by several phrasings, with base queries running first.
That ordering puts the highest-yield searches at the front of the queue.

#### Location targeting in the Clutch Email Scraper

`location` is appended to every query as a quoted phrase and matters a great deal on Clutch.
Buyers shortlist by city, so agency profiles are written with city names in them and index accordingly.
Running the same keyword set once per metro usually outperforms a single national sweep.

### Input reference for the Clutch Email Scraper

The Clutch Email Scraper takes nine inputs and only `keywords` is required.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["agency", "software company"]` | Search terms describing the agencies 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 code for the search proxy (US, GB, DE) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "new business", "partnerships", "sales"]` | 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

```json
{
  "keywords": ["shopify development agency", "seo agency", "ui ux design studio"],
  "location": "Toronto",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 250,
  "countryCode": "CA",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "new business", "partnerships", "sales"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Tuning the Clutch Email Scraper

Service plus platform beats a bare category.
`hubspot implementation partner` and `react development agency` produce far more distinctive snippets than `agency`.
Three to eight tight keywords is a sensible working range.

Add the domains that small agencies actually use.
Boutique shops frequently run on `@gmail.com` or `@outlook.com` before they move to a branded domain.
Every extra domain multiplies the query count, so raise `maxEmails` at the same time.

### Output reference for the Clutch Email Scraper

Every dataset item produced by the Clutch Email Scraper carries all fourteen fields below.

| 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` | Profile snippet, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output

```json
[
  {
    "network": "Clutch",
    "keyword": "shopify development agency",
    "query": "site:clutch.co shopify development agency \"@gmail.com\" \"Toronto\"",
    "title": "Northshore Commerce Reviews | Clutch.co",
    "accountName": "Northshore Commerce",
    "fullName": "Northshore Commerce",
    "username": "northshore-commerce",
    "profileUrl": "https://clutch.co/profile/northshore-commerce",
    "url": "https://clutch.co/profile/northshore-commerce",
    "description": "Shopify Plus builds and migrations for mid-market retailers in Ontario. New business: northshorecommerce@gmail.com",
    "email": "northshorecommerce@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-11-04T12:04:19Z"
  },
  {
    "network": "Clutch",
    "keyword": "seo agency",
    "query": "site:clutch.co seo agency new business \"@outlook.com\" \"Toronto\"",
    "title": "Ravine Digital Reviews | Clutch.co",
    "accountName": "Ravine Digital",
    "fullName": "Ravine Digital",
    "username": "ravine-digital",
    "profileUrl": "https://clutch.co/profile/ravine-digital",
    "url": "https://clutch.co/profile/ravine-digital",
    "description": "Technical SEO and content for B2B SaaS. Partnerships and sales enquiries: ravinedigital.sales@outlook.com",
    "email": "ravinedigital.sales@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2025-11-04T12:05:44Z"
  }
]
```

The Apify dataset view shows email, account, name, username, profile, keyword, snippet and the truncation flag.
Export as CSV, JSON or XLSX, or read the dataset through the Apify API.
That makes the Clutch Email Scraper simple to feed into a partner CRM or an ABM platform.

### Use cases for the Clutch Email Scraper

The Clutch Email Scraper is aimed squarely at partner and channel work, agency sourcing and competitive research.

| Use case | Suggested keywords | Suggested modifiers |
|---|---|---|
| Partner and channel recruitment | `hubspot partner`, `shopify development agency` | `partnerships`, `alliances` |
| Reseller and referral programme growth | `it consultancy`, `managed services provider` | `partnerships`, `new business` |
| Agency sourcing for a brand | `branding agency`, `video production company` | `new business`, `contact` |
| ABM list building for agency-focused SaaS | `seo agency`, `ppc agency` | `email`, `sales` |
| Competitive research on service categories | `mobile app development`, `data engineering` | `email`, `contact` |
| Recruiting agencies onto a marketplace | `ui ux design studio`, `web design agency` | `new business`, `partnerships` |
| Vendor shortlisting for procurement | `salesforce consultancy`, `erp implementation` | `contact`, `sales` |

#### Partner recruitment with the Clutch Email Scraper

If you sell software that agencies resell or implement, Clutch is the cleanest directory of those agencies anywhere.
Use keywords naming your platform, such as `shopify`, `hubspot`, `webflow` or `salesforce`, plus the service verb.
Set `queryModifiers` to `partnerships`, `alliances` and `new business` to bias toward the right inbox.

#### Agency sourcing and competitive research with the Clutch Email Scraper

Marketers on the buying side can run the Clutch Email Scraper to build a shortlist before issuing an RFP.
The `description` field carries the positioning line, which is usually enough to triage a list quickly.
Filter by `emailDomain` afterwards if you want to separate boutique shops from larger firms.

### Practical recipes for the Clutch Email Scraper

A North American channel sweep might use `hubspot partner`, `shopify development agency` and `webflow agency` with `countryCode` set to `US`, repeated for `CA`.
A European sweep might use `salesforce consultancy` and `data engineering` with `location` set to `Amsterdam` or `Berlin`.
Keep `expandQueries` on in both cases, because one query cannot reach past Google's result cap.

For breadth, drop `location`, leave `maxPagesPerQuery` at 30 and raise `maxEmails`.
For precision, set one metro as `location`, use two or three specific keywords and lower `maxEmails`.
Both modes use identical code, so the only difference is query volume.

### How many results the Clutch Email Scraper returns

A measured live run of the Clutch Email Scraper produced 10 blocks, 10 identity matches, 9 profile URLs and 8 unique emails.
That places Clutch in the strong tier of this category, just behind Bark, CallUpContact and Crunchbase.
One block did not resolve to a handle and two did not carry a usable address, which is normal for a directory that prefers contact forms.

Your own numbers will vary with service category, city, domain list and how much of Clutch Google currently indexes.
Free Apify plans stop at 100 emails per run; paid plans are uncapped.
No specific volume is guaranteed by the Clutch Email Scraper or by any Actor in this family.

### Limitations of the Clutch Email Scraper

- The Clutch Email Scraper only finds agencies whose email is publicly visible in Google's index. Clutch prefers to route enquiries through its own contact form, so many profiles expose no address at all.
- Google caps a single query at roughly 300 results. Query expansion exists to work around that cap, and disabling it reduces yield sharply.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the email, so the address may be incomplete. Verify those rows before sending.
- `username` and `profileUrl` are populated only when Google exposes a handle. Directory and category pages often show a title without one, leaving `accountName` and `fullName` populated and the handle empty; that is a Google limitation, not a bug.
- The Clutch Email Scraper 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 have no cap.
- Results vary with keywords, domains and location, and no volume is guaranteed.

The Clutch Email Scraper is not affiliated with, endorsed by or officially supported by Clutch.
It reads public search results only and does not access private data.

### Responsible use, GDPR and CAN-SPAM

A publicly indexed address is not automatically a lawful one to email.
For EU and UK recipients, GDPR expects a lawful basis, a clear sender identity, a genuine business reason and an easy way to object.
For US recipients, CAN-SPAM expects accurate headers, a valid postal address and a working unsubscribe path.

Agency inboxes labelled `new business` are an invitation to pitch, but that invitation is not unlimited consent.
Keep the `query`, `profileUrl` and `foundAt` provenance, honour opt-outs immediately and suppress them in future runs of the Clutch Email Scraper.
This is general information about common obligations rather than legal advice, so check the rules that apply to you.

### FAQ about the Clutch Email Scraper

#### Does the Clutch Email Scraper log into Clutch?

No. It never logs in, never uses a Clutch API and never opens clutch.co. All data comes from publicly indexed Google results.

#### How many results should I expect?

A measured live run returned 10 blocks, 10 identity matches, 9 profile URLs and 8 unique emails, which is a strong result for this category. Your numbers depend on category, city, domains and index coverage, and no volume is guaranteed.

#### Why does the Clutch Email Scraper find no email for some agencies?

Clutch routes buyer enquiries through its own form, so plenty of profiles never publish an inbox. The Clutch Email Scraper can only surface the ones that do.

#### Why are some `username` and `profileUrl` values empty?

The Clutch Email Scraper fills those only when Google exposes a handle. Category and listing pages often show a title without one, so the row keeps `accountName` and `fullName` and leaves the handle blank.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the email, so the address may be cut short. Verify those addresses before you send.

#### How do I bias the Clutch Email Scraper toward partnership contacts?

Set `queryModifiers` to `partnerships`, `alliances` and `new business`, and name your platform in the keywords.

#### Is Clutch better than G2 or Capterra for my list?

Clutch is agencies and consultancies; the [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper) and [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper) cover software vendors. Pick by who you sell to.

#### Should I leave query expansion on?

Yes. Google caps one query at roughly 300 results, and expansion is how the Clutch Email Scraper reaches past that ceiling.

#### Does it need the Apify proxy?

Yes. The Clutch Email Scraper runs on the Apify GOOGLE_SERP proxy and cannot operate without Apify proxy credentials.

#### Can I run it on the free plan?

Yes, capped at 100 emails per run. Paid plans remove the cap.

#### Are the emails verified?

No. The Clutch Email Scraper extracts and normalises what Google shows. Run your own verification before a large campaign.

#### What if my city is thin on Clutch?

Widen to the region, drop `location` entirely, or complement the run with the [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) for company-level contacts.

### Related Actors

Thirty-six sibling Actors cover the rest of the Business and Professional Directories category that the Clutch Email Scraper belongs to.
They share the same input schema, output schema and behaviour, so anything you learn here transfers directly.
For software vendors use the [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper), for global B2B suppliers the [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper), and for home-services trades the [Houzz Email Scraper](https://apify.com/leads-scraper/houzz-email-scraper).

| Actor | What it collects |
|---|---|
| [Clutch Email and Phone Number Scraper](https://apify.com/leads-scraper/clutch-email-and-phone-number-scraper) | Emails and phone numbers from Clutch |
| [Clutch Phone Number Scraper](https://apify.com/leads-scraper/clutch-phone-number-scraper) | Public phone numbers from Clutch |
| [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) | Public contact emails from Angi |
| [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) | Public contact emails from Bark |
| [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper) | Public contact emails from Better Business Bureau |
| [Bizapedia Email Scraper](https://apify.com/neuro-scraper/bizapedia-email-scraper) | Public contact emails from Bizapedia |
| [Brownbook Email Scraper](https://apify.com/neuro-scraper/brownbook-email-scraper) | Public contact emails from Brownbook |
| [Callupcontact Email Scraper](https://apify.com/neuro-scraper/callupcontact-email-scraper) | Public contact emails from CallUpContact |
| [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper) | Public contact emails from Capterra |
| [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) | Public contact emails from Crunchbase |
| [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) | Public contact emails from Cybo |
| [Cylex Email Scraper](https://apify.com/neuro-scraper/cylex-email-scraper) | Public contact emails from Cylex |
| [EC21 Email Scraper](https://apify.com/neuro-scraper/ec21-email-scraper) | Public contact emails from EC21 |
| [Europages Email Scraper](https://apify.com/leads-scraper/europages-email-scraper) | Public contact emails from Europages |
| [ExportHub Email Scraper](https://apify.com/neuro-scraper/exporthub-email-scraper) | Public contact emails from ExportHub |
| [FindUsLocal Email Scraper](https://apify.com/neuro-scraper/finduslocal-email-scraper) | Public contact emails from FindUsLocal |
| [Foursquare Email Scraper](https://apify.com/neuro-scraper/foursquare-email-scraper) | Public contact emails from Foursquare |
| [Fyple Email Scraper](https://apify.com/neuro-scraper/fyple-email-scraper) | Public contact emails from Fyple |
| [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper) | Public contact emails from G2 |
| [Hotfrog Email Scraper](https://apify.com/leads-scraper/hotfrog-email-scraper) | Public contact emails from Hotfrog |
| [Houzz Email Scraper](https://apify.com/leads-scraper/houzz-email-scraper) | Public contact emails from Houzz |
| [Infobel Email Scraper](https://apify.com/neuro-scraper/infobel-email-scraper) | Public contact emails from Infobel |
| [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper) | Public contact emails from Kompass |
| [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper) | Public contact emails from Lacartes |
| [Manta Email Scraper](https://apify.com/leads-scraper/manta-email-scraper) | Public contact emails from Manta |
| [MapQuest Email Scraper](https://apify.com/neuro-scraper/mapquest-email-scraper) | Public contact emails from MapQuest |
| [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) | Public contact emails from N49 |
| [Porch Email Scraper](https://apify.com/neuro-scraper/porch-email-scraper) | Public contact emails from Porch |
| [Scoot Email Scraper](https://apify.com/neuro-scraper/scoot-email-scraper) | Public contact emails from Scoot |
| [Thomasnet Email Scraper](https://apify.com/leads-scraper/thomasnet-email-scraper) | Public contact emails from Thomasnet |
| [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) | Public contact emails from Thumbtack |
| [Touch Local Email Scraper](https://apify.com/leads-scraper/touch-local-email-scraper) | Public contact emails from Touch Local |
| [TradeIndia Email Scraper](https://apify.com/leads-scraper/tradeindia-email-scraper) | Public contact emails from TradeIndia |
| [Trustpilot Email Scraper](https://apify.com/leads-scraper/trustpilot-email-scraper) | Public contact emails from Trustpilot |
| [Tupalo Email Scraper](https://apify.com/leads-scraper/tupalo-email-scraper) | Public contact emails from Tupalo |
| [Yalwa Email Scraper](https://apify.com/leads-scraper/yalwa-email-scraper) | Public contact emails from Yalwa |
| [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) | Public contact emails from Yellow Pages |
| [Angi Email and Phone Number Scraper](https://apify.com/neuro-scraper/angi-email-and-phone-number-scraper) | Emails and phone numbers from Angi |
| [Bark Email and Phone Number Scraper](https://apify.com/neuro-scraper/bark-email-and-phone-number-scraper) | Emails and phone numbers from Bark |
| [Better Business Bureau Email and Phone Number Scraper](https://apify.com/leads-scraper/better-business-bureau-email-and-phone-number-scraper) | Emails and phone numbers from Better Business Bureau |
| [Bizapedia Email and Phone Number Scraper](https://apify.com/neuro-scraper/bizapedia-email-and-phone-number-scraper) | Emails and phone numbers from Bizapedia |
| [Brownbook Email and Phone Number Scraper](https://apify.com/neuro-scraper/brownbook-email-and-phone-number-scraper) | Emails and phone numbers from Brownbook |

### Leave a review

If the Clutch 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, bug reports or a custom build request for the Clutch Email Scraper: contact neurodata.apify@gmail.com.

# Actor input Schema

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

Search terms describing the Clutch 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 Clutch.

## `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": [
    "agency",
    "software company"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "new business",
    "partnerships",
    "sales"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Clutch 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": [
        "agency",
        "software company"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "new business",
        "partnerships",
        "sales"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/clutch-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": [
        "agency",
        "software company",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "new business",
        "partnerships",
        "sales",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/clutch-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": [
    "agency",
    "software company"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "new business",
    "partnerships",
    "sales"
  ]
}' |
apify call leads-scraper/clutch-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/clutch-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/qOsHeNh88bXcTLsMs/builds/jleoLA1mb8rMJrQdz/openapi.json
