{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Maps Full Suite — Places, Reviews & Grid Search",
    "description": "Scrape Google Maps places, full details, reviews, People Also Search For and directions in one Actor. Grid search bypasses Google's ~120-result cap for complete area coverage.",
    "version": "0.1",
    "x-build-id": "ma19OoEyiiubsqXKB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/0x_learner~google-maps-full-suite/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-0x_learner-google-maps-full-suite",
        "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/0x_learner~google-maps-full-suite/runs": {
      "post": {
        "operationId": "runs-sync-0x_learner-google-maps-full-suite",
        "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/0x_learner~google-maps-full-suite/run-sync": {
      "post": {
        "operationId": "run-sync-0x_learner-google-maps-full-suite",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Scraping mode",
            "enum": [
              "search",
              "nearby",
              "placeDetails",
              "directions"
            ],
            "type": "string",
            "description": "What to scrape. <b>search</b>: keyword search (optionally grid-split). <b>nearby</b>: places matching a query around an anchor place. <b>placeDetails</b>: full details for a list of places. <b>directions</b>: route from A to B.",
            "default": "search"
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Used in search and nearby modes, e.g. <code>dentist</code>."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Search area as text (<code>Austin, TX</code>) or <code>lat,lng</code>. Required for grid search."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of places to output (after deduplication and filters).",
            "default": 100
          },
          "nearbyAnchor": {
            "title": "Nearby anchor",
            "type": "string",
            "description": "Nearby mode: the place to search around, e.g. <code>Eiffel Tower</code>."
          },
          "nearbyDepth": {
            "title": "Nearby expansion depth",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Nearby mode: 0 = around the anchor only. 1–2 = repeat the nearby search around every result (much wider coverage, more requests).",
            "default": 0
          },
          "scrapePlaceDetails": {
            "title": "Scrape full details for each result",
            "type": "boolean",
            "description": "Search/nearby modes: fetch the full place record for every result (full weekly hours, review count). One extra request per place.",
            "default": false
          },
          "enableGridSearch": {
            "title": "Enable grid search (bypass the ~120-result limit)",
            "type": "boolean",
            "description": "Split the area into a grid and search each cell separately. Results are deduplicated by place ID across cells. <b>Multiplies run cost</b> — see gridMaxCells.",
            "default": false
          },
          "gridCellSizeKm": {
            "title": "Grid cell size (km)",
            "minimum": 0.5,
            "maximum": 50,
            "type": "number",
            "description": "Smaller = more thorough but slower. ~1 km for dense city centres, 2 km for suburbs, 10 km for rural areas.",
            "default": 2
          },
          "gridSearchRadiusKm": {
            "title": "Total search radius (km)",
            "minimum": 1,
            "maximum": 500,
            "type": "number",
            "description": "Radius around the location to cover with the grid.",
            "default": 20
          },
          "gridMaxCells": {
            "title": "Max grid cells",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap on cells searched. 100 cells × up to 120 hits = up to 12,000 raw results before deduplication.",
            "default": 100
          },
          "places": {
            "title": "Places",
            "type": "array",
            "description": "Place details mode: one per line — a Google Maps URL, a place ID (<code>0x…:0x…</code>) or a place name (<code>Kababjees Do Darya Karachi</code>).",
            "items": {
              "type": "string"
            }
          },
          "placeId": {
            "title": "Place ID (single)",
            "type": "string",
            "description": "Alternative to Places for a single place ID (<code>0x…:0x…</code>)."
          },
          "placeLat": {
            "title": "Place latitude",
            "type": "number",
            "description": "Optional coordinates for Place ID."
          },
          "placeLng": {
            "title": "Place longitude",
            "type": "number",
            "description": "Optional coordinates for Place ID."
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Attach reviews to each place (text, translation, rating, reviewer, photos, likes, dining attributes).",
            "default": false
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum reviews to attach to each place (10 per request).",
            "default": 20
          },
          "reviewsSort": {
            "title": "Reviews sort",
            "enum": [
              "newest",
              "mostRelevant",
              "highestRating",
              "lowestRating"
            ],
            "type": "string",
            "description": "Order in which reviews are collected.",
            "default": "newest"
          },
          "includePeopleAlsoSearch": {
            "title": "Include People Also Search For",
            "type": "boolean",
            "description": "Attach Google's 'People also search for' places (competitors / similar places). Starts a real Chrome once per run to open a Google Maps session that Google grants the full view (adds ~30 s–2 min to the run); the session is then reused for every place.",
            "default": false
          },
          "maxPeopleAlsoSearch": {
            "title": "Max People Also Search For per place",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Maximum 'People also search for' places per place.",
            "default": 10
          },
          "resolvePeopleAlsoSearch": {
            "title": "Resolve every People Also Search For place",
            "type": "boolean",
            "description": "Google embeds only short IDs (and details for the first few). Resolve every PAS place to its full place ID, address, phone and website (one extra request per PAS place).",
            "default": true
          },
          "origin": {
            "title": "Origin",
            "type": "string",
            "description": "Directions mode: start address or place."
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "Directions mode: destination address or place."
          },
          "travelMode": {
            "title": "Travel mode",
            "enum": [
              "driving",
              "walking",
              "bicycling"
            ],
            "type": "string",
            "description": "Directions mode: how to travel between origin and destination.",
            "default": "driving"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only output places rated at least this value."
          },
          "requirePhone": {
            "title": "Only places with a phone number",
            "type": "boolean",
            "description": "Only output places that list a phone number.",
            "default": false
          },
          "requireWebsite": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "Only output places that list a website.",
            "default": false
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Google interface language code, e.g. <code>en</code>, <code>de</code>.",
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxies are strongly recommended — Google rate-limits by IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "debug": {
            "title": "Debug",
            "type": "boolean",
            "description": "Save diagnostics (e.g. People Also Search For warm-up screenshots) to the run's key-value store.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}