# Google Maps Places, Reviews & B2B Lead (`crawlio/google-maps-lead-extractor`) Actor

Extract 1,000 Google Maps businesses for $0.75🔥. Collect business names, addresses, ratings, reviews, email, phone numbers, websites, categories, and locations for lead generation and analytics.

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

## Pricing

from $0.60 / 1,000 search results

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/platform/actors/running/actors-in-store#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 Lead Extractor

### What does Google Maps Lead Extractor do?

Google Maps Lead Extractor enables you to get detailed business data, local search results, and customer reviews from [Google Maps](https://www.google.com/maps) directly using search terms or listing URLs.

Google Maps Lead Extractor can scrape:

- Local search results (lighter, faster payload)
- Full business details (contact info, address, opening hours, coordinates)
- Paginated customer reviews
- Scored local business leads (combining search and details)
- Optional lead enrichment with website emails and Google web results

### Why scrape Google Maps?

Google Maps has millions of businesses listed and is a great source of data for lead generation, competitive research, reputation management, and local market intelligence.

Here are just some of the ways you could use that data:

- Build detailed contact lists for B2B outreach and sales
- Analyze customer reviews and sentiment for specific competitors
- Track business ratings and popularity in specific areas
- Discover new businesses and map local market trends

If you would like more inspiration on how scraping Google Maps could help your business or organization, check out our [industry pages](https://apify.com/industries).

### How to scrape Google Maps

It's easy to scrape Google Maps with Google Maps Lead Extractor. Just follow these few steps and you'll get your data in a few minutes.

1. Click on **Try for free**.
2. Select operation:
   - **Search** -> Get basic search results fast
   - **Business Details** -> Get all information about a specific place
   - **Lead Generation** -> Get scored lead records with business details
   - **Reviews** -> Fetch paginated reviews for one place
3. Enter your search terms and locations, or target listing URLs.
4. Click on **Run**.
5. When Google Maps Lead Extractor has finished, preview or download your data from the **Dataset** tab.

### Supported operations

The Actor supports four operations:

- `search` - fetch fast Google Maps search results
- `details` - fetch full business details from a Google Maps URL or ID
- `lead_generation` - fetch scored lead records with Google Maps details
- `reviews` - fetch paginated reviews for a specific place

Search is the default mode for new runs.

***

#### Search

**Example input:**

```json
{
  "mode": "search",
  "searchTerms": [
    "dentist"
  ],
  "locations": [
    "Jackson Heights NY"
  ],
  "numberOfPlaces": 20
}
```

**Example output:**

```json
{
  "title": "Sams Family Dental Care",
  "totalScore": 4.2,
  "reviewsCount": 277,
  "street": "3766 82nd St",
  "city": "Jackson Heights",
  "state": "NY",
  "countryCode": "NY 11372",
  "website": "",
  "phone": "",
  "categories": [
    "Dentist"
  ],
  "url": "https://www.google.com/maps/search/?api=1&query=Sams%20Family%20Dental%20Care...",
  "categoryName": "Dentist",
  "searchTerm": "dentist",
  "query": "dentist in Jackson Heights NY",
  "location": "Jackson Heights NY",
  "resultType": "search_result"
}
```

#### Lead Generation

**Example input:**

```json
{
  "mode": "lead_generation",
  "searchTerms": [
    "dentist"
  ],
  "locations": [
    "Jackson Heights NY"
  ],
  "numberOfPlaces": 20,
  "enrichDetails": true
}
```

**Example output:**

```json
{
  "name": "Ramos Dental P.C.",
  "place_id": "0x89c25fa8a4b143f9:0x2f0a9fa338d85770",
  "place_id_chij": "ChIJ-UOxpKhfwokRcFfYOKOfCi8",
  "google_maps_url": "https://www.google.com/maps/search/?api=1&query=Ramos%20Dental%20P.C.&query_place_id=ChIJ-UOxpKhfwokRcFfYOKOfCi8",
  "source_query": "dentist in Jackson Heights NY",
  "address": "35-53 82nd St # 1e, Jackson Heights, NY 11372",
  "category": "Dentist",
  "phone": "(718) 426-4176",
  "website": "",
  "emails": [],
  "about": {
    "accessibility": { "title": "Accessibility", "attributes": [ ... ] },
    "offerings": { "title": "Offerings", "attributes": [ ... ] }
  },
  "neighborhood": "Jackson Heights",
  "country_code": "US",
  "opening_status": "Open - Closes 6 PM",
  "owner_name": "Ramos Dental P.C. (Owner)",
  "review_histogram": {
    "star_1": 18,
    "star_2": 0,
    "star_3": 1,
    "star_4": 7,
    "star_5": 162,
    "total": 188
  },
  "rating": 4.6,
  "review_count": 188,
  "latitude": 40.750296999999996,
  "longitude": -73.884108,
  "lead_score": 85,
  "lead_grade": "A",
  "lead_signals": [
    "missing_website",
    "has_phone",
    "has_about_attributes",
    "multi_category_listing",
    "owner_managed_listing",
    "high_review_volume",
    "strong_reputation"
  ],
  "missing_fields": [
    "website"
  ],
  "resultType": "lead"
}
```

#### Business Details

**Example input:**

```json
{
  "mode": "details",
  "placeInput": "https://www.google.com/maps/place/ChIJN1t_tDeuEmsRUsoyG83frY4"
}
```

**Example output:**

```json
{
  "place_id": "0x6b12ae37b47f5b37:0x8eaddfcd1b32ca52",
  "place_id_chij": "ChIJN1t_tDeuEmsRUsoyG83frY4",
  "name": "Google Sydney - Pirrama Road",
  "address": "Ground Floor/48 Pirrama Rd, Pyrmont NSW 2009, Australia",
  "phone": "+61 2 9374 4000",
  "website": "http://google.com/",
  "category": "Corporate office",
  "rating": 4.0,
  "review_count": 1176,
  "latitude": -33.866489,
  "longitude": 151.1958561,
  "opening_status": "Closed - Opens 8:30 AM Mon",
  "resultType": "details"
}
```

#### Reviews

**Example input:**

```json
{
  "mode": "reviews",
  "placeInput": "https://www.google.com/maps/place/ChIJN1t_tDeuEmsRUsoyG83frY4",
  "maxReviews": 20,
  "sortBy": "newest"
}
```

**Example output:**

```json
{
  "reviewer_name": "Mark I-P",
  "reviewer_url": "https://www.google.com/maps/contrib/102042907633685184592?hl=en",
  "rating": 2,
  "text": "Google pixel 10, I have owned Pixel phones since Google launched their phones...",
  "time_description": "Edited 3 months ago",
  "timestamp": 1768005103358557,
  "is_local_guide": true,
  "photos": [],
  "owner_reply": "",
  "resultType": "review",
  "place_id": "0x6b12ae37b47f5b37:0x8eaddfcd1b32ca52"
}
```

***

### Is it legal to scrape Google Maps?

Note that personal data is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

We also recommend that you read our blog post: [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Actor input Schema

## `mode` (type: `string`):

Choose the extraction profile. Search is cheapest.

## `search` (type: `object`):

Configure settings for search.

## `lead_generation` (type: `object`):

Configure settings for local business leads.

## `details` (type: `object`):

Configure settings for single business details.

## `reviews` (type: `object`):

Configure settings for scraping reviews.

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

Google language.

## `gl` (type: `string`):

Google country code.

## `minScore` (type: `integer`):

Filter leads below this score (0-100). Applies to lead generation.

## `maxWorkers` (type: `integer`):

Parallel workers for lead generation only. Higher values may be faster but can increase Google blocking or proxy usage.

## Actor input object example

```json
{
  "mode": "search",
  "search": {
    "searchTerms": [
      "dentist"
    ],
    "locations": [
      "Jackson Heights NY"
    ],
    "numberOfPlaces": 20
  },
  "lead_generation": {
    "placeInput": "",
    "searchTerms": [
      "dentist"
    ],
    "locations": [
      "Jackson Heights NY"
    ],
    "numberOfPlaces": 20,
    "enrichDetails": false,
    "enrichWebsites": false,
    "enrichGoogleWebResults": false,
    "maxReviews": 20
  },
  "language": "English",
  "gl": "us",
  "minScore": 0,
  "maxWorkers": 4
}
```

# Actor output Schema

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

One dataset item per returned result.

## `runSummary` (type: `string`):

Summary stored in the OUTPUT record of the default key-value store.

# 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 = {
    "search": {
        "searchTerms": [
            "dentist"
        ],
        "locations": [
            "Jackson Heights NY"
        ],
        "numberOfPlaces": 20
    },
    "lead_generation": {
        "placeInput": "",
        "searchTerms": [
            "dentist"
        ],
        "locations": [
            "Jackson Heights NY"
        ],
        "numberOfPlaces": 20,
        "enrichDetails": false,
        "enrichWebsites": false,
        "enrichGoogleWebResults": false,
        "maxReviews": 20
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlio/google-maps-lead-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 = {
    "search": {
        "searchTerms": ["dentist"],
        "locations": ["Jackson Heights NY"],
        "numberOfPlaces": 20,
    },
    "lead_generation": {
        "placeInput": "",
        "searchTerms": ["dentist"],
        "locations": ["Jackson Heights NY"],
        "numberOfPlaces": 20,
        "enrichDetails": False,
        "enrichWebsites": False,
        "enrichGoogleWebResults": False,
        "maxReviews": 20,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlio/google-maps-lead-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "search": {
    "searchTerms": [
      "dentist"
    ],
    "locations": [
      "Jackson Heights NY"
    ],
    "numberOfPlaces": 20
  },
  "lead_generation": {
    "placeInput": "",
    "searchTerms": [
      "dentist"
    ],
    "locations": [
      "Jackson Heights NY"
    ],
    "numberOfPlaces": 20,
    "enrichDetails": false,
    "enrichWebsites": false,
    "enrichGoogleWebResults": false,
    "maxReviews": 20
  }
}' |
apify call crawlio/google-maps-lead-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlio/google-maps-lead-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/f9NobDfC9itEMezue/builds/B5yRMXeEBLhixCPZp/openapi.json
