# ☎️ 📩 \[Only $0.5/1K] Google Maps Scraper – Contacts (`lofomachines/google-maps-places-contact-scraper`) Actor

Scrape Google Maps at scale: find every business by keyword, category and location, or bulk-export reviews from any list of Maps URLs. Returns names, addresses, phones, websites, emails-ready domains, ratings, review counts, opening hours, photos, coordinates and full reviews with date filters.

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

## Pricing

from $0.50 / 1,000 place details

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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, Contacts & Emails Extractor

**Scrape Google Maps** without an API key, a browser farm or a Places API bill. Find **every business** for a keyword, category and location, then export **names, addresses, phone numbers, websites, emails, ratings, review counts, opening hours, photos and GPS coordinates**.

One Actor, two jobs:

| Mode | What it does | Typical use |
|---|---|---|
| 🔎 **Search places** | Discovers businesses by keyword or category + location | Lead generation, market mapping, local SEO |
| 📍 **Place details from URLs** | Full business record for a list of Maps links | Enriching an existing list of locations |

Results stream into your dataset as you go and export to **JSON, CSV, Excel, XML** or straight into your app via the Apify API.

---

### Why use this Google Maps scraper?

- ⚡ **Fast and cheap** — everything runs over plain HTTP, with no browser anywhere in the stack. Hundreds of businesses per minute, at a fraction of the Google Places API cost and on a small memory footprint.
- 📧 **Emails and social profiles** — Google Maps never publishes email addresses, so the Actor reads them from each business's own website, along with Facebook, Instagram, LinkedIn, X, YouTube and TikTok links.
- 🧭 **Past Google's own 250-result wall** — a single Maps query stops at roughly 250 results however you page it. Ask for more and the Actor divides the area into quadrants, searches each one, keeps dividing wherever there is still something new, and de-duplicates — up to 5000 businesses per keyword.
- 🗂️ **122 ready-made categories** — pick *Hotels*, *Restaurants*, *Dentists*, *Plumbers*, *Gyms*, *Real estate agencies* and more from a dropdown. No need to guess the right search phrase.
- 🌍 **Any country, any language** — localized names, categories and opening hours.
- 🧾 **Everything Google exposes** — service options, accessibility, amenities, atmosphere, popular times, price range, plus codes, rating breakdowns and photo galleries.
- 🔗 **Any URL format** — long place URLs, `maps.app.goo.gl` share links, `?cid=` links and Place IDs all resolve automatically.
- 📊 **Live progress** — the log reports how many places are done, the rate and an ETA, so a long run is never a black box.

---

### Use cases

#### Local lead generation
Pick a category and a city, and get a contact list with phone numbers, addresses, websites and — with **Find emails and social profiles** turned on — email addresses and social links pulled from each business's own site. Filter by rating or review count to find businesses that are underperforming, or thriving, and pitch accordingly.

#### Local SEO and rank tracking
Compare how businesses appear across neighbourhoods, cities and countries. Track review counts, ratings and category assignments over time by scheduling daily or weekly runs.

#### Competitor and market mapping
Map every hotel, restaurant or clinic in a region with coordinates, price bands and rating distributions. Ideal for site selection, pricing studies and franchise planning.

#### Enriching a CRM
Feed a list of Google Maps URLs and get back a normalized record for each: opening hours, categories, plus codes, photos and coordinates.

---

### Input

#### Search mode

| Parameter | Type | Description |
|---|---|---|
| `mode` | String | `search` |
| `searchTerms` | Array | Free-text keywords, one per line. |
| `categories` | Array | Preset categories (multi-select dropdown). |
| `location` | String | City, region, address or postcode. Empty = country-wide. |
| `searchRadius` | String | `neighborhood`, `city`, `metro`, `region` or `country`. |
| `maxPlaces` | Integer | Max businesses per keyword/category. Up to 5000. |
| `language` | String | Result language, e.g. `en`, `it`, `de`. Applies in every mode. |
| `country` | String | Country Google localizes for, and browses from. Applies in every mode. |

#### Place URLs mode

| Parameter | Type | Description |
|---|---|---|
| `mode` | String | `places` |
| `startUrls` | Array | Google Maps place URLs, share links, `?cid=` links or Place IDs. Up to 1000. |

#### Extra data (works in every mode)

| Parameter | Type | Description |
|---|---|---|
| `includePlaceDetails` | Boolean | Adds opening hours, attributes, popular times, plus codes and the full photo gallery. |
| `scrapeEmails` | Boolean | Visits each business website and extracts emails + social profiles. |

Everything else is tuned for you and needs no configuration: residential proxies in the selected country are always on, each business keeps up to 10 photo URLs, and contact discovery checks the homepage plus 2 contact pages.

#### Example: find every dentist in Milan with their contacts

```json
{
    "mode": "search",
    "categories": ["Dentists"],
    "location": "Milan, Italy",
    "searchRadius": "city",
    "maxPlaces": 200,
    "includePlaceDetails": true,
    "scrapeEmails": true,
    "language": "en",
    "country": "it"
}
````

Each place then carries:

```json
{
  "name": "Ezio Costa Clinic",
  "phone": "+390458000000",
  "website": "https://www.clinicaeziocosta.it/",
  "domain": "clinicaeziocosta.it",
  "emails": ["info@clinicaeziocosta.it"],
  "socialProfiles": {
    "facebook": "https://www.facebook.com/clinicaeziocosta",
    "instagram": "https://www.instagram.com/clinicaeziocosta/",
    "linkedin": "https://www.linkedin.com/company/…"
  }
}
```

***

### Output

Every dataset item is one business:

```json
{
  "placeId": "ChIJifIePKtZwokRVZ-UdRGkZzs",
  "featureId": "0x89c259ab3c1ef289:0x3b67a41175949f55",
  "cid": "4280570365733019477",
  "name": "Joe's Pizza Broadway",
  "description": "Modern outpost of a longtime counter-serve pizza joint prepping New York-style slices and pies.",
  "category": "Pizza restaurant",
  "categories": ["Pizza restaurant", "Pizza delivery", "Restaurant"],
  "rating": 4.4,
  "reviewsCount": 26271,
  "reviewsDistribution": { "oneStar": 805, "twoStar": 631, "threeStar": 2186, "fourStar": 5093, "fiveStar": 17556 },
  "priceLevel": "$10–20",
  "priceRange": "$10 to $20",
  "phone": "+16465594878",
  "phoneFormatted": "(646) 559-4878",
  "website": "https://www.joespizzanyc.com/",
  "domain": "joespizzanyc.com",
  "menuUrl": "https://eat.chownow.com/order/11015/locations/19488",
  "address": "1435 Broadway, New York, NY 10018",
  "street": "1435 Broadway",
  "neighborhood": "Manhattan",
  "city": "New York",
  "postalCode": "10018",
  "state": "New York",
  "countryCode": "US",
  "plusCode": "87G8Q237+V5",
  "latitude": 40.7546795,
  "longitude": -73.9870291,
  "timezone": "America/New_York",
  "openingHours": [{ "day": "Friday", "hours": ["10 AM–5 AM"] }],
  "openingStatus": "Closed · Opens 10 AM",
  "permanentlyClosed": false,
  "popularTimes": [{ "day": 7, "hours": [{ "hour": 12, "occupancyPercent": 62, "description": "Usually a little busy" }] }],
  "attributes": {
    "service_options": { "label": "Service options", "values": ["Outdoor seating", "Delivery", "Takeout", "Dine-in"] },
    "accessibility": { "label": "Accessibility", "values": ["Wheelchair accessible entrance"] }
  },
  "imageUrl": "https://lh3.googleusercontent.com/…",
  "images": ["https://lh3.googleusercontent.com/…"],
  "url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/data=…",
  "searchTerm": "pizza restaurant"
}
```

***

### How to use it

1. Click **Try for free** / **Start**.
2. Choose a mode: search by keyword, or paste Maps URLs.
3. For searches, pick a category preset and type a location.
4. Run it, then download JSON/CSV/Excel or read the dataset over the API.

Schedule recurring runs with [Apify Schedules](https://docs.apify.com/platform/schedules) for weekly market snapshots or a nightly refresh of your lead list.

***

### Integrations

- **[n8n](https://docs.apify.com/platform/integrations/n8n)** — trigger scrapes from any workflow and route results to a database, CRM or Slack.
- **[Make](https://docs.apify.com/platform/integrations/make)** — no-code lead-capture scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new places into Google Sheets, Airtable or your CRM.
- **Webhooks & API** — get notified on run completion and pull the dataset into your own stack.
- **MCP / AI agents** — expose this Actor as a tool to Claude, GPT and other agents via the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

***

### Pricing

This Actor is billed per result, so you pay for what you actually get:

| Event | Charged when |
|---|---|
| `actor-start` | Once per run. |
| `place-scraped` | For each business returned. |
| `place-with-contacts` | Instead of `place-scraped`, when **Find emails and social profiles** is on — that result also cost a crawl of the business website. |

A business is billed as **either** `place-scraped` **or** `place-with-contacts`, never both, so there is always exactly one charge per result row. Set **Max total charge** on the run to cap your spend: the Actor stops cleanly at the limit and keeps everything collected up to that point.

### FAQ

**Do I need a Google Maps API key?**
No. This Actor reads publicly visible Google Maps data directly — no API key, no quota, no billing account.

**Is scraping Google Maps legal?**
This Actor only collects information that Google Maps shows publicly to any visitor. Some of it — a business email that carries a personal name, for instance — is still personal data, so make sure your use complies with GDPR, CCPA and any other rules that apply to you.

**How many places can one search return?**
Up to 5000 per keyword. Google itself stops at roughly 250 results for any one query over any one area, no matter how the request is paged — that is Google's ceiling, not the Actor's. To go past it the Actor splits the search area into quadrants and searches each one separately, splitting again wherever an area is still producing businesses it has not seen, and de-duplicates the results. Set a **Location** for this to work: a country-wide search with no location is a single area and stays subject to Google's ~250 ceiling.

**Do I need proxies?**
No. Residential proxies in your selected country are used by default and are what keeps Google's responses complete.

**Can I get emails?**
Yes — turn on **Find emails and social profiles**. Google Maps itself never publishes email addresses, so the Actor opens each business's own website (homepage plus its contact pages) and extracts addresses from `mailto:` links and page text, together with Facebook, Instagram, LinkedIn, X, YouTube, TikTok and Pinterest profiles. Addresses on the business's own domain are listed first, ahead of any privacy-vendor or agency addresses that also appear on contact pages. Expect roughly 40–60% coverage across a mixed list: many businesses publish only a contact form, and around a third of Google Maps listings have no website at all.

**Is collecting business emails allowed?**
Emails found this way are published by the businesses themselves, but they can still be personal data — `mario.rossi@studio.it` identifies a person. Under GDPR you need a lawful basis to contact them, you must identify yourself and offer an opt-out, and ePrivacy rules on unsolicited email apply in the EU. Use it for legitimate B2B outreach, not bulk spam.

***

### Related Actors you'll love

- 🔎 [Google Search Results Scraper](https://apify.com/lofomachines/google-serp-scraper) — clean, structured SERP data at the lowest price on Apify.
- 🔮 [Google Search Autocomplete Scraper](https://apify.com/lofomachines/google-search-autocomplete-cheaper-faster-reliable) — autocomplete suggestions with position and relevance metadata.
- 🧨 [Keyword Shitter — Autocomplete Keyword Scraper](https://apify.com/lofomachines/keyword-shitter-autocomplete-scraper) — turn one seed keyword into thousands of long-tail ideas.
- 🤖 [GEO Audit — AI Search Optimization Checker](https://apify.com/lofomachines/geo-technical-audit) — see how visible your pages are to AI search engines.
- 🔗 [Website URL Extractor](https://apify.com/lofomachines/urls-extractor) — extract every URL from the domains you discover here.

***

Built for speed, scale and clean data. If this Actor saves you time, a ⭐ review helps a lot — and if you need a custom field or a new mode, open an issue on the Actor page.

# Actor input Schema

## `mode` (type: `string`):

<strong>Search places</strong> — discover businesses by keyword/category + location.<br><strong>Place details from URLs</strong> — full business data for a list of Google Maps links.

## `includePlaceDetails` (type: `boolean`):

Works in every mode. Loads each business individually to add opening hours, attributes, popular times, plus codes and the full photo gallery. Slower, but far richer than the search listing alone.

## `scrapeEmails` (type: `boolean`):

Works in every mode. Google Maps never publishes email addresses, so this visits the website of each business and extracts emails plus Facebook, Instagram, LinkedIn, X, YouTube and TikTok profiles. Expect a hit rate around 40–60%: many sites publish only a contact form.

## `searchTerms` (type: `array`):

One keyword per line, e.g. <code>dentist</code>, <code>boutique hotel</code>, <code>coffee roastery</code>. Leave empty if you only use category presets.

## `categories` (type: `array`):

Ready-made Google Maps business categories. Pick as many as you need — each one runs as its own search.

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

City, region, address or postcode — e.g. <code>Milan, Italy</code>, <code>Brooklyn, New York</code>, <code>SW1A, London</code>. Leave empty to search the whole country.

## `searchRadius` (type: `string`):

How far around the location to look. Smaller areas return denser, more local results.

## `maxPlaces` (type: `integer`):

Upper limit of businesses collected for each keyword or category. Google itself only returns about 250 results per area, so past that the Actor automatically splits the search area into smaller ones and keeps going — which needs a <strong>Location</strong> to be set. Leave it low if you only want a sample: a smaller number is a faster, cheaper run.

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

Language of names, categories, opening hours and review translations. Applies in every mode.

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

Country Google localizes results for, and the country the Actor browses from. Applies in every mode.

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

Google Maps place links, share links (<code>maps.app.goo.gl/…</code>), <code>?cid=</code> links or Place IDs — one per line.

## Actor input object example

```json
{
  "mode": "search",
  "includePlaceDetails": false,
  "scrapeEmails": false,
  "searchTerms": [
    "pizza restaurant"
  ],
  "categories": [],
  "location": "New York, USA",
  "searchRadius": "city",
  "maxPlaces": 50,
  "language": "en",
  "country": "us"
}
```

# Actor output Schema

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

No description

## `reviews` (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 = {
    "searchTerms": [
        "pizza restaurant"
    ],
    "location": "New York, USA",
    "maxPlaces": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("lofomachines/google-maps-places-contact-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 = {
    "searchTerms": ["pizza restaurant"],
    "location": "New York, USA",
    "maxPlaces": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("lofomachines/google-maps-places-contact-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 '{
  "searchTerms": [
    "pizza restaurant"
  ],
  "location": "New York, USA",
  "maxPlaces": 50
}' |
apify call lofomachines/google-maps-places-contact-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "☎️ 📩 [Only $0.5/1K] Google Maps Scraper – Contacts",
        "description": "Scrape Google Maps at scale: find every business by keyword, category and location, or bulk-export reviews from any list of Maps URLs. Returns names, addresses, phones, websites, emails-ready domains, ratings, review counts, opening hours, photos, coordinates and full reviews with date filters.",
        "version": "4.1",
        "x-build-id": "ErM17onEyBairbTVy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lofomachines~google-maps-places-contact-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lofomachines-google-maps-places-contact-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lofomachines~google-maps-places-contact-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lofomachines-google-maps-places-contact-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lofomachines~google-maps-places-contact-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lofomachines-google-maps-places-contact-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "What do you want to scrape?",
                        "enum": [
                            "search",
                            "places"
                        ],
                        "type": "string",
                        "description": "<strong>Search places</strong> — discover businesses by keyword/category + location.<br><strong>Place details from URLs</strong> — full business data for a list of Google Maps links.",
                        "default": "search"
                    },
                    "includePlaceDetails": {
                        "title": "📋 Full place details for every result",
                        "type": "boolean",
                        "description": "Works in every mode. Loads each business individually to add opening hours, attributes, popular times, plus codes and the full photo gallery. Slower, but far richer than the search listing alone.",
                        "default": false
                    },
                    "scrapeEmails": {
                        "title": "📧 Find emails and social profiles",
                        "type": "boolean",
                        "description": "Works in every mode. Google Maps never publishes email addresses, so this visits the website of each business and extracts emails plus Facebook, Instagram, LinkedIn, X, YouTube and TikTok profiles. Expect a hit rate around 40–60%: many sites publish only a contact form.",
                        "default": false
                    },
                    "searchTerms": {
                        "title": "Search keywords",
                        "maxItems": 300,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "One keyword per line, e.g. <code>dentist</code>, <code>boutique hotel</code>, <code>coffee roastery</code>. Leave empty if you only use category presets.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "categories": {
                        "title": "Category presets",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Ready-made Google Maps business categories. Pick as many as you need — each one runs as its own search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Hotels",
                                "Motels",
                                "Hostels",
                                "Bed and breakfasts",
                                "Vacation rentals",
                                "Campgrounds",
                                "Resorts",
                                "Restaurants",
                                "Pizza restaurants",
                                "Italian restaurants",
                                "Sushi restaurants",
                                "Steakhouses",
                                "Seafood restaurants",
                                "Vegan restaurants",
                                "Fast food restaurants",
                                "Cafes",
                                "Coffee shops",
                                "Bakeries",
                                "Ice cream shops",
                                "Bars",
                                "Pubs",
                                "Nightclubs",
                                "Breweries",
                                "Wineries",
                                "Food trucks",
                                "Catering services",
                                "Supermarkets",
                                "Grocery stores",
                                "Convenience stores",
                                "Butcher shops",
                                "Liquor stores",
                                "Farmers markets",
                                "Clothing stores",
                                "Shoe stores",
                                "Jewelry stores",
                                "Furniture stores",
                                "Electronics stores",
                                "Hardware stores",
                                "Bookstores",
                                "Toy stores",
                                "Pet stores",
                                "Florists",
                                "Sporting goods stores",
                                "Bike shops",
                                "Shopping malls",
                                "Gyms",
                                "Fitness centers",
                                "Yoga studios",
                                "Spas",
                                "Beauty salons",
                                "Hair salons",
                                "Barber shops",
                                "Nail salons",
                                "Tattoo shops",
                                "Massage therapists",
                                "Doctors",
                                "Dentists",
                                "Pharmacies",
                                "Hospitals",
                                "Veterinarians",
                                "Opticians",
                                "Physiotherapists",
                                "Chiropractors",
                                "Psychologists",
                                "Nursing homes",
                                "Childcare centers",
                                "Lawyers",
                                "Accountants",
                                "Insurance agencies",
                                "Banks",
                                "Real estate agencies",
                                "Marketing agencies",
                                "Web designers",
                                "Photographers",
                                "Event planners",
                                "Wedding venues",
                                "Coworking spaces",
                                "Print shops",
                                "Travel agencies",
                                "Car dealers",
                                "Car repair shops",
                                "Car washes",
                                "Gas stations",
                                "Parking lots",
                                "Taxi services",
                                "Moving companies",
                                "Storage facilities",
                                "Plumbers",
                                "Electricians",
                                "Roofers",
                                "Painters",
                                "HVAC contractors",
                                "Solar installers",
                                "Landscapers",
                                "Garden centers",
                                "Cleaning services",
                                "Laundromats",
                                "Dry cleaners",
                                "Locksmiths",
                                "Pest control services",
                                "Construction companies",
                                "Architects",
                                "Interior designers",
                                "Schools",
                                "Universities",
                                "Kindergartens",
                                "Driving schools",
                                "Language schools",
                                "Libraries",
                                "Museums",
                                "Tourist attractions",
                                "Parks",
                                "Zoos",
                                "Aquariums",
                                "Amusement parks",
                                "Movie theaters",
                                "Bowling alleys",
                                "Casinos",
                                "Golf courses",
                                "Churches",
                                "Post offices",
                                "Government offices"
                            ]
                        },
                        "default": []
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, address or postcode — e.g. <code>Milan, Italy</code>, <code>Brooklyn, New York</code>, <code>SW1A, London</code>. Leave empty to search the whole country."
                    },
                    "searchRadius": {
                        "title": "Search area size",
                        "enum": [
                            "neighborhood",
                            "city",
                            "metro",
                            "region",
                            "country"
                        ],
                        "type": "string",
                        "description": "How far around the location to look. Smaller areas return denser, more local results.",
                        "default": "city"
                    },
                    "maxPlaces": {
                        "title": "Max places per search",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Upper limit of businesses collected for each keyword or category. Google itself only returns about 250 results per area, so past that the Actor automatically splits the search area into smaller ones and keeps going — which needs a <strong>Location</strong> to be set. Leave it low if you only want a sample: a smaller number is a faster, cheaper run.",
                        "default": 50
                    },
                    "language": {
                        "title": "Result language",
                        "enum": [
                            "ar",
                            "bg",
                            "ca",
                            "cs",
                            "da",
                            "de",
                            "el",
                            "en",
                            "es",
                            "et",
                            "fi",
                            "fr",
                            "he",
                            "hi",
                            "hr",
                            "hu",
                            "id",
                            "is",
                            "it",
                            "ja",
                            "ko",
                            "lt",
                            "lv",
                            "ms",
                            "nl",
                            "no",
                            "pl",
                            "pt",
                            "ro",
                            "ru",
                            "sk",
                            "sl",
                            "sr",
                            "sv",
                            "th",
                            "tr",
                            "uk",
                            "vi",
                            "zh-cn",
                            "zh-tw"
                        ],
                        "type": "string",
                        "description": "Language of names, categories, opening hours and review translations. Applies in every mode.",
                        "default": "en"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "ae",
                            "ar",
                            "at",
                            "au",
                            "be",
                            "bg",
                            "br",
                            "ca",
                            "ch",
                            "cl",
                            "cn",
                            "co",
                            "cz",
                            "de",
                            "dk",
                            "ee",
                            "eg",
                            "es",
                            "fi",
                            "fr",
                            "gb",
                            "gr",
                            "hk",
                            "hr",
                            "hu",
                            "id",
                            "ie",
                            "il",
                            "in",
                            "is",
                            "it",
                            "jp",
                            "kr",
                            "lt",
                            "lu",
                            "lv",
                            "ma",
                            "mx",
                            "my",
                            "ng",
                            "nl",
                            "no",
                            "nz",
                            "pe",
                            "ph",
                            "pl",
                            "pt",
                            "ro",
                            "rs",
                            "ru",
                            "sa",
                            "se",
                            "sg",
                            "si",
                            "sk",
                            "th",
                            "tr",
                            "tw",
                            "ua",
                            "us",
                            "uy",
                            "vn",
                            "za"
                        ],
                        "type": "string",
                        "description": "Country Google localizes results for, and the country the Actor browses from. Applies in every mode.",
                        "default": "us"
                    },
                    "startUrls": {
                        "title": "Place URLs",
                        "maxItems": 1000,
                        "type": "array",
                        "description": "Google Maps place links, share links (<code>maps.app.goo.gl/…</code>), <code>?cid=</code> links or Place IDs — one per line.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
