# Google Maps Scraper: Fastest & Cheapest Business Lead Extractor (`saregaa/google-maps-scraper-fastest-cheapest-business-lead-extractor`) Actor

Fastest Google Maps scraper on Apify. Extract business leads, E.164 phones, websites & coordinates by city or entire country. Powered by Go with 50 parallel workers — no proxy needed, zero browser overhead. Pay-per-result starting at only $0.20/1,000 places.

- **URL**: https://apify.com/saregaa/google-maps-scraper-fastest-cheapest-business-lead-extractor.md
- **Developed by:** [Saregaa](https://apify.com/saregaa) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.18 / 1,000 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/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 Scraper | The Fastest & Cheapest Business Lead Extractor (Up to 50 Workers, No Proxy Needed)

Extract verified local business listings, contact details, normalized phone numbers, websites, ratings, and precise geographic coordinates from Google Maps at unprecedented speed and rock-bottom cost.

Built entirely on a **high-throughput Golang HTTP engine**, this Actor bypasses heavy, resource-draining headless browsers and talks directly to Google Maps endpoints.

> ⚡ **Unmatched Speed:** Scrapes an entire country's restaurant ecosystem (e.g. **all ~100,000+ restaurants across France**) in just **~24 minutes** using 50 concurrent streams.
>
> 💰 **Industry-Lowest Price:** From **$0.20 per 1,000 places** ($0.0002/item) for paid users, and **$0.50 per 1,000 places** on the Free plan — with zero proxy charges!

***

### 🚀 Why Is This the #1 Google Maps Scraper on Apify?

- **Blazing Fast (Written in Go):** Replaces slow browser automation (Puppeteer/Playwright) with high-concurrency compiled Go streams. Processes hundreds of places per second.
- **Up to 50 Parallel Workers:** Scale up to 50 concurrent request streams for massive nationwide or worldwide data gathering.
- **Smart Concurrency Auto-Tuning:** Small searches (≤ 100 items) automatically optimize to 2 workers to avoid proxy waste; large extraction batches unlock the full power of up to 50 parallel workers.
- **No Proxy Required (Zero Proxy Bills):** Built-in proxy infrastructure is included out of the box — you never pay extra for residential IPs or bandwidth.
- **Unlimited Full-Country / Full-City Mode:** Set `maxItems` to `0` (or leave empty) to systematically scan every grid tile of an entire country or metropolis.
- **Dialer-Ready Phone Formatting:** Delivers both the original local format and the standardized international **E.164** format (e.g. `+33982202366`) for instant CRM/auto-dialer import.
- **Granular Address Breakdown:** Separates street, city, postal code, district, state/province, country, and country code into distinct fields.
- **Direct Export:** Download in 1 click as CSV, Excel (XLSX), JSON, XML, or HTML table.

***

### 📊 Extracted Data Fields

Every record output by this Actor follows a strictly validated, consistent schema:

| Field                | Type   | Description                                                          | Example                                                       |
| :------------------- | :----- | :------------------------------------------------------------------- | :------------------------------------------------------------ |
| `title`            | String | Business / establishment name                                        | `À nous Deux restaurant`                                   |
| `googleCategory`   | String | Primary category assigned by Google                                  | `Restaurant`                                                |
| `searchCategory`   | String | Search query/category used for scraping                              | `restaurants`                                               |
| `address`          | String | Full formatted address string                                        | `14 Rue de la Liberté, 33320 Le Taillan-Médoc`            |
| `country`          | String | Clean country slug                                                   | `fr`                                                        |
| `countryCode`      | String | Two-letter ISO country code                                          | `FR`                                                        |
| `city`             | String | City or locality                                                     | `Le Taillan-Médoc`                                         |
| `district`         | String | Sub-city neighborhood/district (if available)                        | `Médoc`                                                    |
| `street`           | String | Street name and number                                               | `14 Rue de la Liberté`                                     |
| `streetLine`       | String | Clean street address line                                            | `14 Rue de la Liberté`                                     |
| `postalCode`       | String | Postal or ZIP code                                                   | `33320`                                                     |
| `stateProvince`    | String | State, province, or administrative region                            | `Gironde`                                                   |
| `phone`            | String | Local display format phone number                                    | `09 82 20 23 66`                                            |
| `phoneUnformatted` | String | **E.164 standardized international phone**                     | `+33982202366`                                              |
| `website`          | String | Official business website URL                                        | `https://anousdeux-restaurant.fr`                           |
| `rating`           | Number | Average Google star rating (1.0 – 5.0)                              | `4.8`                                                       |
| `attributes`       | Object | Operational & accessibility tags (wheelchair, outdoor seating, etc.) | `{"Accessibility": ["Has wheelchair-accessible entrance"]}` |
| `latitude`         | Number | Exact decimal latitude coordinate                                    | `44.9067576`                                                |
| `longitude`        | Number | Exact decimal longitude coordinate                                   | `-0.6699987`                                                |
| `placeId`          | String | Google Places API unique identifier (`ChIJ...`)                    | `ChIJQTKPq7fWVA0RRXrB_HeRwBs`                               |
| `fid`              | String | Google's internal hex feature ID                                     | `0xd54d6b7ab8f3241:0x1bc09177fcc17a45`                      |
| `cid`              | String | Decimal representation of the hex feature ID                         | `1999758179080174149`                                       |
| `googleId`         | String | Google Knowledge Graph identifier                                    | `/g/11qh232lcz`                                             |
| `googleMapsUrl`    | String | Direct Google Maps link to the listing                               | `https://www.google.com/maps/place/?q=place_id:ChIJ...`     |

***

### ⚡ Performance Benchmark

| Benchmark Metric                                   | Traditional Headless Scrapers (Puppeteer/Playwright) | **This Go-Powered Scraper** |
| :------------------------------------------------- | :--------------------------------------------------- | :-------------------------------- |
| **All Restaurants in France (~180k places)** | 8 – 14 hours                                        | **~24 minutes** ⚡          |
| **Throughput**                               | 10 – 30 places / sec                                | **Up to 150+ places / sec** |
| **Resource Usage**                           | 8 – 16 GB RAM (Browsers)                            | **< 256 MB RAM**            |
| **Proxy Cost**                               | Extra $10 – $30 per run (Residential)               | **$0.00 (Included)**        |
| **Crash / Timeout Rate**                     | Frequent browser hangs                               | **Zero browser crashes**    |

***

### 💰 Pricing: Flat, Transparent, and Up to 80% Cheaper

This Actor uses Apify's **Pay-Per-Result** model. You only pay for valid, deduplicated places saved to your dataset — zero compute or proxy surcharges.

| Apify Plan Tier               | Price per 1,000 Places | Price per 1 Place | Notes                                                 |
| :---------------------------- | :--------------------- | :---------------- | :---------------------------------------------------- |
| **Free Plan**           | **0.50 USD**     | 0.00050 USD       | Free 5$ credit =**10,000 places free / month** |
| **Starter (Bronze)**    | **0.20 USD**     | 0.00020 USD       | **60% discount** immediately on paid plan       |
| **Scale (Silver)**      | **0.19 USD**     | 0.00019 USD       | Extra 0.01$ discount per 1k                           |
| **Gold**                | **0.18 USD**     | 0.00018 USD       | Extra 0.01$ discount per 1k                           |
| **Business (Platinum)** | **0.17 USD**     | 0.00017 USD       | Maximum volume savings                                |

### 🛠️ Input Parameters

Configure your run via the Apify Console UI or directly in JSON:

| Parameter                   | Type    | Default           | Description                                                                                                    |
| :-------------------------- | :------ | :---------------- | :------------------------------------------------------------------------------------------------------------- |
| `country` *(Required)*  | String  | `"france"`      | Country name (e.g.`France`, `United States`) or 2-letter ISO code (`FR`, `US`, `DE`, `JP`).        |
| `city` *(Optional)*     | String  | `""`            | Target city filter (e.g.`Paris`, `Berlin`, `Tokyo`). **Leave empty to scrape the entire country.** |
| `category` *(Required)* | String  | `"restaurants"` | Business category or search keyword (`dentists`, `hotels`, `roofing`, `cafes`).                        |
| `maxItems`                | Integer | `100`           | Place limit.**Set to `0` for UNLIMITED mode** (scrapes all available places).                          |
| `concurrency`             | Integer | `10`            | Parallel request streams (1 to 50). Full 50-worker speed unlocks on runs of 1,000+ places.                     |

#### Example Input

```json
{
  "country": "france",
  "city": "Paris",
  "category": "restaurants",
  "maxItems": 1000,
  "concurrency": 50
}
```

#### Full-Country Scraping Example (Unlimited)

```json
{
  "country": "DE",
  "category": "dentists",
  "maxItems": 0,
  "concurrency": 50
}
```

***

### 📥 Sample Output Record

```json
{
  "placeId": "ChIJQTKPq7fWVA0RRXrB_HeRwBs",
  "fid": "0xd54d6b7ab8f3241:0x1bc09177fcc17a45",
  "cid": "1999758179080174149",
  "googleId": "/g/11qh232lcz",
  "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJQTKPq7fWVA0RRXrB_HeRwBs",
  "title": "À nous Deux restaurant",
  "googleCategory": "Restaurant",
  "searchCategory": "restaurants",
  "address": "À nous Deux restaurant, 14 Rue de la Liberté, 33320 Le Taillan-Médoc",
  "country": "fr",
  "countryCode": "FR",
  "city": "Le Taillan-Médoc",
  "district": null,
  "street": "14 Rue de la Liberté",
  "streetLine": "14 Rue de la Liberté",
  "postalCode": "33320",
  "stateProvince": null,
  "phone": "09 82 20 23 66",
  "phoneUnformatted": "+33982202366",
  "website": "https://anousdeux-restaurant.fr",
  "rating": 4.8,
  "attributes": {
    "Accessibility": [
      "Has wheelchair-accessible entrance",
      "Has wheelchair-accessible seating"
    ]
  },
  "latitude": 44.9067576,
  "longitude": -0.6699987
}
```

***

### 💼 Need Business Emails & Social Media Profiles?

Google Maps displays business phone numbers and websites, but not direct corporate email addresses or social handles.

Pair this Actor with **[Website Email & Social Media Scraper](https://console.apify.com/actors/GUirKgrtBo30J4PaQ/source)**:

1. Export the `website` column from this Google Maps Scraper.
2. Feed those URLs into the Website Contact Scraper.
3. Automatically receive verified business emails, LinkedIn, Instagram, Facebook, and Twitter/X profiles for every lead!

***

### 🎯 Ideal Use Cases

- **Cold Outreach & B2B Lead Generation:** Build hyper-targeted B2B lists with verified websites and E.164 phone numbers ready for cold calling or WhatsApp outreach.
- **Competitor Intelligence & Local SEO:** Audit all ranking businesses in specific geographical grid cells.
- **Directory & Platform Enrichment:** Populate your directory, CRM, or local booking app with verified listings worldwide.
- **Territory & Franchise Planning:** Identify market saturation and service deserts before launching a new branch or franchise.

***

### ⚖️ Comparison: This Scraper vs Google Places API

| Feature                           | Google Maps Scraper (This Actor) | Official Google Places API                  |
| :-------------------------------- | :------------------------------- | :------------------------------------------ |
| **Cost for 100,000 Places** | $17 – $20                       | $1,700 – $3,200+                           |
| **Setup & Credentials**     | Instant 1-click start            | Billing accounts, Cloud Console & API keys  |
| **Entire Country Scraping** | Built-in coordinate grid scanner | Extremely difficult pagination restrictions |
| **Proxy Management**        | None required                    | None required                               |
| **Data Formats**            | CSV, Excel, JSON, XML            | Raw API JSON only                           |

***

### ❓ Frequently Asked Questions

#### Is this Actor faster than browser-based scrapers?

Yes, significantly. Traditional scrapers launch headless Chrome instances that consume gigabytes of memory and take 5–10 seconds per page. Our Go engine sends lightweight, parallel HTTP requests directly to Google endpoints, running up to 50 concurrent streams with virtually zero latency.

#### What happens if I request 50,000 places but only 30,000 exist?

The Actor will thoroughly scan every coordinate tile in the target country/city. Once all available places are collected and the grid is exhausted, the Actor safely completes with status `SUCCEEDED` and saves all 30,000 unique records. You only pay for places actually found.

#### Do I need to buy or configure proxies?

No. All network routing is handled internally. You don't need an Apify Proxy subscription or any external proxy setup.

#### How do I collect an entire country?

Enter the country name or ISO code (e.g. `france`, `US`, `DE`), leave the `city` field blank, and set `maxItems` to `0`. The Actor will automatically sweep through all cities and regions.

#### Can I integrate this with Zapier, Make, or n8n?

Yes. You can trigger runs and stream dataset items directly using the Apify API and webhooks.

***

### 📞 Support & Maintenance

We actively monitor Google Maps updates and maintain this scraper continuously to ensure 100% field accuracy and zero downtime.

If you have a feature request or encounter any issue, submit a ticket via the **Issues** tab on Apify Console.

# Actor input Schema

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

Country to scrape (e.g. 'france', 'germany', 'us', 'japan')

## `city` (type: `string`):

Optional city filter (e.g. 'Paris', 'Munich', 'Tokyo'). Leave empty to scrape the entire country.

## `category` (type: `string`):

Category or keyword to search for (e.g. 'restaurants', 'cafes', 'hotels', 'dentists')

## `maxItems` (type: `integer`):

Maximum number of places to collect. Enter 0 or leave empty for UNLIMITED scraping of the entire country or city.

## `concurrency` (type: `integer`):

Number of parallel request streams (up to 50). Activates at full capacity on 1,000+ places or unlimited mode.

## Actor input object example

```json
{
  "country": "france",
  "category": "restaurants",
  "maxItems": 100,
  "concurrency": 10
}
```

# Actor output Schema

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

All places found during this run, one item per place.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("saregaa/google-maps-scraper-fastest-cheapest-business-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("saregaa/google-maps-scraper-fastest-cheapest-business-lead-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 '{}' |
apify call saregaa/google-maps-scraper-fastest-cheapest-business-lead-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,saregaa/google-maps-scraper-fastest-cheapest-business-lead-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/qGcIa7QWqafvWAHNs/builds/3EOBbfUgQmFY0Lwuu/openapi.json
