# Google Maps Leads Scraper (`scrapeai/google-maps-leads-scraper`) Actor

Extract rich business leads from Google Maps by search query, country, and language. Collects business names, addresses, phones, websites, ratings, reviews, opening hours, categories, and coordinates for B2B lead generation and market research.

- **URL**: https://apify.com/scrapeai/google-maps-leads-scraper.md
- **Developed by:** [ScrapeAI](https://apify.com/scrapeai) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 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.

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 Leads Scraper

High-performance, enterprise-grade Google Maps leads scraper designed for B2B lead generation, market research, and local business discovery. Extracts complete business profiles, phone numbers, websites, full addresses, ratings, review counts, opening hours schedules, GPS coordinates, categories, photos, and direct links without requiring Google Maps API keys.

***

### 🌟 Key Features

- **🚀 Ultra-Fast Multi-Layer Extraction**: Direct API response interception coupled with dynamic DOM scrolling & automated fallback ensures maximum speed, zero missing records, and complete datasets.
- **📞 Rich B2B Contact Data**: Captures business phone numbers, websites, social links, complete addresses with city/state/zip breakdowns, and direct Google Maps URLs.
- **⭐ Reputation & Trust Signals**: Extracts real-time star ratings, total review counts, and price levels.
- **🕒 Operating Hours & Status**: Gathers current operating status (Open / Closed / Hours Today) and full daily schedules.
- **📍 Precise Geo-Targeting & Coordinates**: Retrieves exact latitude, longitude, IANA timezones, and country codes.
- **🏷️ Categories & Descriptions**: Extracts primary category, comprehensive category lists, and editorial summaries/taglines.
- **🛡️ Anti-Bot Stealth Architecture**: Built-in stealth plugin, fingerprint mimicry, and full residential proxy support for seamless scraping at scale.

***

### 💼 Use Cases

- **B2B Cold Outreach & Lead Generation**: Build targeted prospecting lists of local businesses (dentists, plumbers, restaurants, agencies, law firms).
- **Directory Building & Enrichment**: Populate online directories or enrich existing CRM records with live address and phone data.
- **Competitive & Market Intelligence**: Analyze competitor presence, reviews, ratings, and coverage across regions.
- **Local SEO & Citation Audits**: Verify NAP (Name, Address, Phone) consistency across Google Maps listings.

***

### ⚙️ Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|:---:|---|---|
| `searchTerms` | Array of Strings | **Yes** | `["pizza delivery New York"]` | List of search queries or niches + locations (e.g., `["dentist Miami", "plumber Chicago", "marketing agency London"]`). |
| `maxLeads` | Integer | No | `20` | Maximum number of leads to extract per search query. Set to `0` for unlimited extraction. |
| `language` | String | No | `"en"` | Language code for Google Maps interface and localized responses (e.g. `en`, `es`, `fr`, `de`, `ja`). |
| `country` | String | No | `"US"` | Two-letter ISO country code for localized geographic search results (e.g. `US`, `GB`, `CA`, `AU`, `DE`). |
| `proxyConfiguration` | Object | No | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` | Proxy settings. Apify Residential proxy is recommended for high-volume jobs. |

#### Example Input JSON

```json
{
  "searchTerms": [
    "pizza delivery New York",
    "dentist in Miami",
    "web development agency London"
  ],
  "maxLeads": 25,
  "language": "en",
  "country": "US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### 📊 Output Schema

Each scraped record in the dataset contains comprehensive details:

| Field Name | Type | Description |
|---|---|---|
| `businessName` | `string` | Full business name or place title |
| `category` | `string` | Primary business category |
| `categories` | `string` | Comma-separated list of all categories |
| `description` | `string` | Editorial summary or business tagline |
| `serviceOptions` | `string` | Available amenities and services (e.g. Delivery, Takeout, Accessibility) |
| `address` | `string` | Full formatted street address |
| `street` | `string` | Street address component |
| `city` | `string` | City or municipality |
| `state` | `string` | State, province, or region code |
| `postalCode` | `string` | Postal / ZIP code |
| `countryCode` | `string` | Two-letter ISO country code |
| `countryName` | `string` | Full country name |
| `phone` | `string` | Phone number formatted for direct dialing |
| `website` | `string` | Official website URL |
| `rating` | `number` | Average star rating (1.0 - 5.0) |
| `reviewCount` | `integer` | Total number of user reviews |
| `priceLevel` | `string` | Price tier indicator (`$`, `$$`, `$$$`, `$$$$`) |
| `openNow` | `boolean` | Whether the place is open right now |
| `openingHoursToday` | `string` | Today's operating hours and status string |
| `openingHoursSchedule`| `array` | Full day-by-day weekly opening hours |
| `permanentlyClosed` | `boolean` | Permanent closure flag |
| `temporarilyClosed` | `boolean` | Temporary closure flag |
| `placeId` | `string` | Unique Google Maps Place ID |
| `cid` | `string` | Google Maps Customer ID (hex format) |
| `latitude` | `number` | Latitude coordinate |
| `longitude` | `number` | Longitude coordinate |
| `timezone` | `string` | IANA timezone (e.g. `America/New_York`) |
| `thumbnailUrl` | `string` | High-resolution primary photo URL |
| `imageUrls` | `array` | Top photo URLs |
| `orderOnlineUrl` | `string` | Direct online ordering or reservation link |
| `mapsUrl` | `string` | Direct link to the place on Google Maps |
| `searchTerm` | `string` | The search term that yielded this lead |
| `scrapedAt` | `string` | ISO 8601 timestamp of extraction |

#### Sample Output JSON

```json
{
  "businessName": "Joe's Pizza Broadway",
  "category": "Pizza restaurant",
  "categories": "Pizza restaurant, Pizza delivery, Restaurant",
  "description": "Modern outpost of a longtime counter-serve pizza joint prepping New York-style slices and pies.",
  "serviceOptions": "Delivery, Takeout, Wheelchair-accessible entrance, Wheelchair-accessible seating",
  "address": "1435 Broadway, New York, NY 10018, United States",
  "street": "1435 Broadway",
  "city": "New York",
  "state": "NY",
  "postalCode": "10018",
  "countryCode": "US",
  "countryName": "United States",
  "phone": "+1 646-559-4878",
  "website": "https://www.joespizzanyc.com/",
  "rating": 4.4,
  "reviewCount": 23301,
  "priceLevel": "$$",
  "openNow": false,
  "openingHoursToday": "Closed · Opens 10 am",
  "openingHoursSchedule": [
    "Friday: 10 am–5 am"
  ],
  "permanentlyClosed": false,
  "temporarilyClosed": false,
  "placeId": "ChIJifIePKtZwokRVZ-UdRGkZzs",
  "cid": "0x89c259ab3c1ef289:0x3b67a41175949f55",
  "latitude": 40.7546795,
  "longitude": -73.9870291,
  "timezone": "America/New_York",
  "thumbnailUrl": "https://lh3.googleusercontent.com/p/AF1QipM42...=s1600",
  "imageUrls": [
    "https://lh3.googleusercontent.com/p/AF1QipM42...=s1600"
  ],
  "orderOnlineUrl": "https://www.fooddiscoveryapp.com/new-york-city/joes-pizza",
  "mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJifIePKtZwokRVZ-UdRGkZzs",
  "searchTerm": "pizza delivery New York",
  "scrapedAt": "2026-08-21T10:16:57.132Z"
}
```

***

### 💡 Best Practices & Tips

- **Search Query Specificity**: Combine your niche with a specific city, zip code, or neighborhood (e.g., `"Italian restaurants Brooklyn NY"` or `"HVAC repair 90210"`) for optimal results.
- **Proxy Usage**: Google Maps aggressively limits high-frequency requests from single IPs. Using Apify **Residential Proxies** is recommended for runs with hundreds of leads.
- **Language & Country Pairing**: Set `language` and `country` matching your search queries to obtain properly localized addresses and phone formats.
- **Data Export**: Export your results directly to CSV, Excel, JSON, or sync automatically via Webhooks, Zapier, or Make.

# Actor input Schema

## `searchTerms` (type: `array`):

List of search queries to scrape leads for (e.g. 'dentist in New York', 'plumber Chicago', 'web agency London').

## `maxLeads` (type: `integer`):

Maximum number of leads to extract per search query. Set to 0 for unlimited.

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

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

## `country` (type: `string`):

Two-letter ISO country code for localized results (e.g. US, GB, IN, CA, AU).

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

Proxy settings. Apify Residential proxy is recommended for high volume scraping.

## Actor input object example

```json
{
  "searchTerms": [
    "pizza delivery New York"
  ],
  "maxLeads": 20,
  "language": "en",
  "country": "US",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all 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 = {
    "searchTerms": [
        "pizza delivery New York"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeai/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 = {
    "searchTerms": ["pizza delivery New York"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeai/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 '{
  "searchTerms": [
    "pizza delivery New York"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapeai/google-maps-leads-scraper --silent --output-dataset

```

## MCP server setup

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