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

Extract business names, ratings, reviews, categories, addresses, phone numbers, websites, opening hours, and Google Maps URLs from search queries or place URLs.

- **URL**: https://apify.com/koushik\_ai\_devloper/google-maps-business-leads-scraper.md
- **Developed by:** [koushik biswas](https://apify.com/koushik_ai_devloper) (community)
- **Categories:** Lead generation, Social media, SEO tools
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00015 / actor start

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

### What does Google Maps Business Leads Scraper do?

Google Maps Business Leads Scraper extracts structured business data from Google Maps search results and place pages. Use it as a **Google Maps lead generation tool** to collect business names, categories, ratings, review counts, addresses, phone numbers, websites, opening hours, and Google Maps URLs from keywords such as `dentists in Chicago`, `restaurants in Dubai`, or `roofing companies near Austin`.

This Actor is designed for marketers, local SEO agencies, sales teams, researchers, and developers who need a repeatable way to turn Google Maps results into a clean dataset. You can run it with simple search queries, paste existing Google Maps URLs, export the dataset to CSV, Excel, JSON, or connect the output to the Apify API.

### Why use this Google Maps scraper?

Google Maps is one of the best sources for local business discovery, but manually copying leads is slow and error-prone. This Actor helps you automate that workflow with:

- Search query scraping for local business discovery
- Google Maps place URL scraping for exact business profiles
- Structured dataset fields for CRM import and enrichment
- Residential proxy support for production runs
- Result limits per query to control cost and runtime
- Clean output columns for business name, address, phone, website, rating, reviews, and opening hours
- Automatic retries and failed request records for easier troubleshooting

### How to scrape Google Maps business leads

1. Choose an industry from the dropdown, or enter a custom industry.
2. Select a country and optionally add state, district, and city for more targeted leads.
3. Set the maximum number of results per search.
4. Choose the data depth. Use Fast for lower cost and large runs; use Contact only when you need richer phone and website extraction.
5. Keep Apify Residential Proxy enabled for the best production reliability.
6. Run the Actor and open the Dataset tab.
7. Export the results to CSV, Excel, JSON, or use the Apify API to send leads to your own system.

You can also paste Google Maps place URLs into the `startUrls` input when you already know the exact businesses you want to extract.

### Input example

```json
{
  "locationMode": "guided",
  "industry": "restaurants",
  "country": "India",
  "state": "Maharashtra",
  "district": "Pune district",
  "city": "Pune",
  "searchQueries": [],
  "maxResultsPerQuery": 100,
  "detailsLevel": "fast",
  "maxConcurrency": 8,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Output example

```json
{
  "searchQuery": "restaurants in Pune, Pune district, Maharashtra, India",
  "sourceType": "search",
  "industry": "restaurants",
  "country": "India",
  "state": "Maharashtra",
  "district": "Pune district",
  "city": "Pune",
  "position": 1,
  "name": "Example Coffee Roasters",
  "category": "Coffee shop",
  "rating": 4.7,
  "reviewsCount": 1284,
  "address": "123 Main St, Austin, TX 78701",
  "phone": "+1 512-555-0100",
  "website": "https://example.com",
  "hasPhone": true,
  "hasWebsite": true,
  "leadQualityScore": 100,
  "priceRange": "$$",
  "openingHours": ["Monday 7 AM-6 PM", "Tuesday 7 AM-6 PM"],
  "imageUrl": null,
  "googleMapsUrl": "https://www.google.com/maps/place/...",
  "placeId": "0x0000000000000000:0x0000000000000000",
  "status": "success",
  "scrapedAt": "2026-08-23T00:00:00.000Z"
}
```

### What Google Maps data can you extract?

| Field | Description |
| --- | --- |
| `name` | Business or place name |
| `category` | Google Maps category when visible |
| `rating` | Star rating as a number |
| `reviewsCount` | Number of Google reviews |
| `address` | Street address or formatted location |
| `phone` | Public phone number when available |
| `website` | Business website URL |
| `hasPhone` | Boolean flag for CRM filtering |
| `hasWebsite` | Boolean flag for CRM filtering |
| `leadQualityScore` | Simple 0-100 score based on available business and contact fields |
| `openingHours` | Visible weekly opening hours |
| `googleMapsUrl` | Canonical Google Maps page URL |
| `placeId` | Best-effort Google Maps place identifier |

### How much does it cost to scrape Google Maps?

The final run cost depends on how many searches you run, how many results you request, page load speed, proxy type, and retry volume. For small tests, start with 5 to 20 results per query. For production lead generation, increase `maxResultsPerQuery` gradually and monitor cost in Apify Console.

Residential proxies are recommended because Google Maps can block datacenter traffic. They cost more than no proxy or datacenter proxy, but they usually provide better reliability for commercial scraping.

### Is this Google Maps scraper good for lead generation?

Yes. The output is structured for lead generation workflows: business name, category, address, phone, website, rating, review count, and source URL. You can export the dataset and import it into a CRM, spreadsheet, enrichment pipeline, cold outreach system, or local SEO audit process.

For best lead quality, use specific search queries such as `emergency plumbers in Phoenix AZ` instead of broad queries such as `businesses in USA`.

### Tips for reliable production runs

- Use the guided country, state, district, city, and industry fields for cleaner searches.
- For 500-result runs, use `detailsLevel: "fast"` and keep Extended mode off.
- Use `detailsLevel: "contact"` only when richer phone and website extraction is worth the extra runtime.
- Keep concurrency around 8 with residential proxies for larger runs.
- Use Apify Residential Proxy for production scraping.
- Run smaller batches first to check output quality.
- Expect some fields to be missing because not every Google Maps profile includes a phone number, website, or opening hours.
- Re-run important searches periodically because business data changes.

### Limitations and compliance

Google Maps pages change frequently, so some fields are extracted on a best-effort basis. This Actor only collects publicly visible information available during the run. Make sure your use of scraped data follows applicable laws, platform terms, privacy rules, and outreach regulations in your jurisdiction.

### FAQ

#### Can I scrape Google Maps by city?

Yes. Add a city or region to the search query, such as `real estate agents in Dallas TX` or `Italian restaurants in London`.

#### Can I scrape specific Google Maps business pages?

Yes. Paste Google Maps place URLs into `startUrls`. The Actor will scrape those exact profiles.

#### Can I export Google Maps results to Excel or CSV?

Yes. After the run finishes, open the Dataset tab and export results as CSV, Excel, JSON, XML, RSS, or HTML.

#### Why are some phone numbers or websites missing?

Some businesses do not publish those fields on Google Maps, and Google may hide or lazy-load details depending on location, language, and profile type.

#### Can developers call this Actor with an API?

Yes. Every Apify Actor can be started through the Apify API, scheduled, integrated with webhooks, or connected to other Actors and external systems.

# Actor input Schema

## `locationMode` (type: `string`):

Use guided fields for clean lead searches, or use custom search queries when you already know exactly what to search.

## `industry` (type: `string`):

Choose the business category to search on Google Maps.

## `customIndustry` (type: `string`):

Used only when Industry is set to Custom. Example: ayurvedic clinics, solar panel installers, wedding photographers.

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

Country used to build guided Google Maps search queries.

## `customCountry` (type: `string`):

Used only when Country is set to Custom.

## `state` (type: `string`):

Optional. Example: Maharashtra, California, England, Ontario.

## `district` (type: `string`):

Optional. Example: Pune district, Los Angeles County, Greater London.

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

Optional. Example: Pune, Austin, Dubai Marina. Add a city for better quality and faster runs.

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

Optional advanced searches. Example: plumbers in Austin TX, coffee shops near Seattle, dentists in Miami.

## `startUrls` (type: `array`):

Optional Google Maps URLs. Use place URLs to scrape exact businesses or search URLs to collect multiple results.

## `maxResultsPerQuery` (type: `integer`):

Maximum number of places to save for each generated or custom search. 500 results can take a long time because each business page must be opened for reliable contact details.

## `detailsLevel` (type: `string`):

Fast is recommended for large result counts and lower runtime cost. Contact opens each business page to improve phone and website extraction. Extended also tries to collect opening hours and image URLs.

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

Higher values are faster but can increase blocking. Use 8 with Fast mode and residential proxies for larger runs.

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

Google Maps interface language code used during scraping.

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

Residential proxies are recommended for production Google Maps scraping, especially when collecting hundreds of results.

## Actor input object example

```json
{
  "locationMode": "guided",
  "industry": "restaurants",
  "country": "India",
  "searchQueries": [],
  "maxResultsPerQuery": 100,
  "detailsLevel": "fast",
  "maxConcurrency": 8,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Structured Google Maps business leads extracted from search queries and place URLs.

## `crmExport` (type: `string`):

A simplified dataset view for CRM and spreadsheet import.

# 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": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("koushik_ai_devloper/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 = { "searchQueries": [] }

# Run the Actor and wait for it to finish
run = client.actor("koushik_ai_devloper/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 '{
  "searchQueries": []
}' |
apify call koushik_ai_devloper/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,koushik_ai_devloper/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/9q9YlZLxh3uO7g2h8/builds/zxRh6rxfgNEVBL9xm/openapi.json
