# Cylex Email Scraper (`neuro-scraper/cylex-email-scraper`) Actor

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

- **URL**: https://apify.com/neuro-scraper/cylex-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-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

### Cylex Email Scraper

The Cylex Email Scraper extracts publicly indexed business emails from Cylex, a local directory network that runs separate national sites for the United States, the United Kingdom, Canada and Germany. One run covers all four.

In our measured Google run the Cylex Email Scraper parsed 10 result blocks, named a business in all 10 and resolved a profile URL for all 10. Those 10 blocks yielded 5 unique emails, because several listings shared the same published address.

That is deduplication working as designed, not data loss. The Cylex Email Scraper emits each address once per run no matter how many listings surfaced it.

#### What the Cylex Email Scraper does

The Cylex Email Scraper builds Google queries with the `site:` operator against `cylex.us.com`, `cylex-uk.co.uk`, `cylex.ca` and `cylex.de`. It parses each result block structurally, locating the `<h3>` title and the smallest surrounding block.

A domain-filtered regex then extracts emails from the block text. Matches are normalised, deduplicated globally and pushed to your Apify dataset immediately.

The Cylex Email Scraper never logs into Cylex, never uses a Cylex API and never opens the Cylex website. There is no browser, no JavaScript rendering, no authentication and no cookies.

#### Why the Cylex Email Scraper suits multi-market expansion

Very few local directories operate credibly on both sides of the Atlantic. Cylex does, which makes the Cylex Email Scraper a practical single tool for a company testing several markets at once.

A B2B SaaS vendor entering Germany, a UK trades marketplace, or a Canadian franchise assessing European expansion can all run the same keyword set and compare results market by market.

The German coverage is the standout. `cylex.de` reaches Mittelstand service businesses that English-language directories rarely list, and the Cylex Email Scraper reads them the same way it reads a Chicago plumber.

#### Features of the Cylex Email Scraper

Everything in this table ships in the Cylex Email Scraper today.

| Feature | What it means in practice |
|---|---|
| Google `site:` search over four Cylex domains | Covers `cylex.us.com`, `cylex-uk.co.uk`, `cylex.ca` and `cylex.de` in one run |
| Query expansion | Base, quoted and `intitle:` variants plus one query per modifier; base queries run first |
| Domain filtering | Only emails ending in your `customDomains` values are kept |
| Global deduplication | Each email is emitted once per run - the reason 10 blocks produced 5 unique addresses |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| 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 | Works from the `<h3>` title, never from Google's CSS class names |
| Whole-page fallback parser | A markup change degrades to "emails without account details", not "no emails" |
| Concurrency control | `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and block detection | Up to 3 attempts per page, exponential backoff, fresh proxy session per request, CAPTCHA and consent pages detected and retried |
| Failed-query requeue | 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` |
| Run summary logging | Pages fetched, blocked pages, retries and emails per page |

#### How the Cylex Email Scraper works

A run of the Cylex Email Scraper follows six steps from input to dataset.

1. Read your input: keywords, location, email domains and limits.
2. Build queries such as `site:cylex.de elektriker "@gmail.com" "Berlin"`.
3. Fetch Google result pages through the Apify GOOGLE_SERP proxy using async `aiohttp`.
4. Parse each result block structurally to isolate title, business label and snippet.
5. Extract and normalise emails with a domain-filtered regex.
6. Deduplicate globally and push each lead to the dataset immediately.

The Cylex Email Scraper streams rows as it finds them, so aborting a long run keeps everything collected so far.

#### Input fields for the Cylex Email Scraper

These are the exact inputs the Cylex Email Scraper accepts, with its shipped defaults.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["local business", "services"]` | Search terms describing the businesses 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 pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "enquiries", "owner", "get a quote"]` | 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 Cylex Email Scraper

```json
{
  "keywords": ["elektriker", "sanitaer", "malerbetrieb"],
  "location": "Berlin",
  "customDomains": ["@gmail.com", "@gmx.de", "@web.de", "@t-online.de"],
  "maxEmails": 400,
  "countryCode": "DE",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "kontakt"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Location: the highest-leverage input in the Cylex Email Scraper

Because the Cylex Email Scraper spans four national sites, `location` and `countryCode` together decide which market you are actually harvesting. Set both deliberately.

For Germany use `"Berlin"`, `"Muenchen"`, `"Hamburg"`, `"Koeln"` or `"Frankfurt"` with `countryCode: "DE"`. For the UK use `"Birmingham"`, `"Leeds"`, `"Glasgow"` or `"Bristol"` with `GB`.

For North America use `"Chicago, IL"`, `"Houston, TX"`, `"Toronto, ON"` or `"Montreal, QC"` with `US` or `CA` as appropriate.

Google caps a single query at roughly 300 results, so run one city per execution. Ten German cities will out-produce a single `"Deutschland"` query comfortably.

Match webmail domains to the market too. `@gmx.de`, `@web.de` and `@t-online.de` matter enormously in Germany and appear nowhere in the American defaults.

#### Output fields from the Cylex Email Scraper

Every dataset item written by the Cylex 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 post captions |
| `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` | Bio snippet, cleaned of labels and engagement 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 from the Cylex Email Scraper

```json
[
  {
    "network": "Cylex",
    "keyword": "elektriker",
    "query": "site:cylex.de elektriker \"@gmx.de\" \"Berlin\"",
    "title": "Elektro Hartmann GmbH - Berlin - Cylex",
    "accountName": "Elektro Hartmann GmbH",
    "fullName": "Elektro Hartmann GmbH",
    "username": "elektro-hartmann-gmbh",
    "profileUrl": "https://www.cylex.us.com/company/elektro-hartmann-gmbh.html",
    "url": "https://www.cylex.us.com/company/elektro-hartmann-gmbh.html",
    "description": "Elektroinstallation und Smart-Home-Technik in Berlin-Mitte. Kontakt: elektro.hartmann@gmx.de",
    "email": "elektro.hartmann@gmx.de",
    "emailDomain": "@gmx.de",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T19:12:44.083Z"
  },
  {
    "network": "Cylex",
    "keyword": "malerbetrieb",
    "query": "site:cylex.de malerbetrieb \"@web.de\" \"Berlin\"",
    "title": "Malerbetrieb Kranz - Cylex",
    "accountName": "Malerbetrieb Kranz",
    "fullName": "Malerbetrieb Kranz",
    "username": "malerbetrieb-kranz",
    "profileUrl": "https://www.cylex.us.com/company/malerbetrieb-kranz.html",
    "url": "https://www.cylex.us.com/company/malerbetrieb-kranz.html",
    "description": "Maler- und Lackierarbeiten fuer Wohn- und Gewerbeobjekte. Anfragen an malerbetrieb.kranz@web.de",
    "email": "malerbetrieb.kranz@web.de",
    "emailDomain": "@web.de",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T19:14:07.556Z"
  }
]
```

#### Use cases for the Cylex Email Scraper

The Cylex Email Scraper earns its keep whenever one campaign has to cover more than one country.

| Use case | Who runs it | Typical setup |
|---|---|---|
| German market entry | B2B SaaS expanding into DACH | `["elektriker", "sanitaer"]`, `location: "Muenchen"`, `countryCode: "DE"` |
| UK trades outreach | Local marketing agency | `["plasterer", "electrician"]`, `location: "Leeds"`, `countryCode: "GB"` |
| Canadian services list | Franchise development | `["cleaning service"]`, `location: "Toronto, ON"`, `countryCode: "CA"` |
| US mid-market prospecting | Insurance brokerage | `["landscaping"]`, `location: "Houston, TX"`, `countryCode: "US"` |
| Four-market comparison | Market researcher | Same trade keyword, one run per country, compare counts |
| Multilingual campaign build | Agency with European clients | German, English and French keyword sets |
| Supplier discovery | Procurement team | `["verpackung", "packaging supplier"]`, several cities |
| Cross-directory enrichment | RevOps team | Merge with Brownbook, Fyple and Infobel datasets |

#### Tuning the Cylex Email Scraper for better yield

Search in the local language. `"elektriker"` and `"sanitaerbetrieb"` reach German listings that `"electrician"` and `"plumber"` never will.

Replace the default `customDomains` with market-appropriate ones. Germany leans on `@gmx.de`, `@web.de` and `@t-online.de`; the UK on `@yahoo.co.uk`, `@hotmail.co.uk` and `@btinternet.com`.

Localise `queryModifiers` too. German listings respond to `"kontakt"` and `"anfrage"` far better than to `"get a quote"`.

Leave `expandQueries` on so the Cylex Email Scraper routes around Google's per-query ceiling, and keep `maxConcurrency` near 5.

#### What to expect from a Cylex Email Scraper run

Our measured Google run parsed 10 result blocks, identified 10 businesses and resolved 10 profile URLs, producing 5 unique emails. Identity and link quality are excellent; unique-email conversion was about half.

The reason is duplication. Several Cylex listings for related businesses published the same contact address, and the Cylex Email Scraper deduplicates globally so you receive it once.

Widening `customDomains` is the most effective response. Each additional domain opens a distinct set of queries and surfaces addresses the previous set could not match.

#### Responsible use, GDPR and CAN-SPAM

Given Cylex's German and British footprint, GDPR is the primary framework for anything the Cylex Email Scraper produces. This section is guidance, not legal advice.

GDPR and UK GDPR require a lawful basis, a clear privacy notice at or before first contact, and a route to erasure. Germany applies unusually strict rules to unsolicited commercial email under the UWG, so seek advice before mailing German contacts cold.

CAN-SPAM covers US recipients - accurate headers, an honest subject line, a physical postal address and a prompt opt-out. Canadian contacts fall under CASL, which is stricter again.

An owner's `firstname@gmx.de` is personal data even when published for business reasons. Suppress opt-outs, record provenance, and do not resell the raw dataset.

#### Limitations of the Cylex Email Scraper

- Unique-email conversion can be well below block count. In our measured run 10 blocks produced 5 unique emails because listings shared addresses.
- Only finds businesses whose email is publicly visible in Google's index.
- Google caps a single query at roughly 300 results, which is why query expansion exists.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address - verify before sending.
- `username` and `profileUrl` are populated only when Google's result exposes a handle. Resolution was 10 of 10 in our measured run but is not guaranteed. This is a Google limitation, not a bug.
- `profileUrl` is built from the canonical Cylex company URL pattern, so a listing found on a national site may be linked in that canonical form.
- Requires the Apify GOOGLE_SERP proxy; the Cylex Email Scraper 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 and location, and no volume is guaranteed.

#### Cylex Email Scraper FAQ

#### How many results should I expect from the Cylex Email Scraper?

Our measured run parsed 10 blocks, identified 10 businesses, resolved 10 profile URLs and produced 5 unique emails. Block quality is high; unique-email conversion depends on how much address duplication exists.

#### Why were there only 5 emails from 10 blocks?

Several listings published the same contact address, and the Cylex Email Scraper deduplicates globally. Widening `customDomains` is the best way to raise unique yield.

#### Which domains does it search?

`cylex.us.com`, `cylex-uk.co.uk`, `cylex.ca` and `cylex.de`, all in the same run.

#### Can I restrict a run to one country?

Not by domain, but `location` and `countryCode` together focus results on the market you want in practice.

#### Does the Cylex Email Scraper use a Cylex API?

No. It never logs in, never calls an API and never opens the Cylex website. All data comes from publicly indexed Google results.

#### Should I search in German?

Yes, for German coverage. Local-language keywords and modifiers such as `"kontakt"` substantially change what the Cylex Email Scraper finds.

#### Which webmail domains should I add for Europe?

`@gmx.de`, `@web.de`, `@t-online.de`, `@freenet.de` for Germany; `@yahoo.co.uk`, `@hotmail.co.uk`, `@btinternet.com` for the UK.

#### What does `possiblyTruncated` mean?

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

#### Do I need Apify proxy credentials?

Yes. The Cylex Email Scraper runs on the Apify GOOGLE_SERP proxy and cannot operate without it.

#### Is the free plan enough?

For evaluation, yes - it caps a run at 100 emails. Paid plans remove the cap.

#### Which sibling Actors pair best with this one?

The [Brownbook Email Scraper](https://apify.com/neuro-scraper/brownbook-email-scraper) for worldwide coverage, the [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) for Canada, and the [Europages Email Scraper](https://apify.com/leads-scraper/europages-email-scraper) for European suppliers and manufacturers.

### Related Actors

| Actor | What it collects |
|---|---|
| [Cylex Email and Phone Number Scraper](https://apify.com/neuro-scraper/cylex-email-and-phone-number-scraper) | Emails and phone numbers from Cylex |
| [Cylex Phone Number Scraper](https://apify.com/neuro-scraper/cylex-phone-number-scraper) | Public phone numbers from Cylex |
| [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 |
| [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 |

### More about the Cylex Email Scraper

Every row the Cylex Email Scraper writes carries the keyword and the exact query that produced
it, so a list can always be traced back to the search that built it.

#### Cylex Email Scraper at a glance

### Leave a review

If the Cylex 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.

# Actor input Schema

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

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

## `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": [
    "local business",
    "services"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Cylex 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": [
        "local business",
        "services"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/cylex-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": [
        "local business",
        "services",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/cylex-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": [
    "local business",
    "services"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ]
}' |
apify call neuro-scraper/cylex-email-scraper --silent --output-dataset

```

## MCP server setup

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