Google Maps Scraper - Most Comprehensive
Pricing
from $0.06 / 1,000 places
Google Maps Scraper - Most Comprehensive
๐ฅ ~$0.1/1K places ๐ฅ The most comprehensive Google Maps scraper available. Extract 76+ fields per place including photos, review breakdowns, owner info, contacts, coordinates, and 30+ service options. Just type a keyword and location.
Pricing
from $0.06 / 1,000 places
Rating
5.0
(2)
Developer
Kai
Maintained by CommunityActor stats
15
Bookmarked
1.1K
Total users
110
Monthly active users
1.1 days
Issues response
3 days ago
Last modified
Categories
Share
The most comprehensive Google Maps scraper available. Extract up to ~120 fields per place including photos with AI captions, review text with owner replies, owner info, contacts, coordinates, and 30+ service options.
Collect public Google Maps place records from a search, company name, Place ID, or Google Maps URL. Just type what you're looking for and where. Starting at $0.10 per 1,000 places.
Use cases
- Lead generation - build prospect lists with business names, phone numbers, and websites for any area
- Competitive analysis - compare ratings, review counts, pricing, and service options across competitors
- Market research - map business density, popular times, and pricing patterns across regions
- Location intelligence - analyze neighborhoods, foot traffic patterns, and accessibility options
- Review monitoring - track review topics, sentiment, and rating breakdowns over time
- Menu and pricing data - extract structured menus, popular dishes, and price ranges from restaurants
Why this scraper?
| This scraper | Google Places API | Other scrapers | |
|---|---|---|---|
| Fields per place | Up to ~120 | 50+ (paid tiers) | 40-85 |
| Cost per 1,000 places | $0.10 | $20-40 | $1-13 |
| Photos | All available with author info, geo-coordinates, AI captions, upload dates | $7 per 1K requests | Up to 10 per place |
| Reviews | Full text, per-star, topics, owner replies, aspect ratings | Count + basic reviews | Per-star distribution |
| Popular times | Hourly busyness + wait times | Not available | Available |
| Service options | 30+ flags (dine-in, LGBTQ+, parking...) | ~10 flags | Varies |
| Structured menu | Sections, items, prices | Not available | URL only |
| Reservation links | Multiple booking URLs (OpenTable, etc.) | Not available | Single URL |
| AI summaries | Generative + review + neighborhood + EV amenity | Not available | Not available |
| Third-party reviews | TripAdvisor, Trip.com ratings + counts | Not available | Not available |
| Owner posts | Business posts with CTA links (WhatsApp, booking) | Not available | Not available |
| Rate limits | None | 60 requests/min | Varies |
Key differentiators:
- 10-130x cheaper than other scrapers, 200-400x cheaper than the Google Places API
- Full review text with owner replies and aspect ratings (Food, Service, etc.)
- Photo metadata: unique IDs, AI captions, author info, geo-coordinates, upload dates, owner upload detection
- Third-party review aggregation (TripAdvisor, Trip.com ratings and counts)
- Business owner posts with CTA links
- Structured menu with items - competitors only return a menu URL
- Address descriptors with nearby landmarks and spatial relationships
- Structured address components, secondary opening hours (breakfast, delivery, etc.)
Choose how to find places
| Starting point | Input source | Use it for |
|---|---|---|
| A category, product, or place description | query or searchTerms | Discover places in an area |
| A name or address near one point | query with searchType: "nearby" | Find the closest matching businesses |
| Known Google Place IDs or Maps URLs | placeIds | Enrich specific places in the supplied order |
| Company names and locations | companies | Match each company target and return its inputIndex |
If you provide more than one source, the Actor uses companies first, then
placeIds, then searchTerms, and then query.
Choose a detail level
| Mode | Fields | Best for |
|---|---|---|
basic (default) | ~50 | Core data, fastest. Names, addresses, ratings, hours, coordinates, service options, and AI summaries |
detailed | ~80 | Everything in basic, plus a fuller property record. Finds more places per area |
rich | ~120 | Everything in detailed, plus photos, videos, full reviews, review breakdowns, menus, and owner info |
Full photo listings are controlled separately by includePhotos and
maxPhotos. They can be enabled in any mode.
Every place includes (basic):
- Basic info: name, categories, rating, review count, description, business type, price range (with currency, e.g. "USD 10โ20"), business status, primary type display name
- Contact: phone (local + international), second phone number, website, website domain
- Address: full + short address, structured fields (street, city, state, postal code, country code), plus code, structured address components (with sublocality, county, country)
- Location: latitude, longitude, timezone, UTC offset minutes, viewport
- Hours: business hours by day, open/closed status, secondary hours (breakfast, delivery, takeout, kitchen), holiday warnings, hours confirmation timestamp
- Reviews: featured reviews with full text and owner replies, review link, AI review summary
- Services: dine-in, takeout, delivery, drive-through, outdoor seating, and 30+ service option flags
- AI summaries: generative summary, review summary, neighborhood summary, EV amenity summary
- Options: parking, payment, accessibility options, EV charge options (with live connector availability), fuel options (with real-time prices)
- Links: Google Maps link, directions, reviews, photos URLs
- Places inside: sub-destinations (e.g. stores inside a mall)
- Identifiers: place ID, data ID, knowledge graph ID, Google category ID (GCID)
Detailed adds:
- More location data: neighborhood, area, entrance coordinates, floor, short description
- Business details: claimed status, verified status, chain/franchise flag, hotel stars, amenities, reservation links, menu link, price label
- Descriptions: subtitle, owner description, third-party description
- Local info: local name and language
- Profile image: place profile image URL
- Popular times: hourly busyness data by day of week, typical time spent (text + structured minutes)
- Reviews: review highlights, review summary
- Search metadata: rank position, advertisement flag, place attributes
- Order online: links to ordering platforms
- Related places: related place names
Rich mode adds:
- Photos: all available photos with unique ID, full URLs, dimensions, author info, geo-coordinates, AI captions, upload dates, upload source, owner upload detection
- Videos: unique ID, thumbnails, streams (MP4/DASH/HLS) with correct dimensions, duration, author info
- Reviews breakdown: rating per star (1-5), full review text, author profile URLs, owner replies, aspect ratings (Food, Service, etc.), review topics with mention counts
- Owner info: owner name, owner profile link, owner avatar, owner posts with CTA links
- Street View: thumbnail image URL and panorama ID
- Third-party reviews: TripAdvisor and Trip.com ratings, review counts, and URLs (hotels)
- Structured menu: menu sections, items with prices, popular dishes
- Related: people also search, region hierarchy, image categories with counts
Search an area
Start with a query and a location:
{"query": "coffee shops","location": "San Francisco, CA"}
For searchType: "area", the location sets the center of a rectangle. It does
not select a city boundary. The rectangle extends approximately radius north,
south, east, and west of that center. Its corners can be farther from the center
than radius. For example, a 40 km area search covers a rectangle approximately
80 km wide and 80 km high.
Area search returns only places with valid coordinates inside that rectangle. The Actor tries to obtain coordinates for places whose position is unknown. It excludes places if their position remains unknown, including service-area businesses with no known position. The run log reports the excluded counts.
The Actor selects coordinates and address fields from one source. Valid Places API detail data takes priority, followed by Places API search data, then map search data. Missing address fields remain empty in the selected source. The Actor retains other available business details from the combined sources.
Set maxResults to set an upper limit on search results. The Actor can return
fewer valid places. Use 0 to remove the Actor limit:
{"query": "restaurants","location": "Tokyo, Japan","maxResults": 500}
Cover a larger or dense area
Increase radius to cover a wider area. Add several searchTerms when one
broad category can appear under different names. For a dense city centre, set
exhaustive to true.
{"searchTerms": ["gas station", "petrol station"],"location": "Denver, CO","radius": 50,"radiusUnit": "mi","maxResults": 1000,"exhaustive": true}
Include rich place details
Use mode: "rich" for photos, review details, owner information, and structured menus:
{"query": "restaurants","location": "New York, NY","mode": "rich"}
Search near exact coordinates
If you have specific coordinates, use latitude and longitude instead of location:
{"query": "dentists","latitude": 40.7128,"longitude": -74.0060,"zoom": 12,"maxResults": 200}
Request another result language
{"query": "hotels","location": "Paris, France","language": "fr"}
Find a specific business near a point
Use searchType: "nearby" with a narrow radius. Include the full address in query when you have it.
{"query": "Aegis Health and Rehabilitation 1441 Charic Dr, Wildwood, MO 63021","location": "Wildwood, MO","searchType": "nearby","radius": 1}
Nearby search returns the basic field set and can return about 60 results at most.
Look up known places or companies
Use a Place ID or full Google Maps URL when you already know the place:
{"placeIds": ["ChIJR3WssQNZwokRLG6SQTtwaI0"],"mode": "rich","includePhotos": true,"maxPhotos": 3}
Use a company target when you need to link each result to an input row:
{"companies": [{"name": "Google","city": "Mountain View","state": "CA","country": "US"}],"maxResultsPerCompany": 2}
Company results contain inputIndex. The value is the zero-based position in
the companies array.
Input
Provide one of query, searchTerms, placeIds, or companies. Searches also need location or both latitude and longitude. If you give more than one source, companies has first priority, then placeIds, then searchTerms, then query.
The complete examples below cover area search, nearby search, direct lookup, company lookup, and every input field.
Input reference
| Parameter | Type | Default | Effect |
|---|---|---|---|
| query | string | none | One search term. searchTerms replaces it when that array is not empty. |
| searchTerms | string[] | none | Several terms to search and merge. |
| location | string | none | City, address, or area used to find the search center. It does not select a city boundary. You can use both coordinates instead. |
| maxResults | integer, 0 or more | 20 | Upper limit on search results; fewer valid places can be available. Place-ID lookup uses the number of submitted IDs. Company lookup uses maxResultsPerCompany. 0 removes this search limit. |
| mode | basic, detailed, or rich | basic | Controls result coverage and fields. detailed can find more places per area. rich returns the same place set as detailed and adds videos, featured reviews, owner posts, and other optional fields. |
| openNow | boolean | none | Keeps places that Google reports as open now. |
| minRating | number | none | Keeps ratings 2, 2.5, 3, 3.5, 4, or 4.5 and higher. |
| priceLevels | string[] | none | Keeps Google price levels "1", "2", "3", and/or "4". |
| includePhotos | boolean | false | Adds full photo listings. maxPhotos sets the per-place limit. |
| maxPhotos | integer, 0 or more | 200 | Maximum photos for each place. 0 requests all available photos. |
| placeIds | string[] | none | Place IDs or full Google Maps URLs. The Actor keeps the input order and repeated IDs. |
| companies | object[] | none | Company targets with required name and city, and optional state and country. |
| maxResultsPerCompany | integer, 1 to 20 | 1 | Maximum places for each company target. |
| language | string | en | Google language code for names, descriptions, and reviews. |
| searchType | area or nearby | area | area returns places with valid coordinates inside the search rectangle. It excludes unknown positions and reports their count in the log. nearby uses one point and has a Google limit of about 60 results. |
| exhaustive | boolean | false | Searches more parts of a dense area. |
| radius | number, 1 or more | 50 | In area search, the approximate distance from the center to each north, south, east, and west edge. In nearby search, the radius used to prefer nearby results. The Actor limits the converted value to 5,000 km. |
| radiusUnit | km or mi | km | Unit for radius. |
| zoom | integer, 5 to 20 | 13 | Map zoom for area search. A larger number selects a smaller map area. |
| latitude | number | none | Exact centre latitude. You must also give longitude. |
| longitude | number | none | Exact centre longitude. You must also give latitude. |
| proxyConfiguration | object | {"useApifyProxy":true} | Optional connection settings for the run. |
Output
Each Dataset item is one place. Company results also contain inputIndex, which links the record to its companies[] item. Documented root fields remain present when Google supplies null, [], or {}.
Long arrays below keep one item. Square brackets mark values removed from the documentation, not values returned by the Actor. These selected examples are not saved Dataset items.
Field groups
| Group | Root fields |
|---|---|
| Search context | inputIndex, matchedQuery, rank, isAdvertisement, meta |
| Identity and type | placeId, dataId, title, categories, businessType, primaryType, primaryTypeDisplayName, googleMapsTypeLabel, googleCategoryId, knowledgeGraphId, cid, placeTypes, placeAttributes, businessStatus, isChain, isClaimed, isVerified |
| Address and position | formattedAddress, shortAddress, adrFormatAddress, street, city, postalCode, state, countryCode, area, neighborhood, latitude, longitude, entranceLatitude, entranceLongitude, timezone, plusCode, floor, viewport, addressComponents, addressDescriptor, containingPlaceId, relatedPlaces, subDestinations, movedPlaceId, pureServiceAreaBusiness |
| Contact and descriptions | website, websiteDomain, phone, phoneIntl, phone2, phoneIntl2, description, subtitle, shortDescription, ownerDescription, thirdPartyDescription, localName, localLanguage, googleMapsUri, googleMapsLinks |
| Hours and visit data | hours, hoursStatus, holidayHoursNote, hoursConfirmation, popularTimes, typicalTimeSpent, typicalTimeSpentMinutes, openingDate, currentSecondaryOpeningHours, regularSecondaryOpeningHours, utcOffsetMinutes |
| Ratings and reviews | rating, reviewCount, reviewsLink, reviewsSummary, reviewsPerRating, reviewHighlights, featuredReviews, reviewTopics, thirdPartyReviews, generativeSummary, reviewSummaryApi |
| Media | profileImageUrl, coverPhotoUrl, streetViewUrl, streetViewPanoId, photos, videos, photoTier, imagesCount, imageCategories, imageCategoryCounts, iconBackgroundColor, iconMaskBaseUri |
| Owner, menu, and booking | ownerId, ownerName, ownerLink, ownerAvatarUrl, ownerPosts, reservationLinks, orderOnline, menuLink, menuStructured, popularDishes, priceRange, priceLabel, hotelStars |
| Amenities and context | amenities, serviceOptions, accessibilityOptions, parkingOptions, paymentOptions, peopleAlsoSearch, regionHierarchy |
| Special Google data | evChargeOptions, fuelOptions, evChargeAmenitySummary, neighborhoodSummary, consumerAlert |
Root field types
| JSON type | Root fields |
|---|---|
| optional number | inputIndex |
| string | title |
string or null | matchedQuery, placeId, dataId, formattedAddress, shortAddress, street, city, postalCode, state, countryCode, website, timezone, description, subtitle, ownerDescription, phone, phoneIntl, phone2, phoneIntl2, hoursStatus, neighborhood, googleMapsUri, profileImageUrl, ownerId, cid, knowledgeGraphId, businessType, localName, localLanguage, area, primaryType, primaryTypeDisplayName, thirdPartyDescription, floor, plusCode, priceRange, priceLabel, reviewsLink, reviewsSummary, menuLink, businessStatus, typicalTimeSpent, shortDescription, holidayHoursNote, hoursConfirmation, websiteDomain, containingPlaceId, ownerName, ownerLink, coverPhotoUrl, streetViewUrl, streetViewPanoId, ownerAvatarUrl, googleCategoryId, generativeSummary, reviewSummaryApi, googleMapsTypeLabel, adrFormatAddress, iconBackgroundColor, iconMaskBaseUri, evChargeAmenitySummary, neighborhoodSummary, movedPlaceId |
| number | imagesCount |
number or null | rating, latitude, longitude, hotelStars, entranceLatitude, entranceLongitude, reviewCount, photoTier, rank, utcOffsetMinutes |
| boolean | isClaimed, isAdvertisement, isVerified |
boolean or null | isChain, pureServiceAreaBusiness |
| string[] | categories, placeAttributes, relatedPlaces, reservationLinks, placeTypes, reviewHighlights, imageCategories, popularDishes |
number[] or null | reviewsPerRating |
| object[] | amenities, subDestinations, photos, videos, featuredReviews, reviewTopics, peopleAlsoSearch, imageCategoryCounts, regionHierarchy, thirdPartyReviews, ownerPosts |
object[] or null | hours, popularTimes, orderOnline, menuStructured, addressComponents |
JSON value[] or null | currentSecondaryOpeningHours, regularSecondaryOpeningHours |
| object | serviceOptions, accessibilityOptions, parkingOptions, paymentOptions, meta |
object or null | typicalTimeSpentMinutes, googleMapsLinks, viewport, addressDescriptor, openingDate |
any JSON value or null | evChargeOptions, fuelOptions, consumerAlert |
Nested field types
| Object | Field types |
|---|---|
hours[] | day, hours: string |
amenities[] | category, name: string; available: boolean |
subDestinations[] | name: string; dataId, knowledgeGraphId: string or null; categories: string[]; latitude, longitude, rating, reviewCount: number or null |
popularTimes[] | day: string; hours: object[]. Each hour has numeric hour and busyness, and string label and waitTime. |
orderOnline[] | label, url: string |
typicalTimeSpentMinutes | min, max: number |
photos[] | id: string or null; url: string; width, height: number; isOwnerUpload: boolean; authorName, authorUrl, authorPhotoUrl, authorId, caption, uploadSource, uploadDate: string or null; photoLatitude, photoLongitude: number or null |
videos[] | id: string or null; thumbnailUrl: string; width, height, durationMs: number; streams: object[]; isOwnerUpload: boolean; authorName, authorUrl, authorPhotoUrl, authorId, uploadSource, uploadDate: string or null; videoLatitude, videoLongitude: number or null. Each stream has string format and url, and numeric width and height. |
featuredReviews[] | authorName, text: string; authorAvatarUrl, authorProfileUrl, publishedDate, ownerReply: string or null; rating: number; aspectRatings: object[] or null, with string aspect and numeric rating |
reviewTopics[] | keyword: string; mentionCount: number |
peopleAlsoSearch[] | title: string; dataId, placeId: string or null; rating, reviewCount: number or null; categories: string[] |
imageCategoryCounts[] | category: string; count: number |
regionHierarchy[] | regionName: string; confidence: number or null |
menuStructured[] | section: string; items: object[]. Each item has string name, price as string or null, and variants as object[]. Each variant has string label and price as string or null. |
thirdPartyReviews[] | source: string; url, rating: string or null; reviewCount: number or null |
ownerPosts[] | date, ctaLabel, ctaUrl: string or null |
addressComponents[] | longText, shortText: string; types: string[] |
googleMapsLinks | directionsUri, placeUri, writeAReviewUri, reviewsUri, photosUri: string or null |
viewport | low and high: objects with numeric latitude and longitude |
addressDescriptor | landmarks, areas: JSON value[] |
openingDate | year, month, day: number |
meta | scrapedAt: string |
The option maps serviceOptions, accessibilityOptions, parkingOptions, and
paymentOptions use boolean values. Other open Google objects can add or omit
child keys.
Selected rich place fields
This redacted field example uses values from The Capital Grille. Populated child arrays keep one item. It is not a saved Dataset item.
Selected company-mode fields
Company mode adds inputIndex so that you can match a result to its input
company. This selected example is not a saved Dataset item.
{"inputIndex": 0,"title": "Googleplex","placeId": "ChIJj61dQgK6j4AR4GeTYWZsKWw"}
Selected hotel, sub-destination, and third-party review fields
These selected fields from Bvlgari Resort Dubai show hotel, sub-destination, and third-party review values. This is not a saved Dataset item.
{"title": "Bvlgari Resort Dubai","hotelStars": 5,"subDestinations": [{"name": "Bulgari Yacht order receiving area.","dataId": "0x3e5f436cc33d957d:0x2e3470ae5cbd19d","knowledgeGraphId": "/g/11ss7gcjff","categories": ["Park"],"latitude": 25.208928999999998,"longitude": 55.235141299999995,"rating": 4.9,"reviewCount": 12}],"thirdPartyReviews": [{"source": "Tripadvisor","url": "[third-party review URL removed]","rating": "4.7","reviewCount": 590}]}
Selected fuel fields
These selected fields from EG Ampol show a returned fuel value. This is not a saved Dataset item.
{"title": "EG Ampol","fuelOptions": {"fuelPrices": [{"type": "DIESEL","price": {"currencyCode": "AUD","units": "2","nanos": 470000000},"updateTime": "2026-08-15T04:06:00Z"}]}}
Selected electric-vehicle charging fields
These selected fields from Tesla Supercharger show returned charging values. This is not a saved Dataset item.
{"title": "Tesla Supercharger","evChargeOptions": {"connectorCount": 12,"connectorAggregation": [{"type": "EV_CONNECTOR_TYPE_TESLA","maxChargeRateKw": 250,"count": 12}]},"evChargeAmenitySummary": null}
Nullable and open fields
These fields can be null or empty. Their child values depend on the place and
on data availability:
openingDatecan containyear,month, andday.imageCategoryCounts[]can containcategoryandcount.menuStructured[].items[].variants[]can containlabelandprice.featuredReviews[].aspectRatings[]can containaspectandrating.popularDishes[]can contain strings.evChargeAmenitySummaryandneighborhoodSummarycan contain generated text.consumerAlertis an open Google object, andmovedPlaceIdcan contain a place ID.
currentSecondaryOpeningHours, regularSecondaryOpeningHours,
evChargeOptions, fuelOptions, and consumerAlert have open source-defined
children. Do not depend on fixed positions in the secondary-hours arrays.
Search and field limits
How many places can I collect?
maxResults is an upper limit, not a required result count. Google can return
fewer places than requested. Area search also excludes places outside the
rectangle and places whose position remains unknown. Set maxResults to 0
to remove the Actor result limit.
Language and regional variation
Set language to a supported language code, such as ja for Japanese or de
for German. Results and available fields can differ by country and language.
Rich fields and photos
Rich mode adds featured-review text, review breakdowns, and owner posts. For
photos, full photo listings can be enabled in any mode with includePhotos;
basic mode then uses the detailed field set.
Photo captions, third-party hotel reviews, owner replies, and aspect ratings appear only when Google supplies them. Optional fields can be null or empty.