Google Maps Scraper - Places, Reviews, GPS & Place ID Finder
Pricing
from $0.26 / 1,000 places
Google Maps Scraper - Places, Reviews, GPS & Place ID Finder
Google Maps scraper for places from a search: name, category, address, star rating, review count, GPS coordinates and Google's place IDs, one row per place. Add place links for their newest reviews. A town Google can't find gets a free row, not places from elsewhere. $0.27 per 1,000 rows.
Pricing
from $0.26 / 1,000 places
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
1
Bookmarked
44
Total users
19
Monthly active users
21 hours ago
Last modified
Categories
Share
Google Maps scraper for the searches you would type into Google Maps, one row per place: name, category, address, phone, website, star rating, coordinates and Google's own identifiers. Hand it place links instead and it reads the newest reviews on each one.
The awkward bit first. Phone and website are what the business gave Google; a place that never listed a number has none. On four searches on 22 October 2026, 101 of 116 places had a phone and 112 a website; cafés were the patchiest, 27 phones on 41. There are no e-mail addresses.
| Input | Google Maps searches with the place in the text, copied search links, or place links to read reviews from |
| Output | One row per place: phone, website, full address, categories, opening hours, Google's place ID. One row per review when you ask for reviews |
| Ceiling | 500 places per search, 500 reviews per place |
| Speed | About 30 seconds for one search of 50 to 60 places. Ten searches of 5 places took 80 seconds |
| Account needed | None, and no Google API key |
| Price | $0.27 per 1,000 rows on the free plan, down to $0.264 on Business. The free plan's $5 a month covers about 18,000. From 31 October 2026, each search after the first that finds places adds $0.0025 on every plan |
🔍 What Google Maps Scraper does
Search. Give it searches with the location in the text, like coffee in Brooklyn, and it scrolls
the results feed until it reaches your limit or the feed runs dry. Fill in city or county and
every search runs there instead; locations runs every search in each of several places.
Filters. Optional add-ons leave out places under a star rating, with or without a website, outside your categories, outside the area you named, or permanently closed.
Place links. Paste place links or ChIJ… place IDs and you get their place rows, with the same fields as a search row.
Reviews. Give it place links and it returns each place's newest reviews: who wrote it, the stars,
the text, Google's relative date, the owner's reply and any photos. Tick includeReviews and a
search collects reviews for every place it found.
It checks where Google searched. Ask Google Maps for a place it cannot find and it answers with
places from somewhere else, or with the whole state when only the town is wrong. So a misspelt town
gets a free BAD_INPUT row instead of a page of coffee shops two states away.
📋 What data you get from each Google Maps place
| What you get | Field |
|---|---|
| Name and category, as the card prints them | name, category |
| Street address | address |
| Star rating and number of reviews | rating, reviewCount |
| Coordinates | lat, lng |
| Google's feature id and the numeric id | placeId, cid |
| The full place link, ready for a review run | placeUrl |
| Phone and website, when the business has given them to Google | phone, website |
| The search that found the place | searchQuery |
| Google's place ID and knowledge-graph id | googlePlaceId, kgmid |
| Position in Google's list | rank |
| Every category, and a code that reads the same in every language | categories, categoryCode |
| The address in one line and in parts | fullAddress, street, neighborhood, city, postalCode, state, countryCode |
| Plus code and time zone | plusCode, timeZone |
| Opening hours for the week, and whether it is open now | openingHours, openStatus |
| Closed for good, ads, businesses with no street address | permanentlyClosed, sponsored, serviceArea |
| Phone with the country code, and digits only | phoneInternational, phoneDigits |
| Website domain and "Book online" links | websiteDomain, bookingLinks |
| Accessibility, Google's short description, price band | accessibility, description, priceLevel |
| Photo count and the main photo's link | photoCount, mainPhotoUrl |
| The Maps link searched, the language and when the row was read | searchUrl, language, scrapedAt |
| Ordering services, an optional add-on | orderLinks |
| With place details, an optional add-on: the words reviewers repeat, places inside it, the owner's description | reviewTopics, placesInside, ownerDescription |
| The place link or ID a place row came from | placeLink |
| With legal-notice details, an optional add-on for German, Austrian and Swiss websites: company name, the directors or owners named, VAT id, register number and court | legalNotice |
| Per photo, when asked for: the link, its size and when it was posted | photoId, mediaType, photoUrl, width, height, uploadedAt |
| Per review: the reviewer, stars, text, relative date, owner reply and photos | reviewerName, rating, text, relativeDate, ownerReply, photoUrls |
| Per review: the exact date, language, translation, reply date and link | publishedAt, language, textTranslated, originalText, ownerReplyRelativeDate, reviewUrl |
| Per review, when asked for: the reviewer's profile | reviewerUrl, reviewerPhotoUrl, reviewerReviewsCount, reviewerPhotosCount, isLocalGuide |
| A stable id per review | reviewId |
▶️ How to scrape Google Maps places
- Open Google Maps Scraper and click Try for free.
- Put your searches into Search queries, with the location in the text. Delete the example first.
- Set Max places per query. Start around 10 to see what the rows look like.
- For reviews, paste place links into Google Maps place URLs for reviews, or tick Include reviews for search results, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Start it empty and you get one labelled sample row, not charged.
💰 How much does it cost to scrape Google Maps?
$0.27 per 1,000 rows. Paid plans: Starter $0.268, Scale $0.266, Business $0.264. On the free plan, the $5 Apify gives you each month covers about 18,000 rows.
| Searches, from 31 October 2026 | Search charge, the same on every plan |
|---|---|
| The first search in a run that finds places | none |
| Each later search that finds at least one place | $0.0025 |
| A search that brings back no places, whatever the reason | none |
| Place links and review links | none, they are not searches |
A review row counts the same as a place row. With Include reviews on, a 60-place search at the
default of 50 reviews a place comes to 3,060 rows, so lower maxReviewsPerPlace if a few are enough.
Sample rows, diagnostic rows, a search that finds nothing, a place with no reviews and a search
refused as BAD_INPUT are all free.
📥 What you give it
{"searchQueries": ["coffee in Brooklyn", "bakeries in Williamsburg"],"maxItems": 60,"includeReviews": false,"language": "en"}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, the box starts at coffee in Brooklyn | Searches with the place in the text, like dentists near Eiffel Tower, or search links copied from Google Maps, which run at the part of the map they show. |
searchQuery | none | One search instead of a list. Read only when searchQueries is empty, and that list starts prefilled, so clear it first. |
reviewUrls | none | Place links to read reviews from. placeUrls is an alias for the same list. |
placeUrls | none | The same as reviewUrls, merged with it. |
maxItems | 60 | Places per search, up to 500. |
maxReviewsPerPlace | 50 | Reviews per place, up to 5,000. |
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. |
reviewsSort | newest | newest, mostRelevant, highest or lowest. |
reviewsSince | none | Only reviews newer than a date like 2026-09-01, or a span like 8 days. Newest order only. Needs a paid Apify plan. |
reviewKeywords | none | Optional add-on. Only reviews whose text, or Google's translation of it, holds one of these words. With rare words a place can stop early, with a free PARTIAL row. Needs a paid Apify plan. |
includeReviewerDetails | off | Adds the reviewer's profile link, photo, counts and Local Guide flag. |
skipReviewerNames | off | Review rows without the reviewer's name. |
state | none | Added to city and county, like TX. |
postalCode | none | Runs every search in this postal code. |
locations | none | Several places, like Austin, TX and Denver, CO: every search runs in each. Up to 50 places and 200 searches. city and the fields above are then not used. |
minRating | any | Optional add-on. 3, 3.5, 4 or 4.5 stars and up. Unrated places are left out too. Needs a paid Apify plan. |
websiteFilter | allPlaces | Optional add-on. withWebsite or withoutWebsite. Needs a paid Apify plan. |
categoryFilterWords | none | Optional add-on. Keeps places whose categories hold one of these words. Needs a paid Apify plan. |
nameMatch | all | Optional add-on. contains or exact: the name against your search without its place. Needs a paid Apify plan. |
onlyInsideArea | off | Optional add-on. Leaves out places outside the city, county, state, postal code or location you named. Needs a paid Apify plan. |
skipClosed | off | Optional add-on. Leaves out places Google marks permanently closed. Needs a paid Apify plan. |
includeOrderLinks | off | Optional add-on. The ordering services Google lists for each place. Switches on once its price is live. |
fields | none | Keep only these fields in each row, like name and phone. |
placeLinks | none | Optional add-on. Place links, ?cid= links, short links or ChIJ… place IDs: one place row each. Needs a paid Apify plan. |
includePlaceDetails | off | Optional add-on. Adds reviewTopics, placesInside and ownerDescription. Needs a paid Apify plan. |
includeLegalNotice | off | Optional add-on. For a German, Austrian or Swiss website, the company details from its legal notice (Impressum), never an e-mail or phone. Needs a paid Apify plan. |
maxPhotosPerPlace | 0 | Photo links per place, one photo row each, links only, up to 10. Google sends a handful with each place (3 or 4 seen), not the whole gallery. Needs a paid Apify plan. |
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. |
📤 What you get back
A real place row from a run on 25 October 2026, trimmed: the long link cut, two of the seven days shown, some fields left out:
{"ok": true,"type": "place","searchQuery": "coffee in Brooklyn","name": "Moka & Co","category": "Coffee shop","address": "725 Fulton St","rating": 4.7,"reviewCount": 1524,"phone": "(347) 689-2303","website": "https://mokanco.com/fort-greene/","lat": 40.6872946,"lng": -73.9762997,"placeId": "0x89c25bd0cf1340c9:0x2dff5312c14e5a81","cid": "3314459190785628801","placeUrl": "https://www.google.com/maps/place/Moka+%26+Co/data=!4m7!3m6!1s0x89c25bd0cf1340c9...","rank": 1,"googlePlaceId": "ChIJyUATz9BbwokRgVpOwRJT_y0","kgmid": "/g/11wndpb1kr","categories": ["Coffee shop"],"fullAddress": "725 Fulton St, Brooklyn, NY 11217","neighborhood": "Fort Greene","city": "Brooklyn","postalCode": "11217","state": "New York","countryCode": "US","plusCode": "87G8M2PF+WF","timeZone": "America/New_York","openStatus": "Open · Closes 11 PM","openingHours": [{ "day": "Saturday", "hours": "8 AM–11 PM" }, { "day": "Sunday", "hours": "8 AM–9 PM" }],"phoneDigits": "+13476892303","websiteDomain": "mokanco.com","accessibility": ["Wheelchair accessible entrance", "Wheelchair accessible seating"],"photoCount": 525,"sponsored": false}
| Field | How to read it |
|---|---|
type | place or review. Both kinds land in the same dataset. |
placeId | Google's hex feature id, the 0x…:0x… form. The ChIJ… place ID other Google tools take is googlePlaceId. |
cid | The numeric id, taken from the second half of placeId. Both are always filled. |
phone | Written the way the country writes it, without the country code: (512) 717-3147 in Austin, 030 2833530 in Berlin. null when the business gave Google no number. |
website | The link the business gave Google, tracking tags included. null when there is none. |
reviewCount | Present on about three rows in four. null when Google leaves the count off the card, which happened to this same place on another run that day. |
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. The exact time is publishedAt. |
openingHours | The week as Google lists it, starting today, as { day, hours }. null when the business gave no hours. openStatus is the line Google shows at the minute of the run, like Open · Closes 11 PM. |
rank | The place's position in Google's list for that search. Google ranks from where the map sits, so it moves between runs. |
permanentlyClosed | true when Google marks the place closed for good. |
sponsored | true on an ad card. Ads are kept and charged like any other place unless you filter them out yourself. |
serviceArea | true for a business with no street address, like a mobile plumber; its coordinates are only roughly where it works. |
priceLevel | The price band the card prints, like $10–20 or 20–30 €. Most places have none. |
plusCode | The global plus code, worked out from the coordinates. Google Maps shows a shorter local form with the town. |
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 |
| A photo link | ok: true and type: "photo" | 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 to keep only real rows.
| Code | What it means |
|---|---|
NO_RESULTS | That search returned nothing usable, went straight to one business outside the place you named, or no place matched your filters. It also covers a place page that would not load, so a re-run is worth one try. |
NOT_SERVED | This request was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here. |
NETWORK | Google was unreachable or answered badly. |
BAD_INPUT | Google Maps could not find the place you named, or found only the wider area around it, like the state beside a misspelt town. Checked in city, county, state, postalCode and locations, 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; with locations, that place is skipped. Also an option the run cannot use, like a date it cannot read, before anything is searched. |
ORDER_LINKS_NOT_YET | Order online links are not switched on yet, so nothing was searched or charged. Run it without them, or once their price shows on the Pricing tab. |
OPTION_UNAVAILABLE | An add-on could not run this time, so the run stopped before searching and nothing was charged. Run it again without it. |
PARTIAL | A filter or add-on stopped early: few reviews held your words, few places matched your filters, or an add-on ran out of room on this run. The rows before it are complete, and only they were charged. |
OPTION_OFF | A filter or add-on that needs a paid Apify plan did not run. Nothing was read or charged for it, and the rest of the run went ahead. |
CHARGE_LIMIT | The run's maximum cost was too low to cover a single row, so it stopped before starting. |
TIME_LIMIT | The run got close to its time limit and stopped on its own. The places and reviews delivered before that are complete and charged. Give the run more time, or ask for fewer results, to get the rest. If nothing had come back yet, the run still ends as succeeded, with an amber status message. |
UNEXPECTED_ERROR | The run stopped early on an unexpected error. The results before this row are kept. |
A diagnostic row never fails the run, TIME_LIMIT included: a run the time limit stopped before anything came back still ends as succeeded, with an amber status message. Without city or
county, one bad search never stops the others.
💡 What people use it for
- Building a list of local businesses, phones and websites included, 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.
- Comparing ratings and review counts across a category in one area before picking a site.
From a search to a watch on the places that matter:
- Search
dentists in Austin, TXhere and keep theplaceUrlof the places you care about. - Put your own branches into Google Reviews Monitor's
locations, and each later run reports only what changed.
🚧 What it does not do
- No e-mail addresses. Contact Details Scraper reads them off the websites this one returns.
- Ads are not removed. A sponsored place comes through like any other, marked
sponsored: true. - 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 link cut before its
data=part can take half a minute, and when its name matches several places it gets a freeNO_RESULTSrow. - 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.
- The place check is about where Google searched, not each row. With the city right, a dentist
Google files under Denver can still sit in a suburb next door, unless you tick
onlyInsideArea. - Rows are a snapshot. Ratings and review counts move, and a place can close.
- It is not an official Google tool. Dami's Studio is independent and is not affiliated with or endorsed by Google, or by any other company named on this page.
🧭 Which Google Maps scraper do you need?
| If you want | Use |
|---|---|
| Places from a search, with reviews optional | This one |
| Every review for a place you can link or name, with exact dates | Google Maps Reviews Scraper |
| The photos and videos on a place | Google Maps Place Photos Scraper |
| Only what changed in your own locations' reviews, on a schedule | Google Reviews Monitor |
| Businesses in Russia and the CIS, from Yandex Maps | Yandex Maps Scraper |
❓ Questions people ask
Do I need a Google API key or a Google account?
No. Nothing to apply for, nothing to sign in to and no quota to watch.
Why are phone or website empty on some rows?
The business gave Google none. Cafés and small shops skip the phone more often than dentists or plumbers.
Why do my results differ from what I see on Google Maps?
Google ranks a search from where the map sits. A search with no place in it follows the previous
search's town, so put the place in every search or fill city. To compare, search in a private
browser window: what a logged-out visitor sees there is what this actor reads.
Can I call it from code or connect it to an AI assistant?
The API tab has code for Python, JavaScript and the
CLI. MCP clients like Claude and ChatGPT use
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-maps-scraper; coding assistants can load our
skill file.
All three bill your Apify account at the same price.
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. Cold calls and e-mails to businesses are regulated in many countries, so check the rules where you work. Apify's write-up on the legality of web scraping 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.