# Google Maps Scraper — Fast & Cheap (`yearly_register/google-maps-scraper-fast-cheap`) Actor

Extract Google Maps businesses with phones, websites, ratings, reviews, opening hours, coordinates and Place IDs. Fast, simple, pay per unique result.

- **URL**: https://apify.com/yearly\_register/google-maps-scraper-fast-cheap.md
- **Developed by:** [Automation Tech](https://apify.com/yearly_register) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.29 / 1,000 business 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?

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

Extract local businesses from Google Maps by **keyword + location** and get clean, structured data ready for lead generation, market research, local SEO, and business directories.

**No Google API key required. Pay only for unique businesses returned.**

### Why use this Actor?

- **Fast result extraction** — designed to collect Google Maps search results without opening every place detail page.
- **Pay per result** — one charge per unique business successfully written to the Dataset.
- **No duplicate charges** — duplicate businesses, retries, failed requests, and empty results are not charged.
- **Lead-ready fields** — names, addresses, phone numbers, websites, ratings, review counts, coordinates, opening hours, Place IDs, and more.
- **Automatic deduplication** — duplicate businesses across search results are filtered before output.
- **No Google API key** — enter your searches, location, and result limit and run.
- **Reliable production access** — production runs use residential proxy infrastructure for Google Maps reliability.

A recent production benchmark returned **100 unique businesses in about 41 seconds** with 0 query failures.

### Input

Provide one or more search queries and a location:

```json
{
  "searchQueries": ["dentists", "car dealers"],
  "location": "Oslo, Norway",
  "maxResults": 100,
  "language": "en",
  "country": "no"
}
```

#### Input fields

- `searchQueries` — one or more Google Maps searches, such as `dentists`, `restaurants`, or `car dealers`.
- `location` — city, region, or other location, such as `Oslo, Norway`.
- `maxResults` — maximum number of unique businesses to return. Defaults to `100`, maximum `1000`.
- `language` — optional Google Maps interface language, such as `en` or `nb`.
- `country` — optional country code, such as `no` or `us`.

### Output

Each Dataset item represents one unique Google Maps business:

```json
{
  "name": "Example Dental Clinic",
  "category": "Dentist",
  "address": "Examplegata 1, 0150 Oslo",
  "city": "Oslo",
  "postalCode": "0150",
  "country": "NO",
  "latitude": 59.91,
  "longitude": 10.75,
  "phone": "+47 22 00 00 00",
  "website": "https://example.no",
  "rating": 4.8,
  "reviewsCount": 325,
  "priceLevel": null,
  "openingHours": [
    "Monday: 8 am–5 pm",
    "Tuesday: 8 am–5 pm"
  ],
  "placeId": "ChIExample",
  "googleMapsUrl": "https://www.google.com/maps/search/?api=1&query_place_id=ChIExample",
  "temporarilyClosed": false,
  "permanentlyClosed": false
}
```

#### Available fields

`name`, `category`, `address`, `city`, `postalCode`, `country`, `latitude`, `longitude`, `phone`, `website`, `rating`, `reviewsCount`, `priceLevel`, `openingHours`, `placeId`, `googleMapsUrl`, `temporarilyClosed`, `permanentlyClosed`.

Google Maps does not expose every field consistently for every result. Fields such as `reviewsCount`, `openingHours`, `phone`, `website`, `city`, `country`, or `placeId` may be `null` when Google does not expose them reliably in the available search-result data.

### Common use cases

- Local lead generation
- Local SEO research
- Competitor discovery
- Building business directories
- Market and territory research
- Finding businesses with websites or phone numbers
- Location-based prospect lists

### Pricing

This Actor uses **pay-per-result pricing**.

A `place` event is charged only when a unique business is successfully written to the Dataset. Duplicate results, retries, failed requests, and empty searches are not charged.

### Limits and behavior

- Maximum `maxResults`: `1000`
- Results depend on what Google Maps makes available for the selected query and location.
- Some public fields may be unavailable for individual businesses.
- A transient query failure is retried once with a fresh residential proxy session.
- If one query fails permanently, successful results from other queries remain available.

### Responsible use

Use this Actor only for lawful and proportionate collection of public business information. Follow applicable privacy, marketing, and data-protection laws, and respect recipients' communication preferences.

# Actor input Schema

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

Business categories or searches, for example dentists or car dealers.

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

City, region, or country to search in.

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

Stop as soon as this many unique businesses have been produced.

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

Optional Google Maps interface language, for example en or nb.

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

Optional two-letter country code to localize results, for example no.

## Actor input object example

```json
{
  "searchQueries": [
    "dentists"
  ],
  "location": "Oslo, Norway",
  "maxResults": 5,
  "language": "en",
  "country": "no"
}
```

# Actor output Schema

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

All normalized Google Maps businesses produced by this run.

# 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 = {
    "searchQueries": [
        "dentists"
    ],
    "location": "Oslo, Norway",
    "maxResults": 5,
    "language": "en",
    "country": "no"
};

// Run the Actor and wait for it to finish
const run = await client.actor("yearly_register/google-maps-scraper-fast-cheap").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 = {
    "searchQueries": ["dentists"],
    "location": "Oslo, Norway",
    "maxResults": 5,
    "language": "en",
    "country": "no",
}

# Run the Actor and wait for it to finish
run = client.actor("yearly_register/google-maps-scraper-fast-cheap").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 '{
  "searchQueries": [
    "dentists"
  ],
  "location": "Oslo, Norway",
  "maxResults": 5,
  "language": "en",
  "country": "no"
}' |
apify call yearly_register/google-maps-scraper-fast-cheap --silent --output-dataset

```

## MCP server setup

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

```

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/gtzDh6G72bssDAUlM/builds/jdyB9yWTboWOFADgQ/openapi.json
