# Google Maps Leads Scraper — Emails & Socials (`autonade/google-maps-leads-scraper`) Actor

Scrape Google Maps businesses by search query and enrich each with emails, phone numbers, and social links. Pay-per-result lead generation.

- **URL**: https://apify.com/autonade/google-maps-leads-scraper.md
- **Developed by:** [Hussain Siddique](https://apify.com/autonade) (community)
- **Categories:** AI, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 enriched lead results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Leads Scraper — Emails & Socials 🗺️📧

Turn any Google Maps search into a clean, ready-to-use B2B lead list. This Actor scrapes
businesses by search query and then visits each website to pull **emails, phone numbers, and
social profiles** — perfect for cold email, WhatsApp outreach, and sales prospecting.

### ✨ Features

- 🔎 **Search by anything** — "Dentists in London", "Real estate agents in Dubai", etc.
- 📧 **Email + social enrichment** — crawls each business site (homepage + contact/about pages)
- 🏷️ **Rich business data** — name, category, address, phone, rating, review count, Maps URL
- 🛡️ **Block-resistant** — human-like pacing, retry with backoff, captcha/consent handling
- 🌐 **Residential proxy support** — reliable runs at scale via Apify Proxy
- 📦 **Clean JSON output** — one structured record per business, ready for any CRM

### 📥 Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array of strings | — (required) | Google Maps searches, e.g. `["Dentists in London"]` |
| `maxResultsPerQuery` | integer | `50` | Businesses per query (Google returns ~120 max per search) |
| `enrichEmailsAndSocials` | boolean | `true` | Visit websites to extract emails, phones, socials |
| `language` | string | `en` | Maps interface language (`hl`) code |
| `proxyConfiguration` | proxy | Residential | Apify Proxy — Residential recommended |

#### Example input

```json
{
  "searchQueries": ["Dentists in London", "Coffee shops in Berlin"],
  "maxResultsPerQuery": 50,
  "enrichEmailsAndSocials": true,
  "language": "en",
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### 📤 Output

Each result is pushed to the dataset in this shape:

```json
{
  "query": "Dentists in London",
  "name": "Harley Street Dental",
  "category": "Dentist",
  "address": "123 Harley St, London",
  "phone": "+44 20 7123 4567",
  "website": "https://harleystreetdental.co.uk",
  "rating": 4.8,
  "reviewsCount": 124,
  "emails": ["info@harleystreetdental.co.uk"],
  "primaryEmail": "info@harleystreetdental.co.uk",
  "socials": {
    "instagram": "https://instagram.com/harleydental",
    "facebook": "https://facebook.com/harleydental",
    "linkedin": "https://linkedin.com/company/harleydental"
  },
  "googleMapsUrl": "https://maps.google.com/?cid=...",
  "scrapedAt": "2026-08-24T07:30:00.000Z"
}
```

Export as JSON, CSV, Excel, or via API from the **Storage → Dataset** tab.

### 💡 Use cases

- Build cold-email / WhatsApp outreach lists for a niche + city
- Feed a CRM or marketing tool with fresh local-business leads
- Market research and competitor mapping in any geography

### 🧪 Run locally

```bash
npm install
apify login
apify run
```

Results appear under `storage/datasets/default/`.

### 🚀 Deploy

```bash
apify push
```

### ⚠️ Notes

- Use the **Residential** proxy for reliable, block-free runs.
- Email/social enrichment depends on each business having a reachable website; sites that are
  down or block bots simply return fewer contact fields.
- Respect Google's Terms and applicable data/privacy laws (e.g. GDPR) when using scraped data.

# Actor input Schema

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

One or more Google Maps searches. Include the location for best results, e.g. "Dentists in London" or "Real estate agents in Dubai".

## `maxResultsPerQuery` (type: `integer`):

How many businesses to collect for each search query. Google Maps returns roughly up to ~120 per single search.

## `enrichEmailsAndSocials` (type: `boolean`):

Visit each business's website to extract emails, phones, and social links (Facebook / Instagram / LinkedIn). Turn off for a faster, contact-lite run.

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

Google Maps interface language code (hl), e.g. en, de, fr, ar.

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

Apify Proxy to prevent bot blocks and rate limits.

## Actor input object example

```json
{
  "searchQueries": [
    "Coffee shops in Berlin"
  ],
  "maxResultsPerQuery": 50,
  "enrichEmailsAndSocials": true,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `leadsDataset` (type: `string`):

Direct link to the dataset containing the scraped leads

# 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": [
        "Dentists in London",
        "Real estate agents in Dubai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("autonade/google-maps-leads-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 = { "searchQueries": [
        "Dentists in London",
        "Real estate agents in Dubai",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("autonade/google-maps-leads-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 '{
  "searchQueries": [
    "Dentists in London",
    "Real estate agents in Dubai"
  ]
}' |
apify call autonade/google-maps-leads-scraper --silent --output-dataset

```

## MCP server setup

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