# Trustpilot Email Scraper (`leads-scraper/trustpilot-email-scraper`) Actor

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

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

### Trustpilot Email Scraper

The Trustpilot Email Scraper extracts publicly indexed company contact emails from Trustpilot review pages using Google search.
Trustpilot is where consumers review retailers, service companies and online shops, and where brands publish the address they want complaints sent to.
This Actor reads what Google has indexed and pulls those addresses out at scale.

There is one structural quirk you must know up front: Trustpilot indexes review pages keyed to a company domain rather than profile handles, so rows carry a company email without a resolvable handle.
In practice that means `username` is `null` and `profileUrl` is empty on essentially every row.
The email, the company name and the snippet are still there, and they are what this Actor is for.

The Trustpilot Email Scraper does not log in, does not use a Trustpilot API and never opens trustpilot.com.
Every record comes from publicly available Google search results: titles, snippets and site labels.
There is no browser, no JavaScript rendering, no authentication and no cookies.

In a measured live run, the Trustpilot Email Scraper returned 10 result blocks, 0 identity matches, 0 profile URLs and 10 unique emails.
That is an unusual and genuinely useful profile: plenty of emails, zero handles.
If your workflow needs the address rather than the link, Trustpilot is one of the better sources in this category.

#### What the Trustpilot Email Scraper is for

Customer-service and complaints teams publish real, monitored inboxes on Trustpilot because they have to answer reviews.
That makes it an unusually good place to find working addresses at consumer brands, retailers and subscription services.
The default modifiers reflect this: `email`, `contact`, `customer service`, `support` and `complaints`.

Typical users are companies selling support tooling, reputation management, returns logistics or CX consulting.
Researchers and journalists use it to reach the brands behind a complaint pattern.
Partnership teams use it to find the human behind a storefront that otherwise only shows a web form.

### Key features of the Trustpilot Email Scraper

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

| Feature | What it does |
|---|---|
| Google `site:` targeting | Restricts every query to `trustpilot.com`, so results stay on review pages |
| Query expansion | Base, quoted and `intitle:` variants plus one variant per query modifier |
| Support-intent modifiers | Defaults of `email`, `contact`, `customer service`, `support` and `complaints` |
| 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 Trustpilot Email Scraper works

The Trustpilot Email Scraper reads your input, builds Google queries, fetches result pages and parses each block structurally.
Emails are extracted 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:trustpilot.com online shop "@gmail.com" "customer service"`.
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 Trustpilot Email Scraper

Google caps a single query at roughly 300 results, and Trustpilot has millions of indexed review pages.
Query expansion multiplies each keyword by each email domain and by several phrasings, with base queries running first.
Because the email density here is high, expansion translates almost directly into extra rows.

#### Why the Trustpilot Email Scraper cannot resolve handles

A Trustpilot review page is addressed by the reviewed company's web domain, not by a directory-style username.
Google therefore prints a company name and a review-page title, and no handle for the Actor to resolve.
When a handle can be resolved it takes the shape `https://www.trustpilot.com/review/{username}`, but on this platform you should not count on it.

#### Location targeting in the Trustpilot Email Scraper

`location` is appended to every query as a quoted phrase and is a mild lever on Trustpilot.
National retail chains and delivery services often name their market in the review page text, so a country name can help.
`countryCode` steers the search proxy and is usually the more reliable of the two here.

### Input reference for the Trustpilot Email Scraper

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

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["online shop", "service company"]` | Search terms describing the companies 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", "customer service", "support", "complaints"]` | 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": ["online shop", "furniture retailer", "subscription box"],
  "location": "United Kingdom",
  "customDomains": ["@gmail.com", "@outlook.com", "@yahoo.co.uk"],
  "maxEmails": 500,
  "countryCode": "GB",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "customer service", "support", "complaints"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Tuning the Trustpilot Email Scraper

Retail verticals work better than abstract nouns.
`furniture retailer`, `pet supplies shop` and `energy supplier` all produce distinctive review page text.
Six to ten vertical keywords will out-produce two broad ones.

Because email density is high here, `maxEmails` is the setting that actually controls run length.
Raise it well above the default of 20 when you want a real list.
Widen `customDomains` to include the free-mail providers common in your target market.

### Output reference for the Trustpilot Email Scraper

Every dataset item produced by the Trustpilot Email Scraper carries all fourteen fields below, handle or no handle.

| 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 review pages |
| `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` | Review page 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

Both rows below show the normal Trustpilot shape: a real company email with `username: null` and an empty `profileUrl`.

```json
[
  {
    "network": "Trustpilot",
    "keyword": "furniture retailer",
    "query": "site:trustpilot.com furniture retailer customer service \"@gmail.com\" \"United Kingdom\"",
    "title": "Oakline Furniture Reviews | Read Customer Service Reviews",
    "accountName": "Oakline Furniture",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Solid oak furniture delivered across the UK. Customer service: oakline.support@gmail.com",
    "email": "oakline.support@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-11-04T15:08:21Z"
  },
  {
    "network": "Trustpilot",
    "keyword": "subscription box",
    "query": "site:trustpilot.com subscription box complaints \"@outlook.com\" \"United Kingdom\"",
    "title": "Crateful Reviews | Read Customer Service Reviews",
    "accountName": "Crateful",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Monthly snack and coffee boxes. Complaints and returns: crateful.help@outlook.com",
    "email": "crateful.help@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2025-11-04T15:09:47Z"
  }
]
```

The Apify dataset view shows email, account, name, username, profile, keyword, snippet and the truncation flag.
On Trustpilot the username and profile columns will usually be blank, and that is expected.
Export as CSV, JSON or XLSX, or read the dataset through the Apify API.

### Use cases for the Trustpilot Email Scraper

The Trustpilot Email Scraper is aimed at reaching the customer-facing side of consumer brands.

| Use case | Suggested keywords | Suggested modifiers |
|---|---|---|
| Selling CX and support tooling | `online shop`, `subscription box` | `customer service`, `support` |
| Reputation and review management pitches | `service company`, `home insurance` | `complaints`, `contact` |
| Returns and reverse-logistics outreach | `furniture retailer`, `fashion retailer` | `complaints`, `support` |
| Consumer research and complaint analysis | `energy supplier`, `broadband provider` | `complaints`, `customer service` |
| Brand partnership and affiliate recruitment | `pet supplies shop`, `beauty brand` | `contact`, `email` |
| Journalist and regulator outreach | `debt collection`, `holiday company` | `complaints`, `contact` |
| Building a consumer brand contact list | `online shop`, `service company` | `email`, `contact` |

#### Reaching support teams with the Trustpilot Email Scraper

Set `queryModifiers` to `customer service`, `support`, `complaints` and `help`.
These are the exact phrases a brand uses when it tells reviewers where to escalate.
The resulting addresses are usually monitored inboxes rather than dead aliases.

#### Vertical sweeps with the Trustpilot Email Scraper

Run one job per retail vertical rather than one job across all of them.
`energy supplier`, `broadband provider` and `holiday company` behave very differently in the index.
Keep `maxEmails` generous, because the Trustpilot Email Scraper tends to hit the cap before it runs out of pages.

### Practical recipes for the Trustpilot Email Scraper

A UK consumer sweep might use `online shop`, `furniture retailer` and `subscription box` with `countryCode` set to `GB`.
A US sweep might use `home warranty`, `moving company` and `pet supplies shop` with `countryCode` set to `US`.
Keep `expandQueries` on in both cases, because one query cannot reach past Google's result cap.

For maximum volume, drop `location`, keep `maxPagesPerQuery` at 30 and raise `maxEmails` to several hundred.
For a quick probe, use one vertical, set `maxEmails` to 20 and check what the snippets look like before scaling.
Both modes use identical code; only query volume differs.

### How many results the Trustpilot Email Scraper returns

A measured live run of the Trustpilot Email Scraper produced 10 blocks, 0 identity matches, 0 profile URLs and 10 unique emails.
Every block yielded an email and none yielded a handle, which is the clearest example of that trade-off in this whole category.
If you need addresses, this is a strong source; if you need linkable profiles, it is the wrong one.

The cause is the coverage note: Trustpilot indexes review pages keyed to a company domain rather than profile handles, so rows carry a company email without a resolvable handle.
Free Apify plans stop at 100 emails per run and paid plans are uncapped.
No specific volume is guaranteed by the Trustpilot Email Scraper or by any Actor in this family.

### Limitations of the Trustpilot Email Scraper

- Trustpilot indexes review pages keyed to a company domain rather than profile handles, so rows carry a company email without a resolvable handle. Expect `username: null` and an empty `profileUrl` on essentially every row.
- The Trustpilot Email Scraper only finds companies whose email is publicly visible in Google's index. A brand that only offers a web form will not appear.
- 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, which on Trustpilot is rare. That is a Google limitation, not a bug.
- The Trustpilot 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 Trustpilot Email Scraper is not affiliated with, endorsed by or officially supported by Trustpilot.
It reads public search results only and does not access private or gated data.

### Responsible use, GDPR and CAN-SPAM

A support inbox published for reviewers is not an invitation to receive marketing.
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.

Be especially careful with complaints addresses; misusing them damages both your sender reputation and the recipient's workload.
Keep the `query` and `foundAt` provenance, honour opt-outs immediately and suppress them in later runs of the Trustpilot Email Scraper.
This is general information about common obligations rather than legal advice, so check the rules that apply to you.

### FAQ about the Trustpilot Email Scraper

#### How many results should I expect?

A measured live run returned 10 blocks, 10 unique emails and zero handles. Trustpilot indexes review pages keyed to a company domain rather than profile handles, so rows carry a company email without a resolvable handle, and no volume is guaranteed.

#### Why does the Trustpilot Email Scraper leave `username` null?

Because Trustpilot review pages are keyed to a company web domain, not to a directory-style handle. There is nothing for the Trustpilot Email Scraper to resolve, so it stores `null` and leaves `profileUrl` empty.

#### Can I still identify the company?

Yes. `accountName` carries the brand name Google prints, and `description` carries the review page snippet. Those two fields are usually enough to identify the business.

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

No. It never logs in, never uses a Trustpilot API and never opens trustpilot.com. All data comes from publicly indexed Google results.

#### Does the Trustpilot Email Scraper return customer-service addresses?

Frequently, yes, which is why the default modifiers are `customer service`, `support` and `complaints`. Choose different modifiers if you want a different department.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the email, so the address may be cut short. Verify those rows before sending.

#### How do I get more emails from one Trustpilot Email Scraper run?

Raise `maxEmails` well above the default of 20, widen `customDomains`, and run one job per retail vertical rather than one broad job.

#### Should I leave query expansion on?

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

#### Does it need the Apify proxy?

Yes. The Trustpilot 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, and on this source that cap is easy to reach.

#### Are the emails verified?

No. The Trustpilot Email Scraper extracts and normalises what Google shows. Run your own verification before any campaign.

#### Which Actor should I use if I need profile links?

Try the [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) or the [Callupcontact Email Scraper](https://apify.com/neuro-scraper/callupcontact-email-scraper); both resolved full profile URLs in the same measured test.

### Related Actors

Thirty-six sibling Actors cover the rest of the Business and Professional Directories category that the Trustpilot Email Scraper belongs to.
They share the same input schema, output schema and behaviour, so anything you learn here transfers directly.
For software vendors try the [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper), for agencies the [Clutch Email Scraper](https://apify.com/leads-scraper/clutch-email-scraper), and for accredited business records the [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper).

| Actor | What it collects |
|---|---|
| [Trustpilot Email and Phone Number Scraper](https://apify.com/neuro-scraper/trustpilot-email-and-phone-number-scraper) | Emails and phone numbers from Trustpilot |
| [Trustpilot Phone Number Scraper](https://apify.com/neuro-scraper/trustpilot-phone-number-scraper) | Public phone numbers from Trustpilot |
| [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 |
| [Clutch Email Scraper](https://apify.com/leads-scraper/clutch-email-scraper) | Public contact emails from Clutch |
| [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 |
| [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 Trustpilot 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 Trustpilot Email Scraper: contact neurodata.apify@gmail.com.

# Actor input Schema

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

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

## `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": [
    "online shop",
    "service company"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "customer service",
    "support",
    "complaints"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Trustpilot 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": [
        "online shop",
        "service company"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "customer service",
        "support",
        "complaints"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/trustpilot-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": [
        "online shop",
        "service company",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "customer service",
        "support",
        "complaints",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/trustpilot-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": [
    "online shop",
    "service company"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "customer service",
    "support",
    "complaints"
  ]
}' |
apify call leads-scraper/trustpilot-email-scraper --silent --output-dataset

```

## MCP server setup

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