Google Maps Scraper API — Places, Leads & AI Verdicts
Pricing
from $0.50 / 1,000 place scrapeds
Google Maps Scraper API — Places, Leads & AI Verdicts
Scrape Google Maps places in bulk, in the fields of the most used Google Maps scraper: name, category, address, phone, website, rating, reviews, hours, booking link. Optional AI verdicts per place: digital maturity, chain or independent, size, price tier, ideal-customer fit. $0.50 per 1,000 places.
Pricing
from $0.50 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Sherwood
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Google Maps Scraper API — places, leads and AI verdicts, $0.50 per 1,000 places
Search Google Maps for any term near any place and get every result as a dataset item: name, category, address, phone, website, rating, reviews count, photos count, opening hours, table and appointment booking links, attributes and hotel amenities, listing claimed or not, coordinates, Google IDs (kgmid, businessProfileId), state or region, a photo, and for hotels the booking offers with Google's price and dates. The fields are named like the most used Google Maps scraper on Apify (title, categoryName, totalScore, reviewsCount, phone, claimThisBusiness...), so a workflow built for it keeps working when you switch the Actor ID. $0.50 per 1,000 places.
Every place also comes with verdicts. Some are computed from the listing, for free; the others are judged by an AI model when you ask for them, for $1 per 1,000 places:
| Verdict | What it tells you | How |
|---|---|---|
reputation | strong, good, fragile (low rating with many reviews), invisible (fewer than 10 reviews), no_reviews, unknown (see Limits) | computed, free |
listingGaps | unclaimed listing, no opening hours, few photos, no website, no phone | computed, free |
bookingTool | Planity, Treatwell, Fresha, Booksy, Doctolib, TheFork, Zenchef, OpenTable, SevenRooms, Resy and more, own system (for a hotel: its official site among Google's offers), other platform (Google's own booking page, travel sites), none | computed, free |
sameWebsiteInResults, samePhoneInResults | how many results share the website or phone: a network, a chain, a lead-generation front | computed, free |
intermediarySignals | keywords in the name, open 24/7, no street address, few reviews, many trades | computed, free |
webPresence | own site, chain site, platform page, free site builder, social page only, none | computed, AI when needed |
digitalMaturity | 0 invisible, 1 minimum, 2 equipped, 3 advanced | AI |
bookingExpected, bookingMissing | the business type usually takes bookings, and neither its Google listing nor its homepage shows an online booking tool (null when the homepage has a booking button with no known tool, or cannot be read) | AI + computed |
ownership | independent, chain or franchise, local group, public or non-profit | AI |
sizeHint | solo, 2-9, 10-49, 50+ people | AI |
priceTier | budget, mid, premium, luxury | AI |
clientele | consumers, businesses, both | AI |
intermediaryProbability | how much the listing looks like a call platform rather than a local business | AI |
idealCustomerFit | probability that the place matches your ideal customer, described in one sentence | AI |
custom | the answers to up to 5 questions of your own | AI |
Each AI judgment comes with its confidence; when the confidence is low the answer is unsure, never a guess. The AI model (Jev, by TypeSafe AI) only sees what the listing shows.
What you get
{"searchString": "restaurant","rank": 1,"title": "ART Restaurant Lyon","categoryName": "French restaurant","categories": ["French restaurant", "Brunch restaurant", "Cocktail bar"],"address": "3 Rue Sala, 69002 Lyon","street": "3 Rue Sala", "city": "Lyon", "postalCode": "69002", "countryCode": "FR","website": "https://www.art-restaurant.fr/","phone": "+33 9 51 54 79 68","totalScore": 4.8,"reviewsCount": 1482,"imagesCount": 636,"claimThisBusiness": false,"reserveTableUrl": "https://bookings.zenchef.com/results?rid=...","bookingLinks": [{"name": "zenchef.com", "url": "https://bookings.zenchef.com/results?rid=..."}],"openingHours": [{"day": "Tuesday", "hours": "7 to 9 PM"}],"location": {"lat": 45.7568, "lng": 4.8274},"placeId": "ChIJOz5bdf3r9EcR6Lc45kXa5As","url": "https://www.google.com/maps/place/?q=place_id:ChIJOz5bdf3r9EcR6Lc45kXa5As","verdicts": {"reputation": "strong", "listingGaps": [], "bookingTool": "zenchef", "webPresence": "own_site","digitalMaturityLabel": "advanced", "ownership": "independent", "sizeHint": "10-49", "priceTier": "premium","bookingMissing": false, "intermediaryProbability": 0.04, "idealCustomerFit": 0.9}}
The Leads view of the dataset shows the AI verdicts side by side, sorted as you like.
Use cases
- Web and marketing agencies: businesses with no website, only a social page, or an unclaimed listing.
- Booking and SaaS vendors: businesses that usually take bookings but have no online booking, or use a competitor.
- B2B sales: independents versus chains, size and price tier, before calling.
- Lead buyers and directories: listings that look like call platforms rather than local businesses.
- Anyone with a target: describe your ideal customer in one sentence and sort the list by
idealCustomerFit.
Emails and social profiles (option)
Set scrapeContacts: true and the Actor reads each place's own website: the homepage, then up to two pages of the same site that hold contacts (contact page, legal notice, Impressum). It adds the fields compass uses, so the same workflows keep working:
emails, phones (from phone links), facebooks, instagrams, linkedIns, twitters, youtubes, tiktoks, pinterests, discords
- Emails hidden by Cloudflare's protection or written as
name [at] domain [dot] comare decoded. Placeholders (name@example.com) and image names (logo@2x.png) are left out, and the business's own domain comes first. - An email on another domain than the site (and not a free mailbox) is judged by an AI model from the sentence where it appears: the business's own or its group's stays in
emails; a third party's (the web agency that built the site, a vendor, a host, a consumer mediator) moves tothirdPartyEmails. - Share buttons (
facebook.com/sharer,twitter.com/intent) are not profiles and are left out. - A social page given as the website goes straight to its field. A booking-platform page (Planity, TheFork...) is not read: its contacts would be the platform's.
contactsStatussays what was done:ok,no_website,social_page_only,booking_platform_page,website_unreadable. An unreadable website comes withwebsiteReadError:slow(no full page within 15 seconds),refused(the site turned our IPs away),errorornot_html.- $0.001 per place whose website gave at least one email or social profile (= $1 per 1,000). A website with none is free.
Only what the business publishes on its own website is collected. Emails can be personal data (GDPR and similar laws): use them for a legitimate purpose and follow the rules on direct marketing in your country.
Qualify a dataset you already have
Already scraped Google Maps with another Actor? Give its dataset in datasetId with your idealCustomer or customQuestions: the places are qualified without scraping again, and only the AI verdicts are charged.
{ "datasetId": "YOUR_GOOGLE_MAPS_DATASET_ID", "idealCustomer": "independent restaurant without online booking" }
Input
| Field | Type | Default | Notes |
|---|---|---|---|
searchStringsArray | array | ["restaurant"] | Search terms. Aliases: query, queries, search, searchTerms, keywords. |
locationQuery | string | — | Where to search. Alias: location. Leave empty when the terms already name the place ("dentist in Bordeaux"). |
maxCrawledPlacesPerSearch | integer | 50 | Up to 120 per term (Google's limit for one search). |
language | string | en | Language of the results. |
maxPlaces | integer | 1000 | Unique places per run. |
qualifyPlaces | boolean | false | Add the AI verdicts. |
idealCustomer | string | — | One sentence; adds idealCustomerFit. |
customQuestions | array | — | Up to 5: {"id": "terrace", "question": "Outdoor terrace?"}, with options for a choice. |
scrapeContacts | boolean | false | Emails and social profiles from each place's website. |
datasetId | string | — | Qualify an existing dataset instead of searching. |
Pricing
- Place scraped — $0.0005 per unique place (= $0.50 per 1,000), computed verdicts included.
- Place qualified — $0.001 per place judged by the AI model (= $1 per 1,000).
- Contacts found — $0.001 per place whose website gave at least one email or social profile, with
scrapeContacts(= $1 per 1,000). - Duplicates and places beyond your run budget: free.
Via API, n8n, Make or MCP
POST https://api.apify.com/v2/actors/sherwood~google-maps-scraper/run-sync-get-dataset-items with the JSON input above, or add it as a tool through the Apify MCP server.
Limits
- Google returns about 120 places per search: split a large area into several terms (one per district or town).
- Google sometimes serves a reduced results page, without review and photo counts, depending on the IP. The Actor asks again from up to 10 other IPs; if every answer is reduced, the places come with
reducedGooglePage: true,reviewsCount: nulland a reputation ofunknown, and the run's status message says how many. - Not included, because only the place detail page shows them: reviews distribution by stars, the owner's photo gallery, popular times, Q&A.
- Reviews are not included: Google Maps no longer shows them to signed-out visitors. To analyze reviews, chain a reviews scraper with Review Analyzer API.
- AI verdicts are judgments from the listing alone; check before acting on an important one.