# Google Maps Scraper - Businesses & Contacts (`pear_fight/google-maps-places-scraper`) Actor

Scrape Google Maps businesses and places. Extract names, addresses, phones, websites, hours, ratings, reviews, categories, photos. Search by keyword & location. No API limits. Pay per result. Export JSON/CSV/Excel.

- **URL**: https://apify.com/pear\_fight/google-maps-places-scraper.md
- **Developed by:** [Harald](https://apify.com/pear_fight) (community)
- **Categories:** Lead generation
- **Stats:** 103 total users, 10 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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 Scraper - Businesses, Places & Contacts

Extract business and place data from **Google Maps** at scale — no Google API key and no API rate limits. Search by keyword and location, then collect names, addresses, phone numbers, websites, opening hours, ratings, reviews, categories, and photos. Ideal for **lead generation**, local SEO, market research, and building business directories.

### What this Google Maps Scraper does

- 🔍 **Search by keyword + location** (e.g. "coffee shops in Austin")
- 🏢 Extract **business names, addresses, and categories**
- ☎️ Collect **phone numbers and websites** for outreach
- ⭐ Get **ratings and review counts**
- 🕒 Capture **opening hours** and location coordinates
- 🖼️ Pull **photo URLs**
- 💾 Export to **JSON, CSV, or Excel**
- 🚫 **No Google Maps API key and no API request limits**

### Use cases

- **Lead generation** — build targeted lists of local businesses with contact details
- **Local SEO & market research** — analyze competitors, categories, and ratings by area
- Build and enrich a **business directory** or CRM
- Sales prospecting for agencies, B2B, and local services
- Location and footfall analysis for expansion planning

### Input

| Field | Type | Description |
|-------|------|-------------|
| `searchQueries` | array | One or more search terms, ideally including a location |
| `maxResults` | integer | Maximum number of results per query (default: 20) |
| `proxyConfig` | object | Proxy settings (Apify Proxy recommended) |

#### Example input

```json
{
  "searchQueries": [
    "coffee shops in Austin, TX",
    "dentists in Miami, FL"
  ],
  "maxResults": 50,
  "proxyConfig": {
    "useApifyProxy": true
  }
}
```

### Output

Each result is a clean JSON record with the business's public Google Maps details:

| Field | Description |
|-------|-------------|
| `title` / name | Business name |
| `address` | Full street address |
| `phone` | Phone number (when listed) |
| `website` | Business website (when listed) |
| `category` | Primary business category |
| `rating` | Average star rating |
| `reviewsCount` | Number of reviews |
| `openingHours` | Opening hours by day |
| `location` | Latitude / longitude |
| `images` | Photo URLs |
| `url` | Google Maps link |
| `searchQuery` | The query that produced this result |
| `scrapedAt` | Timestamp of extraction |

#### Example output

```json
{
  "title": "Blue Bottle Coffee",
  "address": "123 Congress Ave, Austin, TX 78701",
  "phone": "+1 512-555-0100",
  "website": "https://bluebottlecoffee.com/",
  "category": "Coffee shop",
  "rating": 4.6,
  "reviewsCount": 1240,
  "url": "https://www.google.com/maps/place/..."
}
```

### How to use

1. Add one or more **search queries** (include a city or area for best results).
2. Set **maxResults** per query.
3. Leave proxy on **Apify Proxy** for reliable extraction.
4. Click **Start**, then download your data as JSON, CSV, or Excel.

### Tips

- Add the location directly in each query (e.g. "plumbers in Denver") for the most relevant results.
- Split large areas into multiple queries (by neighborhood or ZIP) to get deeper coverage.
- Not every business lists a phone or website — those fields may be empty.

### Pricing

This Actor uses **pay-per-result** pricing — you only pay for the businesses you collect. No monthly Google API fees and no request quotas.

### Frequently asked questions

**Do I need a Google Maps API key?** No. This Actor works without any Google API key and isn't subject to Google's API request limits.

**Can I scrape emails?** Google Maps listings don't include emails directly. This Actor extracts websites and phone numbers; you can pair it with a contact-details enrichment step to find emails from the websites.

**Which export formats are supported?** JSON, CSV, and Excel from the run's Storage tab.

**Is this legal?** The Actor collects only publicly available information. You are responsible for how you use the data and for complying with Google's terms and applicable laws.

***

*Built by Harald. Questions or feature requests? Open an issue on the Actor's Issues tab.*

# Actor input Schema

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

Search queries for Google Maps. Example: \['restaurants in Miami', 'hotels in London']

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

Maximum number of places to extract per query.

## `proxyConfig` (type: `object`):

Apify proxy configuration. Residential proxies recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "restaurants in Miami"
  ],
  "maxResults": 20,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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("pear_fight/google-maps-places-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 = {}

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

```

## MCP server setup

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