Google Maps Scraper
Pricing
from $4.00 / 1,000 place results
Go to Apify Store
Google Maps Scraper
Scrape Google Maps places by search query or URL: name, address, phone, website, email, hours, rating, reviews, menu, photos and more.
Google Maps Scraper
Pricing
from $4.00 / 1,000 place results
Scrape Google Maps places by search query or URL: name, address, phone, website, email, hours, rating, reviews, menu, photos and more.
You can access the 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": "1.0", "x-build-id": "iOzxeeI424IcRx2r7" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/seemuapps~google-maps-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-seemuapps-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/seemuapps~google-maps-scraper/runs": { "post": { "operationId": "runs-sync-seemuapps-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/seemuapps~google-maps-scraper/run-sync": { "post": { "operationId": "run-sync-seemuapps-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", "properties": { "searchQueries": { "title": "Search queries", "type": "array", "description": "What to search on Google Maps, one query per line — e.g. \"coffee shops in Amsterdam\", \"dentists near Austin TX\", \"hotels near Central Park\". Include the city/area in the query for best results.", "items": { "type": "string" } }, "placeUrls": { "title": "Place URLs or IDs", "type": "array", "description": "Scrape specific places directly. Accepts full Google Maps place URLs, maps.app.goo.gl short links, ?cid= links, Google Place IDs (ChIJ…), or hex IDs (0x…:0x…). Can be combined with search queries.", "items": { "type": "string" } }, "maxPlacesPerQuery": { "title": "Max places per query", "minimum": 0, "type": "integer", "description": "Maximum number of places to scrape for each search query. Google Maps returns at most ~120 results per query. Set 0 to take everything Google returns.", "default": 20 }, "maxReviewsPerPlace": { "title": "Max reviews per place", "minimum": 0, "type": "integer", "description": "How many reviews to fetch for each place (newest first). Reviews are attached to the place record under `reviews`. Set 0 to skip reviews (faster).", "default": 0 }, "extractEmails": { "title": "Extract emails from websites", "type": "boolean", "description": "When a place lists a website but Google Maps has no email, visit the website and extract a contact email address (mailto: links first, then page text). Adds one request per place.", "default": false }, "language": { "title": "Language", "type": "string", "description": "Language code for results (names, categories, review text labels), e.g. en, de, fr, es, pt-BR.", "default": "en" }, "country": { "title": "Country", "type": "string", "description": "Two-letter country code that biases search results, e.g. us, gb, de, au.", "default": "us" }, "latitude": { "title": "Latitude (search bias)", "minimum": -90, "maximum": 90, "type": "number", "description": "Optional. Center the map search around this latitude. Leave empty to let Google infer the location from the query text." }, "longitude": { "title": "Longitude (search bias)", "minimum": -180, "maximum": 180, "type": "number", "description": "Optional. Center the map search around this longitude. Use together with latitude." }, "zoom": { "title": "Zoom level (search bias)", "minimum": 3, "maximum": 21, "type": "integer", "description": "Map zoom used with latitude/longitude — 3 (continent) to 21 (street). Higher zoom = smaller search area. Only used when coordinates are set.", "default": 13 }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Optional. By default the actor connects directly and automatically falls back to Apify datacenter → residential proxies only if Google starts blocking. Set a specific proxy here to force it for all requests." } } }, "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 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: