An Apify Actor live
Google Maps scraper for local business leads
Type a category and a city. Get every place Google Maps shows inside that city's real boundary: name, address, phone, website, rating, review count, the week's opening hours and, if you want them, emails and social profiles from each place's own website. One row per place, never twice, at $1.50 per 1,000 places with everything included.

What you get
One row per place, every column on every row.
Where Google Maps shows nothing, the field is null rather than guessed, so a CSV export has the same columns whatever the place. Fill rates below are from three cloud runs of 1,000 places each: Lyon restaurants, Berlin dentists, Chicago restaurants.
| Data | Fields | Rows filled |
|---|---|---|
| Identity | Name, category and all categories, Place ID, CID, Knowledge Graph ID, Google Maps URL | 100% (CID 71% to 85%) |
| Address | Full address, street, neighborhood, city, postcode, state, country, coordinates, time zone | 99% to 100% |
| Phone | As displayed, and in E.164 | 88% / 97% / 94% |
| Website | The place's own site | 75% / 78% / 73% |
| Rating and reviews | Rating and review count | Rating 87% to 96%, review count 87% to 96% |
| Opening hours | The full week, plus Google's status line and closed flags | 82% to 92% |
| Contacts (opt-in) | Emails and Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest links | Email on 27% to 78% of websites |
| Search context | Search term, resolved area, rank, read time | 100% |

How it works
Past the 120-place wall, and only inside your area.
- The real boundary. Each location you type is resolved once on OpenStreetMap to the shape of the place, not a circle around its centre. A drawn GeoJSON area works too.
- Tiles past the cap. Google stops at about 120 to 170 places per map view. The Actor cuts the area into tiles about 5 km wide, reads each one, and splits the tiles that are still full until Google runs out of places.
- Strict boundary before the charge. Google pads every answer with places from around the view. Each place is tested against the area's shape and dropped if it lies outside, before it is delivered or charged.
- Once per run. Overlapping tiles, terms and locations return the same places again; each is delivered and charged once. 0 duplicates in 3,000 rows.
- Contacts, opt-in. The Actor reads the place's own homepage, then up to three contact or imprint pages that site links, for emails and social profiles. Never a crawl, never behind a login.
- An honest status. Each search in the run summary is ok, partial or failed, with the reason: tiles that could not be read, tiles still full at the smallest view, or short answers that look capped by Google.

Measured in the cloud
1,000 places in under six minutes.
The proxy matters. Google caps some datacenter addresses at about 20 places per view: earlier builds on datacenter returned 196 to 635 Lyon restaurants while reporting success; the current build on datacenter returned 658 and marks the search partial with the reason. On residential proxy, the default, the same search returned 1,000.
Measured against the leader
The most used Google Maps scraper on Apify, point by point.
compass/crawler-google-places, read on 2026-10-05: its prices from the Apify API, its complaints from its public Issues and Reviews tabs. Ours from our cloud runs the same day. We did not run the leader; it publishes no speed figure, so none is compared.
| Point | compass/crawler-google-places | This Actor |
|---|---|---|
| Price per 1,000 places with hours, review count and contacts | $8.00 on its free tier: place $4.00, details add-on $2.00 (opening hours and review count), contacts add-on $2.00; $7.00 on Starter, $3.60 on Gold | $1.50, everything included |
| Filters (rating, website, category...) | $1.00 per 1,000 places per filter | Free, and filtered places are not charged |
| Places outside the boundary | 15 geography issues in 6 months | Tested against the area's real shape before charging |
| Duplicates across overlapping areas | Charged ("I lost $143") | One per run: 0 in 3,000 rows |
| Going past your limit | "Over scraped", "went over my 1000 limit" | Never past the limit, never past the run's spending limit |
| Contacts when none are found | Add-on charged per place | Same price per place, and every row says why its email column is empty |
| Locations per run | One | Many terms times many locations, plus drawn areas |
| Reviews, images, popular times | Add-ons | Not offered |
| Price range | Offered (fill rate not published) | Rare: 4 of 4,658 rows |
| Run success rate | 97.1% of 3.88M runs in 30 days, 39,329 monthly users | Not measurable until published |
Where we lose: the leader sells reviews, images, popular times and leads enrichment, and has years of runs behind its success rate. Where it loses: opening hours, review count, contacts and filters all cost extra there, and its users report places outside the boundary, duplicates and runs past their limit.
A real run
Restaurants in Chicago, 1,000 places with contacts, 346 seconds.
This input returned 1,000 places on Apify on 2026-10-05 (run ChHpIejUmSzTlufrl, $0.056 of platform usage). One row from it, trimmed:
{
"searchTerms": ["restaurant"],
"locations": ["Chicago, USA"],
"maxPlacesPerSearch": 1000,
"scrapeContacts": true
}{
"placeId": "ChIJ08HsADQsDogRho4n0e-e9ws",
"name": "Antique Taco Bridgeport",
"category": "Taco restaurant",
"address": "1000 W 35th St, Chicago, IL 60609",
"city": "Chicago",
"postalCode": "60609",
"countryCode": "US",
"latitude": 41.8309356,
"longitude": -87.6512837,
"phone": "(773) 823-9410",
"phoneE164": "+17738239410",
"website": "http://www.antiquetaco.com/",
"rating": 4.4,
"reviewsCount": 1206,
"priceRange": null,
"openingHours": [
{ "day": "Monday", "hours": "Closed" },
{ "day": "Tuesday", "hours": "11 AM-9 PM" },
"...",
{ "day": "Sunday", "hours": "11 AM-9 PM" }
],
"hoursStatus": "Closed · Opens 11 AM Tue",
"timezone": "America/Chicago",
"description": "Seasonal gourmet tacos, Mexican appetizers & margaritas doled out in a counter-service space.",
"cid": "6656290578812255711",
"url": "https://www.google.com/maps/search/?api=1&query=Antique%20Taco%20Bridgeport&query_place_id=ChIJ08HsADQsDogRho4n0e-e9ws",
"searchTerm": "restaurant",
"emails": ["info@antiquetaco.com"],
"socials": {
"facebook": ["https://www.facebook.com/Antique-Taco-158817610862018"],
"instagram": ["http://instagram.com/antiquetaco"]
},
"contactsStatus": "ok",
"contactsError": null
}
Limits
What it does not do, said up front.
- No reviews, images, popular times or Q&A in this version.
- Price range is rare. Google's search answer carries it for very few places (4 of 4,658 rows across our cloud runs). The field stays null rather than estimated, and the run summary says so.
- Residential proxy by default. It is what Google answers in full; datacenter is available and cheaper for us, but capped, and the run says when it was.
- A Google challenge stops the run. If Google answers with its unusual-traffic page or a consent page, the search is marked failed with the reason. The Actor never solves one.
- Some websites refuse to be read. Bot protection on some restaurant sites answers HTTP 403. The Actor sends a browser's User-Agent to websites, which read a few more of them (82.0% against 79.7% on the same 689 Chicago sites), but the rest check more than that and we do not go further. Each such row carries the reason.
Ready-to-run examples
Open one, change the input, run it.
- Dentists in Lyon with emails and phone numbers
- Restaurants in Chicago with phone, website and opening hours
- Plumbers in London with emails and social profiles
- Coffee shops in Berlin rated 4.5 stars and above
- Real estate agencies in Miami with websites
Each example opens the Actor on Apify with its input filled in. All examples on the Apify Store.
Pricing
Pay per place, no add-ons.
$1.50 per 1,000 places ($0.0015each), with opening hours, review count, emails and social profiles, and every filter included. Billed by Apify with platform usage and residential proxy included. A place outside your area, a duplicate, a place past your maximum or one left out by a filter is never charged. Apify's free plan covers about 3,333 places a month.
For developers
The Apify Actor, in one HTTP call.
Run it and get the places back in the same request through the Apify API. Snippets for Node.js and Python are in the Actor's README.
curl -X POST "https://api.apify.com/v2/acts/agenttoolworks~google-maps-places-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["dentist"], "locations": ["Lyon, France"], "maxPlacesPerSearch": 100}'Questions
Do I need a Google account or a Maps API key?
No. The Actor reads the search results Google Maps shows any logged-out visitor, with no account, no cookie and no API key. If Google ever answers with a challenge or its unusual-traffic page, the run stops and says so: it never tries to solve one.
How many places can it get per search?
Google shows about 120 places per map view. The Actor cuts the area into smaller views and keeps splitting the ones that are still full, so a city search goes far past that: 1,000 restaurants in Lyon, Berlin dentists and Chicago restaurants in our cloud runs, up to 50,000 per search. When it stops short of what the area may hold, the search is marked partial with the reason.
Are places outside my city returned?
No, by default. Google pads its answers with places nearby. Each location is resolved to its real boundary on OpenStreetMap, and a place outside that shape is dropped before it is delivered or charged. You can also draw your own area as GeoJSON.
Does it find emails?
Optionally, at no extra price: the Actor reads each place's own website (the homepage, then up to three contact or imprint pages it links) for emails and social profile links. Measured on 1,000 places: an email on 78% of Berlin dentists' websites and 27% of Chicago restaurants' websites. Every row says whether its website was read and, if not, why.
What does it cost?
$1.50 per 1,000 places ($0.0015 per place), billed by Apify with platform usage and the residential proxy included. Contacts and filters cost nothing extra. Apify's free plan includes $5 of monthly usage, about 3,333 places.
Does it return reviews, photos or the price range?
Not in this version: no reviews, images, popular times or Q&A. The price range is returned only where Google's search answer carries one, which is rare (4 of 4,658 rows across our cloud runs). It is never estimated.
Contact data and GDPR: an email on a sole trader's website is personal data. You are the controller of the contact data you export and of what you do with it; for contacts in the EU, that includes informing them (GDPR Article 14) at your first contact.
Public business listings only: no login, no account, no reviewer data. Area boundaries: Data © OpenStreetMap contributors. Not affiliated with Google or Apify.