Google Maps Business Finder with Hours, Ratings & Location
Find public Google Maps businesses by search term or place URL and get name, address, phone, website, category, rating, review count, hours and coordinates.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Search mode uses a text query; placeUrls mode reads specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs. |
searchQuery | string | optional | What to search for on Google Maps. Include a location for best results, for example 'coffee shops in New York'. Used when mode is search. |
location | string | optional | Optional location appended to each search term, for example 'Austin, TX'. Leave blank when the location is already in the query. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Search mode uses a text query; placeUrls mode reads specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs. |
searchQuery | string | optional | What to search for on Google Maps. Include a location for best results, for example 'coffee shops in New York'. Used when mode is search. |
location | string | optional | Optional location appended to each search term, for example 'Austin, TX'. Leave blank when the location is already in the query. |
placeUrls | array | optional | Google Maps place URLs to read directly. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch. |
placeIds | array | optional | Canonical Google Place IDs beginning with ChIJ. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch. |
maxResults | integer | optional | Places to collect per search in search mode, or in total in the direct modes. Google returns a ranked window of roughly 160-230 places for a typical query; split broad searches by neighborhood or category for wider coverage. |
language | string | optional | Language for Google Maps names, categories, addresses and hours. |
includeDetails | boolean | optional | Read the place panel for Plus Code, price range, hotel and fuel details, attributes, photo count and rating histogram. Adds one request per place; the basic listing fields and weekly hours are always included. |
searchTerms | array | optional | Several search terms in one run, for example ["coffee shops", "dentists"]. Each term is searched in every location. |
locations | array | optional | Several locations in one run, for example ["New York, NY", "Austin, TX"]. Each term is searched in each location. |
minRating | number | optional | Only keep businesses rated at or above this value. Businesses with no published rating are skipped. |
maxRating | number | optional | Only keep businesses rated at or below this value. |
minReviews | integer | optional | Only keep businesses with at least this many reviews. |
maxReviews | integer | optional | Only keep businesses with at most this many reviews. |
openNow | boolean | optional | Only keep businesses Google currently shows as open. |
hasWebsite | boolean | optional | Only keep businesses that publish a website on their Google Maps listing. |
hasPhone | boolean | optional | Only keep businesses that publish a phone number on their Google Maps listing. |
nameFilter | string | optional | Only keep businesses whose name contains this text, for example "pizza". |
includeClosed | boolean | optional | When off, businesses Google marks as permanently closed are skipped. |
excludeCategories | array | optional | Skip businesses whose category contains any of these words, for example ["hotel", "casino"]. |
Download the published input schema
View complete JSON
{
"properties": {
"excludeCategories": {
"default": [],
"description": "Skip businesses whose category contains any of these words, for example [\"hotel\", \"casino\"].",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Exclude categories",
"type": "array"
},
"hasPhone": {
"default": false,
"description": "Only keep businesses that publish a phone number on their Google Maps listing.",
"prefill": false,
"title": "Must have a phone number",
"type": "boolean"
},
"hasWebsite": {
"default": false,
"description": "Only keep businesses that publish a website on their Google Maps listing.",
"prefill": false,
"title": "Must have a website",
"type": "boolean"
},
"includeClosed": {
"default": true,
"description": "When off, businesses Google marks as permanently closed are skipped.",
"prefill": true,
"title": "Include permanently closed businesses",
"type": "boolean"
},
"includeDetails": {
"default": true,
"description": "Read the place panel for Plus Code, price range, hotel and fuel details, attributes, photo count and rating histogram. Adds one request per place; the basic listing fields and weekly hours are always included.",
"prefill": false,
"title": "Include place details",
"type": "boolean"
},
"language": {
"default": "en",
"description": "Language for Google Maps names, categories, addresses and hours.",
"editor": "select",
"enum": [
"en",
"af",
"az",
"id",
"ms",
"bs",
"ca",
"cs",
"da",
"de",
"et",
"es",
"es-419",
"eu",
"fil",
"fr",
"gl",
"hr",
"zu",
"is",
"it",
"sw",
"lv",
"lt",
"hu",
"nl",
"no",
"uz",
"pl",
"pt-BR",
"pt-PT",
"ro",
"sq",
"sk",
"sl",
"fi",
"sv",
"vi",
"tr",
"el",
"bg",
"ky",
"kk",
"mk",
"mn",
"ru",
"sr",
"uk",
"ka",
"hy",
"iw",
"ur",
"ar",
"fa",
"am",
"ne",
"hi",
"mr",
"bn",
"pa",
"gu",
"ta",
"te",
"kn",
"ml",
"si",
"th",
"lo",
"my",
"km",
"ko",
"ja",
"zh-CN",
"zh-TW"
],
"enumTitles": [
"English",
"Afrikaans",
"azərbaycan",
"Bahasa Indonesia",
"Bahasa Melayu",
"bosanski",
"català",
"Čeština",
"Dansk",
"Deutsch",
"eesti",
"Español",
"Español (Latinoamérica)",
"euskara",
"Filipino",
"Français",
"galego",
"Hrvatski",
"isiZulu",
"íslenska",
"Italiano",
"Kiswahili",
"latviešu",
"lietuvių",
"magyar",
"Nederlands",
"norsk",
"oʻzbekcha",
"polski",
"Português (Brasil)",
"Português (Portugal)",
"română",
"shqip",
"Slovenčina",
"slovenščina",
"Suomi",
"Svenska",
"Tiếng Việt",
"Türkçe",
"Ελληνικά",
"български",
"кыргызча",
"қазақ тілі",
"македонски",
"монгол",
"Русский",
"српски",
"Українська",
"ქართული",
"հայերեն",
"עברית",
"اردو",
"العربية",
"فارسی",
"አማርኛ",
"नेपाली",
"हिन्दी",
"मराठी",
"বাংলা",
"ਪੰਜਾਬੀ",
"ગુજરાતી",
"தமிழ்",
"తెలుగు",
"ಕನ್ನಡ",
"മലയാളം",
"සිංහල",
"ไทย",
"ລາວ",
"ဗမာ",
"ខ្មែរ",
"한국어",
"日本語",
"简体中文",
"繁體中文"
],
"title": "Language",
"type": "string"
},
"location": {
"description": "Optional location appended to each search term, for example 'Austin, TX'. Leave blank when the location is already in the query.",
"editor": "textfield",
"title": "Location (optional)",
"type": "string"
},
"locations": {
"default": [],
"description": "Several locations in one run, for example [\"New York, NY\", \"Austin, TX\"]. Each term is searched in each location.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Locations (batch)",
"type": "array"
},
"maxRating": {
"description": "Only keep businesses rated at or below this value.",
"maximum": 5,
"minimum": 1,
"title": "Maximum rating",
"type": "number"
},
"maxResults": {
"default": 20,
"description": "Places to collect per search in search mode, or in total in the direct modes. Google returns a ranked window of roughly 160-230 places for a typical query; split broad searches by neighborhood or category for wider coverage.",
"maximum": 100000,
"minimum": 1,
"prefill": 3,
"title": "Max Results",
"type": "integer"
},
"maxReviews": {
"description": "Only keep businesses with at most this many reviews.",
"maximum": 10000000,
"minimum": 0,
"title": "Maximum review count",
"type": "integer"
},
"minRating": {
"description": "Only keep businesses rated at or above this value. Businesses with no published rating are skipped.",
"maximum": 5,
"minimum": 1,
"title": "Minimum rating",
"type": "number"
},
"minReviews": {
"description": "Only keep businesses with at least this many reviews.",
"maximum": 10000000,
"minimum": 0,
"title": "Minimum review count",
"type": "integer"
},
"mode": {
"default": "search",
"description": "Search mode uses a text query; placeUrls mode reads specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs.",
"editor": "select",
"enum": [
"search",
"placeUrls",
"placeIds"
],
"enumTitles": [
"Search Google Maps",
"Scrape place URLs",
"Scrape Place IDs"
],
"prefill": "search",
"title": "Mode",
"type": "string"
},
"nameFilter": {
"description": "Only keep businesses whose name contains this text, for example \"pizza\".",
"editor": "textfield",
"title": "Business name contains",
"type": "string"
},
"openNow": {
"default": false,
"description": "Only keep businesses Google currently shows as open.",
"prefill": false,
"title": "Open now only",
"type": "boolean"
},
"placeIds": {
"description": "Canonical Google Place IDs beginning with ChIJ. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch.",
"editor": "stringList",
"items": {
"type": "string"
},
"minItems": 1,
"title": "Google Place IDs",
"type": "array"
},
"placeUrls": {
"description": "Google Maps place URLs to read directly. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch.",
"editor": "stringList",
"items": {
"type": "string"
},
"title": "Place URLs",
"type": "array"
},
"searchQuery": {
"description": "What to search for on Google Maps. Include a location for best results, for example 'coffee shops in New York'. Used when mode is search.",
"editor": "textfield",
"prefill": "coffee shops in New York",
"title": "Search Query",
"type": "string"
},
"searchTerms": {
"default": [],
"description": "Several search terms in one run, for example [\"coffee shops\", \"dentists\"]. Each term is searched in every location.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Search terms (batch)",
"type": "array"
}
},
"schemaVersion": 1,
"title": "Google Maps Business Finder Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
places | string | optional | Each item contains only fields observed on the public place page or its Maps XHR data. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Dataset of public Google Maps places with name, address, category, rating, review count, hours, price, attributes, coordinates and place identifiers.",
"properties": {
"places": {
"description": "Each item contains only fields observed on the public place page or its Maps XHR data.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Places",
"type": "string"
}
},
"title": "Google Maps Business Finder with Hours, Ratings & Location Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"full": {
"display": {
"component": "table",
"properties": {}
},
"title": "Complete Business Data",
"transformation": {
"fields": [
"recordType",
"searchTerm",
"rankInSearch",
"name",
"categoryName",
"categories",
"description",
"totalScore",
"reviewsCount",
"ratingHistogram",
"priceLevel",
"priceOfferAmount",
"priceOfferCurrency",
"priceOfferDateRange",
"address",
"location",
"longitude",
"latitude",
"plusCode",
"locatedIn",
"phone",
"website",
"menuLink",
"bookingLinks",
"hours",
"hoursStatus",
"isOpenNow",
"serviceOptions",
"amenities",
"placeAttributes",
"attributes",
"hotelAmenities",
"priceOfferFreeCancellation",
"checkOutTime",
"checkInTime",
"hotelStarRating",
"hotelStars",
"fuelPrices",
"hasStreetView",
"streetViewCount",
"photosSample",
"photoCount",
"popularTimesSummary",
"claimed",
"permanentlyClosed",
"temporarilyClosed",
"placeId",
"featureId",
"cid",
"kgmid",
"timezone",
"countryCode",
"googleMapsUrl",
"sourceUrl",
"scrapedAt"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {
"address": {
"format": "text",
"label": "Address"
},
"categoryName": {
"format": "text",
"label": "Category"
},
"name": {
"format": "text",
"label": "Name"
},
"phone": {
"format": "text",
"label": "Phone"
},
"reviewsCount": {
"format": "number",
"label": "Reviews"
},
"totalScore": {
"format": "number",
"label": "Rating"
},
"website": {
"format": "link",
"label": "Website"
}
}
},
"title": "Google Maps Businesses",
"transformation": {
"fields": [
"recordType",
"searchTerm",
"rankInSearch",
"name",
"categoryName",
"categories",
"totalScore",
"reviewsCount",
"address",
"phone",
"website",
"priceLevel",
"isOpenNow",
"latitude",
"longitude",
"placeId",
"googleMapsUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Google Maps Business Finder with Hours, Ratings & Location
Find businesses on Google Maps from a search phrase, a Maps place URL, or a canonical Place ID. The actor returns one clean row per business with its category, address, phone, website, rating, review count, weekly hours, price information where Google publishes it, attributes, photos and coordinates. It runs without a login, an API key, or proxy setup.
What this actor does
- Search, URL and Place ID modes: search by keyword, paste a list of Maps place URLs, or look up
ChIJPlace IDs. The two direct modes accept a mixed batch. - Batch coverage: run several search terms across several locations in one run, with a separate result allowance for each term × location pair.
- Complete business rows: name, category, full address, phone, website, rating, review count, weekly hours, open/closed status, coordinates, Place ID and Maps URL.
- Optional place details: add Plus Code, price range, hotel stars and nightly price, fuel prices, accessibility and amenity attributes, photo count, photos and the rating histogram.
- Useful filters: rating range, review-count range, open now, must have a website or phone, name contains, exclude categories, and optionally skip permanently closed places.
- 74 languages: names, categories, addresses and hours follow the language you select.
- No browser, no login, no API key. Empty fields are omitted instead of returned as placeholders.
Output per business
Each row can include:
| Field | Meaning |
|---|---|
recordType |
Always business |
searchTerm |
The search that found the business (search mode) |
rankInSearch |
Position in that search's ranked results (search mode) |
name |
Business name |
categoryName |
Primary category |
categories |
All categories Google lists |
address |
Public address |
phone |
Public phone number |
website |
Public website |
totalScore |
Star rating |
reviewsCount |
Number of reviews |
hours |
Weekly schedule with stable English weekday keys, e.g. {"monday": "9 AM to 5 PM"} |
hoursStatus |
Google's current status line, e.g. Closed · Opens 9 AM |
isOpenNow |
true or false when Google states the current state |
priceLevel |
Displayed price range for restaurants, e.g. $20–30 |
priceOfferAmount / priceOfferCurrency / priceOfferDateRange |
Nightly hotel price Google shows, when available |
hotelStars / hotelStarRating |
Hotel star class as Google labels it, plus the numeric value |
hotelAmenities |
Named hotel amenities with availability |
checkInTime / checkOutTime |
Check-in and check-out times, when shown |
fuelPrices |
Fuel grade and price, when Google publishes it |
plusCode |
Plus Code |
description |
Editorial description, when Google provides one |
ratingHistogram |
Review counts by star |
photosSample / photoCount |
Visible photo URLs and the total photo count |
placeAttributes |
Attribute chips such as LGBTQ+ friendly or accessibility labels |
amenities |
Header amenity labels |
attributes |
Structured attribute groups with label and value |
serviceOptions |
Known service/accessibility flags as booleans |
bookingLinks |
Reservation or booking links Google shows |
hasStreetView / streetViewCount |
Street View availability |
permanentlyClosed / temporarilyClosed |
Set only when Google marks the place closed |
claimed |
false only when Google shows an "Own this business?" link |
location |
{lat, lng} object |
latitude / longitude |
The same coordinates as plain columns |
placeId |
Canonical Google Place ID (ChIJ…) |
featureId |
Legacy Maps feature ID (0x…:0x…) |
cid |
Decimal Maps customer ID derived from the feature ID |
kgmid |
Knowledge Graph identifier (/g/…) |
timezone |
IANA time zone |
countryCode |
Two-letter country code |
googleMapsUrl / sourceUrl |
Maps URL for the place |
scrapedAt |
UTC scrape timestamp |
Fields are conditional. A business without a website, phone, rating, hours, price or photos simply omits that field.
popularTimesSummary, menuLink and locatedIn are retained as legacy conditional fields for saved integrations; the browserless path does not populate them.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | search |
search, placeUrls, or placeIds |
searchQuery |
string | – | Search phrase such as coffee shops in Brooklyn (mode=search) |
location |
string | – | Location appended to each search term |
placeUrls |
array | – | Google Maps place URLs (direct modes) |
placeIds |
array | – | Canonical ChIJ… Place IDs (direct modes) |
maxResults |
integer | 20 |
Places per search, or total in the direct modes (1–100,000) |
language |
string | en |
One of 74 Google Maps interface languages |
includeDetails |
boolean | true |
Read Plus Code, price, hotel/fuel, attributes, photos and histogram |
searchTerms |
array | [] |
Batch search terms |
locations |
array | [] |
Batch locations; each term is searched in each location |
minRating |
number | – | Keep ratings at or above this value |
maxRating |
number | – | Keep ratings at or below this value |
minReviews |
integer | – | Keep review counts at or above this value |
maxReviews |
integer | – | Keep review counts at or below this value |
openNow |
boolean | false |
Keep places Google shows as open |
hasWebsite |
boolean | false |
Keep places with a website |
hasPhone |
boolean | false |
Keep places with a phone number |
nameFilter |
string | – | Keep names containing this text |
includeClosed |
boolean | true |
When off, skip permanently closed places |
excludeCategories |
array | [] |
Skip categories containing these words |
Example: search a city
{
"mode": "search",
"searchQuery": "coffee shops",
"location": "Brooklyn, NY",
"maxResults": 50,
"includeDetails": true
}
Example: several categories across several cities
{
"mode": "search",
"searchTerms": ["coffee shops", "bakeries"],
"locations": ["Austin, TX", "Dallas, TX"],
"minRating": 4.0,
"minReviews": 25,
"hasWebsite": true,
"maxResults": 100
}
Example: read specific place URLs
{
"mode": "placeUrls",
"placeUrls": [
"https://www.google.com/maps/place/GRIND+THE+NYC+COFFEE+SHOP+%26+BAGEL+HOUSE/@40.7590839,-73.9918101,17z/data=!3m1!4b1!4m6!3m5!1s0x89c259125a931087:0x3d471d4575240620!8m2!3d40.7590839!4d-73.9918101"
],
"maxResults": 1
}
Example: read Place IDs
{
"mode": "placeIds",
"placeIds": ["ChIJhxCTWhJZwokRIAYkdUUdRz0", "ChIJ-Y-kFABZwokRIpR1-ZpuRjQ"],
"maxResults": 2
}
Example: search in Japanese
{
"mode": "search",
"searchQuery": "東京 レストラン",
"language": "ja",
"maxResults": 30
}
Use cases
- Build local prospect lists with phone, website, rating and hours for a city or neighborhood.
- Compare ratings, review counts, price ranges and amenities across competitors.
- Refresh opening hours, ratings and contact details for a fixed list of branch URLs or Place IDs.
- Find hotels with star class, nightly price and check-in/check-out times.
- Compare fuel prices at stations in an area.
- Add coordinates, Place IDs and Plus Codes to an existing location database.
FAQ
What is the data source? Public Google Maps pages and their public place data. No Google account, API key or login is used.
Do I need to set up a proxy? No. The actor tries a direct connection first and escalates to Apify's proxy pool only if Google repeatedly blocks requests. There is no proxy field to configure; just fill in the input and run it.
How many results can one search return? Google returns a ranked window of roughly 160–230 places for a typical city query; broad categories such as hotels can return more. That is the source's window, not an unlimited directory. Split a broad search by neighborhood or category for wider coverage.
Why did I get fewer rows than maxResults? The source window ended, filters removed rows, duplicate places were merged, or a place page could not be read. The run status says which of these happened.
Why are some fields missing? Google publishes different details for different businesses, categories and countries. A place without a published website, phone, price or hours omits that field; the actor never invents a value.
Are prices always available? No. Restaurant price ranges, hotel nightly prices and fuel prices appear only when Google publishes them for that place and date.
Does this actor scrape reviews? No. It returns the rating and review count, plus the rating histogram. Review text and reviewer profiles are outside this actor's scope.
Can I search several cities or categories in one run? Yes. Use searchTerms and locations; every term is searched in every location with its own maxResults allowance.
What happens to duplicates? Places are matched by Place ID, feature ID or Maps URL (or name plus address when none is available) across the whole run. A place found twice is saved once.
Is this affiliated with Google? No. It is an independent tool that reads public Google Maps pages. Use the data responsibly and follow applicable terms and laws.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build Znvinlco4eXEZqAMR. Documentation is regenerated from the default published build; private drafts are not included.