Google Maps Scraper - Most Comprehensive avatar

Google Maps Scraper - Most Comprehensive

Pricing

from $0.06 / 1,000 places

Go to Apify Store
Google Maps Scraper - Most Comprehensive

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

Kai

Maintained by Community

Actor stats

15

Bookmarked

1.1K

Total users

110

Monthly active users

1.1 days

Issues response

3 days ago

Last modified

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 scraperGoogle Places APIOther scrapers
Fields per placeUp to ~12050+ (paid tiers)40-85
Cost per 1,000 places$0.10$20-40$1-13
PhotosAll available with author info, geo-coordinates, AI captions, upload dates$7 per 1K requestsUp to 10 per place
ReviewsFull text, per-star, topics, owner replies, aspect ratingsCount + basic reviewsPer-star distribution
Popular timesHourly busyness + wait timesNot availableAvailable
Service options30+ flags (dine-in, LGBTQ+, parking...)~10 flagsVaries
Structured menuSections, items, pricesNot availableURL only
Reservation linksMultiple booking URLs (OpenTable, etc.)Not availableSingle URL
AI summariesGenerative + review + neighborhood + EV amenityNot availableNot available
Third-party reviewsTripAdvisor, Trip.com ratings + countsNot availableNot available
Owner postsBusiness posts with CTA links (WhatsApp, booking)Not availableNot available
Rate limitsNone60 requests/minVaries

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 pointInput sourceUse it for
A category, product, or place descriptionquery or searchTermsDiscover places in an area
A name or address near one pointquery with searchType: "nearby"Find the closest matching businesses
Known Google Place IDs or Maps URLsplaceIdsEnrich specific places in the supplied order
Company names and locationscompaniesMatch 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

ModeFieldsBest for
basic (default)~50Core data, fastest. Names, addresses, ratings, hours, coordinates, service options, and AI summaries
detailed~80Everything in basic, plus a fuller property record. Finds more places per area
rich~120Everything 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

ParameterTypeDefaultEffect
querystringnoneOne search term. searchTerms replaces it when that array is not empty.
searchTermsstring[]noneSeveral terms to search and merge.
locationstringnoneCity, address, or area used to find the search center. It does not select a city boundary. You can use both coordinates instead.
maxResultsinteger, 0 or more20Upper 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.
modebasic, detailed, or richbasicControls 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.
openNowbooleannoneKeeps places that Google reports as open now.
minRatingnumbernoneKeeps ratings 2, 2.5, 3, 3.5, 4, or 4.5 and higher.
priceLevelsstring[]noneKeeps Google price levels "1", "2", "3", and/or "4".
includePhotosbooleanfalseAdds full photo listings. maxPhotos sets the per-place limit.
maxPhotosinteger, 0 or more200Maximum photos for each place. 0 requests all available photos.
placeIdsstring[]nonePlace IDs or full Google Maps URLs. The Actor keeps the input order and repeated IDs.
companiesobject[]noneCompany targets with required name and city, and optional state and country.
maxResultsPerCompanyinteger, 1 to 201Maximum places for each company target.
languagestringenGoogle language code for names, descriptions, and reviews.
searchTypearea or nearbyareaarea 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.
exhaustivebooleanfalseSearches more parts of a dense area.
radiusnumber, 1 or more50In 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.
radiusUnitkm or mikmUnit for radius.
zoominteger, 5 to 2013Map zoom for area search. A larger number selects a smaller map area.
latitudenumbernoneExact centre latitude. You must also give longitude.
longitudenumbernoneExact centre longitude. You must also give latitude.
proxyConfigurationobject{"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

GroupRoot fields
Search contextinputIndex, matchedQuery, rank, isAdvertisement, meta
Identity and typeplaceId, dataId, title, categories, businessType, primaryType, primaryTypeDisplayName, googleMapsTypeLabel, googleCategoryId, knowledgeGraphId, cid, placeTypes, placeAttributes, businessStatus, isChain, isClaimed, isVerified
Address and positionformattedAddress, 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 descriptionswebsite, websiteDomain, phone, phoneIntl, phone2, phoneIntl2, description, subtitle, shortDescription, ownerDescription, thirdPartyDescription, localName, localLanguage, googleMapsUri, googleMapsLinks
Hours and visit datahours, hoursStatus, holidayHoursNote, hoursConfirmation, popularTimes, typicalTimeSpent, typicalTimeSpentMinutes, openingDate, currentSecondaryOpeningHours, regularSecondaryOpeningHours, utcOffsetMinutes
Ratings and reviewsrating, reviewCount, reviewsLink, reviewsSummary, reviewsPerRating, reviewHighlights, featuredReviews, reviewTopics, thirdPartyReviews, generativeSummary, reviewSummaryApi
MediaprofileImageUrl, coverPhotoUrl, streetViewUrl, streetViewPanoId, photos, videos, photoTier, imagesCount, imageCategories, imageCategoryCounts, iconBackgroundColor, iconMaskBaseUri
Owner, menu, and bookingownerId, ownerName, ownerLink, ownerAvatarUrl, ownerPosts, reservationLinks, orderOnline, menuLink, menuStructured, popularDishes, priceRange, priceLabel, hotelStars
Amenities and contextamenities, serviceOptions, accessibilityOptions, parkingOptions, paymentOptions, peopleAlsoSearch, regionHierarchy
Special Google dataevChargeOptions, fuelOptions, evChargeAmenitySummary, neighborhoodSummary, consumerAlert

Root field types

JSON typeRoot fields
optional numberinputIndex
stringtitle
string or nullmatchedQuery, 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
numberimagesCount
number or nullrating, latitude, longitude, hotelStars, entranceLatitude, entranceLongitude, reviewCount, photoTier, rank, utcOffsetMinutes
booleanisClaimed, isAdvertisement, isVerified
boolean or nullisChain, pureServiceAreaBusiness
string[]categories, placeAttributes, relatedPlaces, reservationLinks, placeTypes, reviewHighlights, imageCategories, popularDishes
number[] or nullreviewsPerRating
object[]amenities, subDestinations, photos, videos, featuredReviews, reviewTopics, peopleAlsoSearch, imageCategoryCounts, regionHierarchy, thirdPartyReviews, ownerPosts
object[] or nullhours, popularTimes, orderOnline, menuStructured, addressComponents
JSON value[] or nullcurrentSecondaryOpeningHours, regularSecondaryOpeningHours
objectserviceOptions, accessibilityOptions, parkingOptions, paymentOptions, meta
object or nulltypicalTimeSpentMinutes, googleMapsLinks, viewport, addressDescriptor, openingDate
any JSON value or nullevChargeOptions, fuelOptions, consumerAlert

Nested field types

ObjectField 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
typicalTimeSpentMinutesmin, 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[]
googleMapsLinksdirectionsUri, placeUri, writeAReviewUri, reviewsUri, photosUri: string or null
viewportlow and high: objects with numeric latitude and longitude
addressDescriptorlandmarks, areas: JSON value[]
openingDateyear, month, day: number
metascrapedAt: 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:

  • openingDate can contain year, month, and day.
  • imageCategoryCounts[] can contain category and count.
  • menuStructured[].items[].variants[] can contain label and price.
  • featuredReviews[].aspectRatings[] can contain aspect and rating.
  • popularDishes[] can contain strings.
  • evChargeAmenitySummary and neighborhoodSummary can contain generated text.
  • consumerAlert is an open Google object, and movedPlaceId can 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.