{
  "data": {
    "id": "Czdvhnc5ASnO9t9rN",
    "actId": "sC80YE19nutFBUPx8",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-07T12:30:04.043Z",
    "finishedAt": "2026-11-07T12:30:39.265Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 35117,
      "runTimeSecs": 35.117,
      "computeUnits": 0.03901888888888889,
      "imageSizeBytes": 3106016256
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Google Maps MCP Server Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Scraping Mode\",\n      \"type\": \"string\",\n      \"description\": \"Choose the scraping mode: search for businesses, get full details for one place, or scrape reviews from a specific place.\",\n      \"enum\": [\n        \"search\",\n        \"details\",\n        \"reviews\"\n      ],\n      \"enumTitles\": [\n        \"Search Businesses\",\n        \"Get Place Details\",\n        \"Scrape Reviews\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"editor\": \"select\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search Query\",\n      \"type\": \"string\",\n      \"description\": \"What to search for (e.g., 'restaurant', 'hotel', 'coffee shop'). Required for 'search' mode.\",\n      \"editor\": \"textfield\",\n      \"example\": \"pizza restaurant\",\n      \"prefill\": \"coffee shop in New York\"\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"Location to search in (e.g., 'New York, NY', 'London, UK'). Required for 'search' mode.\",\n      \"editor\": \"textfield\",\n      \"example\": \"New York, NY\",\n      \"default\": \"\"\n    },\n    \"maxResults\": {\n      \"title\": \"Maximum Results\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of business results to scrape. Only used in 'search' mode.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 20,\n      \"prefill\": 3,\n      \"editor\": \"number\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Language code for results (e.g., 'en', 'de', 'fr').\",\n      \"enum\": [\n        \"en\",\n        \"es\",\n        \"fr\",\n        \"de\",\n        \"it\",\n        \"pt\",\n        \"ja\",\n        \"ko\",\n        \"zh\",\n        \"ar\",\n        \"ru\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Spanish\",\n        \"French\",\n        \"German\",\n        \"Italian\",\n        \"Portuguese\",\n        \"Japanese\",\n        \"Korean\",\n        \"Chinese\",\n        \"Arabic\",\n        \"Russian\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\",\n      \"editor\": \"select\"\n    },\n    \"placeUrl\": {\n      \"title\": \"Place URL\",\n      \"type\": \"string\",\n      \"description\": \"Google Maps place URL. Required for 'details' and 'reviews' modes unless placeId is provided.\",\n      \"editor\": \"textfield\",\n      \"example\": \"https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z\"\n    },\n    \"placeId\": {\n      \"title\": \"Google Place ID\",\n      \"type\": \"string\",\n      \"description\": \"Canonical Google Place ID beginning with ChIJ. Use instead of placeUrl in 'details' and 'reviews' modes.\",\n      \"editor\": \"textfield\",\n      \"example\": \"ChIJabtoT7hlwokRLECK0SW3_8I\"\n    },\n    \"maxReviews\": {\n      \"title\": \"Maximum Reviews\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of reviews to scrape. Only used in 'reviews' mode.\",\n      \"minimum\": 1,\n      \"maximum\": 200000,\n      \"default\": 50,\n      \"editor\": \"number\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional Apify proxy. Runs start direct and fall back to the automatic Apify proxy pool only after a real block.\",\n      \"editor\": \"proxy\",\n      \"sectionCaption\": \"Proxy\",\n      \"sectionDescription\": \"Leave empty for the automatic direct-to-proxy fallback.\"\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Google Maps Business Search & Reviews MCP Server\n\nA single Google Maps actor that works two ways: as a normal Apify batch run, and as a native MCP (Model Context Protocol) server for AI agents. It reads Google Maps' public pages directly — no login, cookie, or API key.\n\n- **Search mode** — find businesses by keyword and location with ratings, reviews, contact details, hours and coordinates. Sponsored placements are excluded.\n- **Details mode** — pull the full record for one place by Google Maps URL or canonical Place ID.\n- **Reviews mode** — flatten a place's reviews to one row per review, with place metadata repeated on every row.\n- **MCP server** — the same three capabilities are exposed as typed tools in Apify Standby mode at `/mcp`.\n- **Empty fields are omitted** — nothing is fabricated to fill a gap.\n\n## MCP server (Standby mode)\n\nWhen the actor runs in Standby, it serves Streamable HTTP MCP at:\n\n```\nhttps://<actor-standby-url>/mcp\n```\n\n| Tool | What it returns |\n|---|---|\n| `search_businesses` | Businesses for a keyword + location: name, category, rating, review count, address, phone, website, hours, coordinates and Google Maps URL. |\n| `get_business_details` | The full detail record for one place, addressed by `place_url` or `place_id` (ChIJ...). |\n| `get_place_reviews` | One flattened review per item plus the place summary; accepts `place_url` or `place_id`. |\n\nEvery tool accepts a `language` code (`en`, `es`, `fr`, `de`, `it`, `pt`, `ja`, `ko`, `zh`, `ar`, `ru`). Tool results are plain JSON objects with `count`, `items`/`reviews` and the resolved `place`/`placeId` where relevant. Errors return an `error` message instead of failing the session. Per-call tool caps are 100 businesses and 1,000 reviews; the batch modes keep the wider caps listed below.\n\n## Batch modes\n\n| Mode | Reads | Emits |\n|---|---|---|\n| `search` | Keyword + location result feed, then each place page | One `recordType: \"business\"` row per business |\n| `details` | One place page addressed by `placeUrl` or `placeId` | One `recordType: \"business\"` row |\n| `reviews` | A place's public reviews panel | One `recordType: \"review\"` row per review |\n\n`reviews` mode needs either `placeUrl` or `placeId`; `details` accepts the same two alternatives. `search` needs `searchQuery`, with `location` strongly recommended.\n\n## Output per business\n\n```json\n{\n  \"recordType\": \"business\",\n  \"index\": 0,\n  \"name\": \"Joe's Pizza\",\n  \"categoryName\": \"Pizza restaurant\",\n  \"categories\": [\"Pizza restaurant\"],\n  \"totalScore\": 4.5,\n  \"reviewsCount\": 1234,\n  \"ratingHistogram\": {\"5_star\": 900, \"4_star\": 200, \"3_star\": 80, \"2_star\": 30, \"1_star\": 24},\n  \"address\": \"7 Carmine St, New York, NY 10014\",\n  \"plusCode\": \"Q256+VX New York, USA\",\n  \"phone\": \"+1 212-366-1182\",\n  \"phoneUnformatted\": \"+12123661182\",\n  \"website\": \"https://www.joespizzanyc.com\",\n  \"priceLevel\": \"$$\",\n  \"hours\": [{\"day\": \"Monday\", \"hours\": \"11 AM–10 PM\"}],\n  \"additionalInfo\": {\"Service options\": [{\"Dine-in\": true}]},\n  \"photosSample\": [\"https://lh3.googleusercontent.com/...\"],\n  \"menuUrl\": \"https://www.joespizzanyc.com/menu\",\n  \"permanentlyClosed\": false,\n  \"temporarilyClosed\": false,\n  \"placeId\": \"ChIJ...\",\n  \"featureId\": \"0x...:0x...\",\n  \"location\": {\"lat\": 40.7308314, \"lng\": -73.9973325},\n  \"googleMapsUrl\": \"https://www.google.com/maps/place/...\",\n  \"sourceUrl\": \"https://www.google.com/maps/place/...\",\n  \"scrapedAt\": \"2026-11-07T12:00:00+00:00\"\n}\n```\n\nOther fields appear when Google publishes them: `description`, `menuUrl`, `reserveTableUrl`, `reservationsUrl`, `orderOnlineUrl`. Action links are emitted only when they resolve to a real destination — not a Google ad redirect or another Maps page.\n\n## Output per review\n\n```json\n{\n  \"recordType\": \"review\",\n  \"order\": 1,\n  \"placeId\": \"ChIJ...\",\n  \"featureId\": \"0x...:0x...\",\n  \"businessName\": \"Joe's Pizza\",\n  \"businessRating\": 4.5,\n  \"businessReviewCount\": 1234,\n  \"businessCategory\": \"Pizza restaurant\",\n  \"businessAddress\": \"7 Carmine St, New York, NY 10014\",\n  \"placeMetadata\": {\n    \"placeUrl\": \"https://www.google.com/maps/place/...\",\n    \"placeId\": \"ChIJ...\",\n    \"businessName\": \"Joe's Pizza\",\n    \"businessRating\": 4.5,\n    \"businessReviewCount\": 1234\n  },\n  \"reviewId\": \"ChZDSUhNMG9nS0VJQ0FnSUQ...\",\n  \"reviewerName\": \"John Smith\",\n  \"reviewerAvatarUrl\": \"https://lh3.googleusercontent.com/...\",\n  \"reviewerProfileUrl\": \"https://www.google.com/maps/contrib/...\",\n  \"reviewerTotalReviews\": 87,\n  \"isLocalGuide\": true,\n  \"rating\": 5.0,\n  \"reviewText\": \"Best pizza in NYC...\",\n  \"reviewDateOriginal\": \"2 months ago\",\n  \"likesCount\": 12,\n  \"reviewLanguage\": \"en\",\n  \"photosInReview\": [\"https://lh3.googleusercontent.com/...\"],\n  \"ownerResponseText\": \"Thank you!\",\n  \"ownerResponseDate\": \"1 month ago\",\n  \"placeUrl\": \"https://www.google.com/maps/place/...\",\n  \"sourceUrl\": \"https://www.google.com/maps/place/...\",\n  \"scrapedAt\": \"2026-11-07T12:00:00+00:00\"\n}\n```\n\n`order` is the 1-based position in this run's output. `reviewDateOriginal` preserves Google's own date text, which is often relative. Fields Google does not publish for a review are omitted.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `details` or `reviews`. |\n| `searchQuery` | string | – | What to search for, e.g. `coffee shop` (mode=search). |\n| `location` | string | – | City, region or address scope, e.g. `New York, NY` (mode=search). |\n| `maxResults` | integer | `20` | Maximum businesses, 1–500 (mode=search). Prefill uses 3. |\n| `language` | string | `en` | Google Maps interface language (11 supported codes). |\n| `placeUrl` | string | – | Google Maps place URL (mode=details or reviews). |\n| `placeId` | string | – | Canonical Place ID beginning with `ChIJ` (mode=details or reviews). |\n| `maxReviews` | integer | `50` | Maximum reviews, 1–200000 (mode=reviews). |\n| `proxyConfiguration` | object | – | Optional proxy. Runs start direct and use the automatic Apify proxy pool only after a real block. |\n\n`details` and `reviews` accept either `placeUrl` or `placeId`, never both.\n\n### Examples\n\nSearch:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"pizza restaurant\",\n  \"location\": \"New York, NY\",\n  \"maxResults\": 20\n}\n```\n\nDetails:\n\n```json\n{\n  \"mode\": \"details\",\n  \"placeId\": \"ChIJabtoT7hlwokRLECK0SW3_8I\"\n}\n```\n\nReviews:\n\n```json\n{\n  \"mode\": \"reviews\",\n  \"placeUrl\": \"https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z\",\n  \"maxReviews\": 100\n}\n```\n\nSearch in another language:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"寿司\",\n  \"location\": \"東京 日本\",\n  \"maxResults\": 20,\n  \"language\": \"ja\"\n}\n```\n\n## Use cases\n\n- Market research: compare competitor ratings, pricing tier and location in one dataset.\n- Site selection: scan an area's existing businesses before choosing a location.\n- Review analysis: pull a place's reviews for sentiment or recurring complaint analysis.\n- AI agent tooling: call search, details and reviews from an MCP-compatible agent.\n- RAG pipelines: feed structured business and review records into a downstream model.\n\n## FAQ\n\n**Does this need Google login, cookies or an API key?** No. All modes read public Google Maps pages.\n\n**Can it run as an MCP server?** Yes. In Standby mode the actor serves `/mcp` with the three tools listed above, alongside normal batch runs.\n\n**Which mode should I use for one specific place?** Use `details` for one full business row, or `reviews` when you need the review rows. Both accept a Maps URL or a `ChIJ` Place ID.\n\n**Why might a run return fewer records than requested?** Google's own public result set and review surface set the ceiling. The actor returns everything it can observe and never pads the count.\n\n**Is a proxy required?** No. Batch runs go direct first; if Google serves a challenge, the actor retries through the automatic Apify proxy pool. MCP tool calls are direct-only and return a retryable `error` object if Google serves a challenge. You can leave `proxyConfiguration` empty.\n\n**Why is a field missing from one record?** Only fields Google publishes for that record are included. Empty values are removed rather than emitted as `null`.\n\n**Is this affiliated with Google?** No. This is an independent actor reading public Google Maps pages.\n\n## Limits\n\n- Google caps the public review panel's first window. The actor retries a bounded number of fresh renders and returns only reviews it actually observed; a very large `maxReviews` can therefore return fewer rows than requested.\n- Search results are the organic ranked window Google serves for the query, not an exhaustive crawl of every matching business. Sponsored placements are excluded.\n- Google may occasionally serve a limited or challenge page. The actor reports that state instead of fabricating rows.\n- Each run needs at least the default 2 GB of memory; smaller allocations can crash Chromium during multi-place searches.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "google-maps-business-search-and-reviews-mcp-server",
      "title": "Google Maps Business Search & Reviews MCP Server",
      "description": "Search Google Maps businesses, fetch one place's full details, or pull its reviews through a normal actor run or a native MCP server for AI agents. Returns ratings, contact info, hours, coordinates and flattened reviews with no login or API key.",
      "version": "1.1",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Google Maps Business Search & Reviews MCP Server\n\nA single Google Maps actor that works two ways: as a normal Apify batch run, and as a native MCP (Model Context Protocol) server for AI agents. It reads Google Maps' public pages directly — no login, cookie, or API key.\n\n- **Search mode** — find businesses by keyword and location with ratings, reviews, contact details, hours and coordinates. Sponsored placements are excluded.\n- **Details mode** — pull the full record for one place by Google Maps URL or canonical Place ID.\n- **Reviews mode** — flatten a place's reviews to one row per review, with place metadata repeated on every row.\n- **MCP server** — the same three capabilities are exposed as typed tools in Apify Standby mode at `/mcp`.\n- **Empty fields are omitted** — nothing is fabricated to fill a gap.\n\n## MCP server (Standby mode)\n\nWhen the actor runs in Standby, it serves Streamable HTTP MCP at:\n\n```\nhttps://<actor-standby-url>/mcp\n```\n\n| Tool | What it returns |\n|---|---|\n| `search_businesses` | Businesses for a keyword + location: name, category, rating, review count, address, phone, website, hours, coordinates and Google Maps URL. |\n| `get_business_details` | The full detail record for one place, addressed by `place_url` or `place_id` (ChIJ...). |\n| `get_place_reviews` | One flattened review per item plus the place summary; accepts `place_url` or `place_id`. |\n\nEvery tool accepts a `language` code (`en`, `es`, `fr`, `de`, `it`, `pt`, `ja`, `ko`, `zh`, `ar`, `ru`). Tool results are plain JSON objects with `count`, `items`/`reviews` and the resolved `place`/`placeId` where relevant. Errors return an `error` message instead of failing the session. Per-call tool caps are 100 businesses and 1,000 reviews; the batch modes keep the wider caps listed below.\n\n## Batch modes\n\n| Mode | Reads | Emits |\n|---|---|---|\n| `search` | Keyword + location result feed, then each place page | One `recordType: \"business\"` row per business |\n| `details` | One place page addressed by `placeUrl` or `placeId` | One `recordType: \"business\"` row |\n| `reviews` | A place's public reviews panel | One `recordType: \"review\"` row per review |\n\n`reviews` mode needs either `placeUrl` or `placeId`; `details` accepts the same two alternatives. `search` needs `searchQuery`, with `location` strongly recommended.\n\n## Output per business\n\n```json\n{\n  \"recordType\": \"business\",\n  \"index\": 0,\n  \"name\": \"Joe's Pizza\",\n  \"categoryName\": \"Pizza restaurant\",\n  \"categories\": [\"Pizza restaurant\"],\n  \"totalScore\": 4.5,\n  \"reviewsCount\": 1234,\n  \"ratingHistogram\": {\"5_star\": 900, \"4_star\": 200, \"3_star\": 80, \"2_star\": 30, \"1_star\": 24},\n  \"address\": \"7 Carmine St, New York, NY 10014\",\n  \"plusCode\": \"Q256+VX New York, USA\",\n  \"phone\": \"+1 212-366-1182\",\n  \"phoneUnformatted\": \"+12123661182\",\n  \"website\": \"https://www.joespizzanyc.com\",\n  \"priceLevel\": \"$$\",\n  \"hours\": [{\"day\": \"Monday\", \"hours\": \"11 AM–10 PM\"}],\n  \"additionalInfo\": {\"Service options\": [{\"Dine-in\": true}]},\n  \"photosSample\": [\"https://lh3.googleusercontent.com/...\"],\n  \"menuUrl\": \"https://www.joespizzanyc.com/menu\",\n  \"permanentlyClosed\": false,\n  \"temporarilyClosed\": false,\n  \"placeId\": \"ChIJ...\",\n  \"featureId\": \"0x...:0x...\",\n  \"location\": {\"lat\": 40.7308314, \"lng\": -73.9973325},\n  \"googleMapsUrl\": \"https://www.google.com/maps/place/...\",\n  \"sourceUrl\": \"https://www.google.com/maps/place/...\",\n  \"scrapedAt\": \"2026-11-07T12:00:00+00:00\"\n}\n```\n\nOther fields appear when Google publishes them: `description`, `menuUrl`, `reserveTableUrl`, `reservationsUrl`, `orderOnlineUrl`. Action links are emitted only when they resolve to a real destination — not a Google ad redirect or another Maps page.\n\n## Output per review\n\n```json\n{\n  \"recordType\": \"review\",\n  \"order\": 1,\n  \"placeId\": \"ChIJ...\",\n  \"featureId\": \"0x...:0x...\",\n  \"businessName\": \"Joe's Pizza\",\n  \"businessRating\": 4.5,\n  \"businessReviewCount\": 1234,\n  \"businessCategory\": \"Pizza restaurant\",\n  \"businessAddress\": \"7 Carmine St, New York, NY 10014\",\n  \"placeMetadata\": {\n    \"placeUrl\": \"https://www.google.com/maps/place/...\",\n    \"placeId\": \"ChIJ...\",\n    \"businessName\": \"Joe's Pizza\",\n    \"businessRating\": 4.5,\n    \"businessReviewCount\": 1234\n  },\n  \"reviewId\": \"ChZDSUhNMG9nS0VJQ0FnSUQ...\",\n  \"reviewerName\": \"John Smith\",\n  \"reviewerAvatarUrl\": \"https://lh3.googleusercontent.com/...\",\n  \"reviewerProfileUrl\": \"https://www.google.com/maps/contrib/...\",\n  \"reviewerTotalReviews\": 87,\n  \"isLocalGuide\": true,\n  \"rating\": 5.0,\n  \"reviewText\": \"Best pizza in NYC...\",\n  \"reviewDateOriginal\": \"2 months ago\",\n  \"likesCount\": 12,\n  \"reviewLanguage\": \"en\",\n  \"photosInReview\": [\"https://lh3.googleusercontent.com/...\"],\n  \"ownerResponseText\": \"Thank you!\",\n  \"ownerResponseDate\": \"1 month ago\",\n  \"placeUrl\": \"https://www.google.com/maps/place/...\",\n  \"sourceUrl\": \"https://www.google.com/maps/place/...\",\n  \"scrapedAt\": \"2026-11-07T12:00:00+00:00\"\n}\n```\n\n`order` is the 1-based position in this run's output. `reviewDateOriginal` preserves Google's own date text, which is often relative. Fields Google does not publish for a review are omitted.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `details` or `reviews`. |\n| `searchQuery` | string | – | What to search for, e.g. `coffee shop` (mode=search). |\n| `location` | string | – | City, region or address scope, e.g. `New York, NY` (mode=search). |\n| `maxResults` | integer | `20` | Maximum businesses, 1–500 (mode=search). Prefill uses 3. |\n| `language` | string | `en` | Google Maps interface language (11 supported codes). |\n| `placeUrl` | string | – | Google Maps place URL (mode=details or reviews). |\n| `placeId` | string | – | Canonical Place ID beginning with `ChIJ` (mode=details or reviews). |\n| `maxReviews` | integer | `50` | Maximum reviews, 1–200000 (mode=reviews). |\n| `proxyConfiguration` | object | – | Optional proxy. Runs start direct and use the automatic Apify proxy pool only after a real block. |\n\n`details` and `reviews` accept either `placeUrl` or `placeId`, never both.\n\n### Examples\n\nSearch:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"pizza restaurant\",\n  \"location\": \"New York, NY\",\n  \"maxResults\": 20\n}\n```\n\nDetails:\n\n```json\n{\n  \"mode\": \"details\",\n  \"placeId\": \"ChIJabtoT7hlwokRLECK0SW3_8I\"\n}\n```\n\nReviews:\n\n```json\n{\n  \"mode\": \"reviews\",\n  \"placeUrl\": \"https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z\",\n  \"maxReviews\": 100\n}\n```\n\nSearch in another language:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"寿司\",\n  \"location\": \"東京 日本\",\n  \"maxResults\": 20,\n  \"language\": \"ja\"\n}\n```\n\n## Use cases\n\n- Market research: compare competitor ratings, pricing tier and location in one dataset.\n- Site selection: scan an area's existing businesses before choosing a location.\n- Review analysis: pull a place's reviews for sentiment or recurring complaint analysis.\n- AI agent tooling: call search, details and reviews from an MCP-compatible agent.\n- RAG pipelines: feed structured business and review records into a downstream model.\n\n## FAQ\n\n**Does this need Google login, cookies or an API key?** No. All modes read public Google Maps pages.\n\n**Can it run as an MCP server?** Yes. In Standby mode the actor serves `/mcp` with the three tools listed above, alongside normal batch runs.\n\n**Which mode should I use for one specific place?** Use `details` for one full business row, or `reviews` when you need the review rows. Both accept a Maps URL or a `ChIJ` Place ID.\n\n**Why might a run return fewer records than requested?** Google's own public result set and review surface set the ceiling. The actor returns everything it can observe and never pads the count.\n\n**Is a proxy required?** No. Batch runs go direct first; if Google serves a challenge, the actor retries through the automatic Apify proxy pool. MCP tool calls are direct-only and return a retryable `error` object if Google serves a challenge. You can leave `proxyConfiguration` empty.\n\n**Why is a field missing from one record?** Only fields Google publishes for that record are included. Empty values are removed rather than emitted as `null`.\n\n**Is this affiliated with Google?** No. This is an independent actor reading public Google Maps pages.\n\n## Limits\n\n- Google caps the public review panel's first window. The actor retries a bounded number of fresh renders and returns only reviews it actually observed; a very large `maxReviews` can therefore return fewer rows than requested.\n- Search results are the organic ranked window Google serves for the query, not an exhaustive crawl of every matching business. Sponsored placements are excluded.\n- Google may occasionally serve a limited or challenge page. The actor reports that state instead of fabricating rows.\n- Each run needs at least the default 2 GB of memory; smaller allocations can crash Chromium during multi-place searches.\n",
      "input": {
        "title": "Google Maps MCP Server Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Scraping Mode",
            "type": "string",
            "description": "Choose the scraping mode: search for businesses, get full details for one place, or scrape reviews from a specific place.",
            "enum": [
              "search",
              "details",
              "reviews"
            ],
            "enumTitles": [
              "Search Businesses",
              "Get Place Details",
              "Scrape Reviews"
            ],
            "default": "search",
            "prefill": "search",
            "editor": "select"
          },
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "What to search for (e.g., 'restaurant', 'hotel', 'coffee shop'). Required for 'search' mode.",
            "editor": "textfield",
            "example": "pizza restaurant",
            "prefill": "coffee shop in New York"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Location to search in (e.g., 'New York, NY', 'London, UK'). Required for 'search' mode.",
            "editor": "textfield",
            "example": "New York, NY",
            "default": ""
          },
          "maxResults": {
            "title": "Maximum Results",
            "type": "integer",
            "description": "Maximum number of business results to scrape. Only used in 'search' mode.",
            "minimum": 1,
            "maximum": 500,
            "default": 20,
            "prefill": 3,
            "editor": "number"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for results (e.g., 'en', 'de', 'fr').",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "ja",
              "ko",
              "zh",
              "ar",
              "ru"
            ],
            "enumTitles": [
              "English",
              "Spanish",
              "French",
              "German",
              "Italian",
              "Portuguese",
              "Japanese",
              "Korean",
              "Chinese",
              "Arabic",
              "Russian"
            ],
            "default": "en",
            "prefill": "en",
            "editor": "select"
          },
          "placeUrl": {
            "title": "Place URL",
            "type": "string",
            "description": "Google Maps place URL. Required for 'details' and 'reviews' modes unless placeId is provided.",
            "editor": "textfield",
            "example": "https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z"
          },
          "placeId": {
            "title": "Google Place ID",
            "type": "string",
            "description": "Canonical Google Place ID beginning with ChIJ. Use instead of placeUrl in 'details' and 'reviews' modes.",
            "editor": "textfield",
            "example": "ChIJabtoT7hlwokRLECK0SW3_8I"
          },
          "maxReviews": {
            "title": "Maximum Reviews",
            "type": "integer",
            "description": "Maximum number of reviews to scrape. Only used in 'reviews' mode.",
            "minimum": 1,
            "maximum": 200000,
            "default": 50,
            "editor": "number"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional Apify proxy. Runs start direct and fall back to the automatic Apify proxy pool only after a real block.",
            "editor": "proxy",
            "sectionCaption": "Proxy",
            "sectionDescription": "Leave empty for the automatic direct-to-proxy fallback."
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Google Maps Business Search & Reviews MCP Server Output",
        "description": "Dataset records emitted by the search, details or reviews mode. The same data is returned by the MCP tools search_businesses, get_business_details and get_place_reviews in Standby mode.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Results",
            "description": "Search and details records use the suite's canonical camelCase business fields; review mode emits one flattened canonical review per item.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Google Maps Results",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "description",
                  "index",
                  "placeId",
                  "featureId",
                  "categoryName",
                  "categories",
                  "totalScore",
                  "reviewsCount",
                  "ratingHistogram",
                  "address",
                  "plusCode",
                  "phone",
                  "phoneUnformatted",
                  "website",
                  "priceLevel",
                  "hours",
                  "additionalInfo",
                  "photosSample",
                  "menuUrl",
                  "reserveTableUrl",
                  "reservationsUrl",
                  "orderOnlineUrl",
                  "permanentlyClosed",
                  "temporarilyClosed",
                  "location",
                  "googleMapsUrl",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "contact": {
              "title": "Contact Info",
              "transformation": {
                "fields": [
                  "recordType",
                  "name",
                  "placeId",
                  "featureId",
                  "address",
                  "phone",
                  "phoneUnformatted",
                  "website",
                  "location",
                  "googleMapsUrl",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "reviews": {
              "title": "Reviews",
              "transformation": {
                "fields": [
                  "recordType",
                  "placeMetadata",
                  "placeId",
                  "featureId",
                  "businessName",
                  "businessRating",
                  "businessReviewCount",
                  "businessCategory",
                  "businessAddress",
                  "placeUrl",
                  "reviewId",
                  "reviewerName",
                  "reviewerAvatarUrl",
                  "reviewerProfileUrl",
                  "reviewerTotalReviews",
                  "isLocalGuide",
                  "rating",
                  "reviewText",
                  "reviewDateOriginal",
                  "likesCount",
                  "reviewLanguage",
                  "photosInReview",
                  "ownerResponseText",
                  "ownerResponseDate",
                  "order",
                  "scrapedAt",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "usesStandbyMode": true,
      "webServerMcpPath": "/mcp",
      "webServerSchema": {
        "openapi": "3.0.0",
        "info": {
          "title": "Google Maps Business Search & Reviews MCP",
          "version": "1.1.0",
          "description": "Streamable HTTP MCP endpoint exposing typed Google Maps tools."
        },
        "paths": {
          "/": {
            "get": {
              "summary": "Standby readiness probe",
              "responses": {
                "200": {
                  "description": "Actor is ready"
                }
              }
            }
          },
          "/mcp": {
            "post": {
              "summary": "MCP Streamable HTTP endpoint",
              "description": "Send MCP JSON-RPC requests here. Tools: search_businesses, get_business_details, get_place_reviews.",
              "responses": {
                "200": {
                  "description": "MCP response"
                }
              }
            },
            "get": {
              "summary": "MCP Streamable HTTP event stream",
              "description": "Optional server-sent event stream for the MCP session.",
              "responses": {
                "200": {
                  "description": "MCP event stream"
                }
              }
            }
          }
        }
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 2048
      },
      "defaultMemoryMbytes": 2048,
      "minMemoryMbytes": 2048,
      "maxMemoryMbytes": 4096,
      "categories": [
        "BUSINESS",
        "TRAVEL"
      ]
    },
    "buildNumber": "1.1.1",
    "imageDigest": "87f7c76896b88838617c8ae977566b85119bf546e579e77ea898176fea166e29",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03901888888888889
    }
  }
}