Google Maps Scraper - Most Comprehensive
Pricing
from $0.06 / 1,000 places
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
Maintained by CommunityActor stats
18
Bookmarked
1.6K
Total users
260
Monthly active users
18 hours
Issues response
5 days ago
Last modified
Categories
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?
| Data | When you get it |
|---|---|
| Name, categories, address, coordinates, Plus Code, time zone, Place ID | Every run |
| Phone, website, rating, review count, opening hours, price range | Every run |
| Service options (dine-in, delivery, and 30+ more), accessibility, parking, and payment options | Every run |
| Google AI summaries of the place and of its reviews | Every run |
Up to 5 featured reviews with full text, and up to 8 with includeRichFields | Every run |
| Nearby landmarks and areas, with the place's position relative to them | Every run |
| EV charging connectors with live availability, and fuel prices | Every run |
| Popular times with wait times, live busyness, and typical time spent | includeRichFields |
| Structured menus with prices, item descriptions and photos, popular dishes, and the price per person that visitors report | includeRichFields |
| Reviews per star, review topics, review snippets, owner replies, and aspect ratings | includeRichFields |
| Owner name, owner posts, people also search, Street View image, total photo count | includeRichFields |
| Hotel booking offers, tickets, tours, TripAdvisor and Trip.com ratings | includeRichFields |
| All photos with author, upload date, caption, and coordinates, and videos | includePhotos |
| Emails and social profiles from the business's own website and Facebook page | includeContacts |
| The shops inside a mall or an airport terminal | includePlacesInside |
| The top web pages about the place | includeWebResults |
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 scraper | Google Places API | Other Apify scrapers | |
|---|---|---|---|
| Price per 1,000 places | $0.06-0.08 | $20-40 | $0.40-5, before add-ons |
| Fields per place | More than 120 | 50+ (paid tiers) | About 10-100 |
| Emails and social profiles | From each business's own website and Facebook page, with no add-on fee (includeContacts) | Not available | Paid add-on (about $0.40-4 per 1,000 places) or not available |
| Structured menu | Sections, items, and prices | Not available | Menu URL only |
| Google AI summaries | Place, review, neighborhood, and EV amenity summaries | Available at the $25 per 1,000 tier | Not available |
| Third-party ratings | TripAdvisor and Trip.com ratings and review counts | Not available | Not available |
| Videos | Stream URLs (MP4, DASH, HLS) with author info | Not available | Not available |
| Photos | All available photos with author, upload date, captions, and photo coordinates. $0.01 per 1,000 photos | $7 per 1,000 photos | Photos with author and upload date. Up to $0.50 per 1,000 images |
| Popular times | Hourly busyness with wait times, and live busyness | Not available | Hourly and live busyness, often as a paid add-on |
| Reviews | Up to 5 featured reviews per place. Up to 8, with owner replies and aspect ratings, with includeRichFields | Up to 5 reviews, at the $25 per 1,000 tier | All reviews at some scrapers, charged per review |
| Company lookup | Name and city targets. Each result links to its input row (inputIndex) | Text search | Search 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
- Enter what you look for in Search Query, such as
coffee shops. - Enter a Location, such as
San Francisco, CA. - Set Max Results. Use
0to get all places in the area. - 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 point | Input | Use it for |
|---|---|---|
| A category, product, or place description | query or searchTerms | Discover places in an area |
| The exact boundary of a country, state, county, city, or postal code | query with country, state, county, city, or postalCode | Search one exact area, with no places outside it |
| Your own map shape | query with customGeolocation | Search a drawn polygon, several polygons, or a circle |
| A name or address near one point | query with searchType: "nearby" | Find the closest matching businesses |
| Known Google Place IDs or Maps URLs | placeIds | Get specific places in the order that you give |
| A Google Maps search URL copied from the browser | placeIds | Search the map area that the URL shows |
| Company names and locations | companies | Match 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"]}
openNowkeeps places that are open at the time of the search. It leaves out places with no opening hours.minRatingkeeps places with this rating or higher. It leaves out places with no rating.priceLevelskeeps places with these price levels. It leaves out places with no price level.skipClosedPlacesleaves out places that are closed temporarily or permanently.websiteFilterkeeps only places with a website (withWebsite) or without one (withoutWebsite).titleMatchcompares each name with the search term that found it.containskeeps a name that has the words of the term, next to each other and in order. Sochickenkeeps "Chicken Shack", butbardoes not keep "Barber Shop".exactkeeps a name that is the term. Case, accents, and punctuation do not count.categoryFilterskeeps 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
| Option | What it adds |
|---|---|
includeRichFields | Popular 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 |
includePhotos | All 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 |
includeContacts | Emails and social profiles from the business's own website and Facebook page |
includeWebResults | The top web pages about each place, in webResults. It turns on includeRichFields |
includePlacesInside | The 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.
| Field | Default run | includeRichFields |
|---|---|---|
| Name, address, coordinates, categories, Place ID, time zone | 100% | 100% |
| Service options | 99% | 99% |
| Rating | 98% | 96% |
| Opening hours | 95% | 93% |
| Phone | 94% | 92% |
| Review count | 94% | 96% |
| Website | 89% | 84% |
| Plus Code | 89% | 99% |
| Address components and address descriptor | 87% | 100% |
| Featured reviews | 86% | 96% |
| Accessibility, parking, and payment options | 84-86% | 94-96% |
| Neighborhood and owner ID | 77-80% | 92-99% |
| AI summary of the place | 78% | 82% |
| Price range | 77% | 81% |
| AI summary of the reviews | 70% | 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:
| Value | Meaning |
|---|---|
scraped | The Actor read the website. emails can still be []. |
no_website | Google lists no website for the place. |
skipped | The 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. |
blocked | The website refused automated access. |
failed | The 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.
| Parameter | Type | Default | Effect |
|---|---|---|---|
| query | string | none | What to search for. searchTerms replaces it when that list is not empty. |
| searchTerms | string[] | none | Several terms to search one after another. Repeated places are saved once. |
| location | string | none | City, address, or area that gives the center of the search. It does not select a boundary. You can use latitude and longitude instead. |
| maxResults | integer, 0 or more | 20 | Upper 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. |
| includeRichFields | boolean | false | Adds 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. |
| includePlacesInside | boolean | false | Also returns the places inside each result, with parentPlaceId. They are extra to maxResults. |
| includeWebResults | boolean | false | Adds webResults, the top web pages about each place. Turns on includeRichFields. |
| openNow | boolean | none | Keeps places that are open at the time of the search. It leaves out places with no opening hours. |
| minRating | number | none | Keeps ratings of 2, 2.5, 3, 3.5, 4, or 4.5 and higher. |
| priceLevels | string[] | none | Keeps Google price levels "1", "2", "3", and "4". |
| skipClosedPlaces | boolean | false | Leaves out places that are closed temporarily or permanently. |
| websiteFilter | all, withWebsite, or withoutWebsite | all | Keeps places with or without a website. |
| titleMatch | all, contains, or exact | all | Keeps names that contain, or are, the search term that found them. |
| categoryFilters | string[] | none | Keeps places with a category that contains one of the words. |
| country, state, county, city, postalCode | string | none | Searches inside the boundary of the area. Replaces location, coordinates, and radius, unless the area has no boundary. |
| customGeolocation | object | none | GeoJSON Polygon, MultiPolygon, or Point (a circle) with optional radiusKm, in [longitude, latitude] order. Replaces the other area inputs. |
| includePhotos | boolean | false | Adds all photos and videos, and most of the rich fields. Charged per photo. |
| maxPhotos | integer, 0 or more | 200 | Maximum photos for each place. 0 gets all photos. |
| includeContacts | boolean | false | Reads each place's own website, and its Facebook page when the website shows no email, to find emails and social profiles. |
| placeIds | string[] | none | Place 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. |
| companies | object[] | none | Companies with name and city, and optional state and country. |
| maxResultsPerCompany | integer, 1 to 20 | 1 | Maximum places for each company. |
| language | string | en | Language code for names, categories, descriptions, and reviews. |
| searchType | area or nearby | area | area 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. |
| radius | number, 1 or more | 50 | In 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. |
| radiusUnit | km or mi | km | Unit for radius. |
| latitude | number | none | Center latitude. Give longitude too. |
| longitude | number | none | Center longitude. Give latitude too. |
| proxyConfiguration | object | {"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.
includeRichFieldsadds 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.
includeRichFieldsadds 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.
includeRichFieldsadds 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.
includeRichFieldsadds 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).
includeRichFieldsadds 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.
includeRichFieldsadds popular times with the busyness and wait time for each hour, live busyness, typical time spent, and visitor updates. - Owner. Owner ID.
includeRichFieldsadds the owner's name, profile link, avatar, and posts with their call-to-action links. - Photos and videos. Profile image.
includeRichFieldsadds the cover photo, the Street View image and panorama ID, the first photos, image categories, and the total number of photos on Google Maps.includePhotosadds 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.
includeRichFieldsadds people also search, related places, and the region hierarchy.includePlacesInsidereturns 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.
includeRichFieldsadds 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
| Group | Root fields |
|---|---|
| Search context | inputIndex, matchedQuery, parentPlaceId, 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, locatedIn, relatedPlaces, subDestinations, movedPlaceId, pureServiceAreaBusiness |
| Contact and descriptions | website, websiteDomain, phone, phoneIntl, phone2, phoneIntl2, description, subtitle, shortDescription, ownerDescription, thirdPartyDescription, localName, localLanguage, googleMapsUri, googleMapsLinks, webResults |
| Hours and visit data | hours, hoursStatus, isOpenNow, holidayHoursNote, hoursConfirmation, popularTimes, popularTimesLiveText, popularTimesLivePercent, typicalTimeSpent, typicalTimeSpentMinutes, openingDate, currentSecondaryOpeningHours, regularSecondaryOpeningHours, utcOffsetMinutes |
| Ratings and reviews | rating, reviewCount, reviewsLink, reviewsSummary, reviewsPerRating, reviewHighlights, reviewSnippets, featuredReviews, reviewTopics, thirdPartyReviews, generativeSummary, reviewSummaryApi, visitorUpdates, reviewsRemovedNotice |
| Media | profileImageUrl, coverPhotoUrl, streetViewUrl, streetViewPanoId, photos, videos, photoTier, imagesCount, totalPhotoCount, imageCategories, imageCategoryCounts, iconBackgroundColor, iconMaskBaseUri |
| Owner, menu, and booking | ownerId, ownerName, ownerLink, ownerAvatarUrl, ownerPosts, reservationLinks, orderOnline, menuLink, menuStructured, popularDishes, priceRange, priceLabel, pricePerPerson, reservationProviders |
| Hotels, tickets, and tours | hotelStars, hotelBooking, hotelDescription, similarHotels, tickets, tours |
| Amenities and context | amenities, serviceOptions, accessibilityOptions, parkingOptions, paymentOptions, peopleAlsoSearch, regionHierarchy |
| Special Google data | evChargeOptions, fuelOptions, evChargeAmenitySummary, neighborhoodSummary, consumerAlert |
| Website contacts | emails, socialProfiles, contactsStatus |
Field notes
rankis the place's position in the Google Maps list where the Actor found it. A large area has one list for each part, sorankrestarts in each part. It isnullfor some places.googleMapsUriopens the place in Google Maps.imagesCountcounts the photos inphotos, or a few photos in a default run. It is not the total number of photos on Google Maps.matchedQueryis the search term that found the place. It isnullfor lookups and companies.isOpenNowtells if the place was open when the run read it. It isnullwhen Google has no opening hours for the place.hotelBookingholds 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.totalPhotoCountis the number of photos that Google Maps has for the place.imagesCountcounts only the photos in the output.pricePerPersonis Google's price-per-person chart: each price range, and how many visitors reported it.reviewSnippetsare the short review quotes that Google shows for the place.highlightis the phrase that Google marks in the quote.ticketsandtourslist admission tickets and guided tours with their vendors and prices. Resellers can add products for other places.menuStructuredholds the sections of every menu of the place, such as food, drinks, and brunch.popularTimesLiveTextis Google's live busyness text, such as "Busier than usual".popularTimesLivePercentis the live busyness from 0 to 100. Both arenullwhen Google has no live data.locatedInis the name of the place that this one is inside, such as a mall.movedPlaceIdis the Place ID of the new location when a business closed and moved.reviewsRemovedNoticeis Google's notice that reviews were removed after legal complaints. Google shows it for places in Germany.visitorUpdatesare photos and short notes that visitors posted, separate from reviews and owner posts.serviceOptions,accessibilityOptions,parkingOptions, andpaymentOptionshave 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 reason | Meaning |
|---|---|
area_covered | The run searched the whole area. |
max_results | The run reached maxResults. |
cell_limit | The area was too large for small parts, so larger parts covered it. The output can miss places. |
search_failures | Searches 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.