Simple Google Maps Scraper avatar

Simple Google Maps Scraper

Pricing

from $1.00 / 1,000 place from searches

Go to Apify Store
Simple Google Maps Scraper

Simple Google Maps Scraper

Simple Google Maps Scraper

Pricing

from $1.00 / 1,000 place from searches

Rating

0.0

(0)

Developer

Monster Leads

Monster Leads

Maintained by Community

Actor 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 doesReturns
πŸ” SearchFind places matching a query, anywhere in the worldUp to 20 places per page, ~100 per query
πŸ“ Place lookupGet one specific place from its CID or Maps URL1 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

  1. Pick a mode β€” Search or Place lookup.
  2. Type a query like Coffee shops in London.
  3. 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.

QueryWhat you get
Coffee shops in LondonCoffee shops in London
restaurants in ParisRestaurants in Paris
dentists in Austin, TexasDentists in Austin
plumbers near ManchesterPlumbers around Manchester
hotels in TokyoHotels in Tokyo
Pizza Hut in ChicagoOne brand's Chicago locations
vegan bakeries in Brooklyn, NYVegan bakeries in Brooklyn
car repair in 41.3851,2.1734Car repair at those coordinates
coffee shops in 12.9716,77.5946Coffee 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_id when 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.

OptionDefaultWhat it does
LanguageenTwo-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.
Zoom15How much ground to cover: 12 a whole city, 15 a district, 18 a few streets.
Radius (m)10000Search 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 + geo 51.5074,-0.1278 ❌ query coffee shops in London + geo 51.5074,-0.1278

The 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, 5 for another 20 each time. Roughly 100 places per query and location before Google stops returning more.
  • Vary the terms β€” coffee shops, cafes, espresso bars return 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,lng and 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

OptionDefaultWhat it does
LanguageenTwo-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

FieldTypeExampleFill
titlestring"Santa Marta"100%
addressstring"R. de Santa Marta 61, 1150-294 Lisboa, Portugal"100%
phonestring"+351916404726"90%
web_sitestring"https://www.santamartalisboa.com/"70%
categoriesstring[]["Mediterranean restaurant", "Restaurant"]100%
review_ratingnumber4.8100%
review_countnumber3280100%
linkstring"https://maps.google.com/?cid=13231099540799968147"100%

Location & identifiers

FieldTypeExampleFill
latitudenumber38.7253354100%
longitudenumber-9.1470572100%
timezonestring"Europe/Lisbon"100%
place_idstring"ChIJ9Uz0X9ozGQ0Rk1M3Ve5Onrc"100%
cidstring"13231099540799968147"100%
data_idstring"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

FieldTypeExampleFill
statusstring"Open" / "Closed" / "Temporarily closed"100%
open_hoursobject{"Monday": ["12–11 pm"], …}100%
thumbnailstring"https://lh4.googleusercontent.com/…/s400-…/photo.jpg"100%
reviews_linkstring"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

FieldTypeExampleFill
aboutobject[]Grouped attributes β€” see below100%
credit_cards_acceptedstring[]["Credit cards", "Debit cards", "NFC mobile payments"]75%
order_onlineobject[][{"link": "https://…", "source": "ubereats.com"}]60%
reservationsobject[][{"link": "https://…", "source": "opentable.com"}]60%
descriptionstring"Elegant spot for Mediterranean plates…"40%
user_reviewsobject[]Up to 3 reviews β€” Place lookup onlyoccasional

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.

EventPrice
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.