Simple Google Maps Scraper
Pricing
from $1.00 / 1,000 place from searches
Pricing
from $1.00 / 1,000 place from searches
Rating
0.0
(0)
Developer
Monster Leads
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract business data from Google Maps β names, phone numbers, websites, ratings, review counts, opening hours, coordinates and 17 more fields.
Two things, done well:
| What it does | Returns | |
|---|---|---|
| π Search | Find places matching a query, anywhere in the world | Up to 20 places per page, ~100 per query |
| π Place lookup | Get one specific place from its CID or Maps URL | 1 place, plus up to 3 reviews |
No browser, no rendering, no scrolling β a search finishes in about 8 seconds and a place lookup in under 5. You pay per result, and results that come back empty cost nothing.
Quick start
- Pick a mode β Search or Place lookup.
- Type a query like
Coffee shops in London. - Click Start.
That is the whole setup. Everything else is optional.
π Search
Find every place matching a query in a given area.
Input
Only Search query is required.
{"mode": "search","query": "Coffee shops in London"}
Current page sits right under it, defaulting to 1. Raise it to fetch the next 20 places for the same query:
{"mode": "search","query": "Coffee shops in London","page": 2}
Ways to write a query
The query is what you would type into Google Maps yourself, including the location.
| Query | What you get |
|---|---|
Coffee shops in London | Coffee shops in London |
restaurants in Paris | Restaurants in Paris |
dentists in Austin, Texas | Dentists in Austin |
plumbers near Manchester | Plumbers around Manchester |
hotels in Tokyo | Hotels in Tokyo |
Pizza Hut in Chicago | One brand's Chicago locations |
vegan bakeries in Brooklyn, NY | Vegan bakeries in Brooklyn |
car repair in 41.3851,2.1734 | Car repair at those coordinates |
coffee shops in 12.9716,77.5946 | Coffee shops at those coordinates |
The location is not optional. A search is centred on a place, so coffee shops on its own cannot be run β Google needs to know where. Write coffee shops in Berlin, or put the coordinates in the Advanced Geo coordinates field and leave the location out of the query.
Words like in, near, around and at all work, and so does a comma: dentists, Austin is read the same way as dentists in Austin.
Current page
Each page is a different set of 20 places for the same query. Leave it at 1 for the first 20; set it to 2 for the next 20, and so on.
{ "mode": "search", "query": "coffee shops in Lisbon", "page": 2 }
Run the actor once per page, changing only this number, to build up a larger list. Three pages of coffee shops in Lisbon returned 56 distinct places out of 60 rows in our testing.
- Google runs out of results after about page 5 for a given query and location. A page past the end comes back empty and costs you nothing.
- Pages occasionally repeat a place β Google re-ranks between requests. Deduplicate on
place_idwhen merging. - Paging is not the only way to get more: a narrower query or a different Geo coordinates point usually reaches places that paging never will.
Advanced options
All optional. Open this section only when you want to target an exact area or change the result language.
| Option | Default | What it does |
|---|---|---|
| Language | en | Two-letter code for the result language β de, es, fr, it, pt, nl, pl, ja. Changes category names, hours labels and descriptions. |
| Geo coordinates | (from query) | Centre the search on an exact lat,lon, e.g. 51.5074,-0.1278. |
| Zoom | 15 | How much ground to cover: 12 a whole city, 15 a district, 18 a few streets. |
| Radius (m) | 10000 | Search radius around the centre point, in metres. |
Using Geo coordinates
If you set Geo coordinates, take the location out of your query.
β query
coffee shops+ geo51.5074,-0.1278β querycoffee shops in London+ geo51.5074,-0.1278The coordinates are the location. Naming a second place in the query pulls the search away from the point you specified.
Use it when a city name is not precise enough β a specific neighbourhood, a business district, a point you picked off a map. To cover a large area, run the actor several times across a grid of coordinates at a fixed zoom.
Getting coordinates: right-click any point in Google Maps and the first item in the menu is the lat,lon pair. Click it to copy.
{"mode": "search","query": "coffee shops","geo": "51.5074,-0.1278","zoom": 16,"radius": 2000}
π How many results?
One run returns at most 20 places. That is Google's page size, and no setting raises it β but you can keep going:
- Page through β set Current page to
2,3,4,5for another 20 each time. Roughly 100 places per query and location before Google stops returning more. - Vary the terms β
coffee shops,cafes,espresso barsreturn overlapping but different sets. - Vary the area β search each district instead of the whole city.
- Sweep a grid β step Geo coordinates across the region at a fixed zoom.
The last three reach places paging cannot, because each one asks Google a genuinely different question. Paging deeper into one query eventually dries up; asking a new question does not.
Search output
Every row is one place. Real output, restaurants in Lisbon:
{"title": "Santa Marta","categories": ["Mediterranean restaurant", "Restaurant"],"address": "R. de Santa Marta 61, 1150-294 Lisboa, Portugal","phone": "+351916404726","web_site": "https://www.santamartalisboa.com/","review_rating": 4.8,"review_count": 3280,"status": "Open","link": "https://maps.google.com/?cid=13231099540799968147","latitude": 38.7253354,"longitude": -9.1470572,"timezone": "Europe/Lisbon","place_id": "ChIJ9Uz0X9ozGQ0Rk1M3Ve5Onrc","cid": "13231099540799968147","thumbnail": "https://lh4.googleusercontent.com/.../s400-p-k-no-ns-nd/photo.jpg","open_hours": { "Monday": ["12β11 pm"], "Tuesday": ["12β11 pm"] },"reviews_link": "https://search.google.com/local/reviews?placeid=ChIJ9Uz0X9ozGQ0Rk1M3Ve5Onrc"}
π Place lookup
Get one specific place when you already know which one you want. Returns the same 24 fields as a search row, plus up to 3 reviews.
Input
{"mode": "place","place": "https://maps.google.com/?cid=5249990186996207485"}
Accepted input forms
All four work β paste whichever you have.
1. Full Google Maps URL β the usual case. Open the place and copy your browser's address bar.
https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z/data=!3m1!4b1!4m6!3m5!1s0x47e66e2964e34e2d:0x8ddca9ee380ef7e0!8m2!3d48.8584!4d2.2945
2. Short link with a CID β what Google's Share button produces.
https://maps.google.com/?cid=5249990186996207485
3. Bare CID β the number on its own. This is the cid field of any search result, so a search feeds place lookups directly.
5249990186996207485
4. Feature ID β the 0x...:0x... pair, the data_id field of a search result.
0x47e66e2964e34e2d:0x8ddca9ee380ef7e0
β οΈ One URL form does not work: a link with only
@lat,lngand no!1s0x...segment carries no place identifier β that is a map position, not a place. Copy the link from the place's own page, not from a panned map.
Advanced options
| Option | Default | What it does |
|---|---|---|
| Language | en | Two-letter result language code. |
Geo, zoom and radius are ignored here: a CID identifies the place on its own.
Place output
Real output for 5249990186996207485:
{"title": "TΓΌrkis Express Vienna Center","categories": ["Fast food restaurant"],"address": "Goldschmiedgasse 4, 1010 Wien, Austria","phone": "+43 1 60050101010","web_site": "https://www.turkisexpress.at/","review_rating": 4.8,"review_count": 666,"status": "Open","link": "https://maps.google.com/?cid=5249990186996207485","open_hours": {"Monday": ["8:30 AMβ12 AM"],"Tuesday": ["8:30 AMβ12 AM"],"Wednesday": ["8:30 AMβ12 AM"]},"user_reviews": []}
π What you get β all 24 fields
Both modes return the same field set. Fill rate is measured on a live 20-result run, so it reflects how often Google actually carries the field.
Core β on essentially every place
| Field | Type | Example | Fill |
|---|---|---|---|
title | string | "Santa Marta" | 100% |
address | string | "R. de Santa Marta 61, 1150-294 Lisboa, Portugal" | 100% |
phone | string | "+351916404726" | 90% |
web_site | string | "https://www.santamartalisboa.com/" | 70% |
categories | string[] | ["Mediterranean restaurant", "Restaurant"] | 100% |
review_rating | number | 4.8 | 100% |
review_count | number | 3280 | 100% |
link | string | "https://maps.google.com/?cid=13231099540799968147" | 100% |
Location & identifiers
| Field | Type | Example | Fill |
|---|---|---|---|
latitude | number | 38.7253354 | 100% |
longitude | number | -9.1470572 | 100% |
timezone | string | "Europe/Lisbon" | 100% |
place_id | string | "ChIJ9Uz0X9ozGQ0Rk1M3Ve5Onrc" | 100% |
cid | string | "13231099540799968147" | 100% |
data_id | string | "0xd1933da5ff44cf5:0xb79e4eee55375393" | 100% |
cid and data_id are both accepted as Place lookup input, so a search result can be fed straight back in for a deeper look.
Status, hours & media
| Field | Type | Example | Fill |
|---|---|---|---|
status | string | "Open" / "Closed" / "Temporarily closed" | 100% |
open_hours | object | {"Monday": ["12β11 pm"], β¦} | 100% |
thumbnail | string | "https://lh4.googleusercontent.com/β¦/s400-β¦/photo.jpg" | 100% |
reviews_link | string | "https://search.google.com/local/reviews?placeid=β¦" | 100% |
About opening hours: Google sometimes returns the full week and sometimes only today, for the same request. Most rows carry the full week; some carry one day. When only one day comes back, the others are not in Google's response at all β there is nothing to extract.
Attributes & extras
| Field | Type | Example | Fill |
|---|---|---|---|
about | object[] | Grouped attributes β see below | 100% |
credit_cards_accepted | string[] | ["Credit cards", "Debit cards", "NFC mobile payments"] | 75% |
order_online | object[] | [{"link": "https://β¦", "source": "ubereats.com"}] | 60% |
reservations | object[] | [{"link": "https://β¦", "source": "opentable.com"}] | 60% |
description | string | "Elegant spot for Mediterranean platesβ¦" | 40% |
user_reviews | object[] | Up to 3 reviews β Place lookup only | occasional |
about β structured attributes
Google's attribute panel, grouped. How many groups exist depends on the category: restaurants and cafΓ©s return 10β15, hotels often just one.
"about": [{"id": "service_options","name": "Service options","options": [{ "name": "Outdoor seating", "enabled": true },{ "name": "Takeout", "enabled": true },{ "name": "Delivery", "enabled": false }]},{"id": "highlights","name": "Highlights","options": [{ "name": "Great coffee", "enabled": true },{ "name": "Great wine list", "enabled": true }]}]
Common group ids: service_options, highlights, popular_for, accessibility, offerings, dining_options, amenities, atmosphere, crowd, planning, payments, children, parking.
user_reviews β Place lookup only
Up to 3 reviews, when Google includes them in the response. They are a bonus rather than a guarantee: many places return none, and searches never return any.
"user_reviews": [{"rating": 5,"description": "Best flat white in the city, and the staff remember you.","author_url": "https://www.google.com/maps/contrib/1029384756/reviews","profile_picture": "https://lh3.googleusercontent.com/a-/β¦"}]
The reviewer's display name is not included β Google does not carry it in this response. For a full review history, use the reviews_link field.
π‘ Common uses
Lead lists β plumbers in Sheffield, then filter to rows with a phone and no web_site: businesses with no website are the ones that want one.
Competitor tracking β run the same query weekly and diff review_count and review_rating to see who is gaining.
Market research β sweep Geo coordinates across a city to map where a category clusters.
Data enrichment β you have CIDs or Maps URLs already; run Place lookup to attach current hours, ratings and phone numbers.
Store locators β Pizza Hut in Chicago returns one brand's locations with coordinates ready to map.
π° Pricing
Pay per result. Empty results are free β a query that matches nothing and a CID Google does not recognise are never charged, so exploring costs you nothing.
| Event | Price |
|---|---|
| Search result | $0.001 per place |
| Place lookup | $0.01 per place |
A 20-result search costs $0.02.
β FAQ
Why only 20 results per search?
That is Google's page size for this endpoint. Set Current page to 2, 3, 4 or 5 to fetch the next 20 each time β about 100 places per query and location. Beyond that, run several searches with different terms, districts or coordinates.
Why did a later page come back empty? Google stops returning results after about page 5 for a given query and location. An empty page is the end of the results, not an error, and it is not charged.
Why is phone or web_site empty on some rows?
Because the business has not listed one. The fields are extracted whenever Google has them; the gaps are in Google's data, not in the scraper.
Can I get more than 3 reviews?
Not from this actor. Use the reviews_link field, which opens the place's full review page.
Why did my search return nothing?
Usually the query has no location β coffee shops cannot be searched, coffee shops in Lisbon can. If you set Geo coordinates, check they are lat,lon in that order.
Do I need proxies or an API key? No. Everything is handled for you; there is nothing to configure.
Can I choose the result language? Yes β set Language in Advanced options to any two-letter code.
Is this legal? The actor reads publicly visible business listings β the same information any visitor sees. It collects no personal data and no private information. You are responsible for how you use the output, including under GDPR and CCPA where applicable.
Output formats
Download the dataset as JSON, CSV, Excel, XML, HTML or JSONL from the Storage tab, or pull it from the Apify API. The dataset ships with three ready-made views β Overview, Contact details and Location & IDs β so a lead list is one click, not a spreadsheet cleanup.