# Google Maps Scraped (`apificasion/google-maps-scraped`) Actor

Scraping Google Maps for a Living

- **URL**: https://apify.com/apificasion/google-maps-scraped.md
- **Developed by:** [Nalintha Alwis](https://apify.com/apificasion) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Maps Scraper Actor 🗺️

A production-grade, high-performance **Apify Actor** designed to extract detailed business leads, contact information, ratings, reviews, opening hours, and location coordinates directly from **Google Maps**.

***

### ✨ Features

- **Lead Generation & Business Contacts**:
  - Business name, categories, and primary category tag.
  - Verified phone number (clean format).
  - Cleaned direct external website URL (unwrapped from Google redirection trackers).
  - Full street address with broken-down components: street, city, state, postal code, and country.
  - Precise GPS coordinates (latitude, longitude, zoom level) and Google Plus Code.
- **Reviews & Reputation Data**:
  - Total star rating (e.g. `4.8`).
  - Total review count.
  - Price level indicator (`$`, `$$`, `$$$`, etc.).
  - Optional full customer reviews: reviewer name, avatar photo, star rating, published date, and full review text.
- **Operational Status & Hours**:
  - Full weekly opening hours table (Monday – Sunday schedule).
  - Status flags: `permanentlyClosed`, `temporarilyClosed`.
  - Claim status: `claimThisBusiness` flag (identifies unclaimed businesses ideal for agency outreach).
- **Photos & Visuals**:
  - Primary cover/hero photo URL.
  - Optional gallery image URLs up to configured limit.
- **Advanced Scraping Mechanics**:
  - **EU / GDPR Consent Handler**: Automatically bypasses Google cookie consent popups across all EU/UK regions.
  - **Single Place Redirect Detection**: Seamlessly handles direct place queries without breaking feed logic.
  - **Infinite Scroll Feed Engine**: Smooth container scrolling with smart retry jiggling to trigger lazy loading.
  - **Apify Proxy & Residential Support**: Full integration with Apify datacenter and residential proxies.

***

### 💰 Pricing (Pay Per Event - PPE)

This Actor uses Apify's transparent **Pay Per Event (PPE)** pricing model. You only pay for the exact place records and data successfully extracted and delivered to your dataset—**never** for compute run time, idle proxies, or retries.

#### Event Pricing Breakdown

| Event Name | Price (USD) | What's Included |
|---|---|---|
| **`place`** | **$0.004** / place<br>*($4.00 per 1,000 places)* | Complete business profile: Name, primary category, all category tags, verified phone, cleaned direct website, broken-down address (street, city, state, postal code, country), exact GPS coordinates, Google Plus Code, total star score, review count, price tier, full weekly opening hours, closed indicators (`permanentlyClosed`, `temporarilyClosed`), unclaimed business status (`claimThisBusiness`), and cover photo. |
| **`reviews`** | **$0.002** / place<br>*($2.00 per 1,000 places)* | Full customer reviews extracted when `includeReviews: true`: Reviewer name, star rating, full text, published date, and reviewer avatar URL. |

> 💡 **Tip**: If you only need business contacts, addresses, and phone numbers for B2B lead generation (`includeReviews: false`), your total cost is just **$0.004 per lead ($4 per 1k leads)**!

#### 📊 Cost Estimation Table

| Number of Places | Standard Place Data (`place`) | Places with Customer Reviews (`place` + `reviews`) |
|---|---|---|
| **100 places** | **$0.40** | **$0.60** |
| **500 places** | **$2.00** | **$3.00** |
| **1,000 places** | **$4.00** | **$6.00** |
| **5,000 places** | **$20.00** | **$30.00** |
| **10,000 places** | **$40.00** | **$60.00** |
| **50,000 places** | **$200.00** | **$300.00** |

#### Why Pay Per Event is Better Than Traditional Compute (CU) Billing

- 🎯 **100% Predictable Budget**: You know the exact cost before starting your run.
- 🚫 **No Charge for Failures or Timeouts**: If a page fails to load or Google blocks an IP, you pay $0.
- ⚡ **No Idle Time Fees**: You don't pay for browser launch, consent dialog navigation, or network latency.
- 🎁 **Free Monthly Allowance**: Apify provides all users with **$5 free monthly usage credit**, meaning you can scrape up to **1,250 full business listings completely free** every month!

***

### 📄 License

Licensed under the **Apache License 2.0**.

# Actor input Schema

## `searchStringsArray` (type: `array`):

List of search queries to scrape on Google Maps. E.g. 'restaurants in Manhattan', 'plumber in Austin TX'.

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

Direct Google Maps search URLs (e.g. https://www.google.com/maps/search/...) or place URLs (https://www.google.com/maps/place/...).

## `locationQuery` (type: `string`):

Optional city, region, or coordinate anchor to center the map search before querying.

## `maxCrawledPlacesPerSearch` (type: `integer`):

Maximum number of places to extract for each search term or search URL.

## `maxTotalPlaces` (type: `integer`):

Hard limit on total places scraped across all searches.

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

Preferred language for results (e.g. 'en', 'es', 'de', 'fr', 'ja').

## `includeReviews` (type: `boolean`):

When enabled, scrapes customer review text, ratings, and authors for each place.

## `maxReviews` (type: `integer`):

Number of reviews to scrape per place when 'Extract Reviews' is enabled.

## `includeImages` (type: `boolean`):

Extract image and thumbnail links from the place photos gallery.

## `maxImages` (type: `integer`):

Maximum gallery photos to extract per place.

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

Use Apify Proxy (RESIDENTIAL recommended for high volume) or custom proxies to prevent Google rate-limits.

## Actor input object example

```json
{
  "searchStringsArray": [
    "dentists in Austin TX"
  ],
  "maxCrawledPlacesPerSearch": 20,
  "maxTotalPlaces": 100,
  "language": "en",
  "includeReviews": false,
  "maxReviews": 5,
  "includeImages": false,
  "maxImages": 5
}
```

# Actor output Schema

## `places` (type: `string`):

Dataset containing scraped Google Maps businesses, contact information, addresses, ratings, reviews, opening hours, and coordinates.

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

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

# Run the Actor and wait for it to finish
run = client.actor("apificasion/google-maps-scraped").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 '{
  "searchStringsArray": [
    "dentists in Austin TX"
  ]
}' |
apify call apificasion/google-maps-scraped --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apificasion/google-maps-scraped"
        }
    }
}
```

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/0Dfcz8z83hpEUHgA0/builds/4JH7cGZyZZGxvGR5r/openapi.json
