Simple Google Maps Scraper
Pricing
from $1.00 / 1,000 place from searches
Simple Google Maps Scraper
Pricing
from $1.00 / 1,000 place from searches
You can access the Simple Google Maps Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "NpxUluGgj3UjVnoKv" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/ecommerce_leads~simple-google-maps-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-ecommerce_leads-simple-google-maps-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/ecommerce_leads~simple-google-maps-scraper/runs": { "post": { "operationId": "runs-sync-ecommerce_leads-simple-google-maps-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/ecommerce_leads~simple-google-maps-scraper/run-sync": { "post": { "operationId": "run-sync-ecommerce_leads-simple-google-maps-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", "required": [ "mode" ], "properties": { "mode": { "title": "What do you want to do?", "enum": [ "search", "place" ], "type": "string", "description": "**Search** finds up to 20 places matching a query. **Place lookup** returns one specific place from its CID or Google Maps URL, with up to 3 reviews.", "default": "search" }, "query": { "title": "Search query", "type": "string", "description": "What to search for, including the location.\n\n**Examples — all of these work:**\n\n| Query | Finds |\n|---|---|\n| `Coffee shops in London` | coffee shops in London |\n| `restaurants in Paris` | restaurants in Paris |\n| `dentists in Austin, Texas` | dentists in Austin |\n| `plumbers near Manchester` | plumbers around Manchester |\n| `hotels in 41.3851,2.1734` | hotels at those coordinates |\n| `Pizza Hut in Chicago` | a specific brand's locations |\n\nThe location is what the search is centred on, so include one — `coffee shops` alone cannot be searched. If you set **Geo coordinates** in the Advanced section instead, leave the location out of the query and write just `coffee shops`.\n\nOne query per run, returning at most 20 places. For wider coverage, run several queries (vary the terms, the cities, or the coordinates).", "default": "Coffee shops in London" }, "page": { "title": "Current page", "minimum": 1, "maximum": 5, "type": "integer", "description": "Which page of results to fetch. Each page is a **new set of 20 places** for the same query — page 1 is the first 20, page 2 the next 20, and so on.\n\nTo collect more than 20 places, run the actor once per page with the same query and change only this number.\n\n**Worth knowing:**\n\n- Google stops returning results after about **page 5** for a given query and location. Past that you get an empty run, which costs you nothing.\n- Pages occasionally repeat a place, because Google re-ranks between requests. Deduplicate on `place_id` if you are merging pages.\n- A narrower query or a different **Geo coordinates** point reaches more places than paging deeper does.\n\nOnly used when **mode** is *Search*.", "default": 1 }, "place": { "title": "Place — CID or Google Maps URL", "type": "string", "description": "Which place to look up. **Four input forms are accepted:**\n\n| Form | Example |\n|---|---|\n| Bare CID | `5249990186996207485` |\n| Short link | `https://maps.google.com/?cid=5249990186996207485` |\n| Full Maps URL | `https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!3m1!4b1!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945` |\n| Feature ID | `0x47e66e2964e34e2d:0x8ddca9ee380ef7e0` |\n\n**How to get one:** open the place on Google Maps and copy the address bar — that is the full URL form. The `!1s0x...:0x...` inside it is the feature ID; a CID is the second half converted to decimal.\n\nA Maps URL with only `@lat,lng` and no `!1s` segment carries no identifier and is rejected — copy the link from the place's own page, not from a panned map.\n\nOnly used when **mode** is *Place lookup*." }, "language": { "title": "Language", "type": "string", "description": "Two-letter Google language code for the results — `en`, `de`, `es`, `fr`, `it`, `pt`, `nl`, `pl`, `ja`. Affects category names, opening-hours labels and the editorial description.", "default": "en" }, "geo": { "title": "Geo coordinates (lat,lon)", "type": "string", "description": "Centre the search on exact coordinates, e.g. `51.5074,-0.1278`.\n\n**If you set this, leave the location out of the query.** Write `coffee shops` rather than `coffee shops in London` — the coordinates are the location, and a query naming a second place pulls the search away from them.\n\nLeave blank and the coordinates are derived from the location in your query automatically. Set it when you want a precise spot (a neighbourhood, not a city), or to sweep a grid of points across a large area.\n\nIgnored in Place lookup mode — a CID identifies the place on its own." }, "zoom": { "title": "Zoom", "minimum": 1, "maximum": 21, "type": "integer", "description": "Map zoom level, 1–21. This is the *area* the search covers: lower zoom sweeps a wider region, higher zoom concentrates on a smaller one.\n\n- `12` — a whole city\n- `15` — a district (default)\n- `18` — a few streets\n\nAt any zoom a query still returns at most 20 places, so a low zoom over a dense city gives 20 spread thinly, while a high zoom gives 20 from one neighbourhood.", "default": 15 }, "radius": { "title": "Radius (metres)", "minimum": 100, "maximum": 50000, "type": "integer", "description": "Search radius around the coordinates, in metres. Default 10000 (10 km). Narrow it to keep results tight around a point, widen it to reach across a metro area.", "default": 10000 } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Simple Google Maps Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: