← API Catalog
Apify·Async

Google Maps Scraper

Travel$0.003 / Scraped place

What it does

Extract data from thousands of Google Maps locations and businesses, including reviews, reviewer details, images, contact info, including full name, email, and job title, opening hours, prices & more. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Returns: Extract data from thousands of Google Maps locations and businesses, including reviews, reviewer details, images, contact info, including full name, email, and job title, opening hours, prices & more. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Parameters

ParameterTypeRequiredDescription
citytextNoEnter the city, e.g., Pittsburgh. ⚠️ Do not include State or Country names here. ⚠️ Automatic City polygons may be smaller than expected (e.g., they don't include agglomeration areas).
statetextNoSet a state, e.g., Massachusetts (mainly for the US addresses).
countytextNoSet the county, e.g., New York County. ⚠️ Note that county may represent different administrative areas in different countries: a county (e.g., US), regional district (e.g., Canada) or département (e.g., France).
websiteselectNoUse this to exclude places without a website, or vice versa. This option is turned off by default.
languageselectNoResults will be scraped in this language.
placeIdsarrayNoList of place IDs. Add them one by one or upload a list using the Bulk edit option. A place ID has the format ChIJreV9aqYWdkgROM_boL6YbwA - only 27-character IDs starting with ChIJ or GhIJ are supported.
maxImagesnumberNoSet the number of images per place you expect to scrape. Please be aware that the Add-on: additional place details scraped charge applies to each place you scrape for images, as the Actor must access the detail page first. All prices are determined by your subscription plan. To extract all images, set this to 99999. If left empty, no images will be scraped. The higher the number, the slower the search.
startUrlsarrayNoMax 300 results per search URL. Valid format for URLs contains https://google.com/maps/. This feature also supports uncommon URL formats such as: https://google.com/maps?cid=*, https://goo.gl/maps/*, and custom place list URL.
maxReviewsnumberNoSet the number of reviews you expect to get per place. Please be aware that the Add-on: additional place details scraped charge applies to each place you scrape for reviews, as the Actor must access the detail page first. All prices are determined by your subscription plan. To extract all reviews, set this to 99999. If left empty, no reviews will be scraped. Each output place item can contain maximum 5,000 reviews so in case more reviews are extracted, a duplicate place is stored with the next 5,000 reviews and so on. ⚠️ Enabling this feature might slow the search down.
postalCodetextNoSet the postal code, e.g., 10001. ⚠️ Combine Postal code only with 🗺 Country, never with 🌇 City. You can only input one postal code at a time.
countryCodeselectNoSet the country, e.g., United States.
reviewsSortselectNoDefine how reviews are sorted.
maxQuestionsnumberNoSet the number of questions per place you expect to scrape. If you fill in 0 or leave the field empty, only the first question and answer will be scraped. To extract all questions, type 999 into the field. ⚠️ Note that some of the fields contain personal data.
locationQuerytextNoDefine location using free text. Simpler formats work best; e.g., use City + Country rather than City + Country + State. 🌍 You can just set the whole country or state as the location: Google Maps Scraper intelligently splits it into subregions internally, so there's no need to search city by city or neighborhood by neighborhood yourself. Verify with the OpenStreetMap webapp for visual validation of the exact area you want to cover. 💡 Pro tip: Always specify a location when searching for specific place names in the 🔍 Search terms field above. This helps narrow down results to the geographic area you're interested in and prevents getting results from unrelated locations. ⚠️ Automatically defined City polygons may be smaller than expected (e.g., they don't include agglomeration areas). If you need to define the whole city area, head over to the 📡 Geolocation parameters* section instead to select Country, State, County, City, or Postal code. For an even more precise location definition (especially when using City name as a starting point), head over to 🛰 Custom search area section to create polygon shapes of the areas you want to scrape. Note that 📍 Location settings always take priority over 📡 Geolocation* (so use either section but not both at the same time). For guidance and tricks on location definition, check the Apify tutorial.
reviewsOriginselectNoSelect whether you want all reviews (from Google, Tripadvisor, etc.) or only reviews from Google.
scrapeContactsbooleanNoEnrich Google Maps places with contact details extracted from the business website, including business emails and social media profiles (Meta, LinkedIn, X, etc.). We exclude contacts of big chains: mcdonalds, starbucks, dominos, pizzahut, burgerking, kfc, subway, wendys, dunkindonuts, tacobell.
searchMatchingselectNoRestrict what places are scraped based on matching their name with provided 🔍 Search term. E.g., all places that have chicken in their name vs. places called Kentucky Fried Chicken.
reviewsStartDatetextNoEither absolute date (e.g. 2024-05-03) or relative date from now into the past (e.g. 8 days, 3 months). JSON input also supports adding time in both absolute (ISO standard, e.g. 2024-05-03T20:00:00) and relative (e.g. 3 hours) formats. Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time units: minutes, hours, days, weeks, months, years. ⚠️ Heads up: If this parameter is specified, you must choose the 'Newest' sort by value. The reason for this is that with this parameter entered, the Actor stops scraping reviews as soon as it finds the first review that's older than the specified date. If the sorting is not set to 'Newest', it might encounter a review older than the specified date before it reaches the desired review count and not scrape the desired amount of reviews.
skipClosedPlacesbooleanNoSkip places that are marked as temporary or permanently closed. Ideal for focusing on currently open places.
customGeolocationjsonNoUse this field to define the exact search area if other search area parameters don't work for you. See readme or the Apify guide for details.
includeWebResultsbooleanNoExtract the "Web results" section located at the bottom of every place listing.
placeMinimumStarsselectNoScrape only places with a rating equal to or above the selected stars. Places without reviews will also be skipped. Keep in mind, filtering by reviews reduces the number of places found per credit spent, as many will be excluded.
scrapeDirectoriesbooleanNoSome places (e.g. malls) can have multiple businesses located inside them. This option will scrape inside the "Directory" or "At this place" as per different categories (example here). Turn this toggle on to include those places in your results. ⚠️ Note that full place details need to be scraped in order to scrape directories.
scrapeOrderOnlinebooleanNoScrape the 'Order online' section of restaurants to get pickup and delivery providers (Uber Eats, DoorDash, etc.), along with fees and estimated times.
scrapeImageAuthorsbooleanNoInclude the author name for each image. ⚠️ Enabling this toggle may slow down processing as it requires fetching information for each image individually.
searchStringsArrayarrayNoType what you'd normally search for in the Google Maps search bar, like English breakfast or pet shelter. Aim for unique terms for faster processing. Using similar terms (e.g., bar vs. restaurant vs. cafe) may slightly increase your capture rate but is less efficient. ⚠️ Searching for a specific place? If you're looking for a particular business or location (e.g., M&M Indian Thai Halal Restaurant), make sure to also specify the city or country in the 📍 Location field below to get more accurate and reliable results. Without location context, Google Maps may return results from unexpected areas. ⚠️ Heads up: Adding a location directly to the search, e.g., restaurant Pittsburgh, can limit you to a maximum of 120 results per search term due to Google Maps' scrolling limit. You can also use direct place IDs here in the format place_id:ChIJ8_JBApXMDUcRDzXcYUPTGUY. See the [detailed description](https://apify.com/compass/crawler-google-places#search-terms).
categoryFilterWordsselectNoYou can limit the places that are scraped based on the Category filter; you can choose as many categories for one flat fee for the whole field. ⚠️ Using categories can sometimes lead to false negatives, as many places do not properly categorize themselves, and there are over 4,000 available categories which Google Maps has. Using categories might filter out places that you’d like to scrape. To avoid this problem, you must list all categories that you want to scrape, including synonyms, e.g., divorce lawyer, divorce attorney, divorce service, etc. See the [detailed description](https://apify.com/compass/crawler-google-places#categories).
reviewsFilterStringtextareaNoIf you enter keywords, only reviews containing those keywords will be scraped. Leave it blank to scrape all reviews.
scrapePlaceDetailPagebooleanNoScrape detail pages of each place the Actor finds. This will slow down the Actor since it needs to open another page for each place individually. The fields available only when scrapePlaceDetailPage is enabled include: reviewsDistribution, reviewsRemovedNotice, imageCategories, popularTimes fields, openingHours, BusinessConfirmationText, peopleAlsoSearch, reviewsTags, updatesFromCustomers, questionsAndAnswers, tableReservationLinks, ownerUpdates and hotel fields. Enabling this also ensures that reviewsCount will be scraped. This option needs to be enabled if you wish to use any of the options below.
allPlacesNoSearchActionselectNoExtract all places visible on the map. A good zoom is chosen automatically based on the area size. If you want to override it, set zoom (a number from 1 to 21) in JSON input. Higher zoom will scrape more places but will take longer to finish. You can test what place pins are visible with a specific zoom by changing the 16z part of the Google Maps URL.
maxCompetitorsToAnalyzenumberNoTotal number of places to scrape and analyze, capped across all search terms combined. Capped at 100 - this directly bounds your total analysis cost, since every scraped place generates charges. Set to 0 to skip the analysis even if enableCompetitorAnalysis is on.
enableCompetitorAnalysisbooleanNoWhen enabled, runs an AI-powered competitor analysis on the top scraped places and stores a report in the competitorAnalysis named dataset. The report includes a ranked comparison, per-place strengths/weaknesses analysis with review-backed claims, social media insights, and a strategic market overview. ⚠️ Best results with a single, focused search term. The analysis ranks and compares all collected places against each other, so they should all be in the same business category and market segment (e.g. italian restaurants Vienna). Using multiple search terms that span different categories (e.g. restaurants + coffee shops + hair salons) will produce a meaningless comparison. Multiple search terms are fine as long as they target the same segment (e.g. sushi restaurants NYC + japanese restaurants NYC). ⚙️ What gets charged when you enable this (for all scraped places, capped at 100 max):($) Additional place details - for all places in the run. ($) Company contacts enrichment - for all places in the run (used to discover social media profiles). ($) At least 100 reviews - per place. Reviews provide sources and citations in the report. The AI uses the first 100 reviews for analysis; any extras are included in the output but not used for analysis. ($) Social media profile enrichment - for all places in the run. ($) Competitor analysis event - one per place.
maxCrawledPlacesPerSearchnumberNoNumber of results you expect to get per each Search term, Category or URL. The higher the number, the longer it will take. If you want to scrape all the places available, leave this field empty.
scrapeReviewsPersonalDatabooleanNoThis setting allows you to get personal data about the reviewer (their ID, name, URL, and photo URL) and about the review (URL). Note: review ID (reviewId) is always included regardless of this setting. ⚠️ Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
scrapeSocialMediaProfilesjsonNoEnable enrichment for any social media profiles found. This add-on retrieves detailed public data for each profile, including profile names, follower/following counts, descriptions, post/video counts, and verification status. You are charged a flat rate for the total number of profiles enriched, regardless of how many platforms (Facebook, YouTube, etc.) you select.Feature dependency: To use this feature, the Company contacts enrichment (from website) add-on is enabled automatically. This ensures the enriched social media data is combined with the main contact record for each domain. Output: Enriched profiles are available in the Social profiles output view tab.
leadsEnrichmentDepartmentsselectNoYou can use this filter to include only specific departments (like Sales, Marketing, or C-Suite). Note: This will only work if the ⏩ Add-on: Extract business leads information - Maximum leads per place (maximumLeadsEnrichmentRecords) option is enabled. Please note that some job titles are sometimes miscategorized in the wrong departments.
verifyLeadsEnrichmentEmailsbooleanNoWhen enabled, verifies the email address of each lead extracted during business leads enrichment. Each lead receives an emailVerification object with the verification result and quality assessment. Charged (decisive results): valid (ok), invalid, and disposable email addresses. Not charged: catch-all, unknown, and error results. ⚠️ This add-on requires business leads enrichment to be enabled.
maximumLeadsEnrichmentRecordsnumberNoEnrich your results with detailed contact and company information, including employee names, job titles, emails, phone numbers, LinkedIn profiles, and key company data like industry and number of employees. This setting allows you to set the maximum number of leads records you want to scrape per each place found on the map (that has a website). By default, it's set to 0 which means that no leads information will be scraped. ⚠️ Note that some of the fields contain personal data. GDPR protects personal data in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your use case is legitimate, please consult an attorney. We exclude leads of big chains as these are not related to the local places: mcdonalds, starbucks, dominos, pizzahut, burgerking, kfc, subway, wendys, dunkindonuts, tacobell.
scrapeTableReservationProviderbooleanNoScrape table reservation provider data like name, address, email or phone. This data is present only in restaurants that have a blue "RESERVE A TABLE" button.

Endpoints

GET/v1/agents/resources/inspect/apify.compass.crawler-google-placesPublic
POST/v1/agents/resources/estimate/apify.compass.crawler-google-placesPublic
POST/v1/agents/resources/run/apify.compass.crawler-google-placesAgent key
GET/v1/agents/resources/runs/{run_id}Agent key

Quick start

Run it with one Agent One Key over the OpenAI-compatible resource rail.

curl -X POST https://api.deva.me/v1/agents/resources/run/apify.compass.crawler-google-places \
  -H "Authorization: Bearer deva_i1_your_key_here" \
  -H "Content-Type: application/json" \
  --data '{
    "params": {}
  }'

Related in Travel

Google Maps Extractor
Extract data from hundreds of places fast. Scrape Google Maps by keyword, category, location, URLs & other filters. Get addresses, contact info, opening hours, popular times, prices, menus & more. Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.
Airbnb Scraper
Scrape Airbnb rentals in your chosen destinations. Extract descriptions, locations, prices per night, ratings, reviews count, host details, amenities and more. Download scraped data in various formats including HTML, JSON and Excel.
Airbnb Rooms URLs Scraper
Scrape direct Airbnb rooms URLs and get all available details about the accommodation.
Airbnb Scraper
Scrape airbnb properties listings from search results and extract complete details for each property including availability calendar. 💰 Cost: $0.2 per 1000 results
Expedia Reviews Scraper ✈️ Hotel Ratings, Text & Sentiment
Scrape Expedia hotel reviews at scale - guest ratings, full review text, sub-ratings, stay dates, traveler type, language & owner responses, plus LLM-ready markdown. Also accepts Hotels.com, Travelocity, Orbitz, Wotif, CheapTickets & ebookers URLs. Filter by date/rating; export JSON/CSV.
Trip.com & Ctrip Reviews Scraper - Tripcom Hotels 携程
Scrape Trip.com & Ctrip (携程) hotel reviews - guest reviews, star ratings, sub-ratings, review text, travel type, owner responses and reviewer data, with LLM-ready markdown. Structured JSON/CSV for analytics, AI and market research. No API, no login.