# Zomato Email Scraper - Domain Filter & Deduplication (`insightflow/zomato-email-scraper-powerful-and-intelligent`) Actor

🍜 Zomato Email Scraper — turn Zomato searches into a clean restaurant email list. Filter by keyword, location and domain, merge alias duplicates and decode hidden addresses. 🇮🇳 For restaurant tech vendors & delivery apps.

- **URL**: https://apify.com/insightflow/zomato-email-scraper-powerful-and-intelligent.md
- **Developed by:** [InsightFlow](https://apify.com/insightflow) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Zomato Email Scraper

**Zomato Email Scraper** helps you collect publicly available email addresses from Zomato using keywords and filters you choose. It’s a practical Zomato email extractor and Zomato lead generation tool for marketers, analysts, and researchers who want faster business contact extraction without manual browsing. 🚀

### What Does Zomato Email Scraper Do? 🤖

Zomato Email Scraper scrapes public Zomato pages using your keywords, optional location targeting, and email-domain filters to find relevant contacts. During a run, it collects profile titles, descriptions, URLs, and matching email addresses, then exports the results to your Apify dataset in a structured format. This makes Zomato data extraction much easier than manually checking listings one by one. It’s useful for Zomato contact scraper workflows, restaurant email scraper tasks, and broader restaurant directory scraper projects. ✅

### What Can Zomato Email Scraper Extract? 📊

This actor captures a focused set of fields designed for lead generation and research. Each row represents a scraped lead from Zomato, with the keyword that surfaced it, the profile title, supporting description text, the page URL, and the email address found in publicly available data. Great for Zomato leads extraction and local business email scraper use cases. 📧

| Data Type | Field Name | Description |
|---|---|---|
| Discovery | `keyword` | The keyword that led to this result |
| Identity | `title` | The page title or profile name |
| Context | `description` | The visible description text associated with the result |
| Navigation | `url` | Direct link to the Zomato page |
| Contact | `email` | Email address found in the public page content |

#### Key Features of Zomato Email Scraper ⚡

- ✅ **Keyword-Driven Search:** Use your own keywords to focus on the most relevant Zomato listing scraper results and improve lead quality.
- 📍 **Location Targeting:** Add a location filter to narrow results to a specific city, region, or market.
- 📧 **Custom Domain Filtering:** Limit results to selected email domains such as `@gmail.com` or `@yahoo.com` for more targeted outreach.
- 🔄 **Built-In Proxy Support:** Designed for reliable scraping of publicly available sources with built-in proxy support for steadier runs.
- 📊 **Structured Dataset Output:** Every result is saved in a clean dataset that’s easy to review, export, or analyze.
- 💾 **Progress Saving:** The actor saves progress during the run so you can resume more easily if a run is interrupted.
- ⚙️ **Configurable Limits:** Set `maxEmails` to control how many emails you want collected per run and manage scraping time.
- 🚀 **Scalable Automation:** Built for web scraping tools workflows that need repeatable, keyword-based data collection at scale.

### How to Use Zomato Email Scraper 🚀

1. **Open the Actor** — Find **Zomato Email Scraper** in Apify Store.
2. **Add Keywords** — Enter one or more keywords to guide the search.
3. **Set Optional Filters** — Add a location and custom email domains if you want tighter results.
4. **Choose a Limit** — Set `maxEmails` to control how many results the actor should collect.
5. **Run the Actor** — Start the task and monitor live logs in the Apify Console.
6. **Review Results** — Open the Dataset tab to inspect and export the scraped leads.
7. **Reuse the Data** — Import the output into your CRM, spreadsheet, or lead generation workflow.

*No coding required.*

### Zomato Email Scraper Output Format 📦

The actor saves results to your Apify dataset in structured JSON format, ready for export or downstream analysis.

#### ⬇️ Input Example

```json
{
  "keywords": ["manager", "founder"],
  "location": "",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 20
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | Array | ✅ Yes | `["manager", "founder"]` | A list of keywords or queries to search for. |
| `location` | String | No | `""` | Location to filter search results. |
| `customDomains` | Array | No | `["@gmail.com", "@yahoo.com"]` | List of custom email domains to match in the extracted results. |
| `maxEmails` | Integer | No | `20` | Maximum number of emails to collect before the actor stops. |

#### ⬆️ Output Example

```json
[
  {
    "keyword": "restaurant manager",
    "title": "Cafe Delhi Heights",
    "description": "Casual dining restaurant serving Indian and continental dishes",
    "url": "https://www.zomato.com/ncr/cafe-delhi-heights-saket",
    "email": "contact@cafedelhiheights.com"
  }
]
```

| Field | Label | Format | Description |
|---|---|---|---|
| `keyword` | Keyword | text | The keyword that produced the result. |
| `title` | Title | text | The page title or profile name. |
| `description` | Description | text | The visible description text for the result. |
| `url` | Url | link | Direct URL to the Zomato page. |
| `email` | Email | text | Publicly available email address found in the result. |

### 🎯 Use Cases of Zomato Email Scraper

**B2B Lead Generation:** Build targeted lists of restaurant and hospitality contacts from Zomato profiles for outreach campaigns, partnerships, and sales prospecting.

**Email Marketing Campaigns:** Collect relevant contact details for newsletters, promotions, and segmented email outreach in the restaurant niche.

**Market Research:** Use Zomato data extraction to study businesses, locations, and keyword patterns across different regions and categories.

**CRM Enrichment:** Add public contact details from Zomato to existing records for richer customer profiles and stronger business contact extraction.

**Local Business Prospecting:** Find restaurant owners, managers, and decision-makers faster with a restaurant email scraper that reduces manual work. 🔎

### How Much Will Zomato Email Scraper Cost You? 💰

This actor uses Apify’s standard pay-per-use model, so your cost depends on the run and the amount of data collected. For larger jobs, use `maxEmails` to cap the number of results and keep spending predictable. If you’re testing Zomato automation workflows, start small, then scale up as needed. You can also monitor usage in the Apify Console while the run is in progress.

### Is It Legal to Scrape Zomato? ⚖️

This actor works with publicly available data only, meaning it does not require private access or hidden accounts. Scraping public web data is generally lawful, but you are responsible for following applicable laws and Zomato’s terms, including privacy and anti-spam rules where relevant. Use the results for legitimate research, marketing, or lead generation purposes. For questions or requests, contact <insightflowofficial@gmail.com>.

### Zomato Email Scraper Input Parameters 📋

```json
{
  "keywords": ["manager", "founder"],
  "location": "",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 20
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | Array | ✅ Yes | `["manager", "founder"]` | A list of keywords or queries to search for. |
| `location` | String | No | `""` | Location to filter search results. |
| `customDomains` | Array | No | `["@gmail.com", "@yahoo.com"]` | Email domains you want the actor to match while collecting leads. |
| `maxEmails` | Integer | No | `20` | Maximum number of emails to collect. The actor stops once this limit is reached. |

### During the Actor Run ⏱️

You’ll see live logs in the Apify Console while the actor runs, including progress updates as it processes your keywords and filters. Results are saved incrementally, so you can inspect the dataset before the run finishes. Run duration depends on how broad your keywords are and how many emails you allow with `maxEmails`. If results are limited, try broader terms, more domains, or a wider location scope. 🔁

### Final Note ✉️

Start collecting Zomato emails in minutes with the **Zomato Email Scraper** — a simple, scalable way to automate restaurant lead generation and public contact extraction. Questions or feedback? Reach out at <insightflowofficial@gmail.com>.

### FAQ — Zomato Email Scraper ❓

#### How does the Zomato Email Scraper find emails?

It uses your keywords and filters to surface public Zomato pages, then extracts email addresses that are openly visible in the page content. It does not guess emails or fill in missing contact details.

#### What types of Zomato profiles can I scrape?

You can scrape public Zomato pages that include visible contact information in the accessible page content. If a page does not show an email, it will not produce one.

#### What makes the Zomato Email Scraper useful for lead generation?

It speeds up business contact extraction by turning a manual search process into a repeatable workflow. That makes it especially helpful for marketers, researchers, and anyone building restaurant or local business lead lists.

#### Can I use this actor as a restaurant email scraper?

Yes. It’s well suited for restaurant email scraper tasks, especially when you want to find contacts from public Zomato pages using keywords and optional location filtering.

#### How much does it cost to use the Zomato Email Scraper?

Costs depend on your Apify usage and the size of the run. Use `maxEmails` to set a clear cap and keep each run aligned with your budget.

#### How do I get better results from Zomato data extraction?

Use more specific keywords, try related terms, add relevant email domains, and adjust the location filter if needed. Broader inputs often help when your first run returns fewer results than expected.

#### Is the Zomato Email Scraper good for Zomato automation?

Yes. It’s designed for repeatable Zomato automation workflows where you need structured, exportable data without manual searching.

#### What if I need help or want a custom feature?

If you need support, feedback, or a tailored solution, contact <insightflowofficial@gmail.com>.

### 🆘 Support & Feedback

Found a bug, have a question, or need a custom feature for the Zomato Email Scraper?

- 🐞 **Bug Reports:** Share the issue with our team so we can investigate it
- ✨ **Feature Requests:** Send ideas for new filters, output improvements, or workflow enhancements
- 📧 **Email:** <insightflowofficial@gmail.com>

### MX Lookup

Every address is checked at the DNS level: the actor resolves the mail domain's
MX records and reports what it found.

| Field | Meaning |
| --- | --- |
| `mxFound` | `true` when the domain publishes at least one mail server |
| `mxHost` | The lowest-preference (primary) mail server |
| `mxRecords` | Every MX record found, in preference order |
| `mxProvider` | Who runs the mail: Google Workspace, Microsoft 365, Zoho, Proton, ... |
| `mxStatus` | `found`, `no_records`, `no_such_domain`, `timeout`, `error`, or `skipped` |

**Inputs**

- **MX Lookup** - turn the check on or off (default: on).
- **Only keep contacts whose domain has an MX record** - drop unreachable domains.
  Only a definite negative (`no_records` / `no_such_domain`) drops a contact; a
  timeout or resolver error is treated as unknown and the lead is kept.
- **MX lookup timeout (seconds)** - per-domain DNS budget, 1-15s.

This is a domain-level check. It confirms the domain can receive mail; it does
not verify that an individual mailbox exists.

# Actor input Schema

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

A list of keywords or queries to search for.

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

Location to filter search results.

## `customDomains` (type: `array`):

List of custom email domains

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

Maximum number of emails to collect. The scraper will stop once this limit is reached. Setting a higher limit allows for more potential results but doesn't guarantee reaching that number. This helps save costs by controlling scraping time.

## `minLeadScore` (type: `integer`):

Drop any contact whose Lead Score (0-100) falls below this. Leave at 0 for no filter.

## `mxLookup` (type: `boolean`):

Resolve each address's domain to its mail servers. Adds the resolved MX hosts and the mail provider (Google Workspace, Microsoft 365, ...) to every result, and feeds the Lead Score. DNS-level only - it confirms the domain can receive mail, not that the individual mailbox exists.

## `requireMxRecord` (type: `boolean`):

Drop any contact whose domain provably accepts no mail. A lookup that times out or errors is treated as unknown and kept, so a DNS hiccup never silently deletes good leads.

## `mxTimeoutSecs` (type: `integer`):

How long to wait for each DNS answer. Clamped to 1-15 seconds.

## Actor input object example

```json
{
  "keywords": [
    "manager",
    "founder"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "minLeadScore": 0,
  "mxLookup": true,
  "requireMxRecord": false,
  "mxTimeoutSecs": 3
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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": [
        "manager",
        "founder"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("insightflow/zomato-email-scraper-powerful-and-intelligent").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": [
        "manager",
        "founder",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("insightflow/zomato-email-scraper-powerful-and-intelligent").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": [
    "manager",
    "founder"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ]
}' |
apify call insightflow/zomato-email-scraper-powerful-and-intelligent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insightflow/zomato-email-scraper-powerful-and-intelligent"
        }
    }
}

```

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/7d48ztZPmXSJtncdk/builds/NNc9UKDmWmakSfSOt/openapi.json
