{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Reviews Scraper - Original Language & Owner Replies",
    "description": "Google Maps reviews kept in the language the reviewer actually wrote them in, not Google's machine translation, with ratings, owner replies, photos and per-review language flags.",
    "version": "1.0",
    "x-build-id": "iYkH6MJkmbRx5Yf1p"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/skcho~google-maps-review-collector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-skcho-google-maps-review-collector",
        "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/skcho~google-maps-review-collector/runs": {
      "post": {
        "operationId": "runs-sync-skcho-google-maps-review-collector",
        "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/skcho~google-maps-review-collector/run-sync": {
      "post": {
        "operationId": "run-sync-skcho-google-maps-review-collector",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "placeUrls"
        ],
        "properties": {
          "placeUrls": {
            "title": "Places",
            "type": "array",
            "description": "One place per line. Any of these work: the long address-bar URL, a share link (maps.app.goo.gl/...), a Google Maps search URL, or just the place name (\"Ichiran Shibuya\") — the first search result is used.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "type": "integer",
            "description": "Cap per language pass. 200 finishes in a few minutes; a place with thousands of reviews and no cap can run for over an hour. The run always stops in time to save what it has.",
            "default": 200
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "newest",
              "relevance",
              "highestRating",
              "lowestRating"
            ],
            "type": "string",
            "description": "Which order Google should serve reviews in. \"newest\" gives the most stable, least duplicated sweep; \"relevance\" is Google's default ranking.",
            "default": "newest"
          },
          "sweepAllSortOrders": {
            "title": "Sweep All Sort Orders",
            "type": "boolean",
            "description": "Ignores the setting above and collects under all four sort orders, merging the results. Google caps how deep any single list goes, and each order exposes a slightly different slice, so this raises total coverage at roughly 4x the time.",
            "default": false
          },
          "languages": {
            "title": "UI Language Passes",
            "type": "array",
            "description": "Google shows a review's original text only when the page is opened in that review's language. List the languages the reviewers actually write in (e.g. ko, en, ja) — each one is a separate pass, so each adds time.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "wideLanguageSweep": {
            "title": "Wide Language Sweep",
            "type": "boolean",
            "description": "Ignores the list above and sweeps 14 common languages (ko, en, ja, zh-CN, zh-TW, es, fr, de, pt-BR, it, ru, th, vi, id). Maximises original-text coverage; takes roughly 14x as long.",
            "default": false
          },
          "keepOriginalOnly": {
            "title": "Discard Reviews Left Untranslated-Only",
            "type": "boolean",
            "description": "Drops reviews whose original text was never captured, instead of keeping Google's translation as a flagged fallback.",
            "default": false
          },
          "expandLongReviews": {
            "title": "Expand Long Reviews",
            "type": "boolean",
            "description": "Clicks every \"see more\" so long reviews are stored in full rather than truncated. Adds noticeable time on large places.",
            "default": true
          },
          "headless": {
            "title": "Run Browser Hidden",
            "type": "boolean",
            "description": "Not recommended. Google answers headless sessions with a \"limited view\" page that contains no reviews at all; leave this off so a real browser window opens.",
            "default": false
          },
          "scrollDelayMs": {
            "title": "Scroll Delay (ms)",
            "type": "integer",
            "description": "Pause between scroll steps. Raise it if the list stops loading early or you start getting blocked.",
            "default": 700
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave this off. Measured 2026-09-26: with residential proxy the browser stalls in the review panel and the run burns its whole timeout for zero reviews. Only try it if Google starts serving its \"limited view\" page from Apify's own addresses."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}