Extract Google Maps business listings and their individual reviews in one run — address, phone, website, categories, price band, opening hours, popular times, rating breakdown, photos and reviews with owner replies, all in the same record. Search many terms and cities at once.
Business name as Google shows it in the requested language.
Type:string | null
Place ID
placeId
Optional
Stable Google place identifier (ChIJ…).
Type:string | null
Feature ID
featureId
Required
Google feature id (0x…:0x…). Used internally for deduplication.
Type:string | null
CID
cid
Optional
Google's CID for the place, as a decimal string. Derived from featureId — it is the decimal form of the second half only. Published because many third-party tools key on it; but since it discards the first half it cannot be turned back into a featureId, which is why this Actor rejects ?cid= links as input. Null only when no featureId was found.
Type:string | null
Example:
6327378328618645925
Knowledge Graph ID
kgmid
Optional
Google Knowledge Graph machine id. Joins the place to Google's wider entity graph. Entity-level rather than listing-level, so two branches of one brand may share an id — keep using placeId or featureId as the per-record key. Null when Google supplies none.
Type:string | null
Example:
/g/11y31_2b88
Address
address
Optional
Full formatted address.
Type:string | null
Street
street
Optional
First address component, usually the street line.
Type:string | null
Phone
phone
Optional
Phone number as Google formats it for the requested locale.
Type:string | null
Phone (E.164)
phoneUnformatted
Optional
Locale-independent international form, e.g. +16465967178. Prefer this for dialling and matching.
Type:string | null
Website
website
Optional
Business website, when published.
Type:string | null
Profile claimed
isClaimed
Optional
Whether the business has claimed its Google Business Profile. true when Google shows an owner for the listing, false when Google is still offering the listing to be claimed, and null when the response carried neither signal. Null therefore means "not known" — an incomplete response looks exactly like an absent signal, so it is never reported as unclaimed.
Type:boolean | null
Rating
rating
Optional
Average star rating.
Type:number | null
Total reviews
reviewCount
Optional
Total number of reviews Google reports, independent of how many were scraped.
Type:integer | null
Rating breakdown
reviewsDistribution
Optional
How many reviews gave each star rating. The five counts sum to reviewCount.
Type:object | null
Categories
categories
Optional
Google business categories, in the requested language.
Type:string[]
Category ID
categoryId
Optional
Google's own key for the primary category, e.g. "coffee_shop". Identical in every language, which is what makes it the way to group results from a multilingual run — categories is translated and cannot do that. It names a class, not a record: every coffee shop shares "coffee_shop". Null when Google supplies none, which also happens on a truncated response.
Type:string | null
Example:
coffee_shop
Price range
priceRange
Optional
Price band as Google displays it, e.g. "$10–20". Present mainly for food and drink businesses. Formatted for the requested language and local currency.
Type:string | null
Coordinates
coordinates
Optional
Latitude/longitude of the place.
Type:object | null
Plus code
plusCode
Optional
Google Plus Code for the location, e.g. "Q256+VX New York". The locality suffix follows the requested language; the code itself does not.
Type:string | null
Plus code (global)
plusCodeGlobal
Optional
The full global Plus Code, e.g. "87G8Q256+VX". Unlike plusCode it carries no locality name, so it is identical in every language. Both are published deliberately: plusCode is the form a person reads, plusCodeGlobal the form a machine joins on. Null when absent.
Type:string | null
Example:
87G8Q256+VX
Timezone
timezone
Optional
IANA timezone name for the place, e.g. "America/New_York". Read from Google's own data, never inferred from coordinates or country. Use it to read openingHoursPeriods and scrapedAt in the place's local time. Null when absent.
Type:string | null
Example:
America/New_York
Description
description
Optional
Owner-written description, when the business provided one.
Type:string | null
Opening hours
openingHours
Optional
Weekday to the hours string Google itself displays for the chosen language, e.g. "7 AM–9 PM" in English or "08:00–12:00, 13:00–17:00" in German. Closed days carry Google’s own translated word (e.g. "Geschlossen"), and a 24-hour business reads "Open 24 hours" — use openingHoursPeriods for anything machine-readable.
Type:object
Opening hours (structured)
openingHoursPeriods
Optional
Weekday to a list of open/close times in 24-hour HH:MM. Locale-independent and the canonical form for calculations. Two rules: (1) a close at or before the open means the interval runs past midnight into the next day, so {"open":"12:00","close":"02:00"} is noon until 2 AM and {"open":"00:00","close":"00:00"} is open 24 hours; (2) an interval belongs to the day it starts, so an empty list means no interval starts that day — for an ordinary business that is simply closed, and for a venue open across midnight the day may still be covered by the previous day’s interval. Check openingHours for the day’s human-readable answer.
Type:object
Popular times
popularTimes
Optional
Typical busyness by weekday and hour. Each entry gives the hour in 24-hour form and how full the place usually is, as a percentage of its own peak.
Type:object
Amenities
additionalInfo
Optional
Attributes Google lists under "About", grouped as they appear there — service options, accessibility, offerings, payments, parking and so on. Group names and values follow the requested language.
Type:object
Editorial summary
editorialSummary
Optional
Google's own one-sentence summary of the place, written in a neutral third person. Distinct from description, which is the owner's text: on every sampled place carrying both, the two differed. Google translates this one, so it follows the run's language, while description stays in whatever language the owner wrote. Null means Google publishes no summary for this place, which is the case for most listings. Where it does appear is uneven by category: in this sample it was on most hotels, about half of restaurants, and few ordinary local businesses. Those are small per-category samples — a direction, not a rate to plan against.
Type:string | null
Example:
Relaxed, family-friendly restaurant serving a menu of homestyle Southern Italian meals.
Typical time spent
timeSpent
Optional
How long people typically stay, as Google phrases it — the duration only, lifted from Google's sentence using the span Google marks in it. Localized prose rather than a parsed number, because Google publishes no machine-readable duration: "1.5-2.5 hours" in an English run is "1,5-2,5 heures" in a French one. It describes the place, not your search — refetching one place with different, deliberately wrong, search queries returned the same value every time. Null when Google has no estimate.
Type:string | null
Examples:
1.5-2.5 hours15 min
Images
images
Optional
Photo URLs for the place itself, up to maxImagesPerPlace, taken from Google's own photo galleries for this listing. Scoped to those galleries deliberately: the underlying payload also embeds photographs belonging to other businesses — the booking panel on a hotel, nearby places, "people also search for" — and those are excluded, as are reviewer avatars and photos attached to reviews. Neither is lost, only moved to where it belongs: a review's photos are returned on that review as reviews[].images, and a reviewer's profile picture as authorPhotoUrl on their review, never here. A place whose only photographs came from reviews therefore has an empty images list, which is correct rather than missing data. Many places publish fewer than the cap, so a short list is normal.
Type:string[]
Images count
imagesCount
Optional
The size of Google's photo gallery for the place, as Google reports it. This is NOT the length of the images array: images is capped by maxImagesPerPlace, so for any place with a real gallery the two differ by design. Google reports large galleries approximately — it displays them as "20572+" — so treat the value as Google's own reported size and, for large galleries, as a floor rather than an exact count. The value is language-independent: the same place returns the same number whatever hl you run with. Null when Google shows no photo gallery, and on a truncated response.
Type:integer | null
Examples:
2057216
Image categories
imageCategories
Optional
The photo-subject tabs Google offers for the place, in Google's order — "Rooms", "Exterior", "Amenities" on a hotel; dish names such as "Spaghetti" on a restaurant. These are Google's categories, not ours. Google's aggregate and source tabs ("All", "Latest", "Videos", "By owner", "From visitors", "Street View & 360°") are excluded because they describe a medium or a source rather than a subject; the split is made on Google's own machine key, so it holds in every language. The names themselves are translated. Empty for a place whose gallery has no subject tabs.
Type:string[]
Example:
[
"Rooms",
"Exterior",
"Amenities",
"Food & drink"
]
Fuel prices
fuelPrices
Optional
Per-grade fuel prices at a filling station, one entry per grade, each with its own timestamp — grades are refreshed independently and one station's grades routinely differ by days. fuelType ("Regular", "Midgrade", "Premium", "Diesel"), currency (ISO code) and price are the same whatever language you run in; unit ("gallon", "liter") is translated. updatedAt is when Google last saw that price, in UTC, and prices can be days old. Coverage is regional, and an empty list does not mean the station sells no fuel — it means Google published no price for it. In this sample every US station carried prices and one of four Canadian ones did, while the stations sampled in Germany, the UK, France, Japan and Brazil carried none at all. That is a small sample and not a global availability rate. Empty for any place Google gives no fuel price for, including every place that does not sell fuel.
Type:object[]
Example:
[
{
"fuelType":"Regular",
"price":3.8,
"currency":"USD",
"unit":"gallon",
"updatedAt":"2026-09-02T07:25:23Z"
}
]
EV charging
evCharging
Optional
EV charging connectors at the place, as {"connectors": [{type, count, maxPowerKw}]}. Not limited to dedicated charge points — hotels and filling stations with chargers carry it too, which is the point. Live stall availability is deliberately excluded: it changes by the minute and would be stale before anyone read it. The operator/network is excluded as well — in Europe that list is the roaming cards a site accepts and ran to dozens of entries, so it does not mean the same thing in two countries. Connector names come from Google and are lightly localized ("Type 2"/"Typ 2"). Empty for a place with no chargers.
Type:object
Example:
{
"connectors":[
{
"type":"CCS",
"count":6,
"maxPowerKw":350
}
]
}
Hotel details
hotel
Optional
Stable hotel attributes, as {"stars": n, "amenities": [...]}. stars is Google's star classification, null for a hotel Google does not classify. amenities is Google's highlight set — four items, not a complete amenity list — and is translated. Deliberately excluded: nightly price and check-in/check-out dates, which come from Google's booking panel rather than from the hotel. Those dates are a search Google invented (they differ per hotel inside one run) and the price is denominated by the IP the scrape ran from, so neither is comparable between two rows. Empty for anything that is not a hotel.
Type:object
Example:
{
"stars":5,
"amenities":[
"Air-conditioned",
"Breakfast",
"Wi-Fi",
"Parking"
]
}
Maps URL
mapsUrl
Optional
Canonical Google Maps link for the place.
Type:string | null
Reviews
reviews
Optional
Individual reviews, present only when reviews were requested.
Type:object[]
Reviews scraped
reviewsExtractedCount
Optional
How many reviews were actually collected for this place.
Type:integer
Reviews since
reviewsStartDateApplied
Optional
The absolute UTC instant the reviewsStartDate input resolved to for this run, ISO-8601. A review is included when its lastEditedAtDate is at or after it. Null when no date filter was used, which is the default. A relative input such as "7 days" resolves once per run against the run's start time, so this is the only record of the exact cutoff applied.
Type:string | null
Reviews cut short by limit
reviewsCappedByLimit
Optional
True when a date-filtered collection stopped because it reached maxReviewsPerPlace rather than because it reached the start date or the end of the list. Older reviews inside the requested range therefore exist and were not collected. Always false when no date filter was used.
Type:boolean
Found by search term
searchTerm
Optional
Which of your search terms produced this place. Null for places fetched directly from a Google Maps place URL, since no search was involved. When several terms found the same place the first one is recorded, because duplicates are removed on Google's own place identifiers.
Type:string | null
Found in location
searchLocation
Optional
Which of your locations produced this place, exactly as you typed it (e.g. "Berlin, Germany"), or the coordinates when the search was anchored to a point. Null for places fetched directly from a place URL.
Type:string | null
Scraped at
scrapedAt
Optional
When this record was collected, as ISO-8601 UTC to the second (e.g. "2026-08-31T08:37:16Z"). Use it to tell fresh rows from rows kept between runs.
Type:string | null
Truncated
responseTruncated
Optional
True when Google kept returning a thin detail response for this place after every retry. The row is still delivered rather than dropped: fields that also appear in the search response (name, address, coordinates, identifiers, categories, rating, review count, phone, website, opening hours) are recovered from there. The three that only exist in the detail response - description, priceRange and popularTimes - are the ones that go missing. Truncation is a property of the run, not of the place: re-fetching a flagged place in a smaller run normally returns it complete.
Type:boolean
Reviews error
reviewsError
Optional
Set only when review pagination failed for this place.