Vexaloom Labs

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.

FieldTypeRequiredDescription
modestringoptionalSearch mode uses a text query; placeUrls mode reads specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs.
searchQuerystringoptionalWhat to search for on Google Maps. Include a location for best results, for example 'coffee shops in New York'. Used when mode is search.
locationstringoptionalOptional location appended to each search term, for example 'Austin, TX'. Leave blank when the location is already in the query.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalSearch mode uses a text query; placeUrls mode reads specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs.
searchQuerystringoptionalWhat to search for on Google Maps. Include a location for best results, for example 'coffee shops in New York'. Used when mode is search.
locationstringoptionalOptional location appended to each search term, for example 'Austin, TX'. Leave blank when the location is already in the query.
placeUrlsarrayoptionalGoogle Maps place URLs to read directly. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch.
placeIdsarrayoptionalCanonical Google Place IDs beginning with ChIJ. Used in placeUrls and placeIds modes; the two direct modes accept a mixed batch.
maxResultsintegeroptionalPlaces 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.
languagestringoptionalLanguage for Google Maps names, categories, addresses and hours.
includeDetailsbooleanoptionalRead 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.
searchTermsarrayoptionalSeveral search terms in one run, for example ["coffee shops", "dentists"]. Each term is searched in every location.
locationsarrayoptionalSeveral locations in one run, for example ["New York, NY", "Austin, TX"]. Each term is searched in each location.
minRatingnumberoptionalOnly keep businesses rated at or above this value. Businesses with no published rating are skipped.
maxRatingnumberoptionalOnly keep businesses rated at or below this value.
minReviewsintegeroptionalOnly keep businesses with at least this many reviews.
maxReviewsintegeroptionalOnly keep businesses with at most this many reviews.
openNowbooleanoptionalOnly keep businesses Google currently shows as open.
hasWebsitebooleanoptionalOnly keep businesses that publish a website on their Google Maps listing.
hasPhonebooleanoptionalOnly keep businesses that publish a phone number on their Google Maps listing.
nameFilterstringoptionalOnly keep businesses whose name contains this text, for example "pizza".
includeClosedbooleanoptionalWhen off, businesses Google marks as permanently closed are skipped.
excludeCategoriesarrayoptionalSkip 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.

FieldTypeRequiredDescription
placesstringoptionalEach 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 ChIJ Place 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.

Open the step-by-step Python guide →

Source build Znvinlco4eXEZqAMR. Documentation is regenerated from the default published build; private drafts are not included.