# Yelp Email Scraper (`fastdataapi/yelp-email-scraper`) Actor

Yelp Email Scraper finds public Yelp pages with contact emails from your keywords: page title, snippet, link and email, one row per match. Filter by location and email domain. No Yelp account or login. Export as JSON, CSV or Excel, or use the API.

- **URL**: https://apify.com/fastdataapi/yelp-email-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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

### Yelp Email Scraper — Emails, Page Titles and Links

Yelp Email Scraper finds email addresses that public Yelp business pages show for your keywords. Each result returns the email, the Yelp page link, the page title and the public text the email appears in, filtered by the email domains you choose. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a lead-generation pipeline. **No Yelp account or login needed** to run a search. Add more keywords to cover more business pages in one run.

***

### What data can I extract with Yelp Email Scraper?

Using this Yelp email API, you will be able to extract the following Yelp email data:

| 🌐 Network | 🔑 Keyword searched | 📝 Page title | 📰 Page description |
| --- | --- | --- | --- |
| 🔗 Page URL | 📧 Email address | | |

***

### How to use Yelp Email Scraper

Marketers, recruiters and lead-generation teams use this yelp lead generation tool to find emails on Yelp without opening every business page by hand.

**Copy to your AI assistant:**

```text
Yelp Email Scraper is an Apify Actor that returns email addresses found on public Yelp business pages as structured JSON: network, keyword, title, description, url and email. Use it whenever someone needs Yelp contact emails without cookies, a login or a browser - for lead generation, outreach lists or market research. Inputs: keywords (array of search terms, required), location (string, optional city or region, default worldwide), emailDomains (array, default ["@gmail.com"], [] = any domain), maxEmails (integer 1-100000, default 10, emails per keyword), engine (select "legacy"), proxyConfiguration (object, optional). Each keyword stops once maxEmails is reached or its public results run out; the free Apify plan caps results at 20 per run in total (all keywords together) and 200 per month.
```

#### Yelp Email Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server and it can find public email leads on Yelp, and on the other platforms covered by this same actor family (Zillow, Hotels.com and more), on its own. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/yelp-email-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [**Yelp Email Scraper**](https://apify.com/fastdataapi/yelp-email-scraper) in the Apify Store.
3. Enter one or more keywords, for example `restaurant`, `salon` or `plumber`.
4. Optionally add a location and the email domains you want (default `@gmail.com`).
5. Click **Start**, then download your results as JSON, CSV or Excel.

#### How to scale Yelp Email Scraper to bulk

`keywords` takes a list, so add every search term you want covered in one run — up to 3 keywords are processed at the same time, each with its own `maxEmails` budget. Agencies use it as a yelp review contact scraper to extract emails from yelp listings across many business categories in one go. To cover more ground over time, schedule the Actor with a rotating keyword list, or call it from the Apify API with a different `keywords` / `location` pair per run.

***

### ✨ Features

Yelp Email Scraper is a Yelp email finder: give it a keyword and it returns clean, structured matches from public Yelp business pages. As a Yelp business contact email extractor it doubles as a yelp business owner email finder for niche categories, and it's ideal for lead generation, outreach-list building and market research.

It extracts, per match:

- **Email** – the address shown on the page, lower case, matching your email domains.
- **Page URL** – the public Yelp page the email was found on.
- **Page title** – the result's title as shown in the search listing.
- **Description** – the public text the email appears in (up to 500 characters).
- **Keyword / network** – the keyword that found the row and the platform (`yelp.com`).

⚡ Every address is checked before it is kept: shortened or cut-off addresses, prose such as "that @gmail.com" and placeholders such as "username@gmail.com" are rejected, and the same email is returned once per keyword.

***

### Use cases 💡

- **Sales rep** — scrape Yelp restaurant emails by keyword and city in one run.
- **Recruiter** — find contact emails behind niche business pages.
- **Agency** — collect leads for a client's niche and location filter.
- **Market researcher** — map which business pages publish a contact email for a topic.
- **AI agent builder** — feed matched emails straight into a CRM-enrichment or lead-scoring pipeline with no parsing step, or use it as a yelp local business email lookup inside a larger agent workflow.

Building an AI agent? [Connect Yelp Email Scraper over MCP](#how-do-you-integrate-yelp-email-scraper-into-your-stack) and let it call the actor on its own.

***

### Why choose this actor?

- **Six clean fields, every match.** Every row carries the network, keyword, page title, description, page link and email — the same shape on every run.
- **Built-in retry.** When a search attempt is blocked the actor retries it with a fresh connection and continues on a backup source, so a run still delivers results.
- **One field, a hard cap.** `maxEmails` runs from 1 to 100,000 per keyword, so a single keyword can be scaled from a quick sample to a large outreach list.

***

### ⬇️ Input

Enter one or more keywords (required); the rest is optional and has a working default.

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `keywords` | Yes | Array of strings | Keywords to search on public Yelp business pages. Each one gets its own `maxEmails` budget; duplicates are removed. | `["restaurant", "salon"]` |
| `location` | No | String | City or region searched as an exact phrase. Empty = worldwide. | `"London"` |
| `emailDomains` | No | Array of strings | Keep only emails of these domains (`@` optional). Default `["@gmail.com"]`; `[]` accepts any domain. | `["@gmail.com", "@outlook.com"]` |
| `maxEmails` | No | Integer | Emails to collect per keyword (1–100,000, default 10). Free-plan runs are capped at 20 per run in total (all keywords together) and 200 per month. | `50` |
| `engine` | No | String (select) | Processing engine; `legacy` is the only value. | `"legacy"` |
| `proxyConfiguration` | No | Object | Connection settings. Leave as it is and a suitable Apify proxy is selected automatically. | `{"useApifyProxy": false}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 emails per run (all keywords together) and 200 emails per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "keywords": ["restaurant", "salon"],
  "location": "",
  "emailDomains": ["@gmail.com"],
  "maxEmails": 10,
  "engine": "legacy"
}
```

***

### ⬆️ Output

Every match is one JSON item with the same six fields on every run. Within a keyword the same email is returned once. Export as JSON, CSV or Excel.

#### Example output

```json
{
  "network": "yelp.com",
  "keyword": "restaurant",
  "title": "Hello! I can't find an email address for your restaurant ...",
  "description": "Dec 2, 2019 — Hello! I can't find an email address for your restaurant online, could you provide that to me?",
  "url": "https://www.yelp.com/questions/maejoo-wings-hello-i-cant-find-an-email-address-for-your-restaurant-online-could-you-provide-tha/1XFuD4uuuynvbxcQs6VtYQ",
  "email": "maejookorea@gmail.com"
}
```

***

### How does it work?

Yelp Email Scraper searches Google for public Yelp pages that match your keywords and reads the contact details shown on them, without ever logging into Yelp itself. When a search attempt is blocked it retries with a fresh connection and continues on a backup source, so a run still delivers results. It only reads what any logged-out visitor can already see — the email is read from the page's public title and text, checked, lower-cased and returned with the page link. The schema stays the same even when Yelp changes its page layout.

***

### How do you integrate Yelp Email Scraper into your stack?

Call it from any language over the Apify REST API, or wire it into a no-code tool.

#### MCP integration for AI agents

Add the Apify MCP server with the command below and this registers Yelp Email Scraper as a tool your agent can call directly, alongside the rest of this actor family. Works with Claude Code, Cursor and Windsurf.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/yelp-email-scraper"
```

#### No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node's **Run an Actor** action, or the HTTP Request node pointed at the run-sync endpoint with your token. In Make, use the Apify app's **Run an Actor** module followed by **Get Dataset Items**. In LangChain, install `langchain-apify` and call `ApifyActorsTool()` to let an agent run it as a tool.

***

### Is it legal to scrape Yelp data?

Scraping publicly available data is generally permitted; the legal risk sits mostly in how the data is stored and used afterward. Yelp Email Scraper returns only data that any logged-out visitor already sees. If you operate in the EU, GDPR applies to storing and using emails you collect: keep records you can justify and delete them when asked. Anti-spam rules (such as CAN-SPAM) still apply to outreach — the Actor finds public emails, it does not grant permission to contact them. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Yelp Email Scraper return?

The network, keyword, page title, description, page URL and email for every match. See [the data fields section](#what-data-can-i-extract-with-yelp-email-scraper).

#### Does Yelp Email Scraper require a Yelp account or login?

No. Only public pages are read and no Yelp credentials are ever requested.

#### Can I get emails of any domain, not only Gmail?

Yes. Set `emailDomains` to the domains you want (for example `@outlook.com` or your company domain), or to `[]` to accept any domain.

#### Can I search many keywords at once?

Yes. `keywords` takes a list; up to 3 keywords are processed at the same time, each with its own `maxEmails` budget. It also works well as a yelp business owner email finder across a whole category list.

#### Does Yelp Email Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Yelp Email Scraper is available as an MCP tool. Add the Apify MCP server (`claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/yelp-email-scraper"`) in Claude Code, Cursor or Windsurf. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Yelp Email Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names. No HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when Yelp changes its layout or updates its anti-bot system?

This actor is actively maintained. When Yelp changes, the actor is updated and your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Yelp Email Scraper without managing proxies or browser infrastructure?

Yes. Proxy rotation and retries run on the actor's side — plain HTTP requests, no browser to maintain. You send one request and get structured JSON back.

#### Which Yelp Email Scraper fields work best for AI training data and RAG indexing?

For RAG: the page title and description, since they carry the surrounding public text. For training data: use the network and keyword fields as categorical labels. All fields are typed strings — no normalization needed.

***

### Related scrapers

Yelp Email Scraper is part of the same Google-SERP email-lookup family as these actors, built on the same engine for other platforms:

| Scraper | What it extracts |
| --- | --- |
| Zillow Email Scraper | Email addresses shown on public Zillow agent profiles and listings, by keyword |
| Hotels.com Email Scraper | Email addresses shown on public Hotels.com listing pages, by keyword |

***

### Your feedback

Found a bug or missing a field in this yelp local business email lookup? Let us know through the Issues tab on this actor's Apify Store page. Our team reads every report and ships fixes.

# Actor input Schema

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

One or more keywords (e.g. restaurant, salon, plumber). Each keyword is searched separately on public Yelp business pages and gets its own budget of maxEmails; every email found is returned with the keyword that found it. Duplicate keywords are removed.

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

Optional city or region (e.g. London, New York, Dubai), searched as an exact phrase so results mention this place. Leave empty to search worldwide.

## `emailDomains` (type: `array`):

Keep only emails of these domains, e.g. @gmail.com, @outlook.com, @hotmail.com, @icloud.com or a business domain like @yourcompany.com (the @ is optional, case does not matter). The domains also sharpen the search. When a result shows several emails, the first matching one is used. Leave empty to accept emails of any domain (fewer results then contain an email).

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

How many emails to collect per keyword (1 - 100,000). A keyword stops earlier when no more public results with an email are available. Free plan users are limited to 20 items per run in total (across all keywords) and 200 items per month; paid plans have no limit.

## `engine` (type: `string`):

Processing engine. Only 'legacy' is available.

## `proxyConfiguration` (type: `object`):

How the actor connects. Leave it as it is and a suitable Apify proxy is selected automatically. When a page is blocked the actor retries with a fresh proxy session (up to 3 attempts per page). You can also choose your own Apify proxy groups or custom proxy URLs.

## Actor input object example

```json
{
  "keywords": [
    "restaurant"
  ],
  "location": "",
  "emailDomains": [
    "@gmail.com"
  ],
  "maxEmails": 10,
  "engine": "legacy",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset rows: network, keyword, title, description, url, email.

# 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": [
        "restaurant"
    ],
    "emailDomains": [
        "@gmail.com"
    ],
    "maxEmails": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/yelp-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": ["restaurant"],
    "emailDomains": ["@gmail.com"],
    "maxEmails": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/yelp-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": [
    "restaurant"
  ],
  "emailDomains": [
    "@gmail.com"
  ],
  "maxEmails": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fastdataapi/yelp-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fastdataapi/yelp-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/2uQ69bRTtONDm7hMM/builds/OHrG1NpKlxuzDV5sj/openapi.json
