{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Reviews Scraper",
    "description": "Scrape Google Maps reviews by URL, data ID, Place ID, CID, or business name. Get rating, text, date, owner response, photos, and privacy-safe reviewer hashes. MCP/API-ready.",
    "version": "0.5",
    "x-build-id": "fiwAdaalNtbYxExuS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~google-maps-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-google-maps-reviews-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/khadinakbar~google-maps-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-google-maps-reviews-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/khadinakbar~google-maps-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-google-maps-reviews-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",
        "properties": {
          "startUrls": {
            "title": "🔗 Google Maps URLs",
            "type": "array",
            "description": "List of Google Maps URLs to scrape reviews from. Accepts place URLs (https://www.google.com/maps/place/...), search URLs, CID URLs (?cid=...), and shortened maps.app.goo.gl links. Each URL yields reviews for one place. Do NOT paste Google Search result URLs — only maps.google.com / google.com/maps URLs are supported.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "placeIds": {
            "title": "🗂 Place IDs",
            "type": "array",
            "description": "Opaque Google Place IDs, including variable-length ChIJ, GhIJ, Eic and Iho forms. This Actor limits each ID to 2048 ASCII letters, digits, underscores or hyphens; this is an application input bound, not a Google ID-length rule. Use startUrls for a Maps URL and dataIds for 0x...:0x... IDs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "dataIds": {
            "title": "Google Maps data IDs / CIDs",
            "type": "array",
            "description": "Google Maps internal data IDs in exact 0x...:0x... format. For a decimal CID, provide a Google Maps ?cid= URL in startUrls.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "🔍 Search Query (alternative to URLs)",
            "type": "string",
            "description": "Free-text business name or keyword (e.g., 'Joe's Pizza Manhattan' or 'Apple Store Regent Street'). Used with the location field to find one place and scrape its reviews. Leave empty if you are providing startUrls or placeIds — do NOT use this for broad searches, use a specific business name."
          },
          "location": {
            "title": "📍 Location (with searchQuery)",
            "type": "string",
            "description": "City, region, or country used to disambiguate the searchQuery (e.g., 'New York, NY' or 'London, UK'). Ignored when startUrls or placeIds are provided. Leave empty for global search on searchQuery."
          },
          "maxReviews": {
            "title": "⭐ Max reviews (whole run)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of reviews saved across all targets in this run, from 1 to 5000. Start with 1–5 to test a place. Result charges apply to saved reviews; proxy usage and a separately charged caller-funded fallback may also apply.",
            "default": 100
          },
          "reviewsSort": {
            "title": "📅 Sort reviews by",
            "enum": [
              "newest",
              "mostRelevant",
              "highestRanking",
              "lowestRanking"
            ],
            "type": "string",
            "description": "Order in which reviews are fetched from Google. 'newest' is best for monitoring recent feedback, 'mostRelevant' matches Google's default, 'highestRanking' / 'lowestRanking' for best/worst first. Affects which reviews you hit the maxReviews cap on.",
            "default": "newest"
          },
          "reviewSearchQuery": {
            "title": "Review keyword filter",
            "maxLength": 500,
            "type": "string",
            "description": "Optional keyword to search inside Google Maps reviews before extraction. Use this when you only need reviews mentioning a phrase such as 'parking' or 'refund'. Defaults to no keyword filter. Not a business search query — use Search Query above to find the place itself. The query must fit within 500 UTF-8 bytes.",
            "default": ""
          },
          "language": {
            "title": "🌍 Language",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "pl",
              "ru",
              "ja",
              "ko",
              "zh-CN",
              "ar",
              "tr",
              "hi",
              "id",
              "vi",
              "th",
              "sv",
              "no",
              "da",
              "fi",
              "cs",
              "el",
              "he"
            ],
            "type": "string",
            "description": "Language for the Google Maps UI and for review translations. 'en' returns English UI, reviews stay in their original language. Affects Google's 'N reviews' parsing and the text of the 'a month ago' date labels.",
            "default": "en"
          },
          "countryCode": {
            "title": "Country hint",
            "type": "string",
            "description": "Two-letter Google region hint used for Maps review requests. Use this when review ordering or place resolution should match a specific market, for example US, GB, DE, or PK. Defaults to US. Not a proxy country selector by itself.",
            "default": "US"
          },
          "includePersonalData": {
            "title": "🔒 Include reviewer personal data (GDPR)",
            "type": "boolean",
            "description": "When true, includes reviewer name, profile URL, and profile photo URL. When false (default), these are nulled out and only a stable reviewer hash is returned. Personal data is regulated by GDPR in the EU — keep disabled unless you have a legitimate purpose and documented basis. reviewId is always returned regardless of this setting.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used to scrape Google Maps. Defaults to Apify Residential proxy which bypasses most Google bot checks. Do not override unless you know your proxy can handle Google.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}