# Fyple Email Scraper (`neuro-scraper/fyple-email-scraper`) Actor

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

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

### Fyple Email Scraper - public business contact emails from the Fyple directory

The Fyple Email Scraper collects publicly indexed contact emails that appear in Google search results for the Fyple domains. Fyple is an international local business directory where owners list their company for free so that nearby customers can find and contact them.

Of the twelve directory Actors measured in this batch, this one performed best. It is the natural starting point if you want a clean local business dataset without fighting the index.

The Fyple Email Scraper covers three domains rather than one - `fyple.com`, `fyple.biz` and `fyple.co.uk`. That spread is what gives it reach across several English-speaking markets from a single run.

Its audience is local rather than industrial. Local-services agencies, SMB SaaS vendors, franchise development teams and field sales organisations are the people who get the most from it.

#### A measured live result, stated plainly

A live Google run of the Fyple Email Scraper returned **10 result blocks, 10 rows with account identity, 10 resolvable profile URLs and 10 unique emails**. Every block converted, on every axis.

That is the strongest measured result across this whole set of directory Actors. Fyple company pages carry a clean `/company/` slug and typically print a contact line inside the snippet, which is the ideal combination for this pipeline.

Do not read a perfect ten-for-ten as a guarantee, though. It is one honest measurement on default settings, and real yield still depends on your keywords, your domains and what Google has indexed for your market.

### Features of the Fyple Email Scraper

Every feature below is genuinely implemented. Nothing here is aspirational.

| Feature | What it means in practice |
|---|---|
| Google SERP parsing | Reads Google result pages through the Apify GOOGLE_SERP proxy. No browser, no JavaScript rendering |
| Multi-domain coverage | Queries `fyple.com`, `fyple.biz` and `fyple.co.uk` |
| Structural block detection | Locates the `<h3>` title, then the smallest surrounding block. Does not depend on Google's CSS class names |
| Domain filter | Only emails ending in one of your `customDomains` values are kept |
| Query expansion | Base, quoted, `intitle:` and one variant per query modifier. Base queries run first |
| Global deduplication | An email seen once is never pushed twice, 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 placeholders such as `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 |
| Concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Re-queueing | Blocked or failed queries are retried once at the end of the run |
| Resumable run | State is stored in the key-value store, keyed by a hash of the input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |
| Dataset output | Rows push immediately and export to CSV, JSON, Excel or XML from the Apify dataset |

Global deduplication earns its place in the Fyple Email Scraper because the same business can appear on more than one Fyple domain. The Actor pushes that email exactly once, no matter how many times it is found.

### How the Fyple Email Scraper works

The pipeline is six steps and there is nothing hidden inside it.

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google search queries with the `site:` operator against each Fyple domain, for example `site:fyple.com local business "@gmail.com" "Austin"`.
3. It fetches Google result pages through the Apify GOOGLE_SERP proxy using `aiohttp`, asynchronously.
4. It parses each result block structurally, finding the `<h3>` title and the smallest block around it.
5. It extracts emails from that block's text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead straight into the Apify dataset.

The Fyple Email Scraper does **not** log into Fyple, does not use any Fyple API, and does not open the directory in a browser. Every field comes from publicly indexed Google search results - titles, snippets and site labels, with no authentication and no cookies.

### Who the Fyple Email Scraper is built for

This is a local business Actor, so it suits people selling to small firms rather than people sourcing industrial parts.

Local-services agencies use it to build outreach lists for web design, SEO, print and signage in a defined city. SMB SaaS vendors use it to reach owner-operated businesses running on paper diaries and spreadsheets.

Franchise development teams use it to find independents worth converting in a target category. Field sales teams and territory managers use it to plan coverage before working a route.

If your targets are manufacturers or exporters rather than local businesses, the Fyple Email Scraper is the wrong Actor and [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper) or [Thomasnet Email Scraper](https://apify.com/leads-scraper/thomasnet-email-scraper) will serve you far better.

### Input fields for the Fyple Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["local business", "services"]` | Search terms - niche, job title, industry |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com", "@yahoo.com"]` | Only emails on these domains are kept; the `@` is 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 |

#### How the Fyple Email Scraper input fields actually behave

`keywords` should name a trade. The defaults `local business` and `services` are broad on purpose, and `roofing contractor`, `dental clinic`, `pet groomer` or `wedding photographer` will produce far sharper results.

`location` narrows to a city and is worth setting on almost every run. Local directories are organised around place, so a city phrase moves the Fyple Email Scraper onto pages that actually list nearby businesses.

`countryCode` steers which national view of the index the search proxy sees. Because Fyple spans several markets, switching between `US`, `GB` and other codes on the same keywords is a cheap way to widen coverage.

`queryModifiers` only fire when `expandQueries` is `true`. The defaults `enquiries`, `owner` and `get a quote` are tuned to local listing text, where those exact phrases sit beside a published address.

`customDomains` is less of a bottleneck here than on B2B platforms, since small businesses genuinely use webmail. Even so, adding `@outlook.com`, `@hotmail.com`, `@aol.com` and country domains such as `@btinternet.com` raises yield.

`maxEmails` is a hard stop shared across the worker pool, and on a high-converting Actor like this one it is usually the limit you hit first. Raise it when you want volume.

### JSON input example for the Fyple Email Scraper

```json
{
  "keywords": ["roofing contractor", "dental clinic", "wedding photographer"],
  "location": "Austin",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com", "@hotmail.com", "@aol.com"],
  "maxEmails": 500,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "enquiries", "owner", "get a quote"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

That is a realistic configuration for the Fyple Email Scraper: three trades, one city, a matching country code and a domain filter widened beyond the two defaults.

Because this Actor converts well, `maxEmails` is set high. On weaker platforms in this family a large value simply means a longer run; here it genuinely translates into more rows.

### Output fields of the Fyple Email Scraper

Every dataset item carries all fourteen fields.

| 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` | Bio or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, for example `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email - verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

On Fyple, `username` and `profileUrl` are populated on essentially every row because company pages sit under a stable `/company/` slug. The Fyple Email Scraper builds the canonical link as `https://www.fyple.com/company/{username}/`.

Check `possiblyTruncated` before sending. When it is `true`, Google's snippet ellipsis may have clipped the address and you should confirm it on the source page.

### JSON output example from the Fyple Email Scraper

```json
[
  {
    "network": "Fyple",
    "keyword": "roofing contractor",
    "query": "site:fyple.com roofing contractor contact \"@gmail.com\" \"Austin\"",
    "title": "Lone Star Roofing & Exteriors - Austin, TX - Fyple",
    "accountName": "Lone Star Roofing & Exteriors",
    "fullName": "Lone Star Roofing & Exteriors",
    "username": "lone-star-roofing-exteriors",
    "profileUrl": "https://www.fyple.com/company/lone-star-roofing-exteriors/",
    "url": "https://www.fyple.com/company/lone-star-roofing-exteriors/",
    "description": "Residential and commercial roofing, storm damage repair and gutter installation in Austin.",
    "email": "lonestarroofing.tx@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-29T18:05:31Z"
  },
  {
    "network": "Fyple",
    "keyword": "wedding photographer",
    "query": "site:fyple.co.uk wedding photographer \"get a quote\" \"@outlook.com\"",
    "title": "Rosewood Photography - Manchester - Fyple",
    "accountName": "Rosewood Photography",
    "fullName": "Rosewood Photography",
    "username": "rosewood-photography",
    "profileUrl": "https://www.fyple.com/company/rosewood-photography/",
    "url": "https://www.fyple.com/company/rosewood-photography/",
    "description": "Wedding and portrait photography across the north west. Packages and quotes by email.",
    "email": "rosewood.photo@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-29T18:07:09Z"
  }
]
```

Both rows carry a clean handle and a usable description, which is the normal shape on this platform. That consistency is the practical reason to reach for the Fyple Email Scraper first.

### Use cases for the Fyple Email Scraper

| Audience | What they do with the data |
|---|---|
| Local-services agencies | Build outreach lists for web design, SEO, print or signage in a chosen city |
| SMB SaaS vendors | Reach owner-operated businesses still running on paper and spreadsheets |
| Franchise development teams | Find independent operators worth converting in a target category |
| Field sales and territory managers | Plan coverage across a metro area before working a route |
| Payment and POS providers | Approach retail, salon and hospitality businesses by neighbourhood |
| Insurance and finance brokers | Prospect small businesses by trade and city |
| Recruiters for local trades | Reach employers hiring in skilled trades and services |
| Local data researchers | Compare how the same trade publishes contact routes across countries |

Each of those targets a business inbox that an owner published in a directory so customers could get in touch. That is the honest boundary of what the Fyple Email Scraper is for.

### Targeting tips for the Fyple Email Scraper

`location` and `countryCode` are both real levers, and the multi-country nature of this directory makes the pair unusually productive.

Set `location` to a city or metro area rather than a country. The Fyple Email Scraper appends that phrase to every query, which is what puts results on pages listing nearby businesses.

Set `countryCode` to match. Running `US`, `GB` and other markets across the same trade keywords is the simplest way to multiply coverage without writing new keywords.

Because the three Fyple domains skew to different markets, expect `fyple.co.uk` results to dominate a `GB` run and `fyple.com` to dominate a `US` one. Global deduplication means you can run both without duplicate rows.

Invest in trade vocabulary. Twenty specific trades will always outperform two generic ones, and the `owner` and `get a quote` modifiers land on the exact listing text where addresses appear. For wider international coverage, add [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) and [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper).

### Limitations of the Fyple Email Scraper

Read all of these before your first run.

- The Fyple Email Scraper only finds addresses that are **publicly visible in Google's index**. Anything Google has not indexed is invisible to it.
- Google caps a single query at roughly 300 results, which is exactly why query expansion exists and defaults to on.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email short. Verify it before sending.
- It requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at 100 emails per run; paid plans are uncapped. On this high-converting Actor you will reach that cap quickly.
- `username` and `profileUrl` are only populated when Google exposes a handle. Fyple almost always does, but rows from category or search pages can still arrive with `username: null` and an empty `profileUrl`. That is a Google limitation, not a bug.
- A perfect ten-for-ten measured run is one observation, not a promise. Results vary with keywords, domains and location, and no volume is guaranteed by the Fyple Email Scraper or by any Actor in this family.

### Responsible use of Fyple Email Scraper output

The addresses the Fyple Email Scraper surfaces are business contacts that owners published in a public directory so that customers could reach them. Treat them as exactly that.

Where GDPR or UK GDPR applies, a sole trader's address is personal data even when publicly listed. Record your legitimate interest, identify yourself and your company in the first line, and make the relevance of the message obvious.

Honour opt-outs immediately and permanently, keep your list current, and follow the marketing rules of every country you contact, including CAN-SPAM in the United States. Do not use this output for bulk unsolicited mail.

### FAQ about the Fyple Email Scraper

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

More than from most Actors in this family. A live Google run returned 10 result blocks, 10 identified accounts, 10 profile URLs and 10 unique emails on default settings - the strongest measured result in this set. That said, it is one observation and not a guarantee; volume still scales with your keywords, cities and domain filter, and depends on what Google has indexed.

#### Which Fyple domains does the Actor search?

Three: `fyple.com`, `fyple.biz` and `fyple.co.uk`. The Fyple Email Scraper deduplicates globally, so a business found on more than one of them is pushed once.

#### Does the Fyple Email Scraper log into Fyple or use its API?

No. It builds Google `site:` queries against the Fyple domains, fetches result pages through the Apify GOOGLE_SERP proxy and parses them. There is no browser, no login, no API and no cookies.

#### Why do nearly all rows have a working profile URL?

Because Fyple company pages sit under a stable `/company/` slug that Google prints. The Fyple Email Scraper derives `username` from it and builds `profileUrl` as `https://www.fyple.com/company/{username}/`.

#### What is the fastest way to increase Fyple Email Scraper yield?

Raise `maxEmails`, widen `customDomains` beyond the two defaults, and run more specific trade keywords across more cities. On a high-converting Actor those changes translate directly into rows.

#### Should I run several countries?

Yes. Set `countryCode` to each market you care about and keep the keyword list the same. The Fyple Email Scraper covers multiple English-speaking markets, and global deduplication keeps the combined dataset clean.

#### Why does the Fyple Email Scraper turn `expandQueries` on by default?

Google caps one query at roughly 300 results. Expansion runs base, quoted and `intitle:` variants plus one per modifier, reaching pages a single query cannot. Base queries always run first.

#### Can I run the Fyple Email Scraper on a free Apify plan?

Yes, but the 100-email cap on free plans binds quickly here because conversion is high. Paid plans are uncapped.

#### What happens if a Fyple Email Scraper run is interrupted?

State is saved in the key-value store, keyed by a hash of your input, and written on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events. Restarting with the same input resumes rather than starting over.

#### Which export formats does the Fyple Email Scraper support?

Anything the Apify dataset supports - CSV, JSON, Excel and XML - plus the API for pushing rows straight into a CRM.

#### Is the Fyple Email Scraper affiliated with Fyple?

No. It is an independent Actor that reads publicly indexed Google results, with no relationship to or endorsement from the platform.

#### Which other Actor pairs best with the Fyple Email Scraper?

For wider international local coverage, [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) and [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper). For UK-specific depth, [Scoot Email Scraper](https://apify.com/neuro-scraper/scoot-email-scraper) and [Touch Local Email Scraper](https://apify.com/leads-scraper/touch-local-email-scraper).

### Related Actors

More email scrapers from the same Business & Professional Directories family, built on the same Google SERP pipeline.

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

## `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 Fyple 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/fyple-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/fyple-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/fyple-email-scraper --silent --output-dataset

```

## MCP server setup

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