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.06/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

4.2

(3)

Developer

Kai

Kai

Maintained by Community

Actor stats

18

Bookmarked

1.6K

Total users

260

Monthly active users

18 hours

Issues response

5 days ago

Last modified

Share

The most comprehensive Google Maps scraper available. Get Google Maps places with more than 120 fields each: names, addresses, coordinates, phone numbers, websites, ratings, opening hours, AI summaries, popular times, menus, reviews, photos, and more. Add emails and social profiles from each business's own website.

Search any area, from one street to a whole country. There is no 120-place limit. Or look up places that you already know by Place ID, Google Maps URL, or company name. Starting at $0.06 per 1,000 places.

What can you do with it?

  • Lead generation. Build prospect lists with names, phone numbers, websites, emails, and social profiles for any area.
  • Competitor analysis. Compare ratings, review counts, prices, and service options across competitors.
  • Market research. Map how many businesses of a type are in each part of a city, state, or country.
  • Location intelligence. Study neighborhoods, busy hours, and accessibility.
  • Review monitoring. Track ratings, review summaries, and review topics.
  • Menu and price data. Get structured menus, popular dishes, and price ranges from restaurants.

What data does it extract?

DataWhen you get it
Name, categories, address, coordinates, Plus Code, time zone, Place IDEvery run
Phone, website, rating, review count, opening hours, price rangeEvery run
Service options (dine-in, delivery, and 30+ more), accessibility, parking, and payment optionsEvery run
Google AI summaries of the place and of its reviewsEvery run
Up to 5 featured reviews with full text, and up to 8 with includeRichFieldsEvery run
Nearby landmarks and areas, with the place's position relative to themEvery run
EV charging connectors with live availability, and fuel pricesEvery run
Popular times with wait times, live busyness, and typical time spentincludeRichFields
Structured menus with prices, item descriptions and photos, popular dishes, and the price per person that visitors reportincludeRichFields
Reviews per star, review topics, review snippets, owner replies, and aspect ratingsincludeRichFields
Owner name, owner posts, people also search, Street View image, total photo countincludeRichFields
Hotel booking offers, tickets, tours, TripAdvisor and Trip.com ratingsincludeRichFields
All photos with author, upload date, caption, and coordinates, and videosincludePhotos
Emails and social profiles from the business's own website and Facebook pageincludeContacts
The shops inside a mall or an airport terminalincludePlacesInside
The top web pages about the placeincludeWebResults

Google does not have every field for every place. A field without data is null, [], or {}. See How often is each field filled? for measured numbers.

Why this scraper?

This scraperGoogle Places APIOther Apify scrapers
Price per 1,000 places$0.06-0.08$20-40$0.40-5, before add-ons
Fields per placeMore than 12050+ (paid tiers)About 10-100
Emails and social profilesFrom each business's own website and Facebook page, with no add-on fee (includeContacts)Not availablePaid add-on (about $0.40-4 per 1,000 places) or not available
Structured menuSections, items, and pricesNot availableMenu URL only
Google AI summariesPlace, review, neighborhood, and EV amenity summariesAvailable at the $25 per 1,000 tierNot available
Third-party ratingsTripAdvisor and Trip.com ratings and review countsNot availableNot available
VideosStream URLs (MP4, DASH, HLS) with author infoNot availableNot available
PhotosAll available photos with author, upload date, captions, and photo coordinates. $0.01 per 1,000 photos$7 per 1,000 photosPhotos with author and upload date. Up to $0.50 per 1,000 images
Popular timesHourly busyness with wait times, and live busynessNot availableHourly and live busyness, often as a paid add-on
ReviewsUp to 5 featured reviews per place. Up to 8, with owner replies and aspect ratings, with includeRichFieldsUp to 5 reviews, at the $25 per 1,000 tierAll reviews at some scrapers, charged per review
Company lookupName and city targets. Each result links to its input row (inputIndex)Text searchSearch text only, with no link to the input row

The most-used Google Maps scrapers in the Apify Store do not return these (checked in October 2026):

  • Structured menus with sections, items, and prices (includeRichFields). Other scrapers return only a menu URL.
  • Wait times for each hour of popular times (includeRichFields).
  • TripAdvisor and Trip.com ratings and review counts for hotels (includeRichFields).
  • Videos with MP4, DASH, and HLS stream URLs (includePhotos).
  • Google AI summaries: place, review, neighborhood, and EV amenity summaries (every run).
  • Address descriptors: nearby landmarks and areas, and where the place is relative to them (every run).
  • Company lookup that links each result to its input row (every run).

Also:

  • Emails and social profiles at no add-on fee. Other scrapers charge about $0.40-4 per 1,000 places for them.
  • Photos at $0.01 per 1,000, with author, upload date, captions, and photo coordinates.
  • One place price for every detail level. Only photos have a separate charge. Other scrapers charge extra for place details, reviews, and images.

Quick start

  1. Enter what you look for in Search Query, such as coffee shops.
  2. Enter a Location, such as San Francisco, CA.
  3. Set Max Results. Use 0 to get all places in the area.
  4. Click Start. Download the results as JSON, CSV, Excel, or HTML.

The same input as JSON:

{
"query": "coffee shops",
"location": "San Francisco, CA",
"maxResults": 100
}

Examples by use case

Lead generation. Every dentist in a city that has a website, with emails and social profiles:

{
"query": "dentists",
"city": "Austin",
"state": "Texas",
"country": "US",
"maxResults": 0,
"skipClosedPlaces": true,
"websiteFilter": "withWebsite",
"includeContacts": true
}

Leads without a website, for example for a web design agency:

{
"query": "plumbers",
"location": "Denver, CO",
"radius": 30,
"maxResults": 0,
"websiteFilter": "withoutWebsite"
}

Market research. Every coffee shop in a state, under two names:

{
"searchTerms": ["coffee shop", "cafe"],
"state": "Oregon",
"country": "US",
"maxResults": 0
}

Competitor analysis. Up to 20 branches of each brand in a city, with ratings, review breakdowns, and popular times:

{
"companies": [
{ "name": "Starbucks", "city": "Chicago", "state": "IL", "country": "US" },
{ "name": "Dunkin'", "city": "Chicago", "state": "IL", "country": "US" }
],
"maxResultsPerCompany": 20,
"includeRichFields": true
}

Review monitoring. The rating, reviews per star, review topics, and featured reviews of your own places. Schedule the run in Apify to track them over time:

{
"placeIds": ["ChIJR3WssQNZwokRLG6SQTtwaI0"],
"includeRichFields": true
}

Menus and prices. Structured menus, popular dishes, and price ranges of restaurants:

{
"query": "restaurants",
"location": "Chicago, IL",
"radius": 5,
"maxResults": 200,
"includeRichFields": true
}

Location intelligence. Busy hours, wait times, and accessibility of supermarkets:

{
"query": "supermarkets",
"location": "London, UK",
"radius": 10,
"maxResults": 100,
"includeRichFields": true
}

Photos and videos, for example for a travel site:

{
"query": "hotels",
"location": "Lisbon, Portugal",
"maxResults": 50,
"includePhotos": true,
"maxPhotos": 30
}

Choose how to find places

Starting pointInputUse it for
A category, product, or place descriptionquery or searchTermsDiscover places in an area
The exact boundary of a country, state, county, city, or postal codequery with country, state, county, city, or postalCodeSearch one exact area, with no places outside it
Your own map shapequery with customGeolocationSearch a drawn polygon, several polygons, or a circle
A name or address near one pointquery with searchType: "nearby"Find the closest matching businesses
Known Google Place IDs or Maps URLsplaceIdsGet specific places in the order that you give
A Google Maps search URL copied from the browserplaceIdsSearch the map area that the URL shows
Company names and locationscompaniesMatch each company and link it to its input row

If you give more than one, the Actor uses companies first, then placeIds, then searchTerms, and then query. For the area, it uses customGeolocation first, then the boundary fields, then latitude and longitude, and then location.

Search an area

Give a search query and a location:

{
"query": "restaurants",
"location": "Tokyo, Japan",
"maxResults": 500
}

The location sets the center of a square. The square extends about radius north, south, east, and west of the center, so its corners are farther away than radius. For example, a 40 km search covers a square about 80 km wide. If the Actor cannot find the location, the run fails. Then give latitude and longitude instead.

An area search returns only places with known coordinates inside the area. The Actor tries to find the position of each place. It leaves out places whose position stays unknown, such as service-area businesses that show no address. The log gives the number of places that it left out.

The address fields and the coordinates of a place always agree. Some address fields, such as street or postalCode, can be empty.

Search inside an exact boundary

Give a country, state, county, city, or postal code to search inside its real boundary, not a square. Places outside the boundary are left out.

{
"query": "coffee shops",
"city": "Austin",
"state": "Texas",
"country": "US"
}

The boundary is simplified to about 50 m, so a place very near the edge can fall on the wrong side. Some areas, such as US ZIP codes, have no boundary. Then the search covers radius around the center of the area, and the log says so. The default radius is 50 km, so set a small radius, such as 5 km, for a ZIP code. Postal codes in many other countries, such as Germany and France, have a boundary. If the Actor finds no area with these names, the run fails.

{
"query": "pharmacy",
"postalCode": "10115",
"country": "DE"
}
{
"query": "pharmacy",
"postalCode": "10001",
"country": "US",
"radius": 3
}

Search your own shape

Give a GeoJSON Polygon, MultiPolygon, or Point in customGeolocation. Coordinates are [longitude, latitude]. A Point is the center of a circle with radiusKm, or radius when you leave radiusKm out. geojson.io draws a shape and gives its GeoJSON.

{
"query": "restaurants",
"customGeolocation": {
"type": "Polygon",
"coordinates": [[[-97.75, 30.26], [-97.73, 30.26], [-97.73, 30.28], [-97.75, 30.28], [-97.75, 30.26]]]
}
}
{
"query": "restaurants",
"customGeolocation": { "type": "Point", "coordinates": [-97.74, 30.27], "radiusKm": 3 }
}

Polygon holes are left out of the search. A polygon that crosses the 180Β° meridian, such as one around Fiji, must be cut there into two polygons of a MultiPolygon, as the GeoJSON standard (RFC 7946) asks. The Actor reads an uncut polygon the long way around the world. The boundaries of the boundary fields are already cut this way.

{
"query": "hotels",
"customGeolocation": {
"type": "MultiPolygon",
"coordinates": [
[[[177, -19], [180, -19], [180, -16], [177, -16], [177, -19]]],
[[[-180, -19], [-179.5, -19], [-179.5, -16], [-180, -16], [-180, -19]]]
]
}
}

A boundary or a shape replaces location, latitude, longitude, and radius. The SEARCH_AREA record in the default key-value store keeps the area that the run searched: its center, its square, and its boundary or shape.

Search around exact coordinates

If you have specific coordinates, use latitude and longitude instead of location:

{
"query": "dentists",
"latitude": 40.7128,
"longitude": -74.0060,
"maxResults": 200
}

Cover a large or dense area

You do not need special settings for a large or dense area. The Actor splits the area into smaller parts wherever Google has many places, and searches each part. maxResults and the maximum cost per run limit the run.

When maxResults is more than 60, the run first finds out where the places are. Then it returns places from the densest parts first, such as city centers. The dataset stays empty during the first step. For an area as large as a country, this step stops early, so the order is only approximate. A run of 60 or fewer places first returns the places that Google ranks highest for the whole area.

Google leaves some places out of each search at random. The Actor searches each part of the area more than once to find them, but a run can still miss some places. To find more, add searchTerms with other names for the same kind of place:

{
"searchTerms": ["gas station", "petrol station"],
"location": "Denver, CO",
"radius": 50,
"radiusUnit": "mi",
"maxResults": 0
}

The terms run one after another, and each one searches the whole area. Repeated places are saved once. maxResults covers all terms together, so the later terms do not run when the first ones reach it.

A small block that has more places than one search shows, such as a large mall, can still miss some of them. Use includePlacesInside to get the shops in a mall.

Filter the results

Filters remove places before the Actor saves them, so you do not pay for the removed places. Filters apply to searches, including Google Maps search URLs in placeIds. They do not apply to Place IDs, place URLs, or company lookups.

{
"query": "coffee",
"location": "Austin, TX",
"openNow": true,
"minRating": 4,
"skipClosedPlaces": true,
"websiteFilter": "withoutWebsite",
"titleMatch": "contains",
"categoryFilters": ["coffee shop"]
}
  • openNow keeps places that are open at the time of the search. It leaves out places with no opening hours.
  • minRating keeps places with this rating or higher. It leaves out places with no rating.
  • priceLevels keeps places with these price levels. It leaves out places with no price level.
  • skipClosedPlaces leaves out places that are closed temporarily or permanently.
  • websiteFilter keeps only places with a website (withWebsite) or without one (withoutWebsite).
  • titleMatch compares each name with the search term that found it. contains keeps a name that has the words of the term, next to each other and in order. So chicken keeps "Chicken Shack", but bar does not keep "Barber Shop". exact keeps a name that is the term. Case, accents, and punctuation do not count.
  • categoryFilters keeps a place when one of its categories contains one of the words, with the same word rules. Categories are in the run language.

A strict filter makes the search look at more of the area to reach maxResults, so the run takes longer.

Include places inside malls and airports

Set includePlacesInside to also get the places inside each result, such as the shops in a mall or the stores in an airport terminal. Each one has the place that contains it in parentPlaceId. The Actor looks them up at the end of the run, one level deep, and saves each place only once. These places are extra to maxResults, and you pay for them as places. Google lists them for some large places only. The option also works with Place IDs and company lookups.

{
"query": "shopping mall",
"location": "Dubai, UAE",
"radius": 10,
"maxResults": 3,
"includePlacesInside": true
}

minRating, priceLevels, skipClosedPlaces, and websiteFilter also apply to these places. openNow, titleMatch, and categoryFilters do not.

Get more details

OptionWhat it adds
includeRichFieldsPopular times, menus, review breakdowns, owner replies, owner information, hotel offers, and more. It also fills every field that Google has for each place. The run is much slower
includePhotosAll photos with author, upload date, caption, and coordinates, and videos. maxPhotos sets the limit for each place (default 200, 0 for all). It also adds most of the rich fields
includeContactsEmails and social profiles from the business's own website and Facebook page
includeWebResultsThe top web pages about each place, in webResults. It turns on includeRichFields
includePlacesInsideThe places inside malls and airports, with parentPlaceId
{
"query": "restaurants",
"location": "New York, NY",
"includeRichFields": true,
"includeContacts": true
}

To also get the top web pages about each place:

{
"placeIds": ["ChIJR3WssQNZwokRLG6SQTtwaI0"],
"includeWebResults": true
}

In a default run, some places miss fields that Google has. About 1 in 8 places misses fields such as the address components and accessibility options, and about 1 in 5 misses fields such as the neighborhood and owner ID. includeRichFields fills them.

How often is each field filled?

These numbers come from 1,000 Austin restaurants in a default run, and 200 Austin restaurants with includeRichFields, in October 2026. Other categories and countries give other numbers.

FieldDefault runincludeRichFields
Name, address, coordinates, categories, Place ID, time zone100%100%
Service options99%99%
Rating98%96%
Opening hours95%93%
Phone94%92%
Review count94%96%
Website89%84%
Plus Code89%99%
Address components and address descriptor87%100%
Featured reviews86%96%
Accessibility, parking, and payment options84-86%94-96%
Neighborhood and owner ID77-80%92-99%
AI summary of the place78%82%
Price range77%81%
AI summary of the reviews70%73%
Street View image, cover photo, people also search, image categories-98-99%
Owner name and link-92-99%
Reviews per star, review topics-92-96%
Popular dishes-91%
Structured menu-84%
Popular times-75%
Typical time spent-66%
Visitor updates-59%
Owner posts-16%
Live busyness-5-6%

A typical restaurant had about 70 filled fields in the default run, and about 90 with includeRichFields.

Emails and social profiles

Google Maps does not publish business emails. With includeContacts, the Actor reads each place's website and up to 3 pages that it links to: contact, legal notice (for example, an Impressum), and about pages. It also finds addresses in protected or written-out forms, such as info [at] example [dot] com.

emails has up to 10 addresses, best match first. An address on the website's own domain counts most. An address that the site shows on many pages, in the footer, or as a link also counts more. The Actor removes placeholders, image file names, tracking-service addresses, platform addresses (such as those of delivery services), and addresses whose domain cannot receive email. When the business has its own or a free mailbox, the Actor also removes other-domain addresses that appear only in a legal notice, such as those of regulators and hosting providers.

emails can also include addresses that the business wrote in its Google description and, with includeRichFields, in its replies to reviews. It never includes addresses from the review text of customers.

Many small businesses show an email only on their Facebook page. When the website shows no email, the Actor reads the About section of the Facebook page that the website links to, or that Google lists as the website. It keeps the email only when the page is the place's own: Google lists the page as the website, or the page shows the place's website, its phone number, or an email on the website's domain. The page's WhatsApp number and its links to the business's other accounts go into socialProfiles. In a test with 88 dentists in Round Rock, Texas, this raised the places with an email from 28 to 57.

socialProfiles has up to 3 links for each of Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest, Threads, and WhatsApp. Places with the same website share one visit. Each visit has a time limit and a page-size limit. Some websites show only a contact form, so emails can be [].

contactsStatus tells what happened on the website:

ValueMeaning
scrapedThe Actor read the website. emails can still be [].
no_websiteGoogle lists no website for the place.
skippedThe website is a social network, marketplace, directory, or booking page, such as Facebook, Tripadvisor, Yellow Pages, or Booking.com, or it sends visitors to another domain that does not show the place's phone number. These pages show other contacts, so the Actor does not read them. A social page goes into socialProfiles, and the Actor reads the email on a Facebook page.
blockedThe website refused automated access.
failedThe website did not answer, returned an error, is not an HTML page, or has an invalid address.

When includeContacts is off, emails, socialProfiles, and contactsStatus are null. Emails can be personal data. You are responsible for using them lawfully, for example under the GDPR and anti-spam laws.

Photos and videos

includePhotos adds the photo listing of each place, with the photo ID, full URL, size, author, upload date, caption, and the coordinates where the photo was taken. maxPhotos limits the photos for each place. Videos come with the photos. They have stream URLs, size, length, and author, and they are not charged or limited by maxPhotos.

Without includePhotos, includeRichFields adds the first photos that Google shows for each place, up to 23. You do not pay for these photos.

Search near a point

Use searchType: "nearby" to find the places that best match the query near one point, such as one business at a known address. 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
}

A nearby search returns about 60 places at most for each search term. It prefers places near the point, but it does not stop at radius. A boundary cannot be used with a nearby search, so the Actor then searches the boundary as an area.

Look up known places or companies

Give Place IDs or Google Maps URLs when you already know the places. The Actor reads Place IDs, place URLs, CID URLs (https://maps.google.com/?cid=...), and share links (https://maps.app.goo.gl/...):

{
"placeIds": ["ChIJR3WssQNZwokRLG6SQTtwaI0", "https://maps.app.goo.gl/..."],
"includeRichFields": true
}

The Actor keeps the order of the list, and repeated IDs give repeated places. It skips an entry that it cannot read or find, and it logs a warning.

A Google Maps search URL in placeIds searches the map area that the URL shows, for example https://www.google.com/maps/search/pizza/@40.7128,-74.006,15z. The URL must contain the search term and the map position (@latitude,longitude,zoom). The Actor runs these searches after all the place lookups. They use maxResults and the filters, and they skip places that the lookups already saved.

{
"placeIds": ["https://www.google.com/maps/search/pizza/@40.7128,-74.006,15z"],
"maxResults": 50,
"minRating": 4
}

Give companies to match each company to Google Maps and link the result to your list:

{
"companies": [
{ "name": "Google", "city": "Mountain View", "state": "CA", "country": "US" }
],
"maxResultsPerCompany": 2
}

Each result has inputIndex, the zero-based position of its company in companies. A company with no match gets a warning in the log and no row. The same place can match two companies.

Nearby searches, Place ID lookups, and company lookups give fewer fields than an area search, for example no neighborhood, owner ID, or subtitle. Turn on includeRichFields to get every field.

Get results in another language

Set language to a language code, such as ja for Japanese or de for German. It sets the language of names, categories, descriptions, and reviews. Fields can differ by country and language.

{
"query": "hotels",
"location": "Paris, France",
"language": "fr"
}

Input reference

Give one of query, searchTerms, placeIds, or companies. A search also needs location, both latitude and longitude, a boundary field, or customGeolocation.

ParameterTypeDefaultEffect
querystringnoneWhat to search for. searchTerms replaces it when that list is not empty.
searchTermsstring[]noneSeveral terms to search one after another. Repeated places are saved once.
locationstringnoneCity, address, or area that gives the center of the search. It does not select a boundary. You can use latitude and longitude instead.
maxResultsinteger, 0 or more20Upper limit on places from searches, for all terms together. 0 removes the limit. Place ID lookups return one place for each ID. Company lookups use maxResultsPerCompany.
includeRichFieldsbooleanfalseAdds popular times, menus, review breakdowns, owner replies, owner information, and other details, and fills every field that Google has. The run is much slower. Saved inputs with mode: "rich" turn it on.
includePlacesInsidebooleanfalseAlso returns the places inside each result, with parentPlaceId. They are extra to maxResults.
includeWebResultsbooleanfalseAdds webResults, the top web pages about each place. Turns on includeRichFields.
openNowbooleannoneKeeps places that are open at the time of the search. It leaves out places with no opening hours.
minRatingnumbernoneKeeps ratings of 2, 2.5, 3, 3.5, 4, or 4.5 and higher.
priceLevelsstring[]noneKeeps Google price levels "1", "2", "3", and "4".
skipClosedPlacesbooleanfalseLeaves out places that are closed temporarily or permanently.
websiteFilterall, withWebsite, or withoutWebsiteallKeeps places with or without a website.
titleMatchall, contains, or exactallKeeps names that contain, or are, the search term that found them.
categoryFiltersstring[]noneKeeps places with a category that contains one of the words.
country, state, county, city, postalCodestringnoneSearches inside the boundary of the area. Replaces location, coordinates, and radius, unless the area has no boundary.
customGeolocationobjectnoneGeoJSON Polygon, MultiPolygon, or Point (a circle) with optional radiusKm, in [longitude, latitude] order. Replaces the other area inputs.
includePhotosbooleanfalseAdds all photos and videos, and most of the rich fields. Charged per photo.
maxPhotosinteger, 0 or more200Maximum photos for each place. 0 gets all photos.
includeContactsbooleanfalseReads each place's own website, and its Facebook page when the website shows no email, to find emails and social profiles.
placeIdsstring[]nonePlace IDs, place URLs, CID URLs, share links, or Google Maps search URLs. The Actor keeps the input order and repeated IDs. A search URL searches the map area that it shows.
companiesobject[]noneCompanies with name and city, and optional state and country.
maxResultsPerCompanyinteger, 1 to 201Maximum places for each company.
languagestringenLanguage code for names, categories, descriptions, and reviews.
searchTypearea or nearbyareaarea returns places with known coordinates inside the area, and the log counts the places that it leaves out. nearby returns the best matches near a point, about 60 at most for each term.
radiusnumber, 1 or more50In area search, the distance from the center to each side of the square. In nearby search, the distance that it prefers. At most 5,000 km.
radiusUnitkm or mikmUnit for radius.
latitudenumbernoneCenter latitude. Give longitude too.
longitudenumbernoneCenter longitude. Give latitude too.
proxyConfigurationobject{"useApifyProxy":true}Connection settings. The default Apify Proxy works, so residential proxies are not needed.

Output

Each item in the dataset is one place. The Overview table shows the name, address, categories, rating, review count, phone, website, emails, and Maps link. Every field below is in every item, except inputIndex, which only company results have. A field without data is null, [], or {}.

These fields are always empty: isAdvertisement is false, imageCategoryCounts is [], and typicalTimeSpentMinutes is null. Use typicalTimeSpent for the time that people spend at a place. The empty fields stay so that existing integrations keep working.

Fields by topic

Fields without an option name come in every run, when Google has them.

  • Basic information. Name, categories, description, subtitle, short description, business type, primary type and its display name, price range (such as "$10–20" or "USD 10–20") and price label, business status, claimed and verified flags, chain flag, and hotel stars. includeRichFields adds the owner's description.
  • Contact. Phone in local and international format, a second phone number, website, and website domain.
  • Address and location. Full and short address; street, city, state, postal code, and country code; address components with sublocality, county, and country; neighborhood and area; Plus Code; latitude, longitude, entrance coordinates, time zone, UTC offset, and viewport; nearby landmarks and areas; local name and language. includeRichFields adds the floor and the name of the place that contains this one.
  • Opening hours. Hours for each day, open or closed status, secondary hours (such as breakfast, delivery, takeout, kitchen, or happy hour), holiday hours note, and opening date. includeRichFields adds the hours confirmation, such as "Confirmed by this business 5 weeks ago".
  • Ratings and reviews. Rating, review count, review link, up to 5 featured reviews with full text, and an AI summary of the reviews. includeRichFields adds reviews per star, review highlights, review snippets with their highlighted phrase, review topics with mention counts, owner replies, aspect ratings (such as Food and Service), and TripAdvisor and Trip.com ratings for hotels.
  • AI summaries. Place, review, neighborhood, and EV amenity summaries.
  • Services and amenities. 30+ service options (such as dine-in, takeout, delivery, and outdoor seating), amenities, accessibility, parking, and payment options, EV charging with live connector availability, and fuel prices.
  • Menus, booking, and tickets. Reservation links and reservation providers (table or appointment). includeRichFields adds the menu link, a structured menu with sections, items, prices, descriptions, and item photos, popular dishes, the price per person that visitors report, order online links, hotel booking offers and description, similar hotels, tickets, and tours.
  • Visits. includeRichFields adds popular times with the busyness and wait time for each hour, live busyness, typical time spent, and visitor updates.
  • Owner. Owner ID. includeRichFields adds the owner's name, profile link, avatar, and posts with their call-to-action links.
  • Photos and videos. Profile image. includeRichFields adds the cover photo, the Street View image and panorama ID, the first photos, image categories, and the total number of photos on Google Maps. includePhotos adds all photos with ID, URL, size, author, upload date, upload source, caption, coordinates, and an owner-upload flag, and videos with thumbnail, stream URLs, size, length, and author.
  • Related places. Places inside (sub-destinations) and the Place ID of the place that contains this one. includeRichFields adds people also search, related places, and the region hierarchy. includePlacesInside returns the places inside as their own items.
  • Links and identifiers. Google Maps link, and directions, reviews, photos, and write-a-review links; Place ID, data ID, CID, knowledge graph ID, and moved Place ID. includeRichFields adds the Google category ID (GCID).
  • Search context. The search term that found the place, its rank, and place attributes. Company results have the input index, and places inside have the parent Place ID.

Place example

This example uses values from The Capital Grille in New York. Long lists keep one item, and square brackets mark values removed from the documentation. It leaves out the hotel, web, and contact fields.

Field groups

GroupRoot fields
Search contextinputIndex, matchedQuery, parentPlaceId, 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, locatedIn, relatedPlaces, subDestinations, movedPlaceId, pureServiceAreaBusiness
Contact and descriptionswebsite, websiteDomain, phone, phoneIntl, phone2, phoneIntl2, description, subtitle, shortDescription, ownerDescription, thirdPartyDescription, localName, localLanguage, googleMapsUri, googleMapsLinks, webResults
Hours and visit datahours, hoursStatus, isOpenNow, holidayHoursNote, hoursConfirmation, popularTimes, popularTimesLiveText, popularTimesLivePercent, typicalTimeSpent, typicalTimeSpentMinutes, openingDate, currentSecondaryOpeningHours, regularSecondaryOpeningHours, utcOffsetMinutes
Ratings and reviewsrating, reviewCount, reviewsLink, reviewsSummary, reviewsPerRating, reviewHighlights, reviewSnippets, featuredReviews, reviewTopics, thirdPartyReviews, generativeSummary, reviewSummaryApi, visitorUpdates, reviewsRemovedNotice
MediaprofileImageUrl, coverPhotoUrl, streetViewUrl, streetViewPanoId, photos, videos, photoTier, imagesCount, totalPhotoCount, imageCategories, imageCategoryCounts, iconBackgroundColor, iconMaskBaseUri
Owner, menu, and bookingownerId, ownerName, ownerLink, ownerAvatarUrl, ownerPosts, reservationLinks, orderOnline, menuLink, menuStructured, popularDishes, priceRange, priceLabel, pricePerPerson, reservationProviders
Hotels, tickets, and tourshotelStars, hotelBooking, hotelDescription, similarHotels, tickets, tours
Amenities and contextamenities, serviceOptions, accessibilityOptions, parkingOptions, paymentOptions, peopleAlsoSearch, regionHierarchy
Special Google dataevChargeOptions, fuelOptions, evChargeAmenitySummary, neighborhoodSummary, consumerAlert
Website contactsemails, socialProfiles, contactsStatus

Field notes

  • rank is the place's position in the Google Maps list where the Actor found it. A large area has one list for each part, so rank restarts in each part. It is null for some places.
  • googleMapsUri opens the place in Google Maps.
  • imagesCount counts the photos in photos, or a few photos in a default run. It is not the total number of photos on Google Maps.
  • matchedQuery is the search term that found the place. It is null for lookups and companies.
  • isOpenNow tells if the place was open when the run read it. It is null when Google has no opening hours for the place.
  • hotelBooking holds the booking offers that Google shows for a hotel. The dates are Google's default stay, not dates that you choose. Prices use the currency of the proxy's country, and the offer order can change.
  • totalPhotoCount is the number of photos that Google Maps has for the place. imagesCount counts only the photos in the output.
  • pricePerPerson is Google's price-per-person chart: each price range, and how many visitors reported it.
  • reviewSnippets are the short review quotes that Google shows for the place. highlight is the phrase that Google marks in the quote.
  • tickets and tours list admission tickets and guided tours with their vendors and prices. Resellers can add products for other places.
  • menuStructured holds the sections of every menu of the place, such as food, drinks, and brunch.
  • popularTimesLiveText is Google's live busyness text, such as "Busier than usual". popularTimesLivePercent is the live busyness from 0 to 100. Both are null when Google has no live data.
  • locatedIn is the name of the place that this one is inside, such as a mall.
  • movedPlaceId is the Place ID of the new location when a business closed and moved.
  • reviewsRemovedNotice is Google's notice that reviews were removed after legal complaints. Google shows it for places in Germany.
  • visitorUpdates are photos and short notes that visitors posted, separate from reviews and owner posts.
  • serviceOptions, accessibilityOptions, parkingOptions, and paymentOptions have boolean values. evChargeOptions, fuelOptions, consumerAlert, and the secondary opening hours are Google objects that can add or leave out child keys. Do not depend on fixed positions in them.

More examples

Company result

A company result has inputIndex, the position of its company in companies.

{
"inputIndex": 0,
"title": "Googleplex",
"placeId": "ChIJj61dQgK6j4AR4GeTYWZsKWw"
}

Hotel with places inside and third-party ratings

Selected fields of Bvlgari Resort Dubai.

{
"title": "Bvlgari Resort Dubai",
"hotelStars": 5,
"subDestinations": [
{
"name": "Bulgari Yacht order receiving area.",
"placeId": null,
"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
}
]
}

Fuel prices

Selected fields of an EG Ampol fuel station.

{
"title": "EG Ampol",
"fuelOptions": {
"fuelPrices": [
{
"type": "DIESEL",
"price": {
"currencyCode": "AUD",
"units": "2",
"nanos": 470000000
},
"updateTime": "2026-08-15T04:06:00Z"
}
]
}
}

EV charging

Selected fields of a Tesla Supercharger.

{
"title": "Tesla Supercharger",
"evChargeOptions": {
"connectorCount": 12,
"connectorAggregation": [
{
"type": "EV_CONNECTOR_TYPE_TESLA",
"maxChargeRateKw": 250,
"count": 12
}
]
},
"evChargeAmenitySummary": null
}

Run log and status

The log shows the progress of the run. At the end of an area search, it gives the number of places found and saved, places outside the area, places with an unknown position, places that a filter removed, and why the search stopped:

Stop reasonMeaning
area_coveredThe run searched the whole area.
max_resultsThe run reached maxResults.
cell_limitThe area was too large for small parts, so larger parts covered it. The output can miss places.
search_failuresSearches failed many times in a row, so the run stopped searching.

When the run reaches its maximum cost, it stops and keeps the places that it saved. If some requests fail, the run still succeeds, and its status message gives the number of failed requests. If requests fail and the run saves no place, the run fails.

FAQ

How many places can I get?

There is no fixed limit for an area search. Set maxResults to 0 to get all the places that the run finds. A nearby search returns about 60 places for each search term, and a company lookup up to 20 places for each company.

Why did I get fewer places than maxResults?

maxResults is an upper limit. The area can have fewer places. The Actor also leaves out places outside the area, places with an unknown position, and places that a filter removes. The log gives these numbers.

Why is the dataset empty at the start of a run?

When maxResults is more than 60, the run first finds out where the places are, so that it can return places from the densest parts first. The places come after this step. With maxResults set to 0, places come from the start.

Can I get all the reviews of a place?

This Actor returns up to 5 featured reviews for each place, and up to 8 with includeRichFields. To get every review, use Google Maps Reviews Scraper.

Can I get hotel prices for my dates?

hotelBooking gives the offers for Google's default stay. For your own dates and guests, use Google Hotels Scraper.

A feature or field that I need is missing. What can I do?

Tell us in the Issues tab. Describe what you need and give an example place or search. We usually add it less a day.

Where can I report a problem?

Open an issue in the Issues tab. Include the run ID and the input, so that we can reproduce it.