# Google Maps Scraper – Fast & Cheap Business Data (`saregaa/google-maps-scraper`) Actor

Extract business names, addresses, phone numbers, websites, ratings and coordinates from Google Maps in bulk. Fast HTTP scraping, no proxy needed, priced well below browser-based scrapers. Search by country, city or category — ideal for lead generation and market research.

- **URL**: https://apify.com/saregaa/google-maps-scraper.md
- **Developed by:** [Saregaa](https://apify.com/saregaa) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 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.
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 | Fast & Cheap Business Data Extraction (No Proxy Needed)

### Short Description

This Actor extracts business listings from Google Maps — names, addresses, phone numbers, websites, ratings, and precise coordinates — for any country, city, or category you choose. It's built for people who need **bulk contact and location data fast and cheap**: agencies building lead lists, marketers doing local outreach, and developers who need structured Maps data without touching a browser or managing proxies.

Unlike most Google Maps scrapers, this Actor talks to Google directly over HTTP — no headless browser, no Apify Proxy required on your end. That means fewer moving parts, faster runs, and a lower price per result.

✅ Runs 10x in parallel — thousands of places per run, fast
✅ No Apify Proxy needed — nothing extra to configure or pay for
✅ Search by country, city, or category in one input
✅ Clean, structured JSON — ready for CRM, spreadsheets, or your own database
✅ Export to JSON, CSV, Excel, XML, or HTML table
✅ Full Apify API access — automate, schedule, integrate

***

### What Data Can Be Extracted?

| Field                                                 | Description                                                                                             |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `title`                                             | Business/place name                                                                                     |
| `googleCategory`                                    | Category Google assigns to the place (e.g. "Restaurant")                                                |
| `address`                                           | Full formatted address                                                                                  |
| `country` / `countryCode`                         | Country and ISO2 country code                                                                           |
| `city` / `district` / `street` / `streetLine` | Address broken down into parts                                                                          |
| `postalCode` / `stateProvince`                    | Postal code and administrative region                                                                   |
| `phone`                                             | Phone number as shown by Google (local format)                                                          |
| `phoneUnformatted`                                  | Phone number normalized to international E.164 format (e.g.`+33982202366`)                            |
| `website`                                           | Business website, if listed                                                                             |
| `rating`                                            | Average Google rating (1.0–5.0)                                                                        |
| `attributes`                                        | Accessibility and other attribute tags Google publishes for the place                                   |
| `latitude` / `longitude`                          | Precise coordinates                                                                                     |
| `placeId` / `fid` / `cid` / `googleId`        | Google's internal identifiers for the place, useful for cross-referencing or building direct Maps links |
| `googleMapsUrl`                                     | Direct link to the place on Google Maps                                                                 |

Not included in this version: review counts, photo galleries, and full weekly opening hours — Google doesn't reliably expose these on the fast search endpoint this Actor uses, so we chose not to ship fields that would frequently come back empty. If your workflow needs them, get in touch — a detail-page version is in the works.

***

### Features

- Search any country + optional city + any category ("restaurants", "dentists", "car dealerships", anything you'd type into Google Maps)
- Filter results to an exact city match, or scrape a whole country in one run
- Set a max results limit to control cost and run time precisely
- 10 concurrent workers by default for fast large-scale runs
- No browser, no proxy setup — works out of the box
- Structured, consistent JSON output — every record follows the same schema
- Full Apify API and webhook support for automation
- Schedule recurring runs directly from Apify Console
- Integrate with Zapier, Make, n8n, or any tool that can call the Apify API

***

### How to Scrape Google Maps Data

1. Open the Actor in Apify Console and click **Try for free**.
2. Enter a **country** (name or ISO code, e.g. `france` or `fr`).
3. Optionally enter a **city** to narrow the search, and a **category** to search for (e.g. `restaurants`).
4. Set a **max results** limit if you don't need the entire country/city.
5. Click **Start** and watch results appear in the dataset in real time.
6. Download results as JSON, CSV, Excel, or XML — or pull them via the API.

No proxy, no login, no extra configuration required.

***

### Input Example

```json
{
  "country": "france",
  "city": "Paris",
  "category": "restaurants",
  "maxItems": 500,
  "exactCityMatch": true,
  "concurrency": 10
}
```

***

### Output Example

```json
{
  "placeId": "ChIJQTKPq7fWVA0RRXrB_HeRwBs",
  "fid": "0xd54d6b7ab8f3241:0x1bc09177fcc17a45",
  "cid": "1999758179080174149",
  "googleId": "/g/11qh232lcz",
  "googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJQTKPq7fWVA0RRXrB_HeRwBs",
  "title": "À nous Deux restaurant",
  "googleCategory": "Restaurant",
  "searchCategory": "restaurants",
  "address": "À nous Deux restaurant, 14 Rue de la Liberté, 33320 Le Taillan-Médoc",
  "country": "fr",
  "countryCode": "FR",
  "city": "Le Taillan-Médoc",
  "district": null,
  "street": "14 Rue de la Liberté",
  "streetLine": "14 Rue de la Liberté",
  "postalCode": "33320",
  "stateProvince": null,
  "phone": "09 82 20 23 66",
  "phoneUnformatted": "+33982202366",
  "website": "https://anousdeux-restaurant.fr",
  "rating": 4.8,
  "attributes": {
    "Accessibility": [
      "Has wheelchair-accessible seating",
      "Has wheelchair-accessible entrance"
    ]
  },
  "latitude": 44.9067576,
  "longitude": -0.6699987
}
```

***

### Use Cases

#### Lead Generation

Pull every business matching a category and city — instant, structured lead lists with phone numbers and websites ready for outreach or CRM import.

#### Market Research

Map the density and distribution of a business type across a city or country to spot underserved areas or saturated markets.

#### Local SEO & Agency Reporting

Agencies managing local SEO clients can pull competitor listings, ratings, and coverage by city in bulk instead of checking Google Maps manually one business at a time.

#### Data Enrichment

Feed `placeId`, `cid`, and coordinates into your own pipeline to enrich existing business records with verified addresses, phone numbers, and ratings.

#### Franchise & Expansion Planning

Get a full list of a category's locations across regions to plan territory coverage, competitor proximity, or expansion targets.

***

### API Access

Every run of this Actor can be triggered, monitored, and retrieved through the [Apify API](https://docs.apify.com/api/v2). This means you can:

- Start runs programmatically with custom input (country, city, category, limits)
- Poll run status or use webhooks to get notified when a run finishes
- Pull results directly from the dataset as JSON, CSV, or via streaming
- Schedule recurring runs (daily, weekly, custom cron) from Apify Console
- Connect to Zapier, Make, n8n, or any HTTP-capable workflow tool

See the **API** tab on this Actor's page for ready-to-use code snippets in several languages.

***

### Pricing

This Actor uses Apify's Pay-Per-Event pricing: you pay per place scraped, not per compute unit or per minute of run time, and there's no proxy bandwidth to pay for since none is used. The price per 1,000 results depends on your Apify plan tier — higher tiers get a lower rate, in line with Apify's standard Store discount structure:

| Apify Plan | Price per 1,000 places |
| ---------- | ---------------------- |
| Free       | $0.70                  |
| Starter    | $0.60                  |
| Scale      | $0.54                  |
| Business   | $0.48                  |

Every Apify account — including the Free plan — gets $5 of platform usage credit every month, enough to scrape roughly 7,000 places at the Free-tier rate before you'd pay anything out of pocket.

Because there's no browser and no proxy overhead, this Actor is priced well below scrapers that rely on headless browsers and residential proxies for the same task — you're not paying for infrastructure you don't need.

*(See the Pricing tab on this page for the exact, current rate per tier.)*

***

### Why Use This Instead of the Google Places API or Manual Collection?

| Feature                            | This Actor                                  | Google Places API                                 | Manual Collection                 |
| ---------------------------------- | ------------------------------------------- | ------------------------------------------------- | --------------------------------- |
| Setup required                     | None — just run it                         | API key, billing account, quota setup             | None, but extremely slow          |
| Cost per 1,000 places              | Low, predictable, tiered by your Apify plan | Can run much higher depending on fields requested | Free, but costs your time instead |
| Proxy required                     | No                                          | No                                                | No                                |
| Bulk city/country scraping         | Yes, built in                               | Requires custom pagination logic                  | Impractical at scale              |
| Structured export (CSV/JSON/Excel) | Yes, built in                               | You build it yourself                             | Manual copy-paste                 |
| Scheduling & automation            | Built into Apify                            | You build it yourself                             | Not possible                      |

***

### FAQ

**Is scraping Google Maps legal?**
Google Maps shows publicly available business information. This Actor only collects data that's already visible to anyone browsing Google Maps. That said, how you use the data (e.g. for marketing outreach) may be subject to local regulations like GDPR or CAN-SPAM — that responsibility is yours.

**Do I need to provide my own proxy?**
No. This Actor doesn't require Apify Proxy or any third-party proxy — that's part of what keeps it fast and cheap.

**Can I schedule runs?**
Yes, use Apify's built-in Scheduler to run this Actor automatically on any interval.

**Can I export results to CSV or Excel?**
Yes — JSON, CSV, Excel (XLSX), XML, and HTML table are all supported out of the box from the dataset export menu.

**How much does it cost to run?**
You pay per place scraped, with the rate depending on your Apify plan tier (Free/Starter/Scale/Business) — see the Pricing tab for the exact numbers. There's no separate infrastructure cost since no proxy is used, and every Apify account gets $5 of free monthly credit to try it.

**How many places can I scrape in one run?**
There's no hard cap in the Actor itself — set `maxItems` to whatever you need, or leave it unlimited to scrape an entire country.

**Does it work worldwide?**
Yes, you can target any country by name or ISO code, with an optional city filter.

**Can I use it through the API?**
Yes, every feature available in the Console is also available through the Apify API for full automation.

**Does it include reviews, photos, or opening hours?**
Not in this version. These fields are unreliable on the fast endpoint this Actor uses, so they were intentionally left out rather than shipping fields that come back empty. A detail-page version with deeper data is planned.

**What happens if Google changes its page structure?**
We monitor and update the Actor when Google changes its response format. If you notice missing or incorrect data, please report it — see Support below.

**How often is the Actor updated?**
Actively maintained — updates are pushed whenever Google's data format changes or new fields become reliably available.

***

### SEO Section

#### How to Scrape Google Maps Data

The fastest way to scrape Google Maps without writing code is to use a ready-made Actor like this one: enter a country, city, and category, and get structured business data — name, address, phone, website, rating, and coordinates — in minutes.

#### Google Maps API Alternative

The official Google Places API charges per request and requires a billing-enabled Google Cloud project. This Actor is a no-setup alternative: no API key, no Google Cloud billing, and a lower cost per result for bulk extraction.

#### How Much Does It Cost to Scrape Google Maps

Cost depends on volume and the tool used. Headless-browser scrapers with residential proxies typically cost several dollars per 1,000 results. Because this Actor uses direct HTTP requests with no proxy, the cost per 1,000 results is a small fraction of that — see the Pricing tab for the current rate.

#### Export Google Maps Data to CSV

Every run's results can be downloaded as CSV directly from the dataset, or pulled via the API in CSV format for direct import into Excel, Google Sheets, or a CRM.

#### Automate Google Maps Data Collection

Combine this Actor with Apify's Scheduler and webhooks to run recurring extractions automatically, and connect the output to Zapier, Make, or n8n to push fresh leads into your CRM or spreadsheet without manual work.

***

### Need Emails & Social Profiles Too?

This Actor returns each place's `website` — but not the contact details behind it. If your workflow needs actual emails, Instagram/Facebook/LinkedIn profiles, or other social links, feed the `website` field into [Website Email & Social Media Scraper](https://apify.com/saregaa/website-contacts-scraper): pass it the list of websites from this Actor's output, and it returns emails and social profiles for each one.

Two separate runs today — built to work together, and full integration is on the roadmap.

### Support

Found a bug or missing data? Use the **Issues** tab on this Actor's page, or contact us through Apify Console messaging. We actively maintain this Actor and respond to reports of broken fields or outdated selectors.

# Actor input Schema

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

Country to scrape (e.g. 'france', 'germany', 'us', 'japan')

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

Optional city filter (e.g. 'Paris', 'Munich', 'Tokyo'). Leave empty to scrape entire country.

## `category` (type: `string`):

Category to search for (e.g. 'restaurants', 'cafes', 'hotels', 'bars')

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

Maximum number of places to collect. Enter 0 or leave empty for unlimited scraping.

## `concurrency` (type: `integer`):

Number of parallel request streams (max 10)

## Actor input object example

```json
{
  "country": "france",
  "category": "restaurants",
  "maxItems": 0,
  "concurrency": 10
}
```

# Actor output Schema

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

All places found during this run, one item per place.

# 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("saregaa/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 = {}

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

```

## MCP server setup

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