Google Maps Scraper
Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,searchQuery,reviewUrls(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00027 per place = $0.27 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Place returned | Charged per place returned in the dataset (blocked/empty searches not charged). | $0.00027 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-30, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | One or more Google Maps searches. Include the location in the text, e.g. "coffee in Brooklyn", "dentists near Eiffel Tower", "hotels Lisbon". If Google Maps can't find the place after "in" or "near", or after "à", "en", "près de" or "cerca de" when the place starts with a capital letter, that search gets a free BAD_INPUT row instead of places from somewhere else. The same goes for a town it can't find next to a state it can, which it would otherwise search across the whole state. | array |
searchQuery | A single search, if you prefer one box instead of the list above. | string |
reviewUrls | Place links to read reviews from, newest first. placeUrls is accepted as an alias. | array |
placeUrls | Optional alias for reviewUrls. | array |
language | Google Maps interface language code (e.g. en, de, fr, es). | string |
countryCode | Optional two-letter country to search from, for example US, GB or DE. Leave it empty for the default, which is the most reliable for most searches. | string |
city | Optional. Runs every search in this city, so "coffee" becomes "coffee in Austin, TX". Add the state or country when the name is common, like Austin, TX or Lyon, France, and leave the place out of the searches themselves. If Google Maps can't find the city, the run stops with a free BAD_INPUT row instead of returning places from somewhere else. | string |
county | Optional. Runs every search in this county, like Travis County, TX. Works on its own or together with City, and is checked the same way. A search that goes straight to one business is checked by its address, which never names a county, so fill in City too for those. | string |
maxItems | How many places to collect per search (the scraper scrolls the results feed to reach this). Note: website and phone are only returned when Google shows them on the results card, so those fields are often null; rating, reviewCount, category and address can also be null when Google omits them. | integer |
maxReviewsPerPlace | Maximum newest reviews to return per place URL or discovered place. | integer |
includeReviews | After collecting places, also return each place's newest reviews, up to Max reviews per place. Every review is a row of its own. | boolean |
includeOwnerReplies | Attempt to include the business owner's visible reply for each review. | boolean |
notionConnector | Optional. Write each place as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
addresscategorycidlatlngnamephoneplaceIdplaceUrlratingreviewCountsearchQuerywebsiteplaceNametypereviewerNametextrelativeDateownerReplyExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
28 ready-to-run use cases
Coworking Space Tokyo Data, Straight from Maps
Shibuya, Shinjuku and wider Tokyo coworking spaces queried in Japanese, so names come back as locals write them. Ratings and addresses included.
Property Management Leads from Google Maps (Denver)
Property managers, general contractors and handymen around Denver with ratings and addresses. Three searches run together into one list.
CRM Data Enrichment from Google Maps Listings
Re-run a neighbourhood search to refresh names, addresses, ratings and place IDs on a CRM list. Opening hours are not part of the row.
Wedding Vendor List from Google Maps (Nashville)
Photographers, venues, florists and planners in Nashville pulled in one run, with ratings and addresses. Edit the four searches for another city.
Boutique Hotels Barcelona: Google Maps Data Export
Gothic Quarter and Eixample hotels queried in Spanish, with ratings, addresses and review counts where shown. Swap in other neighbourhoods.
Gym Leads from Google Maps Across Chicago Suburbs
Gyms, fitness studios, CrossFit boxes and yoga studios in Naperville, Schaumburg, Evanston and Oak Park, with ratings and addresses in one list.
Med Spas Miami and South Florida from Google Maps
Med spas, botox and aesthetic clinics across Miami, Fort Lauderdale, Boca Raton and West Palm Beach, each row with a rating and an address.
Starbucks in Germany: Every Location from Maps
Berlin, Munich, Hamburg and Cologne stores queried in German, with addresses and ratings. Change the brand name to map any chain's footprint.
HVAC Leads from Google Maps Across Florida Metros
HVAC contractors in Miami, Orlando, Tampa and Jacksonville with names, addresses and ratings. Phone and website are almost never filled in.
Dental Leads from Google Maps in Los Angeles County
Dentists across LA, Long Beach, Glendale, Santa Clarita and Pasadena in one run, with ratings, categories and addresses on every row.
Find Businesses Without a Website on Google Maps
Restaurants and cafes in Bakersfield, Fresno and Stockton. A blank website field means Google did not show one, so treat the rows as candidates.
Auto Repair Shops in Texas with Google Maps Ratings
Shops in Houston, San Antonio and Austin with the rating on each row, so you can sort for the low ones yourself. It returns them all, unfiltered.
Retail Location Data: Coffee Shops in 6 US Cities
Boise, Spokane, Reno, Tucson, Albuquerque and Colorado Springs, every shop with latitude, longitude and rating for mapping the whitespace.
Attorney Leads from Google Maps by Practice Area
Injury, family, immigration and estate lawyers in New York City, four searches in one run, each row with a rating, a category and an address.
Google Maps Rank Checker for Local SEO (Phoenix)
Phoenix roofers in the order Maps returns them, with rating and category, so you can see where a client sits. Change keyword and city to check yours.
EV Charging Station Map Data for US Metros
Chargers across Los Angeles, San Diego and San Jose with operator names, coordinates and ratings. Add metros to the query list to widen it.
Plumber Leads from Google Maps Across Texas Cities
Plumbers in Houston, Dallas, Austin, San Antonio and Fort Worth in one list, with ratings and addresses. Add or replace cities in the query box.
Google Maps Data Extractor for Tokyo Restaurants
Shibuya restaurants pulled from Japanese Maps: name, category, address, rating and coordinates. Phone and website are almost never filled in.
Google Maps Place ID Finder for a Whole City
Place ID, CID and latitude/longitude for every car dealer Maps lists in Chicago. Both IDs land on every row, which is what you need for joins.
Scrape Google Maps Ratings: SF Sushi Restaurants
Ratings for every sushi place Maps returns in San Francisco, with category and address. Review counts appear when Google prints them on the card.
Coffee Shop Locations from Google Maps (Portland, OR)
Every coffee shop Google Maps lists for Portland, with rating, address and exact coordinates. Swap the query for your own city and run it again.
Google Maps Nearby Search Around Any Landmark
Search Maps around a landmark or address and get names, categories, ratings and coordinates back. Set up on a Paris example, edit the query for yours.
Local Business Leads from Google Maps, by City
Name, category, address, rating, coordinates and place ID for any business type in any city. Phone and website are almost always blank on Maps rows.
Scrape Google Maps Business Listings for Restaurants
Restaurant listings from Google Maps: name, category, address, rating and coordinates. Change the city or the search in the box before you run it.
Gyms in Berlin: the Full Google Maps List
Berlin gyms and fitness studios queried in German, so the names match what is on the door. Rating, address and coordinates on every row.
List of Hotels in Lisbon with Google Maps Ratings
Every hotel Google Maps lists for Lisbon, with rating, address and coordinates. Review counts show up when Google prints them on the result card.
Law Firm Leads from Google Maps (London, UK)
London law firms from Google Maps with category, address and rating. Phone and website are almost never present, so expect to look those up yourself.
Real Estate Agent Leads from Google Maps (Miami)
Miami real estate agencies with rating, category and address on each row. Edit the search box for another city or a different kind of firm.
Related tools in Maps & Local Lead Generation
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Google Reviews Monitor — Multi-Location Alerts & Reports
Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.
2GIS Places Scraper
Scrape 2GIS places: name, category, address, phone, email, website, rating and hours. Russia, the CIS, the UAE and Cyprus only. $0.50 per 1,000 places.
2GIS Reviews Scraper
Scrape 2GIS reviews by place URL or city: rating, text, author, date, photos, owner replies. No API key. $0.50 per 1,000.
Yelp Scraper
Scrape Yelp businesses and reviews through Yelp's official Fusion API. Get rating, review count, price, phone, address, GPS and text. Bring your own key.
Google Maps Reviews Scraper
Scrape Google Maps reviews: rating, full text, exact date, reviewer, owner reply and photos. Set a date cutoff. No API key. $0.27 per 1,000.
Yandex Maps Scraper
Scrape Yandex Maps business listings: name, address, coordinates, rating, reviews, phone, website and hours. No API key. $0.40 per 1,000 places.
Where this tool sits
- Categories
- Maps & Local Lead Generation B2B Leads & Contact Data
- Platforms
Google Maps Scraper: places from a search, reviews from a place link, no API key
Type the searches you would type into Google Maps, like coffee in Brooklyn, and get one row per place: name, category, address, star rating, coordinates and Google's own identifiers. Hand it place links instead and it reads the reviews on each one.
The awkward bit first, because it decides whether this is the right tool for you. A search reads the results card, and Google only prints a phone number or a website on that card for a handful of businesses. Measured across 334 place rows from 17 recent runs: phone came back on none of them and website on 9. If contact details are the whole point of your project, budget for opening each place rather than expecting them from the search.
| Input | Google Maps searches, or place links to read reviews from |
| Output | One row per place, and one row per review |
| Ceiling | 500 places per search, 500 reviews per place |
| Account needed | None, and no Google API key |
| Price | $0.27 per 1,000 rows, flat on every plan |
🔍 What Google Maps Scraper does
Two jobs in one actor, and you can use either on its own.
Search. Give it searches with the location in the text and it scrolls the results feed, pulling one row per place until it reaches your limit or the feed stops producing new ones. Name, category, address, rating, review count, latitude, longitude and the place link come off that feed.
Reviews. Give it place links and it returns each place's newest reviews, up to your limit: who wrote it, the star rating, the text, Google's relative date, the owner's reply and any photos. Set includeReviews and a search does both, collecting reviews for every place it found.
📥 What you give it
{
"searchQueries": ["coffee in Brooklyn", "bakeries in Williamsburg"],
"maxItems": 60,
"includeReviews": false,
"language": "en"
}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at coffee in Brooklyn | Searches with the place in the text, like dentists near Eiffel Tower. |
searchQuery | none | One search instead of a list. Read only when searchQueries is empty. |
reviewUrls | none | Place links to read reviews from. placeUrls is an alias for the same list. |
maxItems | 60 | Places per search, up to 500. |
maxReviewsPerPlace | 50 | Newest reviews per place, up to 500. |
includeReviews | off | After a search, also collect the newest reviews of every place found, up to maxReviewsPerPlace each. |
includeOwnerReplies | on | Include the owner's visible reply on a review row. |
language | en | The language Google should answer in. Any code Google takes works. |
countryCode | none | Two-letter country, like GB or DE. Leave it empty unless you need one country's view of a search. |
city | none | Runs every search in this city, so coffee becomes coffee in Austin, TX. Add the state or country when the name is common, and leave the place out of the searches. |
county | none | The same for a county, like Travis County, TX. Works on its own or with city. A search that goes straight to one business is checked by its address, which never names a county, so fill in city too for those. |
notionConnector | none | Optional. Write each place into your Notion when the run finishes. |
notionParentId | none | Optional. The Notion data source to write into. |
proxyConfiguration | leave it alone | Optional. Your own servers, used exactly as given. |
searchQuery is only read when searchQueries is empty. The list arrives prefilled with coffee in Brooklyn, so typing into the single box and leaving the list as it is gets you coffee in Brooklyn. Clear the list, or put your search in it.
📤 What you get back
A real place row from a recent run, with the long link trimmed:
{
"ok": true,
"type": "place",
"searchQuery": "coffee in Brooklyn",
"name": "Qahwah House Coffee - Williamsburg Brooklyn",
"category": "Coffee shop",
"address": "162 Bedford Ave",
"rating": 4.7,
"reviewCount": 2317,
"phone": null,
"website": null,
"lat": 40.7185755,
"lng": -73.9571869,
"placeId": "0x89c25953721fc19d:0x185b29b3e7559d6e",
"cid": "1755042332447972718",
"placeUrl": "https://www.google.com/maps/place/Qahwah+House+Coffee.../data=!4m7!3m6!1s0x89c2..."
}
| Field | What it is |
|---|---|
type | place or review. Both kinds land in the same dataset. |
placeId | Google's hex feature id, the 0x…:0x… form, not a ChIJ… place ID. |
cid | The numeric id, derived from the second half of placeId. Both are always filled. |
phone, website | Only when Google prints them on the card, which is rare. Across those 334 rows, phone was empty on all of them. |
reviewCount | Present on about three rows in four. null when Google leaves the count off the card. |
placeUrl | The full link with its data= segment. Keep it whole: that segment is what a review run needs. |
| Review rows | placeId, placeName, placeUrl, reviewId, reviewerName, rating, relativeDate, text, ownerReply, photoUrls. placeId and placeName are filled on reviews from a search and empty on reviews from a link. |
relativeDate | Google's own wording, like 3 months ago or Edited 2 weeks ago. There is no exact date. |
text on a review | null when the reviewer left stars and no words. |
photoUrls | Photos attached to the review, up to 10. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A place or a review | ok: true and type of place or review | yes |
| The sample row | _sample: true and type: "sample" | no |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok being true and _sample being absent. An empty input writes the sample row and stops there, so you can see the shape before spending anything.
| Code | What it means |
|---|---|
NO_RESULTS | That search returned nothing usable, or went straight to one business outside the place you named. It also covers a place page that would not load, so a re-run is worth one try. |
BLOCKED | Google refused the request for that search or place. Re-run it, or narrow the search. |
NETWORK | Google was unreachable or answered badly. |
BAD_INPUT | Google Maps could not find the place you named, or found only the wider area named after it, like the state beside a misspelt town. Checked in city, in county, after "in" or "near" in a search, and after "à", "en", "près de" or "cerca de" when the place starts with a capital letter. Nothing from that search was charged. With city or county, a first search that fails stops the run. |
CHARGE_LIMIT | The run's maximum cost was too low to cover a single row, so it stopped before starting. |
A diagnostic row never fails the run. Without city or county, one bad search never stops the others.
▶️ How to run it
1. Open Google Maps Scraper and click Try for free. 2. Put your searches into Search queries, with the location in the text. Delete the example first. 3. Set Max places per query. Start around 10 to see what the rows look like. 4. For reviews, paste place links into Google Maps place URLs for reviews, or tick Include reviews for search results, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.27 per 1,000 rows. Flat on every Apify plan, no volume tiers.
A review row counts the same as a place row, so one place with 100 reviews is 101 rows, not one. That adds up fast with Include reviews on: a 60-place search at the default of 50 reviews a place can come to 3,060 rows. Lower maxReviewsPerPlace if a few reviews a place is enough.
Sample rows, diagnostic rows, a search that finds nothing and a place with no reviews are all free.
💡 What people use it for
- Building a local lead list from a set of searches, then joining it to your own data on
placeId. - Mapping how many of a chain's branches sit in one city, with coordinates ready for a map.
- Pulling the newest reviews for a list of place links, on a schedule, to see what changed.
- Comparing ratings and review counts across a category in one area before picking a site.
🚧 What it does not do
- Contact details are rare on search rows.
phoneandwebsitecome off the results card and
Google prints them for very few businesses.
placeIdis not theChIJ…form. It is Google's hex feature id.cidis there too if your
other tooling wants a number.
- Review dates are relative strings, like
2 weeks ago, not exact dates. - Duplicates are removed inside one search, not across searches. A place matching two of your
searches comes back as two rows, and both count.
- Short links and cut links are looked up first. A
maps.app.goo.gllink takes about a second. A
link cut before its data= part means opening Maps, up to half a minute each, and when its name matches several places near that spot the actor does not guess: that link gets a free NO_RESULTS row. Whole links from Google Maps skip the lookup.
- 500 per search is the ceiling, not a promise. Long feeds stop producing new places before
that on many searches. You pay for what arrives.
- A place Google Maps can't find is not charged. Google answers one with places from somewhere
else, or the whole state when only the town is wrong. If the actor checks that place (see BAD_INPUT), the search gets a free diagnostic row instead. The check is where Google searched, not each row.
- Rows are a snapshot. Ratings and review counts move, and a place can close.
🧭 Which Google scraper do you need?
| If you want | Use |
|---|---|
| Places from a search, with reviews optional | This one |
| Every review for a place you can name or link | Google Maps Reviews Scraper |
| Reviews with drafted replies, on a schedule | Google Reviews Monitor |
| What people type into Google | Google Search Results Scraper |
| App listings instead of places | Google Play Apps Scraper |
❓ Questions people ask
Do I need a Google API key? No. Nothing to apply for and no quota to watch.
Why are phone and website empty? The search reads the results card, and Google prints them there for very few businesses. Collecting reviews does not add them.
Can I get reviews without running a search? Yes. Put place links in reviewUrls and leave the searches empty.
How many places will one search actually return? As many as the feed keeps producing, up to your maxItems. Google trims broad searches itself, so a wide one often stops short.
Can I schedule it? Yes. placeId and reviewId are stable, so deduping across runs is straightforward.
Is scraping Google Maps legal? These are public listings and public reviews. Reviews carry personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search or the place link and the run ID. The errorCode on the diagnostic row usually names the problem on its own.