# Google Maps Business Leads Scraper (`nocodeninja_ng/google-maps-business-leads-scraper`) Actor

Scrape Google Maps and turn local business listings into structured leads. Extract business details, phone numbers, websites, ratings, categories, and locations, with optional email and social media enrichment for B2B lead generation and prospecting.

- **URL**: https://apify.com/nocodeninja\_ng/google-maps-business-leads-scraper.md
- **Developed by:** [NoCodeNinja](https://apify.com/nocodeninja_ng) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

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

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

**Google Maps Business Leads Scraper** searches Google Maps and turns local business listings into clean, structured leads. Use it for **B2B lead generation, sales prospecting, market research, local business data, and contact discovery**. Run it on Apify for API access, scheduling, dataset exports, monitoring, and optional proxy configuration.

### Features

- Search Google Maps with one or several queries in a single run.
- Collect unique businesses while scrolling through available results.
- Open business profiles and extract structured fields.
- Push normalized records continuously to an Apify Dataset.
- Optionally enrich businesses with emails and social media links from their websites.
- Use Apify dataset tools to download results as JSON, CSV, HTML, or Excel.

### What Data Is Extracted

Each business record can include:

- Business name
- Google Place ID
- Canonical Google Maps URL
- Latitude and longitude
- Full address
- Business status
- Rating
- Primary category and category list
- Phone number
- Website

When website enrichment is enabled and a website is available, the actor can also return email addresses and social links for Facebook, Instagram, LinkedIn, X/Twitter, TikTok, and YouTube.

### Use Cases

Find roofers in San Diego, plumbers in Miami, restaurants in Abuja, dentists in London, or other local businesses for outreach and research. Multiple queries are useful when you want to combine related searches, such as `roofers in Florida` and `roofing contractors in Florida`, while keeping one global result limit.

### Input

Configure the actor in the Apify **Input** tab. The main fields are:

- `searchQueries`: a list of Google Maps search queries. Duplicate queries are removed.
- `maxResults`: maximum number of unique businesses pushed to the dataset across all queries.
- `headless`: runs Chromium in headless mode by default.
- `maxNoNewScrollAttempts`: stops a query after repeated scroll attempts produce no new unique businesses.
- `websiteEnrichment`: enables optional website email and social enrichment.
- `proxySettings`: optional native Apify Proxy Configuration. It is disabled by default.

Example input:

```json
{
  "searchQueries": [
    "roofers in San Diego",
    "plumbers in Miami",
    "restaurants in Abuja"
  ],
  "maxResults": 50,
  "headless": true,
  "maxNoNewScrollAttempts": 3,
  "websiteEnrichment": true
}
```

`maxResults` means “up to this many unique businesses.” Google Maps may provide fewer results for a query or location, so the actor does not invent or duplicate records to reach the limit.

### Website & Contact Enrichment

Website enrichment is optional and uses lightweight HTTP requests, not an additional browser session. When enabled, the actor fetches a business website when a website URL was found on Google Maps, extracts email addresses, and detects supported social profiles. Some websites block automated requests, require JavaScript, redirect unexpectedly, or expose no public contact details. Enrichment failures are logged and do not prevent the business record from being pushed.

### Output

Example dataset item (illustrative):

```json
{
  "place": {
    "place_id": "ChIJUchDXS11ThARsGi42P5ykCw",
    "name": "BluCabana Restaurant & Cafe",
    "latitude": 9.0812558,
    "longitude": 7.4365057,
    "address": "1322 Shehu Yar'adua Way, Abuja",
    "business_status": "Open now",
    "google_maps_url": "https://www.google.com/maps/place/BluCabana+Restaurant+%26+Cafe",
    "rating": 4.4,
    "primary_category": "Restaurant",
    "categories": ["Restaurant", "Cafe"]
  },
  "contact": {
    "place_id": "ChIJUchDXS11ThARsGi42P5ykCw",
    "phone_number": "+234 810 090 0000",
    "website": "https://www.blucabana.com/",
    "email": "info@blucabana.com",
    "emails": ["info@blucabana.com"]
  },
  "socials": {
    "facebook": "https://facebook.com/blucabana",
    "instagram": "https://instagram.com/blucabana",
    "linkedin": null,
    "x": null,
    "youtube": null,
    "tiktok": null
  }
}
```

### Data Table

| Area | Fields |
| --- | --- |
| Place | name, place\_id, Google Maps URL, coordinates, address, status, rating, categories |
| Contact | phone number, website |
| Enrichment | email, emails, Facebook, Instagram, LinkedIn, X/Twitter, TikTok, YouTube |

### Limitations

- Review counts and review records are not currently extracted.
- Opening hours are not currently extracted.
- Photos and media are not currently extracted.
- Website enrichment may fail on websites that block automated requests.
- Google Maps may return fewer businesses than requested for some searches or locations.
- Results reflect what Google Maps makes available to the browser during the run and should be used in accordance with applicable laws and website terms.

### How to Use the Actor

1. Open the actor on Apify and configure the search queries.
2. Set the maximum number of unique results.
3. Enable Website enrichment when email or social discovery is useful.
4. Start the run and monitor progress in the log.
5. Review or export the resulting Apify Dataset.

Apify lets you download the dataset in formats such as JSON, HTML, CSV, or Excel. You can also schedule recurring runs, connect the dataset to downstream tools, or access it through the Apify API for an automated lead-generation workflow.

### Pricing / Cost Estimation

How much does it cost to scrape Google Maps? Cost depends mainly on browser runtime, result count, and optional website enrichment. Start with a small `maxResults` value to estimate a typical run, then adjust compute limits and enrichment settings. Apify accounts include free usage subject to current platform limits; check your Apify plan for the latest pricing and compute-unit details.

### FAQ, Disclaimers, and Support

This actor is a browser-based Google Maps scraper for structured business research. It does not guarantee exhaustive coverage, and Google Maps layouts and availability can change. Use collected data responsibly, respect applicable privacy, data-protection, robots, and terms-of-service requirements, and obtain consent where required for outreach. For problems or feature requests, use the actor’s Issues tab. Custom solutions for specialized lead workflows are also available.

# Actor input Schema

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

Search Google Maps for businesses matching the query.

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

Google Maps queries to run in one Search-mode actor run.

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

Maximum number of discovered businesses to normalize and push to the dataset.

## `headless` (type: `boolean`):

Run Chromium in headless mode.

## `maxNoNewScrollAttempts` (type: `integer`):

Stop discovery after this many consecutive scroll attempts produce no new businesses.

## `websiteEnrichment` (type: `boolean`):

Optionally fetch business websites for contact enrichment.

## `proxySettings` (type: `object`):

Optional Apify Proxy or own proxy configuration. Leave disabled to connect directly.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "restaurants in Abuja"
  ],
  "maxResults": 20,
  "headless": true,
  "maxNoNewScrollAttempts": 3,
  "websiteEnrichment": true,
  "proxySettings": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Normalized Google Maps business leads produced by this run.

# 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 = {
    "proxySettings": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nocodeninja_ng/google-maps-business-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 = { "proxySettings": { "useApifyProxy": False } }

# Run the Actor and wait for it to finish
run = client.actor("nocodeninja_ng/google-maps-business-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 '{
  "proxySettings": {
    "useApifyProxy": false
  }
}' |
apify call nocodeninja_ng/google-maps-business-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nocodeninja_ng/google-maps-business-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/IEOSw90xcuyjhbb5C/builds/PgwlZaNG3ebzfXhmO/openapi.json
