# Google Maps Scraper \[Advance] (`scrapeio/google-maps-scraper-advance`) Actor

Most powerful actory that automatically extracts business data from Google Maps, including names, addresses, phone numbers, ratings, reviews, and more.

- **URL**: https://apify.com/scrapeio/google-maps-scraper-advance.md
- **Developed by:** [Shop Intel](https://apify.com/scrapeio) (community)
- **Categories:** AI, Automation, Agents
- **Stats:** 0 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 (Advance)

**Apify actor:** [scrapeio/google-maps-scraper-advance](https://apify.com/scrapeio/google-maps-scraper-advance)

**Google Maps Scraper (Advance)** turns map searches into **structured tables**: names, links, ratings, and—when you enable deeper options—phones, sites, reviews, photos, and optional website contact hints. Each run gives you a **Dataset** you can export (CSV, JSON, Excel) plus **key-value files** for summaries and validation.

#### At a glance

- **What it does:** Automates the **public Google Maps** experience (browser-style), then normalizes results into rows you can analyze or pipe into CRMs and BI tools.  
- **Ways to search:** Keyword + location, **Maps URLs / place IDs**, **GeoJSON** area, or **explore at lat/lng**.  
- **Richer data:** Optional place pages, reviews (up to **5,000** per place, UI permitting), photos (up to **200**), website crawl, social preview checkboxes, filters.  
- **Where data lives:** **Dataset** (one object per place), **`RESULTS_CSV`**, **`RESULTS_JSON`**, **`OUTPUT`**, **`OUTPUT_VALIDATION`**, optional **`REVIEWS_ROWS`**.  
- **Independence:** Independent product; **not affiliated with Google**.

---

### Features

| Area | What this actor gives you |
|------|---------------------------|
| **Search** | Find places by **keyword + location**, or by **Maps URLs**, **place IDs**, **GeoJSON area**, or **map coordinates** (explore mode). |
| **Volume** | Up to **500** unique places per run; optional **language** for the Maps UI. |
| **List data** | Business **name**, **Google Maps link**, **card text**, **rating** when shown, **open/closed** hints when visible. |
| **Detail data** *(optional)* | **Phone**, **website**, **address**, **coordinates** when the place page exposes them. |
| **Reviews & photos** *(optional)* | Up to **5,000** reviews and **200** images per place (subject to what Maps shows). |
| **Extras** *(optional)* | Q&A-style text, web-result links, directory links, reservation hints — when present on the page. |
| **Contacts** *(optional)* | Crawl each **business website** for **emails**, **phones**, **social URLs**; optional **public preview** text for Facebook, Instagram, YouTube, TikTok, X. |
| **Filters** *(optional)* | Min rating, **with / without website**, name matching, skip closed-looking listings, topic keywords after scrape. |

---

### Input

**Where:** Apify → this actor → **Input** tab (form or JSON).

**Rule:** You must choose **at least one** way to tell the actor *what* to scrape:

1. **Keyword search** — blocks **1** (and optionally **6** for structured address), or  
2. **URLs / place IDs** — block **2**, or  
3. **GeoJSON area** — block **3**, or  
4. **Map explore** — block **4**: turn on **Explore map at coordinates** and fill **map center** (`lat`, `lng`, optional `zoom`).

**Form layout (collapsible sections):**

| ## | Section title | What you set there |
|---|----------------|---------------------|
| 1 | Search by keyword | Main query, extra queries, location line |
| 2 | Maps URLs or place IDs | Lists of URLs or Google place IDs |
| 3 | GeoJSON area | Point / polygon / multipolygon JSON |
| 4 | Map explore | Checkbox + map center JSON |
| 5 | Run size & language | Max places (1–500), language code |
| 6 | Composed address | City, state, county, postal, country (optional alternative to one location string) |
| 7 | Filter results | Categories, min rating, website filter, name match mode, skip closed |
| 8 | Place details & reviews | Open place pages, max reviews, sort, review text filter, reviewer names |
| 9 | More from place page | Max photos, web results, directories, Q&A, reservation hints |
| 10 | Website & social | Crawl site for contacts; per-network social preview checkboxes |
| 11 | Advanced / API aliases | Alternate field names and JSON social override for old integrations |

Every field in the form is **connected to the scraper** — nothing is a placeholder. Optional blocks can stay closed if you do not need them.

---

### Output

All outputs belong to the **run** you started.

#### Where to download

| Output | What it is | Where in Apify |
|--------|------------|----------------|
| **Dataset** | One **JSON record per business** — main export | Run → **Dataset** → Export (JSON, CSV, Excel, …) |
| **RESULTS_CSV** | Same-style data as a **CSV file** | Run → **Storage** → Key-value store → **`RESULTS_CSV`** |
| **RESULTS_JSON** | Full summary + places in one JSON string *(if under size limits)* | **Storage** → **`RESULTS_JSON`** |
| **OUTPUT** | Run summary: counts, status, validation summary | **Storage** → **`OUTPUT`** |
| **OUTPUT_VALIDATION** | Checks and warnings (e.g. optional data missing) | **Storage** → **`OUTPUT_VALIDATION`** |
| **REVIEWS_ROWS** | Flat list of reviews *(only if you enable it in input)* | **Storage** → **`REVIEWS_ROWS`** |

#### What a typical place record contains

Depends on your input. Common fields include:

| Kind of data | Example field names *(not every run has every field)* |
|--------------|--------------------------------------------------------|
| Identity & link | `displayName`, `title`, `googleMapsUri`, `url` |
| List snippet | `listSnippet` |
| Scores | `rating`, `reviewsCount`, `userRatingCount` |
| Status | `businessStatus` |
| Detail | `nationalPhoneNumber`, `websiteUri`, `formattedAddress`, `location` (lat/lng object) |
| Reviews / media | `reviews`, `images`, `questionsAndAnswers` |
| Extras | `webResults`, `directoryPlaces`, reservation-related fields |
| Contact crawl | `emails`, `phonesFromWebsite`, social URL fields, `socialProfilesEnriched` |

Preview the **Dataset** after a run to see exactly which columns you got for that configuration.

---

### Quick start

1. Open **Input** → section **1**: e.g. query `coffee shop`, location `Seattle, WA`.  
2. Section **5**: set **max places** (e.g. `50`).  
3. **Start** → **Dataset** → **Export** → CSV or Excel.  
4. For **phone and website**, open section **8** and enable **open each place page** (or set max reviews / photos — detail turns on automatically).

---

### Example inputs (JSON)

**Simple list**

```json
{
  "query": "yoga studio",
  "location": "Denver, CO",
  "maxResults": 50
}
````

**With phone, website, 10 reviews each**

```json
{
  "query": "italian restaurant",
  "location": "Boston, MA",
  "maxResults": 30,
  "scrapePlaceDetailPage": true,
  "maxReviews": 10
}
```

**Website crawl for contacts**

```json
{
  "query": "marketing agency",
  "location": "San Francisco, CA",
  "maxResults": 40,
  "scrapePlaceDetailPage": true,
  "enrichContactsFromWebsite": true
}
```

**Explore map (no keyword)**

```json
{
  "exploreMapInsteadOfSearch": true,
  "mapCenter": { "lat": 48.8566, "lng": 2.3522, "zoom": 14 },
  "maxResults": 80
}
```

***

### FAQ

**Does this use the Google Maps Platform (paid) APIs?**\
No. The actor does **not** call Google’s billed Maps / Places web services. It drives the **consumer Maps** UI, so you do **not** configure Google Cloud API keys for this actor.

**Why are some columns empty?**\
Listings differ: some cards lack ratings, phones, or sites until you open **place details** (section 8). Use **`OUTPUT_VALIDATION`** after a run to see hints.

**When do emails appear?**\
Only if **crawl business website** is on **and** a **website** was found; values come from **public** pages the crawler can read.

**Legal use**\
Follow **Google’s terms of service** and **privacy / marketing laws** in your region (especially for review text and personal names).

***

### Discoverability & related topics

**Google Maps scraper Apify** · local business export · Maps search to CSV · place reviews dataset · website contact enrichment · GeoJSON area search · map explore coordinates · Apify Maps actor

***

**[FastAd](https://www.fastad.in)** — automation & growth tooling.

# Actor input Schema

## `query` (type: `string`):

What to find on Maps, e.g. coffee shop, dentist, hotel.

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

Optional extra phrases — each runs as its own Maps search (same location applies).

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

City, region, or country added to every keyword search above.

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

Full Maps search or place links — one URL per line.

## `placeIds` (type: `array`):

Google place IDs (strings starting with ChIJ…).

## `customGeolocation` (type: `object`):

Point (+ optional radiusKm), Polygon, or MultiPolygon. The actor searches multiple map points inside the shape.

## `exploreMapInsteadOfSearch` (type: `boolean`):

Opens the map at the center below and scrolls visible listings — use with map center JSON.

## `mapCenter` (type: `object`):

Required for explore: { "lat": number, "lng": number, "zoom": optional 1–21 }.

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

Stop after this many unique businesses (1–500).

## `languageCode` (type: `string`):

UI language code, e.g. en, de, es, fr.

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

Optional — combined with the fields below into one location if "Location" above is empty.

## `state` (type: `string`):

Optional.

## `county` (type: `string`):

Optional.

## `postalCode` (type: `string`):

Optional.

## `countryCode` (type: `string`):

Optional, e.g. us, gb, de.

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

After scraping, only keep places whose name or snippet mentions one of these words.

## `minRating` (type: `number`):

Keep places with at least this rating when stars are visible (0–5).

## `placeMinimumStars` (type: `string`):

Alternative to the number above: two, three, four, fourAndHalf, etc.

## `searchMatching` (type: `string`):

How strictly the place name must match your queries.

## `website` (type: `string`):

Requires place detail scraping to detect websites.

## `skipClosedPlaces` (type: `boolean`):

Remove listings that appear permanently or temporarily closed in the UI.

## `scrapePlaceDetailPage` (type: `boolean`):

Slower but fills phone, website, address, coordinates. Turned on automatically if you request reviews, images, or certain extras below.

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

0 = skip. Otherwise up to 5000 per place (subject to Maps UI).

## `reviewsSort` (type: `string`):

Best-effort: the actor tries to pick this in the Reviews menu.

## `reviewsFilterString` (type: `string`):

Only keep reviews whose text includes this phrase (case-insensitive).

## `scrapeReviewsPersonalData` (type: `boolean`):

If off, reviewerName is omitted from each review object.

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

0 = skip. Up to 200 per place.

## `scrapeImageAuthors` (type: `boolean`):

Include image author when available.

## `includeWebResults` (type: `boolean`):

Extract links from the Web results section when present.

## `scrapeDirectories` (type: `boolean`):

Extra Maps place links (e.g. listings inside a mall).

## `maxQuestions` (type: `integer`):

When this field exists in input, Q\&A runs. Use 0 for one heuristic pair; higher = cap on pairs.

## `scrapeTableReservationProvider` (type: `boolean`):

Best-effort reservation URL or provider name from page text.

## `enrichContactsFromWebsite` (type: `boolean`):

After a website URL is found, visit it to extract emails, phones, and social profile links.

## `enrichSocialFacebook` (type: `boolean`):

If a Facebook URL was found, load public meta (title/description).

## `enrichSocialInstagram` (type: `boolean`):

If an Instagram URL was found, load public meta.

## `enrichSocialYoutube` (type: `boolean`):

If a YouTube URL was found, load public meta.

## `enrichSocialTiktok` (type: `boolean`):

If a TikTok URL was found, load public meta.

## `enrichSocialTwitter` (type: `boolean`):

If an X/Twitter URL was found, load public meta.

## `includeReviewsDatasetView` (type: `boolean`):

Writes REVIEWS\_ROWS to key-value storage (JSON list) in addition to the dataset.

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

Same as "Additional search queries" (searchTerms). For tasks and API compatibility.

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

Same as Location in section 1.

## `mapsUrls` (type: `array`):

Same as Google Maps URLs in section 2.

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

Same as Max places to collect.

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

Same as Maps language.

## `categoryFilterWords` (type: `array`):

Same as Keep rows matching topics.

## `scrapeContacts` (type: `boolean`):

Same as Crawl business website for contacts.

## `allPlacesNoSearchAction` (type: `string`):

If set to any non-empty value, same as explore mode. Prefer the checkbox in section 4.

## `scrapeSocialMediaProfiles` (type: `object`):

Expert JSON: { "facebooks": true, "instagrams": true, … }. If set, overrides the checkboxes above.

## Actor input object example

```json
{
  "query": "coffee shop",
  "location": "Austin, TX, USA",
  "startUrls": [
    "https://www.google.com/maps/search/restaurants/@40.7,-74.0,12z"
  ],
  "exploreMapInsteadOfSearch": false,
  "mapCenter": {
    "lat": 40.7128,
    "lng": -74.006,
    "zoom": 14
  },
  "maxResults": 100,
  "languageCode": "en",
  "searchMatching": "all",
  "website": "allPlaces",
  "skipClosedPlaces": false,
  "scrapePlaceDetailPage": false,
  "reviewsSort": "newest",
  "scrapeReviewsPersonalData": true,
  "scrapeImageAuthors": false,
  "includeWebResults": false,
  "scrapeDirectories": false,
  "scrapeTableReservationProvider": false,
  "enrichContactsFromWebsite": false,
  "enrichSocialFacebook": false,
  "enrichSocialInstagram": false,
  "enrichSocialYoutube": false,
  "enrichSocialTiktok": false,
  "enrichSocialTwitter": false,
  "includeReviewsDatasetView": false,
  "scrapeContacts": false
}
```

# 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 = {
    "query": "coffee shop",
    "location": "Austin, TX, USA",
    "startUrls": [
        "https://www.google.com/maps/search/restaurants/@40.7,-74.0,12z"
    ],
    "mapCenter": {
        "lat": 40.7128,
        "lng": -74.006,
        "zoom": 14
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeio/google-maps-scraper-advance").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 = {
    "query": "coffee shop",
    "location": "Austin, TX, USA",
    "startUrls": ["https://www.google.com/maps/search/restaurants/@40.7,-74.0,12z"],
    "mapCenter": {
        "lat": 40.7128,
        "lng": -74.006,
        "zoom": 14,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeio/google-maps-scraper-advance").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 '{
  "query": "coffee shop",
  "location": "Austin, TX, USA",
  "startUrls": [
    "https://www.google.com/maps/search/restaurants/@40.7,-74.0,12z"
  ],
  "mapCenter": {
    "lat": 40.7128,
    "lng": -74.006,
    "zoom": 14
  }
}' |
apify call scrapeio/google-maps-scraper-advance --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Scraper [Advance]",
        "description": "Most powerful actory that automatically extracts business data from Google Maps, including names, addresses, phone numbers, ratings, reviews, and more.",
        "version": "0.7",
        "x-build-id": "avcCHjvdF5UQndSia"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapeio~google-maps-scraper-advance/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapeio-google-maps-scraper-advance",
                "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/scrapeio~google-maps-scraper-advance/runs": {
            "post": {
                "operationId": "runs-sync-scrapeio-google-maps-scraper-advance",
                "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/scrapeio~google-maps-scraper-advance/run-sync": {
            "post": {
                "operationId": "run-sync-scrapeio-google-maps-scraper-advance",
                "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",
                "properties": {
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "What to find on Maps, e.g. coffee shop, dentist, hotel."
                    },
                    "searchTerms": {
                        "title": "Additional search queries",
                        "type": "array",
                        "description": "Optional extra phrases — each runs as its own Maps search (same location applies).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, or country added to every keyword search above."
                    },
                    "startUrls": {
                        "title": "Google Maps URLs",
                        "type": "array",
                        "description": "Full Maps search or place links — one URL per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "placeIds": {
                        "title": "Place IDs",
                        "type": "array",
                        "description": "Google place IDs (strings starting with ChIJ…).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "customGeolocation": {
                        "title": "GeoJSON area or point",
                        "type": "object",
                        "description": "Point (+ optional radiusKm), Polygon, or MultiPolygon. The actor searches multiple map points inside the shape."
                    },
                    "exploreMapInsteadOfSearch": {
                        "title": "Explore map at coordinates (no keyword)",
                        "type": "boolean",
                        "description": "Opens the map at the center below and scrolls visible listings — use with map center JSON.",
                        "default": false
                    },
                    "mapCenter": {
                        "title": "Map center",
                        "type": "object",
                        "description": "Required for explore: { \"lat\": number, \"lng\": number, \"zoom\": optional 1–21 }."
                    },
                    "maxResults": {
                        "title": "Max places to collect",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Stop after this many unique businesses (1–500).",
                        "default": 100
                    },
                    "languageCode": {
                        "title": "Maps language",
                        "type": "string",
                        "description": "UI language code, e.g. en, de, es, fr.",
                        "default": "en"
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "Optional — combined with the fields below into one location if \"Location\" above is empty."
                    },
                    "state": {
                        "title": "State / region",
                        "type": "string",
                        "description": "Optional."
                    },
                    "county": {
                        "title": "County",
                        "type": "string",
                        "description": "Optional."
                    },
                    "postalCode": {
                        "title": "Postal code",
                        "type": "string",
                        "description": "Optional."
                    },
                    "countryCode": {
                        "title": "Country code",
                        "type": "string",
                        "description": "Optional, e.g. us, gb, de."
                    },
                    "categories": {
                        "title": "Keep rows matching topics",
                        "type": "array",
                        "description": "After scraping, only keep places whose name or snippet mentions one of these words.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minRating": {
                        "title": "Minimum star rating (number)",
                        "type": "number",
                        "description": "Keep places with at least this rating when stars are visible (0–5)."
                    },
                    "placeMinimumStars": {
                        "title": "Minimum stars (preset text)",
                        "type": "string",
                        "description": "Alternative to the number above: two, three, four, fourAndHalf, etc."
                    },
                    "searchMatching": {
                        "title": "Business name vs search text",
                        "enum": [
                            "all",
                            "only_includes",
                            "only_exact"
                        ],
                        "type": "string",
                        "description": "How strictly the place name must match your queries.",
                        "default": "all"
                    },
                    "website": {
                        "title": "Website filter",
                        "enum": [
                            "allPlaces",
                            "withWebsite",
                            "withoutWebsite"
                        ],
                        "type": "string",
                        "description": "Requires place detail scraping to detect websites.",
                        "default": "allPlaces"
                    },
                    "skipClosedPlaces": {
                        "title": "Skip closed businesses",
                        "type": "boolean",
                        "description": "Remove listings that appear permanently or temporarily closed in the UI.",
                        "default": false
                    },
                    "scrapePlaceDetailPage": {
                        "title": "Open each place page (details)",
                        "type": "boolean",
                        "description": "Slower but fills phone, website, address, coordinates. Turned on automatically if you request reviews, images, or certain extras below.",
                        "default": false
                    },
                    "maxReviews": {
                        "title": "Max reviews per place",
                        "minimum": 0,
                        "type": "integer",
                        "description": "0 = skip. Otherwise up to 5000 per place (subject to Maps UI)."
                    },
                    "reviewsSort": {
                        "title": "Review sort order",
                        "enum": [
                            "newest",
                            "mostRelevant",
                            "highestRanking",
                            "lowestRanking"
                        ],
                        "type": "string",
                        "description": "Best-effort: the actor tries to pick this in the Reviews menu.",
                        "default": "newest"
                    },
                    "reviewsFilterString": {
                        "title": "Review text must contain",
                        "type": "string",
                        "description": "Only keep reviews whose text includes this phrase (case-insensitive)."
                    },
                    "scrapeReviewsPersonalData": {
                        "title": "Include reviewer names",
                        "type": "boolean",
                        "description": "If off, reviewerName is omitted from each review object.",
                        "default": true
                    },
                    "maxImages": {
                        "title": "Max photos per place",
                        "minimum": 0,
                        "type": "integer",
                        "description": "0 = skip. Up to 200 per place."
                    },
                    "scrapeImageAuthors": {
                        "title": "Photo author / alt text",
                        "type": "boolean",
                        "description": "Include image author when available.",
                        "default": false
                    },
                    "includeWebResults": {
                        "title": "Web results block",
                        "type": "boolean",
                        "description": "Extract links from the Web results section when present.",
                        "default": false
                    },
                    "scrapeDirectories": {
                        "title": "Directory / related place links",
                        "type": "boolean",
                        "description": "Extra Maps place links (e.g. listings inside a mall).",
                        "default": false
                    },
                    "maxQuestions": {
                        "title": "Q&A pairs to extract",
                        "minimum": 0,
                        "type": "integer",
                        "description": "When this field exists in input, Q&A runs. Use 0 for one heuristic pair; higher = cap on pairs."
                    },
                    "scrapeTableReservationProvider": {
                        "title": "Reservation hints",
                        "type": "boolean",
                        "description": "Best-effort reservation URL or provider name from page text.",
                        "default": false
                    },
                    "enrichContactsFromWebsite": {
                        "title": "Crawl business website for contacts",
                        "type": "boolean",
                        "description": "After a website URL is found, visit it to extract emails, phones, and social profile links.",
                        "default": false
                    },
                    "enrichSocialFacebook": {
                        "title": "Fetch Facebook page preview",
                        "type": "boolean",
                        "description": "If a Facebook URL was found, load public meta (title/description).",
                        "default": false
                    },
                    "enrichSocialInstagram": {
                        "title": "Fetch Instagram profile preview",
                        "type": "boolean",
                        "description": "If an Instagram URL was found, load public meta.",
                        "default": false
                    },
                    "enrichSocialYoutube": {
                        "title": "Fetch YouTube channel preview",
                        "type": "boolean",
                        "description": "If a YouTube URL was found, load public meta.",
                        "default": false
                    },
                    "enrichSocialTiktok": {
                        "title": "Fetch TikTok profile preview",
                        "type": "boolean",
                        "description": "If a TikTok URL was found, load public meta.",
                        "default": false
                    },
                    "enrichSocialTwitter": {
                        "title": "Fetch X (Twitter) profile preview",
                        "type": "boolean",
                        "description": "If an X/Twitter URL was found, load public meta.",
                        "default": false
                    },
                    "includeReviewsDatasetView": {
                        "title": "Also save flat reviews file",
                        "type": "boolean",
                        "description": "Writes REVIEWS_ROWS to key-value storage (JSON list) in addition to the dataset.",
                        "default": false
                    },
                    "searchStringsArray": {
                        "title": "Search term(s) — API alias",
                        "type": "array",
                        "description": "Same as \"Additional search queries\" (searchTerms). For tasks and API compatibility.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationQuery": {
                        "title": "Location (alias)",
                        "type": "string",
                        "description": "Same as Location in section 1."
                    },
                    "mapsUrls": {
                        "title": "Maps URLs (alias)",
                        "type": "array",
                        "description": "Same as Google Maps URLs in section 2.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxCrawledPlacesPerSearch": {
                        "title": "Max places (alias)",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Same as Max places to collect."
                    },
                    "language": {
                        "title": "Language (alias)",
                        "type": "string",
                        "description": "Same as Maps language."
                    },
                    "categoryFilterWords": {
                        "title": "Category filters (alias)",
                        "type": "array",
                        "description": "Same as Keep rows matching topics.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeContacts": {
                        "title": "Scrape contacts (alias)",
                        "type": "boolean",
                        "description": "Same as Crawl business website for contacts.",
                        "default": false
                    },
                    "allPlacesNoSearchAction": {
                        "title": "Explore mode (legacy text flag)",
                        "type": "string",
                        "description": "If set to any non-empty value, same as explore mode. Prefer the checkbox in section 4."
                    },
                    "scrapeSocialMediaProfiles": {
                        "title": "Social fetch (JSON override)",
                        "type": "object",
                        "description": "Expert JSON: { \"facebooks\": true, \"instagrams\": true, … }. If set, overrides the checkboxes above."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
