# Google Maps Email Extractor (`crawlerbros/google-maps-email-extractor`) Actor

Extract business emails, phone numbers, and social media links from Google Maps. Search for businesses by query, get contact details, addresses, ratings, and websites enriched with email addresses.

- **URL**: https://apify.com/crawlerbros/google-maps-email-extractor.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Real estate, Other, Developer tools
- **Stats:** 108 total users, 20 monthly users, 98.4% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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?

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

## Google Maps Email Extractor

Extract business emails, phone numbers, social media links, and contact details from Google Maps. Search for any type of business in any location and get enriched lead data including email addresses scraped from business websites.

### What does Google Maps Email Extractor do?

This actor searches Google Maps for businesses matching your queries, extracts detailed business information (name, address, phone, rating, website), and then visits each business website to find email addresses and social media profiles. Perfect for lead generation, sales prospecting, and market research.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQueries` | string\[] | Yes | `["restaurants in New York"]` | Search terms for Google Maps. Each query is searched separately. |
| `maxPlacesPerSearch` | integer | No | 20 | Maximum businesses to extract per search query (1-100). |
| `language` | string | No | `"en"` | Language code for Google Maps results (e.g., `en`, `es`, `fr`). |
| `deepEnrichment` | boolean | No | `true` | Visit business websites to extract emails and social links. Disable for faster Google Maps-only data. |

### Example Input

```json
{
    "searchQueries": [
        "restaurants in New York",
        "dentists in Los Angeles"
    ],
    "maxPlacesPerSearch": 20,
    "language": "en",
    "deepEnrichment": true
}
```

### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `title` | string | Business name |
| `categoryName` | string | Primary business category |
| `address` | string | Full address |
| `phone` | string | Phone number |
| `website` | string | Business website URL |
| `totalScore` | number | Google Maps rating (1-5) |
| `reviewsCount` | integer | Number of Google reviews |
| `placeId` | string | Google Place ID |
| `url` | string | Google Maps URL |
| `location` | object | `{lat, lng}` coordinates |
| `priceLevel` | string | Price range (e.g., `$$`) |
| `plusCode` | string | Google Plus Code |
| `emails` | string\[] | Email addresses found on website |
| `socialLinks` | object | Social media profile URLs |
| `scrapedAt` | string | ISO 8601 timestamp |

#### Social Links Object

| Field | Description |
|-------|-------------|
| `socialLinks.facebook` | Facebook page URL |
| `socialLinks.instagram` | Instagram profile URL |
| `socialLinks.linkedin` | LinkedIn company/profile URL |
| `socialLinks.twitter` | Twitter/X profile URL |
| `socialLinks.youtube` | YouTube channel URL |
| `socialLinks.tiktok` | TikTok profile URL |

### Example Output

```json
{
    "title": "Joe's Pizza",
    "categoryName": "Pizza restaurant",
    "address": "7 Carmine St, New York, NY 10014",
    "phone": "+1 212-366-1182",
    "website": "https://www.joespizzanyc.com/",
    "totalScore": 4.4,
    "reviewsCount": 12500,
    "placeId": "ChIJd3dF_VBZwokRAAFm3WMspbk",
    "url": "https://www.google.com/maps/place/Joe's+Pizza/...",
    "location": {
        "lat": 40.7306,
        "lng": -74.0022
    },
    "priceLevel": "$$",
    "plusCode": "P295+HJ New York",
    "emails": ["info@joespizzanyc.com"],
    "socialLinks": {
        "facebook": "https://facebook.com/joespizzanyc",
        "instagram": "https://instagram.com/joespizzanyc",
        "linkedin": null,
        "twitter": "https://twitter.com/joespizzanyc",
        "youtube": null,
        "tiktok": null
    },
    "scrapedAt": "2026-03-16T12:00:00+00:00"
}
```

### How It Works

1. **Search** — Searches Google Maps for businesses matching your queries
2. **Extract** — Visits each business listing to get name, address, phone, rating, website, and more
3. **Enrich** — Scans each business website for email addresses and social media links
4. **Output** — Saves all data to the dataset in a flat, easy-to-use format

### Use Cases

- **Lead generation** — Build targeted contact lists for sales outreach
- **Sales prospecting** — Find business emails and phone numbers by industry and location
- **Market research** — Analyze businesses, ratings, and categories in specific areas
- **Competitor analysis** — Map competitors and their online presence
- **Local SEO** — Audit business listings and contact information

### Tips

- **Search query format**: Use natural language like "restaurants in New York" or "plumbers near Chicago, IL"
- **Specific queries work better**: "Italian restaurants in Manhattan" yields more relevant results than just "restaurants"
- **Deep enrichment**: Disable `deepEnrichment` if you only need Google Maps data (name, phone, address, rating) — this makes the scraper significantly faster
- **Deduplication**: When using multiple queries that may overlap, results are automatically deduplicated by Google Place ID

### Limitations

- Google Maps shows a maximum of ~120 businesses per search area
- Some businesses don't have websites, so email extraction won't work for those
- Email addresses are extracted from publicly visible website content only
- Social media links are found by scanning website HTML for known social media URLs
- Results depend on Google Maps' search relevance for your query

### FAQ

**How many businesses can I scrape per run?**
You can scrape up to 100 businesses per search query. Use multiple queries to cover more businesses.

**Does this actor need cookies or login?**
No. Google Maps search results are publicly accessible without authentication.

**Why are some email fields empty?**
Not all businesses have websites, and not all websites display email addresses publicly. The scraper checks the main page and common contact pages (e.g., /contact, /about).

**Can I search in languages other than English?**
Yes, set the `language` parameter to your preferred language code (e.g., `es` for Spanish, `fr` for French).

**How long does a typical run take?**
A search for 20 businesses with email enrichment typically takes 2-5 minutes. Without enrichment, it's about 1-2 minutes.

### 🗺️ Complete Google Maps Scraper Suite

This actor is part of a comprehensive Google Maps data extraction toolkit by **crawlerbros**. All actors run on the free Apify plan, use no proxy by default, and return clean, structured data.

| Actor | What it does |
|---|---|
| 🏢 [Google Maps Business Scraper](https://apify.com/crawlerbros/google-maps-scraper) | Extract business data — name, address, phone, website, rating, reviews, hours, amenities |
| ⭐ [Google Maps Reviews Scraper](https://apify.com/crawlerbros/google-maps-reviews-scraper) | Scrape reviews with reviewer Local Guide level, photos, mentioned items, owner replies |
| 📸 [Google Maps Photos Scraper](https://apify.com/crawlerbros/google-maps-photos) | Extract all photos from any place — max-resolution URLs, contributor info, categories |
| 🕐 [Google Maps Business Hours Scraper](https://apify.com/crawlerbros/google-maps-business-hours) | Full 7-day hours, timezone, current local time, next open/close, holiday hours |
| 📊 [Google Maps Popular Times Scraper](https://apify.com/crawlerbros/google-maps-popular-times) | Busy hours histogram for all 7 days + current busyness + typical visit time |
| 🗺️ [Google Maps Area Scanner](https://apify.com/crawlerbros/google-maps-area-scanner) | Geographic grid scanning — bypass the 120-place limit with bounding box / circle / polygon |
| 💼 [Google Maps Leads Scraper](https://apify.com/crawlerbros/google-maps-leads) | B2B lead generation with email + phone enrichment, US states + global countries |
| 🤖 [Google Maps MCP Server](https://apify.com/crawlerbros/google-maps-mcp) | Unified MCP server combining search + reviews for AI assistants |
| 🧭 [Google Maps Directions Scraper](https://apify.com/crawlerbros/google-maps-directions) | A→B routing — distance, duration, traffic, route alternatives for driving/walking/transit |
| 📍 [Google Maps Geocoding Scraper](https://apify.com/crawlerbros/google-maps-geocoding) | Bidirectional geocoding — address ↔ coordinates, with address components |
| 🔗 [Google Maps Similar Places Scraper](https://apify.com/crawlerbros/google-maps-similar-places) | "People also search for" / related place discovery — competitor & alternative finder |
| 🍽️ [Google Maps Menu Scraper](https://apify.com/crawlerbros/google-maps-menu) | Restaurant menu items, prices, descriptions, photos |
| 📌 [Google Maps Nearby Scraper](https://apify.com/crawlerbros/google-maps-nearby) | Find places near a coordinate point — lightweight POI search by category |
| 📋 [Google Maps Place List Scraper](https://apify.com/crawlerbros/google-maps-place-list) | Extract Google's curated "Top X in Y" lists — best hotels/restaurants/things to do |
| 🌍 [Google Maps Timezone Scraper](https://apify.com/crawlerbros/google-maps-timezone) | IANA timezone + current local time from coordinates |

# Actor input Schema

## `searchQueries` (type: `array`):

Search terms for Google Maps (e.g., 'restaurants in New York', 'dentists near Los Angeles'). Each query is searched separately.

## `maxPlacesPerSearch` (type: `integer`):

Maximum number of businesses to extract per search query.

## `extractEmailsFromWebsite` (type: `boolean`):

Visit each business website to extract email addresses and social media links. Disable to get only Google Maps data (faster).

## `maxEmailsPerWebsite` (type: `integer`):

Maximum number of email addresses to extract per business website.

## `language` (type: `string`):

Language for Google Maps interface and results.

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

Proxy settings. Apify Proxy AUTO is recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee shops in Austin TX"
  ],
  "maxPlacesPerSearch": 3,
  "extractEmailsFromWebsite": true,
  "maxEmailsPerWebsite": 5,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset with business leads including names, addresses, phones, emails, social links, ratings, and Google Maps metadata.

# 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 = {
    "searchQueries": [
        "coffee shops in Austin TX"
    ],
    "maxPlacesPerSearch": 3,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/google-maps-email-extractor").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 = {
    "searchQueries": ["coffee shops in Austin TX"],
    "maxPlacesPerSearch": 3,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/google-maps-email-extractor").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 '{
  "searchQueries": [
    "coffee shops in Austin TX"
  ],
  "maxPlacesPerSearch": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call crawlerbros/google-maps-email-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/google-maps-email-extractor"
        }
    }
}

```

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/q1tmkzD2CKqWfHEIm/builds/uhqby8A4K6MdQFrTt/openapi.json
