

Google Maps Scraper By Place ID
This Google Maps data scraping tool can extract various publicly available place-related data from the Google Maps platform, covering multi-dimensional information to meet diverse needs such as business research, market analysis, and travel planning. The obtainable data includes:
To facilitate the subsequent analysis, management, and application of data, the scraping results support export in the following two structured data formats:
Yes, the data obtained by this tool is 100% real-time and up-to-date.
Each scraping request directly pulls the latest public data from Google Maps servers, without relying on any local cache or third-party data warehouses. This ensures that the information you obtain, such as ratings, reviews, business hours, and business status, is completely synchronized with the content displayed on the Google Maps platform, effectively guaranteeing the timeliness and accuracy of the data and providing a reliable basis for decision-making.
This example shows the public structured output. Repeated values remain arrays or objects and are no longer duplicated into numbered top-level columns.
The top-level export contract is aligned with output_schema.json and currently defines 62 fields. Nested values remain inside their parent arrays or objects, for example reviews[].text, email_status.email_1.status, social_media.instagram.instagram_username, reservation_data.providers[].url, and images[].image_url. Every public field key, including dynamic nested keys such as attributes.service_options[].outdoor_seating, is normalized to snake_case. Navigable URLs use link; directly renderable image URLs use image; URL arrays keep array and apply the semantic type to items.type.
| Field | Type | Description |
|---|---|---|
| source_keyword | string | User input search keyword |
| source_location | string | User input search location |
| search_query | string | Full search query, usually keyword + location |
| scraped_at | string | UTC timestamp when the row was scraped, formatted as yyyy-mm-dd HH:MM:SS |
| search_rank | number | Original Google Maps search candidate rank before asynchronous enrichment |
| title | string | title field |
| data_id | string | data_id field |
| place_id | string | Google Maps Place ID. |
| address | string | address field |
| street | string | street field |
| city | string | city field |
| postal_code | string | postal_code field |
| state | string | state field |
| country | string | country field |
| primary_category | string | Primary Google Maps category. |
| all_categories | array | All Google Maps categories in their original order. |
| location | object | Geographic coordinates with numeric lat and lng fields. |
| website | link | website field |
| all_emails | array | All discovered email addresses, de-duplicated case-insensitively in discovery order. |
| email_status | object | Verification results keyed by email_1 through email_4; each key maps to the same-position item in all_emails. |
| social_media | object | Six platform objects containing url: []; enabled platform enrichment switches add prefixed detail fields inside the matching object. |
| leads_enrichment | array | LinkedIn people enrichment results with snake_case nested keys, merged from company data and the prospects API. Present only when max_leads_per_place is greater than 0. |
| phone | string | phone field |
| plus_code | string | plus_code field |
| review_rating | number | review_rating field |
| review_count | number | review_count field |
| reviews_link | link | reviews_link field |
| rating_distribution | object | Review counts keyed by rating_1 through rating_5. |
| reviews | array | Structured review items fetched when Fetch Reviews is enabled. |
| status | string | status field |
| error_code | string | Structured error code for validation or runtime failures, such as PARAMETER_MISSING, PARAM_ERROR, NO_RESULTS, EMPTY_RESULTS, or BASE_LOCATION_ERROR. Empty for successful place rows. |
| description | string | description field |
| thumbnail | image | thumbnail field |
| timezone | string | timezone field |
| price_range | object | Original price-range text and parsed numeric bounds/currency. |
| opening_hours | array | Available weekday opening-hour records in Monday-to-Sunday order. |
| open_now | boolean | Whether the place is currently open |
| popular_times | array | Localized weekly popular-times data. Each record contains a weekday name, Google weekday number, and ordered hourly busy-level records. |
| popular_times_live_percent | number | Current busyness percentage from popular-times data. |
| popular_times_live_text | string | Human-readable current busyness label. |
| popular_times_peak_day | string | Weekday with the maximum busyness across the whole week. |
| popular_times_peak_hour | number | Hour-of-day with the maximum busyness (0-23). |
| popular_times_peak_value | number | Maximum busyness value seen across the whole week (0-100). |
| images_count | number | Total valid image count represented by records in the images array. |
| images | array | Up to five basic place image records. |
| place_images_count | number | Number of additional place media items collected when the image add-on is enabled. |
| place_images | array | Additional place images collected from the Google Maps photos section. Each item includes image_url and published_at_date when available. When include_image_authors=true, author fields may also be included. |
| reservations | array | All discovered reservation links with their sources. |
| order_online | array | All discovered online-order links with their platforms. |
| menu | object | Menu URL and source. |
| booking_url | link | Google Maps booking URL extracted when place details are enabled. |
| reservation_data | object | Reservation availability and paired provider records. |
| online_order_available | boolean | True when Online Order is enabled and Google Maps exposes an online ordering section at data path 6/75/0 with type 4. |
| online_order_methods | array | Available online-order methods. |
| attributes | object | Google Maps attribute groups with recursively normalized snake_case keys. |
| web_results | array | Google web search results fetched for the place when Web Results is enabled. |
| owner_id | string | owner_id field |
| owner_name | string | owner_name field |
| owner_link | link | owner_link field |
| people_also_search | array | Related places suggested by Google Maps. |
| url | link | url field |
The current UI input contract is aligned with input_schema.json: max_results is required. keywords is required unless scrape_all_places is set to enabled, in which case a location (base_location, structured location fields, or custom_geojson) is required instead. Location fields and enrichment switches are otherwise optional.
Base Location base_location Optional Text
Description: Free-text search area for keyword searches. Use one concise location per run, such as city + country or state + country. It can be left empty when custom_geojson or structured country/state/city/county/postal_code fields define the search area.
Search area priority for keyword searches is: custom_geojson > base_location > structured country/state/city/county/postal_code. When custom_geojson is provided, base_location is optional and will not override the custom area.
Custom GeoJSON Search Area custom_geojson Optional Text
Description: Optional GeoJSON search area. Supports Polygon, MultiPolygon, FeatureCollection, Circle, and Point with radiusKm. Coordinates must use GeoJSON order [longitude, latitude]. Invalid custom geometry fails clearly with CUSTOM_GEOJSON_ERROR.
Structured Location Fields country/state/city/county/postal_code Optional Text
Description: Used only when base_location is empty and no custom GeoJSON is provided. The fields are combined into a geocode query and can return bounds plus GeoJSON polygons from the geocode service.
Search Terms keywords Optional String List
Description: String list in the form {"keywords": ["bar", "club"]}. Only the first element is used as the Google Maps search term for the selected location. Required unless scrape_all_places is set to enabled, in which case any value entered here is ignored.
Scrape All Places scrape_all_places Optional Text
Description: When set to enabled ("Scrape all places visible on the map (ignore search terms)"), the scraper ignores any keywords you provide and instead sweeps every place category within the given location. Still requires a location via base_location, structured location fields, or custom_geojson. Default is disabled (normal keyword search or direct places).
Place Categories place_categories Optional String List
Description: Optional category filter for returned places when a keyword search is used. Use it to narrow results when Google Maps category labels are reliable for the target market. When scrape_all_places is enabled, this instead seeds/overrides the category sweep list (see resources/place_categories_top500.json).
Lang lang Optional Text
Description: Source language of the text.
Parameter Value:
Max Results max_results Required Number
Description: Number of places to retrieve for each search term. Default is 20 and the exported dataset never exceeds this hard limit. Polygon keyword searches establish broad root-grid coverage first, then reserve 30%-50% of the result capacity for density-prioritized refinement; dense urban areas are queried earlier without allowing one hotspot to monopolize the run. Larger values increase processing time.
List Result Filters title_match_mode / min_rating / website_filter / skip_permanently_closed Optional
Description: Filters are applied to Google Maps list candidates before detail/enrichment requests. title_match_mode supports all, contains, and exact title matching against the search term. min_rating supports All, 2+, 2.5+, 3+, 3.5+, 4+, and 4.5+. website_filter supports all, only with website, and only without website based on the list payload. skip_permanently_closed defaults to true. If filters reduce the accepted count, the scraper continues fetching list pages/cells until the target or normal budget limit is reached.
Place Details fetch_place_details Optional Boolean
Description: Returns structured opening_hours, price_range, popular_times, menu, booking_url, and attributes fields when enabled.
Reservation Provider Data fetch_reservation_data Optional Boolean
Description: Returns reservations: [] and structured reservation_data. Provider names and URLs stay paired in each providers item; missing data uses an empty array or object.
Online Order fetch_online_order Optional Boolean
Description: Returns order_online: [], online_order_available, array-valued online_order_methods, and menu when enabled.
Web Results fetch_web_result Optional Boolean
Description: Controls whether to request Google web results for each place by merchant title, state, and city, then enrich related merchant information into web_results. Default is false.
Additional Images max_images_per_place Optional Number
Description: Controls additional photos collected from Google Maps. Basic photos use images: []; paginated photo results use place_images: []. Default 0 disables additional pagination.
Include Image Authors include_image_authors Optional Boolean
Description: When enabled with max_images_per_place > 0, includes public image uploader fields when Google returns them: author_name, author_profile_url, and author_avatar_url. Default is false.
Fetch Social Info fetch_social_info Optional Boolean
Description: Visits the official website to discover public email addresses and social profiles. Output uses all_emails: [] and six platform objects inside social_media; each platform always contains url: [], and internal numbered URL slots are not exported.
Maximum Leads Per Place max_leads_per_place Optional Number
Description: Controls LinkedIn people lead enrichment per place. Default is 2; set it to 0 to hide leads_enrichment. When greater than 0, the scraper attempts to enrich people leads for the matched company, even when social enrichment output is disabled. Each lead uses snake_case keys and includes both seniority and seniority_tier when available.
LinkedIn Leads Seniority leads_seniority Optional Text
Description: Optional seniority filter for lead enrichment, for example c_suite,vp,director. Leave empty to request any seniority.
Email Verification email_verification Optional Boolean
Description: Disabled by default. When enabled, up to the first four addresses in all_emails are verified and returned under email_status.email_1 through email_status.email_4. LinkedIn lead verification stays inside each leads_enrichment item.
Pipeline note: rows are streamed with upsert_data(row, "data_id"). The list placeholder is inserted first in search_rank order, then detail, contact, web results, reviews, social profile data, and email verification update the same row as each stage finishes.
Logging note: production/default logs keep the complete received input parameters plus high-level validation, error, and completion summaries. Detailed collection/enrichment traces and low-level diagnostics stay off unless SCRAPER_LOG_MODE=debug or LOG_MODE=debug is explicitly set.
Social Media Profile Enrichment fetch_social_detail_info Optional Object
Description: The Facebook, Instagram, YouTube, TikTok, and LinkedIn switches control profile enrichment independently. A disabled platform remains URL-only; an enabled platform adds all of its prefixed detail fields inside the matching social_media platform object. Twitter has no profile-enrichment switch and remains URL-only.
Enable Facebook profile scraping facebook Optional Boolean
Description: When enabled, the scraper visits discovered Facebook profile URLs and adds facebook_* detail fields inside social_media.facebook.
Enable Instagram profile scraping instagram Optional Boolean
Description: When enabled, the scraper visits discovered Instagram profile URLs and adds instagram_* detail fields inside social_media.instagram.
Enable YouTube channel scraping youtube Optional Boolean
Description: When enabled, the scraper visits discovered YouTube channel URLs and adds youtube_* detail fields inside social_media.youtube.
Enable TikTok profile scraping tiktok Optional Boolean
Description: When enabled, the scraper visits discovered TikTok profile URLs and adds tiktok_* detail fields inside social_media.tiktok.
Enable LinkedIn profile scraping linkedin Optional Boolean
Description: When enabled, the scraper visits discovered LinkedIn company/profile URLs and adds linkedin_* detail fields inside social_media.linkedin. These five social profile switches are grouped under Fetch Social Info and only run after profile URLs are discovered.
Output note: missing string-like columns (text, string, url, date, datetime) are exported as empty strings. Numeric columns keep their numeric schema and remain null when no numeric value is available.
Enable Reviews fetch_reviews Optional Boolean
Description: Master switch for review scraping. Default is false. max_reviews_per_place, review_sort_by, review_keyword, and include_reviewer_info only affect output when this switch is enabled.
Max Reviews Per Place max_reviews_per_place Optional Number
Description: This parameter limits the maximum number of reviews crawled for each place. It only takes effect when fetch_reviews is true. If empty, the default is 5 reviews per place; values above 1000 are clamped to 1000 per place.
Review Sort By review_sort_by Optional Text
Description: Review sort mode used when fetch_reviews is true. Supported values are newest, oldest, highestRating, lowestRating, and mostRelevant.
Review Keyword review_keyword Optional Text
Description: Optional keyword used to prioritize matching reviews when fetch_reviews is true. The scraper scans up to min(1000, max_reviews_per_place * 4) candidate reviews for keyword matches. If fewer matching reviews are found than requested, the remaining slots are filled with non-matching reviews, reusing already scanned cached candidates first and requesting additional ordinary reviews only when the cache is not enough. Duplicate reviews are removed before output.
Include Reviewer Info include_reviewer_info Optional Boolean
Description: Controls whether reviewer name, profile URL, profile ID, avatar URL, review count, and photo count are fetched into the structured reviews array. When disabled, these reviewer fields are not crawled. Default is false.
Explore more popular scrapers from our marketplace
by CoreClaw
Pull business records in bulk from Google Maps — covering reviews and reviewer details, photos, contact info (full name, email, job title), opening hours, prices and more. From there, export the data, trigger runs via API, schedule and watch them, or wire the results into your other tools.
by CoreClaw
Discover and collect sales-ready local business leads from Google Maps with company profiles, websites, phone numbers, reviews, decision-maker contacts, and verified emails for outreach campaigns.
by CoreClaw
Google Maps Review Scraper bulk extracts star ratings, text, reviewer details, owner responses, and image URLs. Precisely analyze customer sentiment, monitor competitors, optimize local SEO, and comprehensively boost your business reputation. Supports keyword filtering and multilingual translation, delivers structured data.