# Google Maps Places Scraper (`smarcell/google-maps-places-scraper`) Actor

Look up public Google Maps places by name. Returns title, address, rating, phone, website. Named venues work; category listings often do not.

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

## Pricing

from $5.00 / 1,000 place records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Places Scraper do?

**Google Maps Places Scraper** looks up **public** [Google Maps](https://www.google.com/maps) search results and returns structured place data: **title, address, rating, phone, website, place ID, and coordinates**. It uses fast HTTP requests (`httpx`) — no browser, no login, no API key.

Best for **named venue lookups** (e.g. `Centrál Grand Cafe Budapest`). Category searches (`dentist Budapest`, `restaurants Rome`) often return empty because Google fills those lists in the browser. This is a lightweight **Google Places API alternative** for quick, low-cost lookups — not a full replacement.

### Ready-to-run examples (no setup)

- [Dentists in Budapest](https://apify.com/smarcell/google-maps-places-scraper/examples/dentists-budapest-google-maps)
- [Restaurants in Rome](https://apify.com/smarcell/google-maps-places-scraper/examples/rome-restaurants-gmaps)
- [Hotels in Vienna](https://apify.com/smarcell/google-maps-places-scraper/examples/vienna-hotels-gmaps)
- [Cafes in Budapest](https://apify.com/smarcell/google-maps-places-scraper/examples/budapest-cafes-gmaps)

Pair with [Website Contact Extractor](https://apify.com/smarcell/website-contact-extractor) to enrich `website` fields with emails.

### Why use Google Maps Places Scraper?

- **Lead generation** — collect business name, phone, website, and address from a search query
- **Local SEO research** — compare ratings and review counts for named competitors
- **POI enrichment** — add `placeId`, latitude, and longitude to your CRM or database
- **Apify platform** — schedule runs, export CSV/JSON/Excel, call via REST API, integrate with Zapier/Make

### What data can it extract?

| Field | Type | Description |
| --- | --- | --- |
| `title` | string | Place name |
| `address` | string | Public address |
| `rating` | number | Star rating (0–5) |
| `reviewsCount` | integer | Review count when present in payload |
| `category` | string | Primary category label |
| `phone` | string | Phone when included in search payload |
| `website` | string | Website URL when included |
| `placeId` | string | Google Maps place ID (`ChIJ…`) |
| `latitude` | number | WGS-84 latitude |
| `longitude` | number | WGS-84 longitude |
| `mapsUrl` | string | Official Maps deep link |
| `scrapedAt` | string | UTC snapshot time |

### How to scrape Google Maps places

1. Open the **Input** tab and enter a **Search query** — prefer a **specific place name + city**.
2. Optionally add a **Location** (appended if not already in the query).
3. Set **Maximum places** (default 20, max 100).
4. Run the Actor. Download results from the **Dataset** tab.

Local test:

```bash
apify run --input-file example_input.json
```

### How much does it cost?

- **Pay-per-event pricing:** each stored place is billed as event `place-record` when monetization is enabled in Console.
- **Platform usage:** Apify compute and storage apply on top (FREE tier includes $5/month credits).
- **Efficiency:** HTTP-only, no browser — typically very low compute cost per run.

Example: 50 places ≈ 50 `place-record` events + minimal compute.

### Input

See the **Input** tab for the full form. Required: `searchQuery`. Optional: `location`, `maxItems`.

**Tip:** Use named venues for reliable results. For bulk category scraping, consider a browser-based Actor from the Apify Store.

### Output

Download the dataset as **JSON, CSV, Excel, or HTML**.

```json
{
  "title": "Centrál Grand Cafe & Bar",
  "address": "Budapest, Károlyi utca 9, 1053 Hungary",
  "rating": 4.8,
  "reviewsCount": 1234,
  "category": "Restaurant",
  "phone": "+36 30 945 8058",
  "website": "https://example-cafe.hu/",
  "placeId": "ChIJPWTeZUTcQUcRMXCSK_9QR0E",
  "latitude": 47.491985,
  "longitude": 19.056884,
  "mapsUrl": "https://www.google.com/maps/search/?api=1&query=...&query_place_id=ChIJ...",
  "scrapedAt": "2026-08-28T19:30:00Z"
}
```

### Tips

- Start with `maxItems: 5` to verify your query returns data before scaling up.
- Combine `searchQuery` + `location` for disambiguation (`Starbucks`, `location: Vienna`).
- Schedule weekly runs to track rating changes for a fixed list of named venues.

### FAQ and disclaimers

**Why is my category search empty?**\
Google often renders category result lists in JavaScript. This Actor reads only the first HTTP response. Named places work much more often.

**Does this replace Google Places API?**\
No. For production-grade, ToS-compliant data at scale, use the [official Places API](https://developers.google.com/maps/documentation/places/web-service/overview).

**Can it bypass captchas?**\
No. If Google returns a sorry page or consent wall, the run logs it and returns empty.

**Legal note:** Only public data visible without login is extracted. You are responsible for compliance with Google Terms of Service and applicable law.

Report issues via the **Issues** tab. API access: see the **API** tab in Apify Console.

### Related Actors

- [Website Contact Extractor](https://apify.com/smarcell/website-contact-extractor) — enrich place `website` fields with emails and phones
- [EU TED Tender Scraper](https://apify.com/smarcell/eu-ted-tender-scraper) — EU public procurement notices
- [Hungary Procurement Monitor](https://apify.com/smarcell/hungary-procurement-monitor) — Hungarian national tenders below EU threshold

# Actor input Schema

## `searchQuery` (type: `string`):

What to look up on public Google Maps, e.g. a place name ('Centrál Grand Cafe Budapest') or a category + city ('fogorvos Budapest'). Named places are much more likely to appear in the first HTTP response. Category listings are often filled in by the Maps UI and may come back empty here.

## `location` (type: `string`):

Optional city or area. Appended to the search query when it is not already included.

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

Cap on places written to the dataset. Default 20, maximum 100. This Actor only returns what the public first-page payload already contains; it will not invent extra rows or paginate undocumented protobuf offsets.

## Actor input object example

```json
{
  "searchQuery": "fogorvos Budapest",
  "maxItems": 20
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQuery": "fogorvos Budapest",
    "location": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("smarcell/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 = {
    "searchQuery": "fogorvos Budapest",
    "location": "",
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,smarcell/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/arm1HBiZJzjcUhhEp/builds/weoREIT3TU70ggK2q/openapi.json
