Google Maps Scraper — Places, Reviews, Phones & Hours avatar

Google Maps Scraper — Places, Reviews, Phones & Hours

Pricing

from $2.50 / 1,000 place scrapeds

Go to Apify Store
Google Maps Scraper — Places, Reviews, Phones & Hours

Google Maps Scraper — Places, Reviews, Phones & Hours

Scrape Google Maps places by keyword and location: name, address, phone, website, rating, review count, hours and coordinates, plus optional details (popular times, amenities) and reviews.

Pricing

from $2.50 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Trevor Ortega

Trevor Ortega

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Scrape Google Maps like a lead list: search any keyword in any city, ZIP code or coordinates and get every place with its name, phone, website, full address, coordinates, rating, review count, price level, opening hours and open/closed status. Turn on details for the rating histogram, popular times, "About" attributes, menu, reservation and order links, photos and owner info, and add reviews (rating, text, reviewer, Local Guide flag, photos, likes, owner response).

  • No Google API key, no login, no browser: the actor sends Google Maps' own JSON requests through Apify's datacenter proxy.
  • Pay per result: places, details and reviews are separate events, so you only pay for what you turn on.
  • Place IDs, CIDs, Google Maps place/search URLs and maps.app.goo.gl short links work as input too.
  • Built-in change monitoring for scheduled runs: only new places, changed ratings/review counts/closures and new reviews are output and charged.

What data does Google Maps Scraper extract?

Every place ("type": "place"):

FieldDescription
placeId, cid, featureId, kgmidGoogle place ID (ChIJ...), CID (the number in maps?cid=), Maps feature id and Knowledge Graph id
name, category, categoriesBusiness name and all Google categories
address, street, neighborhood, city, postalCode, state, countryCodeFull address line and its parts
latitude, longitude, plusCode, timezoneLocation
phone, phoneInternationalPhone as Google shows it and in E.164 format (+15124699003)
websiteBusiness website
rating, reviewCount, priceLevelStars, number of reviews, price level / "price per person" range ($10–20) when Google shows one
openingHours, openStatusWeekly hours [{"day": "Monday", "hours": "7 AM–6 PM"}, ...] and the current status line ("Open · Closes 6 PM")
permanentlyClosed, temporarilyClosedClosure flags (from Google's status line)
isClaimedfalse when Google shows "Claim this business"
summary, photoUrlGoogle's one-line editorial summary and main photo
googleMapsUrl, reviewsUrlLinks to the place and its reviews
searchTerm, searchLocation, searchQuery, rank, startUrl, scrapedAtProvenance; rank = position in its search

With Include place details ("detailsScraped": true):

FieldDescription
ratingHistogramNumber of 1-5 star reviews: {"1": 64, "2": 45, "3": 94, "4": 328, "5": 878}
popularTimes, popularTimesLiveText, popularTimesLivePercent, typicalTimeSpentBusyness per day and hour (0-100), live busyness and "People typically spend ..." when Google has them
descriptionOwner or Google description
about"About" attributes by group: service options, accessibility, offerings, payments, amenities, crowd, parking, pets ...
menuUrl, reservationLinks, orderLinksMenu link, booking partners (OpenTable, Resy, Toast ...), order online / reserve buttons
photosCount, imageUrlsNumber of photos and up to 10 image URLs
ownerName, reviewTopics, secondaryHours, peopleAlsoSearchOwner profile name, review topics with mention counts, happy hours / delivery hours, related places

Every review ("type": "review"): reviewId, rating, text, originalText + textTranslated, language, publishedAt (exact UTC time), publishedAtText ("3 days ago"), updatedAt, reviewerName, reviewerId, reviewerProfileUrl, reviewerPhotoUrl, reviewerIsLocalGuide, reviewerReviewCount, reviewerPhotoCount, photos, likesCount, reviewContext (dining answers such as "Price per person", Food/Service/Atmosphere scores), ownerResponse, ownerResponseDate, reviewUrl, reviewsSort, and the place (placeId, placeName, placeAddress, cid, googleMapsUrl).

How to scrape Google Maps places

  1. Enter one or more search terms ("coffee shop", "dentist", "roofing contractor").
  2. Enter a location: a city, address, ZIP code or region ("Austin, TX", "10001", "Berlin, Germany"). Or give coordinates (30.2672,-97.7431) and a zoom level to search around a point.
  3. Set Max places per search and Max places in total, then run. Each term is searched separately; places that appear in several searches are saved once.

You can also paste Google Maps URLs (place pages, search pages with @lat,lng,zoom, ?cid= links, short links) or place IDs / CIDs to scrape specific places. Set language (hl, e.g. de) and country (gl, e.g. gb) to get names, categories and hours the way local users see them.

How many places does one search return?

Google ends one Maps result list after roughly 160-260 places (tested: "bakery" around downtown Chicago 159 unique places from 11 pages, "restaurants in Chicago, IL" 259 from 14 pages). The actor pages until Google's list ends or your limit is reached. Deep search splits the location into a grid of smaller map views (16 by default) and searches each one, keeping only places inside your area and removing duplicates. It helps when an area holds more matches than one list shows: "restaurants in Chicago, IL" with 16 cells reached our 1,000-place test limit after 79 pages (vs 259 from one list). For small areas a single list usually already has them all (bakeries in a 15 km area: 164 with 4 cells vs 159 from one list). Deep search costs one request per page per cell, so keep Max places per search at what you need.

How to scrape Google Maps reviews

Set Reviews per place (e.g. 5) and a sort (newest, most relevant, highest or lowest rating). Without a signed-in browser, Google serves the first 5-8 reviews of each sort order with the place: Google's full review list needs a browser security token that plain HTTP clients do not get. If you ask for more than one sort returns, the actor adds the other sort orders, so you get up to about 20-30 distinct reviews per place. For a complete review history of a place (thousands of reviews), use a dedicated browser-based reviews scraper.

Only reviews newer than (reviewsNewerThan: 2026-10-01, 7 days, 24 hours) keeps only recent reviews and forces the newest-first order. Scheduled daily, it catches every new review of places that get fewer than about 5-8 reviews a day.

Monitor changes on a schedule

Turn on Only new or changed items and save the input as a task with a Schedule (e.g. daily). Each run then outputs only places that are new to this search or whose rating, review count or closed status changed, and only reviews it has not output before; unchanged places are skipped before any detail request and are not charged. New items carry changeType: "new", changed places changeType: "changed" and previousValues with the old values ({"reviewCount": 1408}). Google re-ranks a list a little on every request, so a watch over only the top N places sees some re-ranked places as new (top 40 dentists in Austin: 15 of 40 on the second run); set Max places per search to 200 to watch the whole list. Give each watch its own Monitoring key if several schedules search the same thing.

Input example

{
"searchTerms": ["coffee shop", "bakery"],
"location": "Austin, TX",
"maxPlacesPerSearch": 100,
"maxItems": 200,
"includeDetails": true,
"maxReviewsPerPlace": 5,
"reviewsSort": "newest",
"language": "en",
"country": "us"
}

Output example

A place with details (shortened):

{
"type": "place",
"placeId": "ChIJ-UsJsFTTD4gR9wNj_lK4NEQ",
"cid": "4914755759962784759",
"featureId": "0x880fd354b0094bf9:0x4434b852fe6303f7",
"name": "Gino's East",
"category": "Pizza restaurant",
"categories": ["Pizza restaurant", "Bar", "Caterer", "Italian restaurant"],
"address": "162 E Superior St, Chicago, IL 60611",
"street": "162 E Superior St",
"neighborhood": "Streeterville",
"city": "Chicago",
"postalCode": "60611",
"state": "Illinois",
"countryCode": "US",
"latitude": 41.8958861,
"longitude": -87.6230528,
"plusCode": "V9WG+9Q Chicago, Illinois",
"phone": "(312) 266-3337",
"phoneInternational": "+13122663337",
"website": "http://www.ginoseast.com/",
"rating": 4.7,
"reviewCount": 21103,
"priceLevel": "$20–30",
"openingHours": [{"day": "Monday", "hours": "11 AM–9 PM"}, {"day": "Tuesday", "hours": "11 AM–9 PM"}],
"openStatus": "Open · Closes 9 PM",
"permanentlyClosed": false,
"temporarilyClosed": false,
"summary": "Deep-dish pizzas, salads & sandwiches",
"isClaimed": true,
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ-UsJsFTTD4gR9wNj_lK4NEQ",
"searchTerm": "pizza",
"searchLocation": "Chicago, IL",
"rank": 4,
"ratingHistogram": {"1": 468, "2": 339, "3": 779, "4": 2419, "5": 17098},
"popularTimes": {"Friday": [{"hour": 17, "occupancyPercent": 76}, {"hour": 18, "occupancyPercent": 83}]},
"popularTimesLiveText": "Not busy",
"typicalTimeSpent": "People typically spend 45 min to 2 hr here",
"about": {"Service options": ["Outdoor seating", "Delivery", "Takeout", "Dine-in"],
"Highlights": ["Great beer selection", "Rooftop seating"]},
"menuUrl": "https://www.toasttab.com/bravo-restaurants-group-ginos-east-superior-street/v3/",
"reservationLinks": [{"url": "https://tables.toasttab.com/restaurants/bedbc320-282f-4ef5-9ae8-b8ed91a0aa6e/findTime",
"domain": "toasttab.com"}],
"photosCount": 11696,
"reviewTopics": [{"topic": "deep dish pizza", "mentions": 3306}],
"detailsScraped": true
}

A review:

{
"type": "review",
"reviewId": "Ci9DQUlRQUNvZENodHljRjlvT21relZHNWxkRkpXYlU5Rk1USndNazlaVkRWQ2MwRRAB",
"rating": 1,
"text": "was my birthday, & I came from out of town to Chicago really excited to try this place ...",
"language": "en",
"publishedAt": "2026-08-12T02:56:37Z",
"publishedAtText": "2 months ago",
"reviewerName": "Georgiana Rocha",
"reviewerProfileUrl": "https://www.google.com/maps/contrib/101011296062674741768?hl=en-US",
"reviewerIsLocalGuide": true,
"reviewerReviewCount": 14,
"photos": ["https://lh3.googleusercontent.com/grass-cs/AABkmLcog0hX...=k-no"],
"likesCount": 0,
"reviewContext": {"Service": 1},
"ownerResponse": "We're truly sorry to hear about your experience, Georgiana. Celebrating a birthday should be special ...",
"ownerResponseDate": "2026-09-01T14:54:24Z",
"placeId": "ChIJh3i0BqYsDogR6yp0y6TFlOQ",
"placeName": "Giordano's",
"reviewsSort": "lowestRanking"
}

How much does it cost to scrape Google Maps?

EventPriceWhen
place$0.0025Each place saved ($2.50 per 1,000)
place-details$0.0015Extra per place with Include place details on
review$0.0005Each review saved

Platform usage is billed to your account at Apify's rates and is small: the default datacenter proxy is enough, a search page brings 20 places in one request, and measured runs used about $0.01 per 1,000 places (list only) and about $0.05 per 1,000 places with details. Example: 1,000 places with details and 5 reviews each ≈ $2.50 + $1.50 + $2.50 + ~$0.05 usage.

Does it need a Google API key, a login or a special proxy?

No. It reads the same public data a logged-out visitor sees on google.com/maps, with Apify's ordinary datacenter proxy (US exits by default). No Google Places API key, no Google account, no residential or SERP proxy. Google sometimes answers a session with a reduced record (no price level or popular times); the actor detects that and asks again through another session.

Limitations

  • Reviews: the first 5-8 per sort order (about 20-30 per place across all sorts), see above.
  • One result list ends after about 160-260 places; deep search goes further in big areas.
  • Price level, popular times, menu and reservation links exist only for places where Google shows them.
  • Closure flags and the status line are read from Google's text in the requested language.
  • Emails and social profiles from business websites are not collected (this actor does not visit websites).

The actor collects publicly visible business listings (names, addresses, phones, hours, ratings) without logging in, at a modest request rate. Reviews include the public display names and profile links that Google shows next to them. Check the terms and data-protection rules that apply to your use of the data, especially for republishing or contacting people.