Google Maps Scraper
/compass/crawler-google-placesasync$0.01 / resultExtract 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. Runs as an Apify actor (20β120 s); results are dataset rows.
Charged per returned row plus the flat fee.
searchStringsArrayarrayType 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 plac
locationQuerystringDefine 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 o
maxCrawledPlacesPerSearchintegerNumber 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.
languagestringResults will be scraped in this language. (default "en")
en, af, az, id, ms, bs, ca, cs, β¦
categoryFilterWordsarrayYou 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 categor
searchMatchingstringRestrict 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. (default "all")
all, only_includes, only_exact
placeMinimumStarsstringScrape 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. (default "")
, two, twoAndHalf, three, threeAndHalf, four, fourAndHalf
websitestringUse this to exclude places without a website, or vice versa. This option is turned off by default. (default "allPlaces")
allPlaces, withWebsite, withoutWebsite
skipClosedPlacesbooleanSkip places that are marked as temporary or permanently closed. Ideal for focusing on currently open places. (default false)
scrapePlaceDetailPagebooleanScrape 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 fi (default false)
scrapeTableReservationProviderbooleanScrape 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. (default false)
scrapeOrderOnlinebooleanScrape the 'Order online' section of restaurants to get pickup and delivery providers (Uber Eats, DoorDash, etc.), along with fees and estimated times. (default false)
includeWebResultsbooleanExtract the "Web results" section located at the bottom of every place listing. (default false)
scrapeDirectoriesbooleanSome 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 (default false)
maxQuestionsintegerSet 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. (default 0)
scrapeContactsbooleanEnrich 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. (default false)
scrapeSocialMediaProfilesobjectEnable 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, rega (default {"facebooks":false,"instagrams":false,"youtubes":false,"tiktoks":false,"twitters":false})
maximumLeadsEnrichmentRecordsintegerEnrich 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 ea (default 0)
leadsEnrichmentDepartmentsarrayYou 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
verifyLeadsEnrichmentEmailsbooleanWhen 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, (default false)
maxReviewsintegerSet 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, (default 0)
reviewsStartDatestringEither 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 timezon
reviewsSortstringDefine how reviews are sorted. (default "newest")
newest, mostRelevant, highestRanking, lowestRanking
reviewsFilterStringstringIf you enter keywords, only reviews containing those keywords will be scraped. Leave it blank to scrape all reviews. (default "")
reviewsOriginstringSelect whether you want all reviews (from Google, Tripadvisor, etc.) or only reviews from Google. (default "all")
all, google
scrapeReviewsPersonalDatabooleanThis 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 t (default true)
maxImagesintegerSet 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 (default 0)
scrapeImageAuthorsbooleanInclude the author name for each image. β οΈ Enabling this toggle may slow down processing as it requires fetching information for each image individually. (default false)
enableCompetitorAnalysisbooleanWhen 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 overvi (default false)
maxCompetitorsToAnalyzeintegerTotal 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. (default 30)
countryCodestringSet the country, e.g., United States.
, us, af, al, dz, as, ad, ao, β¦
citystringEnter 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).
statestringSet a state, e.g., Massachusetts (mainly for the US addresses).
countystringSet 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).
postalCodestringSet 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.
customGeolocationobjectUse 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.
startUrlsarrayMax 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.
placeIdsarrayList 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.
allPlacesNoSearchActionstringExtract 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 specifi (default "")
, all_places_no_search_ocr, all_places_no_search_mouse
| Field | Type | Required | Description |
|---|---|---|---|
| searchStringsArray | array | β | Type 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 plac |
| locationQuery | string | β | Define 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 o |
| maxCrawledPlacesPerSearch | integer | β | Number 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. |
| language | string (en, af, az, id, ms, bs, ca, cs, β¦) | β | Results will be scraped in this language. (default "en") |
| categoryFilterWords | array | β | You 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 categor |
| searchMatching | string (all, only_includes, only_exact) | β | Restrict 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. (default "all") |
| placeMinimumStars | string (, two, twoAndHalf, three, threeAndHalf, four, fourAndHalf) | β | Scrape 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. (default "") |
| website | string (allPlaces, withWebsite, withoutWebsite) | β | Use this to exclude places without a website, or vice versa. This option is turned off by default. (default "allPlaces") |
| skipClosedPlaces | boolean | β | Skip places that are marked as temporary or permanently closed. Ideal for focusing on currently open places. (default false) |
| scrapePlaceDetailPage | boolean | β | Scrape 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 fi (default false) |
| scrapeTableReservationProvider | boolean | β | Scrape 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. (default false) |
| scrapeOrderOnline | boolean | β | Scrape the 'Order online' section of restaurants to get pickup and delivery providers (Uber Eats, DoorDash, etc.), along with fees and estimated times. (default false) |
| includeWebResults | boolean | β | Extract the "Web results" section located at the bottom of every place listing. (default false) |
| scrapeDirectories | boolean | β | Some 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 (default false) |
| maxQuestions | integer | β | Set 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. (default 0) |
| scrapeContacts | boolean | β | Enrich 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. (default false) |
| scrapeSocialMediaProfiles | object | β | Enable 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, rega (default {"facebooks":false,"instagrams":false,"youtubes":false,"tiktoks":false,"twitters":false}) |
| maximumLeadsEnrichmentRecords | integer | β | Enrich 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 ea (default 0) |
| leadsEnrichmentDepartments | array | β | You 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 |
| verifyLeadsEnrichmentEmails | boolean | β | When 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, (default false) |
| maxReviews | integer | β | Set 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, (default 0) |
| reviewsStartDate | string | β | Either 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 timezon |
| reviewsSort | string (newest, mostRelevant, highestRanking, lowestRanking) | β | Define how reviews are sorted. (default "newest") |
| reviewsFilterString | string | β | If you enter keywords, only reviews containing those keywords will be scraped. Leave it blank to scrape all reviews. (default "") |
| reviewsOrigin | string (all, google) | β | Select whether you want all reviews (from Google, Tripadvisor, etc.) or only reviews from Google. (default "all") |
| scrapeReviewsPersonalData | boolean | β | This 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 t (default true) |
| maxImages | integer | β | Set 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 (default 0) |
| scrapeImageAuthors | boolean | β | Include the author name for each image. β οΈ Enabling this toggle may slow down processing as it requires fetching information for each image individually. (default false) |
| enableCompetitorAnalysis | boolean | β | When 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 overvi (default false) |
| maxCompetitorsToAnalyze | integer | β | Total 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. (default 30) |
| countryCode | string (, us, af, al, dz, as, ad, ao, β¦) | β | Set the country, e.g., United States. |
| city | string | β | Enter 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). |
| state | string | β | Set a state, e.g., Massachusetts (mainly for the US addresses). |
| county | string | β | Set 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). |
| postalCode | string | β | Set 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. |
| customGeolocation | object | β | Use 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. |
| startUrls | array | β | Max 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. |
| placeIds | array | β | List 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. |
| allPlacesNoSearchAction | string (, all_places_no_search_ocr, all_places_no_search_mouse) | β | Extract 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 specifi (default "") |
Run it
Or ask your agent: it will call inspect for this schema and run it over MCP.