# Google Maps Email Scraper  📧⚡📍 (`contactminerlabs/google-maps-email-scraper`) Actor

🔍 Scrape Google Maps Emails

Enter your search parameters to collect business contact emails from Google Maps listings, along with business name, category, address, phone number, website URL & location info ✉️📊

Perfect for local lead generation, business outreach & contact enrichment⚡🧩

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

## Pricing

from $0.00005 / actor start

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

### 📍 Google Maps Email Scraper – Business Emails, Phones & Socials from Google Maps, Pay Only per Email 📧

**Google Maps Email Scraper** finds businesses on Google Maps and extracts **their public business email addresses – with the business name, category, phone, website, address, rating, reviews and social profiles (Facebook, Instagram, LinkedIn…)** in minutes. Type what you would search in Google Maps (`plumber in austin tx`, `dentiste à lyon`), and get a clean, deduplicated list of business leads with emails.

Perfect for **agencies, SaaS and B2B sales teams, marketers, recruiters, local service providers and freelancers** looking for local business leads with a real email address – not just a phone number.

### ✨ Why this Google Maps Email Scraper?

- 💸 **Pay only for emails** – you pay per email found, never for places without an email. No add-ons, no "contact enrichment" fee
- 🗺️ **Whole city coverage, automatically** – Google Maps shows about 120 places per search. With `<business> in <place>`, the actor splits the area into zones by itself and covers the whole city and its suburbs. No coordinates or polygons to draw
- 🎯 **The right email first** – emails are ranked: the business's own domain (`info@smithplumbing.com`) first, then free mailboxes (`smithplumbing@gmail.com`). Web agency, theme and tracking emails ("website by…", `sentry`, `wixpress`) are dropped
- 🔎 **Reads the contact pages** – home page, then the contact, about and legal pages (contact, kontakt, contacto, impressum, mentions légales…) until the business email is found
- 📇 **Rich lead data** – business name, category, phone, website, full address, city, rating, reviews, coordinates, Google Maps link, photo, Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok
- 🏷️ **Email type** – each email is marked `business domain`, `free mailbox` or `other`, and where it was found (`website` or `contact page`)
- 🌍 **Any country, any language** – `restaurant in toronto`, `zahnarzt in berlin`, `abogado en madrid`, `dentiste à lyon`
- 🔁 **No duplicates** – every email appears once, chains with one website are read once
- 🛑 **Stops exactly at your target** – and stops automatically when no more emails are available

### 🔍 What does it extract?

| Field | Description |
| --- | --- |
| `email` | Business email found on the business website |
| `emailDomain` | Domain of the email |
| `emailType` | `business domain`, `free mailbox` or `other` |
| `emailFoundOn` | `website` (home page) or `contact page` |
| `businessName` | Business name on Google Maps |
| `category` / `categories` | Main category and all categories |
| `phone` | Phone number |
| `website` | Business website (tracking parameters removed) |
| `address` / `city` / `countryCode` | Address of the business |
| `rating` / `reviewsCount` | Google rating and number of reviews |
| `latitude` / `longitude` | Coordinates |
| `placeId` / `googleMapsUrl` | Google Maps place id and link |
| `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok` | Social profiles linked from the website |
| `searchQuery` | The search that found the business |
| `thumbnail` | Photo of the place |
| `scrapedAt` | Date and time of extraction |

### 🛠 How to scrape emails from Google Maps (3 steps)

1. **Add one or more searches** with **+ Add** – e.g. `plumber in austin tx`, `dentist in miami fl`, `restaurant in toronto`
2. **Keep `*`** in email domains to get every business email (or restrict to `@gmail.com`…)
3. **Set the maximum number of emails** and click **Start**

Download your list in **JSON, CSV, Excel, XML or HTML**, or send it to your CRM through the Apify API and integrations.

### 💡 Tips to get more emails

🔹 **Use "in"**: `roofer in dallas tx` covers all of Dallas automatically. Without "in" (`roofer dallas`), only Google's first ~120 places are read
🔹 **Be specific with the place**: city + state or country (`london uk`, `london on`, `paris france`)
🔹 **Businesses with websites have emails**: dentists, lawyers, accountants, contractors, roofers, real estate agencies, clinics, gyms, wedding venues, hotels and B2B services give the best results
🔹 **Several searches in one run**: `dentist in miami fl`, `dentist in orlando fl`, `dentist in tampa fl`
🔹 **Synonyms**: `plumber in …` + `plumbing contractor in …` + `drain cleaning in …`

### 🎯 Use cases

📣 **Agencies** – find local businesses for web design, SEO, ads and social media services
💻 **SaaS & B2B sales** – build targeted outreach lists by industry and city
🧑‍💼 **Recruiting** – reach clinics, firms and shops that hire
🤝 **Partnerships & suppliers** – find distributors, retailers and service partners
📊 **Market research** – list every business of a category in an area, with rating and reviews

### 📥 Input

Input example:

```
{
  "KEYWORD": ["plumber in austin tx", "dentist in miami fl"],
  "DOMAIN_EMAIL": ["*"],
  "MAX_ITEMS": 200
}
```

| Field | Type | Description |
| --- | --- | --- |
| `KEYWORD` | string\[] | 🔍 Google Maps searches, best as `<business> in <place>` (one per line, click + Add) |
| `DOMAIN_EMAIL` | string\[] | 📧 `*` for every email (recommended), or specific domains (`@gmail.com`) |
| `MAX_ITEMS` | integer | 🔢 Number of unique emails to collect |

### 🧾 Output example

```
{
  "email": "info@smithplumbing.com",
  "emailDomain": "smithplumbing.com",
  "emailType": "business domain",
  "emailFoundOn": "contact page",
  "businessName": "Smith Plumbing & Drains",
  "category": "Plumber",
  "categories": ["Plumber", "Drainage service"],
  "phone": "(512) 555-0142",
  "website": "https://smithplumbing.com/",
  "address": "1200 Example Rd, Austin, TX 78701",
  "city": "Austin, TX",
  "countryCode": "US",
  "rating": 4.8,
  "reviewsCount": 1260,
  "latitude": 30.2672,
  "longitude": -97.7431,
  "placeId": "ChIJ_example_place_id",
  "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ_example_place_id",
  "facebook": "https://www.facebook.com/smithplumbing",
  "instagram": "https://instagram.com/smithplumbing",
  "linkedin": null,
  "searchQuery": "plumber in austin tx",
  "platform": "Google Maps",
  "thumbnail": "https://lh3.googleusercontent.com/example",
  "scrapedAt": "2026-10-27T11:30:12.213Z"
}
```

### ❓ FAQ

**Where do the emails come from?**
Google Maps does not show emails. The actor reads the public website of each business found on Google Maps (home page, then contact / about / legal pages) and keeps the business email published there. Emails are never guessed or generated.

**Why did I get fewer emails than requested?**
Only businesses with their own website can give an email, and not every website shows one. Restaurants and small shops often have no email; professional services (dentists, lawyers, contractors, agencies) usually do. Use `<business> in <place>`, bigger areas, or add more searches.

**Do I pay for places without an email?**
No. You only pay for the emails collected.

**Can I get only Gmail addresses?**
Yes: put `@gmail.com` in email domains.

**Is it legal?**
The actor only collects business contact information that businesses publish themselves on Google Maps and on their own websites. It does not log in and does not access private data. You are responsible for using the data in compliance with anti-spam and privacy laws (GDPR, CAN-SPAM, CASL…): send relevant, professional messages, identify yourself and always include an unsubscribe option.

**Can I schedule it?**
Yes – use Apify Schedules to collect new leads regularly and send them automatically to Google Sheets, a CRM or a webhook.

### 💰 Pricing

Simple pay-per-result model: you only pay for the emails you collect.

**Price: $9.99 per 1,000 emails** 💵

### ⚠️ Disclaimer

This tool is **not affiliated with, endorsed by, or sponsored by Google**. Data comes from publicly available Google Maps listings and business websites.

### 🔗 Related actors

- [Instagram Email Scraper – Advanced, Cheapest & Reliable 📧⚡📷](https://apify.com/contactminerlabs/instagram-email-scraper---advanced-cheapest-reliable)
- [Facebook Email Scraper – Advanced, Cheapest & Reliable 📧⚡📷](https://apify.com/contactminerlabs/facebook-email-scraper---advanced-cheapest-reliable)
- [Twitter Email Scraper – Advanced, Cheapest & Reliable 📧⚡📷](https://apify.com/contactminerlabs/twitter-email-scraper---advanced-cheapest-reliable)
- [Discord Email Scraper – Advanced, Cheapest & Reliable 📧⚡📷](https://apify.com/contactminerlabs/discord-email-scraper---advanced-cheapest-reliable)
- [LinkedIn Email Scraper – Advanced, Cheapest & Reliable 📧⚡📷](https://apify.com/contactminerlabs/linkedin-email-scraper---advanced-cheapest-reliable)
- [Substack Email Scraper – Advanced, Cheapest & Reliable 📧⚡](https://apify.com/contactminerlabs/substack-email-scraper---advanced-cheapest-reliable)

### 📫 Support

😊 Leave us a ⭐⭐⭐⭐⭐ review if you like the Google Maps Email Scraper!
🌍 Questions, custom needs or issues? Contact us through Apify or via [ContactMinerLabs 🌩️](https://apify.com/contactminerlabs).

# Actor input Schema

## `KEYWORD` (type: `array`):

What you would type in Google Maps: a business type + "in" + a place ("plumber in austin tx", "dentiste à lyon", "restaurant in toronto"). With "in <place>", the whole area is covered automatically (beyond Google's 120-result limit). Click "+ Add" to add several searches.

## `DOMAIN_EMAIL` (type: `array`):

Keep "\*" to collect every business email (own domains like info@business.com, Gmail...). Or restrict to specific domains (e.g. @gmail.com).

## `MAX_ITEMS` (type: `integer`):

Number of unique emails to collect. The run stops automatically once this number is reached.

## Actor input object example

```json
{
  "KEYWORD": [
    "plumber in austin tx",
    "dentist in miami fl"
  ],
  "DOMAIN_EMAIL": [
    "*"
  ],
  "MAX_ITEMS": 50
}
```

# Actor output Schema

## `overview` (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 = {
    "KEYWORD": [
        "plumber in austin tx",
        "dentist in miami fl"
    ],
    "DOMAIN_EMAIL": [
        "*"
    ],
    "MAX_ITEMS": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("contactminerlabs/google-maps-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 = {
    "KEYWORD": [
        "plumber in austin tx",
        "dentist in miami fl",
    ],
    "DOMAIN_EMAIL": ["*"],
    "MAX_ITEMS": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("contactminerlabs/google-maps-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 '{
  "KEYWORD": [
    "plumber in austin tx",
    "dentist in miami fl"
  ],
  "DOMAIN_EMAIL": [
    "*"
  ],
  "MAX_ITEMS": 50
}' |
apify call contactminerlabs/google-maps-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,contactminerlabs/google-maps-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/GzjOYQU8rz6wMoqTj/builds/OFe2abZpcbaGWgzDj/openapi.json
