# Google Maps Lead Extractor Pro (`eloquent_mountain/google-maps-lead-extractor-pro`) Actor

Advanced Google Maps scraper for business lead generation with email discovery, social media extraction, and comprehensive data enrichment. Extract business details, reviews, photos, contact info, and social profiles. Perfect for B2B sales, market research, and local SEO. Multi-language support.

- **URL**: https://apify.com/eloquent_mountain/google-maps-lead-extractor-pro.md
- **Developed by:** [Paco](https://apify.com/eloquent_mountain) (community)
- **Categories:** Lead generation, Automation, SEO tools
- **Stats:** 124 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 business scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 Lead Extractor Pro

[![MCP Compatible](https://img.shields.io/badge/MCP-Compatible-blue)](https://docs.apify.com/platform/integrations/mcp)

**Advanced Google Maps scraper for business lead generation with email discovery, social media extraction, and data enrichment.**

### 🌟 Features

#### Core Scraping Capabilities

- ✅ **Multi-Query Search** - Scrape multiple search queries in one run
- ✅ **Comprehensive Business Data** - Extract name, address, phone, website, ratings, reviews, hours, and more
- ✅ **Geolocation Data** - Latitude/longitude coordinates and Plus Codes
- ✅ **Review Extraction** - Get recent customer reviews with ratings and dates
- ✅ **Photo URLs** - Extract business photo URLs

#### Advanced Lead Enrichment

- 📧 **Email Discovery** - Automatically visit business websites to find email addresses
- 📱 **Social Media Links** - Extract Facebook, Instagram, LinkedIn, and Twitter profiles
- 🎯 **Lead Scoring Ready** - Structured data perfect for CRM integration

#### Performance & Reliability

- ⚡ **Fast & Scalable** - Concurrent scraping with configurable parallelism
- 🔄 **Proxy Support** - Built-in Apify proxy integration for reliability
- 🌍 **Multi-Language** - Support for 9 languages (EN, ES, FR, DE, IT, PT, JA, ZH, KO)
- 💾 **Multiple Export Formats** - JSON, CSV, and Excel (XLSX)
- 🤖 **MCP Compatible** - Works seamlessly with AI agents via Model Context Protocol

### 🚀 Quick Start

#### Input Configuration

```json
{
  "searchQueries": [
    "restaurants in New York",
    "coffee shops in San Francisco",
    "plumbers in Los Angeles"
  ],
  "maxResults": 100,
  "includeReviews": true,
  "maxReviewsPerBusiness": 10,
  "extractEmails": true,
  "extractSocialMedia": true,
  "language": "en"
}
```

#### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQueries` | Array | ✅ Yes | - | List of search queries (e.g., "restaurants in NYC") |
| `maxResults` | Integer | No | 100 | Maximum businesses per query (1-500) |
| `includeReviews` | Boolean | No | true | Extract customer reviews |
| `maxReviewsPerBusiness` | Integer | No | 10 | Max reviews per business (0-100) |
| `extractEmails` | Boolean | No | true | Visit websites to find emails |
| `extractSocialMedia` | Boolean | No | true | Extract social media profile links |
| `includePhotos` | Boolean | No | false | Extract photo URLs |
| `language` | String | No | "en" | Language code (en, es, fr, de, it, pt, ja, zh, ko) |
| `maxConcurrency` | Integer | No | 5 | Concurrent browser pages (1-20) |

### 📊 Output Data

Each business record includes:

```json
{
  "name": "Joe's Pizza",
  "category": "Pizza restaurant",
  "rating": 4.5,
  "reviewCount": 1234,
  "address": "123 Main St, New York, NY 10001",
  "phone": "+1 212-555-0123",
  "website": "https://www.joespizza.com",
  "hours": "Open ⋅ Closes 11 PM",
  "latitude": 40.7589,
  "longitude": -73.9851,
  "plusCode": "8FWV+QX New York",
  "url": "https://www.google.com/maps/place/...",
  "emails": ["info@joespizza.com", "contact@joespizza.com"],
  "socialMedia": {
    "facebook": "https://facebook.com/joespizza",
    "instagram": "https://instagram.com/joespizza",
    "twitter": "https://twitter.com/joespizza"
  },
  "reviews": [
    {
      "author": "John Smith",
      "rating": "5 stars",
      "text": "Best pizza in NYC!",
      "date": "2 weeks ago"
    }
  ],
  "photos": ["https://lh3.googleusercontent.com/..."],
  "searchQuery": "pizza in New York",
  "scrapedAt": "2025-10-31T12:00:00.000Z"
}
```

### 💡 Use Cases

#### 1. **B2B Lead Generation**

Generate targeted business leads for sales outreach:

- Find local businesses by category and location
- Get contact information (phone, email, website)
- Enrich with social media profiles for multi-channel outreach

#### 2. **Market Research**

Analyze local business landscapes:

- Competitor analysis by location
- Rating and review sentiment analysis
- Market saturation studies

#### 3. **Local SEO & Marketing**

Build local business directories:

- Create niche business listings
- Analyze local search rankings
- Monitor business information accuracy

#### 4. **Real Estate & Location Intelligence**

Support location-based decisions:

- Analyze business density in areas
- Evaluate neighborhood commercial activity
- Site selection for new businesses

#### 5. **AI Agent Automation**

Empower AI agents and LLMs with real-time business data:

- **Autonomous lead generation** - Let AI agents find and qualify leads automatically
- **Multi-step workflows** - Combine with other MCP tools for complex automation
- **Conversational data extraction** - Use natural language to specify what data you need
- **Dynamic research** - AI agents can gather market intelligence on demand

### 🤖 AI Agent & MCP Integration

This Actor is **MCP-compatible** and can be used as a tool by AI agents through the [Model Context Protocol](https://docs.apify.com/platform/integrations/mcp).

#### What is MCP?

MCP (Model Context Protocol) is a standardized way for AI applications and agents to connect with external tools and data sources. It allows LLMs like Claude, GPT, GEMINI and others to dynamically discover and use tools to complete tasks.

#### Using This Actor with AI Agents

##### With Claude Desktop App

1. Install the [Apify MCP Server](https://apify.com/apify/actors-mcp-server)
2. Add this configuration to your Claude Desktop config file:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": [
        "-y",
        "@apify/actors-mcp-server",
        "--actors",
        "YOUR_USERNAME/google-maps-lead-extractor-pro"
      ],
      "env": {
        "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

3. Restart Claude Desktop
4. Ask Claude to extract business leads from Google Maps!

**Example prompts:**

- "Find 50 Italian restaurants in Chicago with at least 4 stars and extract their emails"
- "Get contact information for all yoga studios in Austin, Texas"
- "Create a lead list of coffee shops in Seattle with their social media profiles"

##### With LangGraph

```python
import os
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

## Initialize server parameters
server_params = StdioServerParameters(
    command="npx",
    args=[
        "-y",
        "@apify/actors-mcp-server",
        "--actors",
        "YOUR_USERNAME/google-maps-lead-extractor-pro"
    ],
    env={"APIFY_TOKEN": os.getenv("APIFY_TOKEN")}
)

## Create agent with MCP tools
async def main():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await load_mcp_tools(session)

            model = ChatOpenAI(model="gpt-4o")
            agent = create_react_agent(model, tools)

            response = await agent.ainvoke({
                "messages": "Find 20 dentists in Boston with emails"
            })
            print(response["messages"][-1].content)

asyncio.run(main())
```

##### With Apify Tester MCP Client

The easiest way to test this Actor with MCP:

1. Visit [Apify Tester MCP Client](https://apify.com/apify/tester-mcp-client)
2. Click "Try for free"
3. Ask the AI to extract business leads - it will automatically discover and use this Actor!

#### Why Use This Actor with AI Agents?

✅ **Dynamic Tool Discovery** - AI agents can automatically find and use this Actor when they need Google Maps data
✅ **Natural Language Interface** - No need to write code or configure inputs manually
✅ **Automated Workflows** - Chain this Actor with other tools for complex lead generation pipelines
✅ **Multi-Agent Systems** - Perfect for building sophisticated AI systems that need real-time business data

#### MCP-Compatible Clients

This Actor works with any MCP-compatible client:

- **Claude Desktop App** - Anthropic's desktop AI assistant
- **Cursor IDE** - AI-powered code editor
- **LangGraph** - AI agent framework
- **Apify Tester MCP Client** - Quick testing and validation
- Any custom MCP client following the protocol

Learn more about MCP: [How to use MCP with Apify Actors](https://blog.apify.com/how-to-use-mcp/)

### 🔧 Advanced Usage

#### CRM Integration

The output is structured for easy import into popular CRMs:

**Salesforce CSV Import:**

```csv
Company,Phone,Website,Email,Street,City,State,Rating
Joe's Pizza,+1 212-555-0123,https://joespizza.com,info@joespizza.com,123 Main St,New York,NY,4.5
```

**HubSpot Import:**
Use the JSON output directly with HubSpot's API or import via CSV.

#### Lead Scoring

Enrich the data with custom lead scoring:

```javascript
// Example: Score leads based on rating and review count
const leadScore = (business) => {
  let score = 0;
  if (business.rating >= 4.0) score += 30;
  if (business.reviewCount >= 100) score += 20;
  if (business.emails && business.emails.length > 0) score += 25;
  if (business.website) score += 15;
  if (business.socialMedia) score += 10;
  return score;
};
```

#### Filtering & Deduplication

Post-process the dataset to remove duplicates:

```javascript
// Remove duplicates by phone number
const uniqueBusinesses = Array.from(
  new Map(businesses.map(b => [b.phone, b])).values()
);
```

### ⚙️ Technical Details

#### Technology Stack

- **Apify SDK** - Actor framework and storage
- **Crawlee** - Web scraping and crawling
- **Playwright** - Browser automation
- **Node.js** - Runtime environment

#### Performance

- **Speed**: ~50-100 businesses per minute (depends on configuration)
- **Concurrency**: Configurable (1-20 parallel browsers)
- **Memory**: Recommended 4GB+ for optimal performance
- **Proxy**: Apify residential proxies recommended for large-scale scraping

#### Rate Limiting & Best Practices

- Use proxies to avoid IP blocks
- Set reasonable `maxConcurrency` (5-10 recommended)
- Respect robots.txt and Google's Terms of Service
- Use for legitimate business purposes only

### 📝 Legal & Compliance

#### Important Notes

- ⚠️ **Public Data Only** - This actor scrapes publicly available data from Google Maps
- ⚠️ **Terms of Service** - Review Google's ToS before large-scale scraping
- ⚠️ **Data Privacy** - Comply with GDPR, CCPA, and other privacy regulations
- ⚠️ **Ethical Use** - Use responsibly for legitimate business purposes

#### Recommended Practices

1. Only scrape data you have a legitimate business need for
2. Respect opt-out requests from businesses
3. Store and process data securely
4. Provide clear privacy policies if collecting data for marketing
5. Don't use for spam or unsolicited marketing without consent

### 📈 Pricing & Performance

#### Pay-Per-Event Pricing Model

This actor uses **transparent pay-per-event pricing** - you only pay for what you extract! Pricing automatically adjusts based on your Apify subscription tier (higher tiers get better rates).

##### Event Types & Pricing (FREE tier)

| Event | Price | Description |
|-------|-------|-------------|
| **Business Scraped** | $0.004 | Basic business data (name, address, phone, rating, etc.) |
| **Review Scraped** | $0.0005 | Per customer review extracted |
| **Email Extracted** | $0.002 | When email addresses found on website |
| **Social Media Extracted** | $0.001 | When social media profiles found |
| **Photo Scraped** | $0.0001 | Per photo URL extracted |
| **Enriched Lead (Bundle)** | $0.008 | Complete lead with ALL features (saves ~20-40% vs individual charges) |

##### Tiered Discounts

Higher subscription tiers receive automatic discounts:

- **FREE**: Standard pricing (shown above)
- **BRONZE**: 10% discount
- **SILVER**: 20% discount
- **GOLD**: 30% discount
- **PLATINUM**: 40% discount
- **DIAMOND**: 50% discount

##### Pricing Examples (FREE tier)

**Example 1: Basic Scraping**

- 100 businesses with basic data only
- Cost: 100 × $0.004 = **$0.40**

**Example 2: With Reviews**

- 100 businesses + 10 reviews each
- Cost: (100 × $0.004) + (1,000 × $0.0005) = **$0.90**

**Example 3: Full Enrichment**

- 100 businesses with reviews, emails, social media, and photos
- Individual: (100 × $0.004) + (1,000 × $0.0005) + (100 × $0.002) + (100 × $0.001) + (1,000 × $0.0001) = **$1.20**
- Bundle: 100 × $0.008 = **$0.80** (33% savings!)

**Example 4: Large Scale (1,000 businesses, full enrichment)**

- Bundle pricing: 1,000 × $0.008 = **$8.00**
- With DIAMOND tier: 1,000 × $0.004 = **$4.00** (50% off!)

#### Performance Benchmarks

- **Basic scraping** (no enrichment): ~100 businesses/minute
- **With email extraction**: ~30-50 businesses/minute
- **With reviews + emails**: ~20-30 businesses/minute

### 🤝 Support & Contribution

#### Issues & Feature Requests

Found a bug or have a feature request? Please open an issue on Apify.

### 🙏 Acknowledgments

Built with:

- [Apify Platform](https://apify.com)
- [Crawlee](https://crawlee.dev)
- [Playwright](https://playwright.dev)

***

**Disclaimer**: This tool is for educational and legitimate business purposes only. Users are responsible for ensuring their use complies with applicable laws and Google's Terms of Service.

# Changelog

This Actor's version history is a separate document: https://apify.com/eloquent_mountain/google-maps-lead-extractor-pro/changelog.md

# Actor input Schema

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

List of search queries to find businesses (e.g., 'restaurants in New York', 'plumbers in Los Angeles')

## `maxResults` (type: `integer`):

Maximum number of businesses to scrape per search query

## `includeReviews` (type: `boolean`):

Extract recent reviews for each business

## `maxReviewsPerBusiness` (type: `integer`):

Maximum number of reviews to extract per business (if includeReviews is enabled)

## `extractEmails` (type: `boolean`):

Attempt to discover email addresses from business websites

## `extractSocialMedia` (type: `boolean`):

Extract social media profile links (Facebook, Instagram, LinkedIn, Twitter)

## `includePhotos` (type: `boolean`):

Extract URLs of business photos

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

Language code for search results (e.g., 'en', 'es', 'fr')

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

Proxy settings for the scraper

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent browser pages

## `exportFormat` (type: `string`):

Preferred format for data export (note: all formats are available via API)

## Actor input object example

```json
{
  "searchQueries": [
    "coffee shops in Amsterdam"
  ],
  "maxResults": 5,
  "includeReviews": true,
  "maxReviewsPerBusiness": 3,
  "extractEmails": true,
  "extractSocialMedia": true,
  "includePhotos": false,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 5,
  "exportFormat": "json"
}
```

# 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 Amsterdam"
    ],
    "maxResults": 5,
    "maxReviewsPerBusiness": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("eloquent_mountain/google-maps-lead-extractor-pro").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 Amsterdam"],
    "maxResults": 5,
    "maxReviewsPerBusiness": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("eloquent_mountain/google-maps-lead-extractor-pro").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 Amsterdam"
  ],
  "maxResults": 5,
  "maxReviewsPerBusiness": 3
}' |
apify call eloquent_mountain/google-maps-lead-extractor-pro --silent --output-dataset

```

## MCP server setup

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

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/sxnwXRgTB7gemryaa/builds/6XcFjUSPgdUTRfHRH/openapi.json
