# Google Maps Scraper — Places, Ratings & Contacts (`hipersoft/google-maps-scraper`) Actor

Search Google Maps and scrape places: name, category, full address, city, coordinates, rating, phone, website, Place ID and map link. Fast browser-free via Google's internal endpoint, no API key. For local lead generation and market research.

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

## Pricing

from $0.005 / place scraped

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/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 Scraper — Places, Ratings, Contacts & Coordinates

Turn any Google Maps search into a clean, structured dataset of local businesses. This Actor queries Google Maps by keyword and location (e.g. "coffee shops in Austin TX") and returns each place with its name, category, full address, phone, website, star rating, Place ID, coordinates and a direct map link. It works browser-free through Google's own internal maps endpoint — fast and lightweight, with **no account and no API key**. Reliable enough for bulk lead lists and repeatable market-research runs.

### Features

- 🗺️ **Keyword + location search** — pass any number of queries like "plumbers in Austin TX"; each returns up to 500 places, paginated automatically.
- ⚡ **Browser-free & fast** — runs are quick and light on memory.
- 📞 **Contact-ready output** — every place includes phone and website when Google exposes them, ideal for outreach lists.
- 📍 **Precise geodata** — latitude, longitude and Google plus code for mapping and radius analysis.
- ⭐ **Ratings + optional details** — star rating is always included; flip on `scrapePlaceDetails` to add total review count, opening hours and open/closed status.
- 🌍 **Locale control** — set `country` and `language` (e.g. `gb`/`en`, `de`/`de`) to match the market you care about.
- 🔁 **Automatic de-duplication** — places are keyed by Place ID / feature ID so you never get the same business twice.

### What you get

One record per business, for example:

```json
{
  "search": "coffee shops in Austin TX",
  "name": "Houndstooth Coffee",
  "category": "Coffee shop",
  "categories": ["Coffee shop", "Espresso bar"],
  "address": "401 Congress Ave #100, Austin, TX 78701",
  "city": "Austin",
  "countryCode": "US",
  "latitude": 30.2681,
  "longitude": -97.7428,
  "rating": 4.6,
  "reviewsCount": 512,
  "phone": "+1 512-394-6051",
  "website": "https://houndstoothcoffee.com/",
  "placeId": "ChIJ_0123456789abcdefghijklmn",
  "featureId": "0x8644b5a1c2d3e4f5:0x1234567890abcdef",
  "plusCode": "76QW+2P Austin, Texas",
  "url": "https://www.google.com/maps/place/?q=place_id:ChIJ_0123456789abcdefghijklmn"
}
```

`reviewsCount`, plus `hours` and `openStatus`, are populated when `scrapePlaceDetails` is enabled.

### Input

```json
{
  "searches": ["coffee shops in Austin TX", "plumbers in Austin TX"],
  "maxItemsPerSearch": 60,
  "country": "us",
  "language": "en",
  "scrapePlaceDetails": false
}
```

| Field | Description |
| --- | --- |
| `searches` | List of queries, ideally "\<what> in \<where>". One per line. |
| `maxItemsPerSearch` | Cap on places per search (1–500, ~20 per page). |
| `country` | Google country code (e.g. `us`, `gb`, `de`). |
| `language` | Results language (e.g. `en`, `es`). |
| `scrapePlaceDetails` | Also fetch total review count, hours and open/closed status (slower). |
| `proxyConfiguration` | Apify Proxy settings; rotation recommended as Google rate-limits by IP. |

### Use cases

- Build local B2B lead lists (name, phone, website) for a city or niche.
- Map competitor density and ratings across a metro area for market research.
- Enrich a CRM with Place IDs, coordinates and categories.
- Feed Place IDs straight into the Google Maps Reviews Scraper for reputation tracking.

### Pricing

Pay-per-event: you're billed a small amount per run and per item scraped — you only pay for what you get. See the **Pricing** tab for current rates.

### FAQ

**Do I need an API key or Google account?**
No. The Actor works browser-free through Google Maps' own internal endpoint, so there's no API key, login or Google Cloud billing to set up. Just add your searches and run.

**How many places can I get per run?**
Each search returns up to 500 places (paginated automatically, ~20 per page). You can queue many searches in one run, so a single run can produce thousands of business records.

**Is scraping Google Maps legal?**
The Actor collects only publicly visible listing data — the same information any visitor sees on [Google Maps](https://www.google.com/maps). Scraping public data is generally permissible, but you are responsible for using it in line with applicable laws and Google's terms.

**Does it collect emails or contact info?**
It returns each business's phone and website when Google exposes them, but it does not visit those websites to extract emails. For emails and social profiles, use the [Google Maps Email Extractor](https://apify.com/hipersoft/google-maps-email-extractor).

**What's the output format?**
One structured JSON record per business, with fields like name, category, address, phone, website, rating, Place ID and coordinates. Export the dataset as JSON, CSV, Excel or feed it to an API.

### Related Actors

Extend your Google Maps and local-lead workflows with these companion Actors:

- [Google Maps Reviews Scraper](https://apify.com/hipersoft/google-maps-reviews) — pull reviewer names, ratings, text and dates for any place; chain Place IDs straight from this Actor.
- [Google Maps Email Extractor](https://apify.com/hipersoft/google-maps-email-extractor) — turn Maps results into a lead list with emails, socials and extra phones.
- [Website Contact Scraper](https://apify.com/hipersoft/website-contact-scraper) — enrich the websites you find here with emails, phones and social profiles.

### Notes

This Actor collects only publicly visible Google Maps listing data. It is an independent tool and is not affiliated with, endorsed by, or sponsored by Google; Google Maps is a trademark of Google LLC. It targets public data only — use it responsibly and in line with applicable laws.

# Actor input Schema

## `searches` (type: `array`):

Search queries, ideally "<what> in <where>" (e.g. "restaurants in Chicago", "plumbers in Austin TX"). One per line.

## `maxItemsPerSearch` (type: `integer`):

Cap places per search (~20 per page).

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

Google country code (e.g. us, gb, de).

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

Results language (e.g. en, es).

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

Apify Proxy recommended (rotated). Google rate-limits by IP.

## `scrapePlaceDetails` (type: `boolean`):

For each place, fetch its full details to add the total review count, opening hours and open/closed status. Slower and costs a place-details event per place (uses proxy retries for reliability).

## Actor input object example

```json
{
  "searches": [
    "coffee shops in Austin TX"
  ],
  "maxItemsPerSearch": 60,
  "country": "us",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "scrapePlaceDetails": false
}
```

# 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 = {
    "searches": [
        "coffee shops in Austin TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/google-maps-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 = { "searches": ["coffee shops in Austin TX"] }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/google-maps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searches": [
    "coffee shops in Austin TX"
  ]
}' |
apify call hipersoft/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hipersoft/google-maps-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/uot4N4JEn5Ez9lOd7/builds/HKwNkfXfWcF0lw9yx/openapi.json
