Google Maps Scraper: Places, Hours, Popular Times & Leads
parseforge/google-maps-scraper
Lead generationAutomationDeveloper tools
Scrape Google Maps places by search, area, URL or place ID: phone, website, rating, reviews, hours, popular times and emails. Export CSV, Excel, JSON or XML.
- Total runs
- 4
- Bookmarked
- 0
- Last modified
- 2 days ago
This scraper was last updated on .
What does the Google Maps Scraper: Places, Hours, Popular Times & Leads return?
Google Maps Scraper: Places, Hours, Popular Times & Leads
Scrape Google Maps places by search term, map area, Maps URL or place ID: 375 coffee shops across Seattle came back in 45 seconds in our last deep-search test. Every place carries 43 fields, including the phone, website, rating, review count, price range, the full week of opening hours, attributes, coordinates, plus code and photo count. Popular times, the 1 to 5 star distribution and website emails are optional extras. No login, no Google API key. Export to CSV, JSON, Excel, or XML.
The Google Places API bills every field group separately, caps a text search at 60 results, and never returns popular times. This Actor reads the same public data the Google Maps web app shows, pages past 60 results, splits big areas to go past Google's per-view limit, and hands back one flat schema you can load anywhere.
| Who uses it | What they scrape Google Maps for |
|---|---|
| Sales and lead generation teams | Local business lists with phone, website and, with the contacts extra, emails and social profiles |
| Marketing and local SEO agencies | Ratings, review counts, categories and claimed status of every competitor in a city |
| Market researchers | Store counts, price ranges and category mixes by neighborhood, city or country |
| Data teams | Google Maps datasets with coordinates, place IDs and hours for maps, models and dashboards |
| Operations and site selection | Popular times by hour to compare foot traffic between locations |
What it does
The Actor takes search terms with a location, map coordinates, Google Maps URLs and place IDs, alone or together, and returns one row per place.
- ๐ Identity: name, place ID, CID, feature ID, Knowledge Graph ID and a working Google Maps link.
- ๐ Location: full address, street, neighborhood, city, postal code, state, country, latitude, longitude, plus code and time zone.
- โ๏ธ Contact: phone in display and international format, website and domain, booking links.
- โญ Reputation: rating, review count, price range, main and secondary categories, editorial summary.
- ๐ Hours: the full week of opening hours and the live open status ("Open ยท Closes 9 PM").
- ๐งพ Profile: attributes (service options, accessibility, amenities, payments), highlights, claimed status, closed flags and photo count.
- โ Optional extras, each off by default: place details (popular times, star distribution, menu link, owner description, typical time spent, review topics, related places, photo gallery) and website contacts (emails and social profiles from the business site).
What you can do with Google Maps data
๐ฏ Build local lead lists.
Search "plumbers" in every city you sell to, keep places with a website and at least 20 reviews, and turn on website contacts to get the emails and social profiles each business publishes.
๐ Benchmark competitors.
Pull every place in a category for an area and compare ratings, review counts, price ranges and claimed status in one sheet, refreshed on a schedule.
๐ Map a market.
Turn on deep search with map coordinates to cover a whole metro area, then count places by neighborhood, category and price range.
๐ฅ Compare foot traffic.
Turn on place details to get popular times for each hour of the week and the typical time people spend there, ready to chart.
Why choose this scraper
| What you get | |
|---|---|
| No browser, fast runs | It reads the Maps web app's own data over plain HTTP. A 5-place run took 5 seconds in our last cloud test. |
| Past the per-view limit | Google Maps lists about 180 places per map view. Deep search splits the area and keeps going. |
| Every input style | Search terms with a location, coordinates and zoom, Maps search or place URLs, short links, place IDs, CIDs and feature IDs. |
| Free filters | Minimum rating, minimum reviews, category words, open now, has a website, has a phone, skip closed places. A filtered-out place is never charged. |
| Pay only for the extras you use | Place details are charged only when the full place card comes back; website contacts only when an email or social profile is found. |
| 43 languages | Categories, weekdays, open status and descriptions in the language you pick. |
How it compares
All five scrapers below read public Google Maps places. This one returns the full place profile from the results list itself, never charges for a filter, and bills its extras only when they return data. The comparison uses each rival's public input options and Store price on September 24, 2026.
| Feature | ParseForge | compass/crawler-google-places | compass/google-maps-extractor | vortex_data/google-maps | kaix/google-maps-places-scraper |
|---|---|---|---|---|---|
| Price per 1,000 places | $1.00 | $4.00 | $5.00 | $1.00 | $0.08 |
| Filters | Free | $1.00 per 1,000 per filter | $1.00 per 1,000 per filter | Free | Free |
| Popular times and star distribution | $5 per 1,000 extra | $2 per 1,000 extra | $2 per 1,000 extra | $1 per 1,000 extra | Included |
| Emails and social profiles | $5 per 1,000, only when found | $2 per 1,000 | $4 per 1,000 | $1.50 per 1,000, only when found | No |
Honest limits. One map view of Google Maps lists about 180 places; beyond that, deep search splits the area. Review texts are not included (see the Recommended Actors below for reviews). The contacts extra reads only what a business publishes on its own site.
What a Google Maps place looks like
One row from a verified run on September 24, 2026, with both extras on. Long arrays are shortened here; a real row carries the full week of hours, every attribute, 126 popular-times slots and up to 20 photos.
{
"imageUrl": "https://lh3.googleusercontent.com/gps-proxy/ALd4DhG9U9R1ij39uSEuWIxesOW7O9-g2XeiijqwI0W2Aya8cKpHvyaD0GskpHwx-HQjMj196EZB7edacAJnfoiy8gOume8YnQv2BmZK_9YWNnT8LCLSOh8d1JKYUM-YHgI43GiWwGgQAbq9_f1NFgCUbd0-KmuJjc6mImpD0DS9Ty4pCR6LdK5xbNKM=w800-h600-k-no",
"title": "Kizuki Ramen & Izakaya (Uptown)",
"placeId": "ChIJi-MkXEEJlVQRg1GlIpHiNpI",
"cid": "10535857491259249027",
"fid": "0x549509415c24e38b:0x9236e29122a55183",
"kgmid": "/g/11vbst1qzr",
"url": "https://www.google.com/maps/place/?q=place_id:ChIJi-MkXEEJlVQRg1GlIpHiNpI",
"categoryName": "Ramen restaurant",
"categories": [
"Ramen restaurant",
"Izakaya restaurant",
"Japanese restaurant"
],
"description": "Hip venue serving Japanese noodle soups & small plates, plus whiskey, sake & beer amid artful decor.",
"address": "33 NW 23rd Pl, Portland, OR 97210",
"street": "33 NW 23rd Pl",
"neighborhood": "Hillside",
"city": "Portland",
"postalCode": "97210",
"state": "Oregon",
"countryCode": "US",
"plusCode": "84QVG8F2+R3",
"latitude": 45.524507,
"longitude": -122.699832,
"timezone": "America/Los_Angeles",
"phone": "(877) 839-5498",
"phoneUnformatted": "+18778395498",
"website": "https://www.kizuki.com/",
"websiteDomain": "kizuki.com",
"rating": 4.8,
"reviewsCount": 668,
"priceRange": "$20โ30",
"openStatus": "Open ยท Closes 9โฏPM",
"permanentlyClosed": "No",
"temporarilyClosed": "No",
"ownerClaimed": "Yes",
"ownerId": "117812527284682176552",
"photosCount": 541,
"language": "en",
"searchString": "ramen in Portland, OR",
"rank": 4,
"menuUrl": "https://a04b2bd6-2548-4028-bb8b-552c12767296.filesusr.com/ugd/23c62c_eb130c1050b1432c8ea2994ead2127a6.pdf",
"ownerDescription": "Welcome to Kizuki Ramen & Izakaya โ Where Ramen Excellence Awaits!\nIndulge in the authentic taste of Japan at our 18 locations, proudly named Yelp's Top Ramen S...",
"typicalTimeSpent": "People typically spend 30 min to 1 hr here",
"locatedIn": "Uptown Shopping Center",
"reviewsDistribution": {
"oneStar": 13,
"twoStar": 8,
"threeStar": 19,
"fourStar": 52,
"fiveStar": 576
},
"primaryEmail": "contactus@kizuki.com",
"emailCount": 2,
"linkedinUrl": "Not Disclosed",
"facebookUrl": "https://www.facebook.com/KizukiRamenUSA/",
"instagramUrl": "https://www.instagram.com/kizukiramen",
"twitterUrl": "https://twitter.com/kizukiramen",
"youtubeUrl": "Not Disclosed",
"tiktokUrl": "Not Disclosed",
"socialProfilesFound": 3,
"openingHours": [
{
"day": "Monday",
"hours": "11โฏAMโ9โฏPM"
},
{
"day": "Tuesday",
"hours": "11โฏAMโ9โฏPM"
}
],
"attributes": [
{
"section": "Service options",
"name": "No-contact delivery",
"value": "Yes"
},
{
"section": "Service options",
"name": "Delivery",
"value": "Yes"
},
{
"section": "Service options",
"name": "Onsite services",
"value": "Yes"
}
],
"highlights": [
"LGBTQ+ friendly"
],
"bookingLinks": [],
"popularTimes": [
{
"day": "Monday",
"hour": 11,
"occupancyPercent": 28,
"label": "Usually not too busy"
},
{
"day": "Monday",
"hour": 12,
"occupancyPercent": 37,
"label": "Usually not too busy"
}
],
"reviewTags": [
{
"tag": "garlic ramen",
"count": 6
},
{
"tag": "garlic tonkotsu",
"count": 14
}
],
"peopleAlsoSearch": [
{
"title": "Baka Umai Ramen Den",
"fid": "0x0:0x7426ebe098cf0126",
"rating": 4.8,
"reviewsCount": 73,
"categoryName": "Ramen"
}
],
"imageUrls": [
"https://lh3.googleusercontent.com/gps-cs-s/AHRPTWkJha4CRklTyEfx0no68wLHBxKW8lnJGzXP9qmrDj8tUWdwBnPgMR10G16Kc0qmfHhl8W8J7xdxfxEFJTjpuwlTMM2-mAPnNiDrMBetd5JPRXpE-jGTM8EvUDhPGxPjR8eeWiGC=w1200-h900-k-no"
],
"emails": [
"carmel@kizuki.com",
"contactus@kizuki.com"
],
"sitePhones": [
"4252141088"
],
"scrapedAt": "2026-09-24T20:51:42.310Z",
"error": null
}
Without extras, a row has the fields above from imageUrl through rank, plus openingHours, attributes, highlights, bookingLinks, scrapedAt and error: 43 fields in all, 63 with both extras on. A value Google does not publish reads "Not Disclosed", never an empty cell.
Configure the run
Mix search terms, coordinates, URLs and place IDs in one run. The Input tab lists every option.
Find well-reviewed dentists in Austin that list a website:
{ "searchTerms": ["dentist"], "location": "Austin, TX", "minRating": "4.5", "minReviews": 50, "requireWebsite": true, "maxItems": 500 }
Cover a whole city past the per-view limit, with popular times:
{ "searchTerms": ["coffee"], "latitude": "47.6062", "longitude": "-122.3321", "zoom": 12, "deepSearch": true, "maxPlacesPerSearch": 1000, "includePlaceDetails": true }
Refresh known places by ID or URL, with website emails:
{ "placeIds": ["ChIJb5gBC-u0RIYRHkntaUcdJGs", "8582500234709843288"], "startUrls": [{ "url": "https://www.google.com/maps/search/tacos/@34.0522,-118.2437,14z" }], "includeContacts": true }
Free users
Free-plan runs return up to 10 places as a preview. Upgrade your Apify plan to collect up to 1,000,000 places per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Google Maps Scraper.
- Enter
searchTermsand alocation, or paste Google Maps URLs or place IDs, add any filters, and click Start. - Export the results as CSV, Excel, JSON, or XML from the Dataset tab, or schedule the run to keep a list fresh.
Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python. It also connects to Make, Zapier, Slack, Airbyte, GitHub and Google Drive through Apify integrations.
Use with AI agents (MCP)
Give an AI agent live Google Maps search through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/google-maps-scraper"
Then prompt it in plain language:
- "List the 50 best-rated Italian restaurants in Chicago with their phone numbers and websites."
- "Find every gym within the map around 40.7128, -74.0060 at zoom 14 and tell me which ones are open now."
- "Compare the popular times of these three coffee shops and tell me the quietest hour on Saturday."
Copy this into ChatGPT, Claude, or Cursor to start:
Use the Apify Actor "parseforge/google-maps-scraper" to collect Google Maps places. Input: { "searchTerms": ["<what>"], "location": "<city or area>", "maxItems": <n>, "minRating": "<0|3|3.5|4|4.5>", "includePlaceDetails": <true|false>, "includeContacts": <true|false> }. Places come back with title, placeId, categoryName, address, city, latitude, longitude, phone, website, rating, reviewsCount, priceRange, openingHours and attributes. Call it with the ApifyClient and my APIFY_TOKEN.
Troubleshooting
Why am I getting no places?
The search term may be too narrow for the area, or the filters remove everything. Try a broader term ("restaurants" instead of a dish), a larger area, or fewer filters. The run log says how many places each filter left out.
Why fewer places than I asked for?
One map view lists about 180 places. Turn on deep search, or add more search terms or locations. Filters also remove places, and those are not charged.
Why is a field "Not Disclosed"?
Google did not publish it for that place: many places have no price range, no website, or no editorial summary. That is the place's real state on Google Maps.
Why are popular times empty for some places?
Google shows popular times only for places with enough visits. Smaller places have the star distribution and photos but no hourly chart.
Why is the run slower with extras on?
Place details open one place card per place, and website contacts read one to three pages of each business site. Raise maxConcurrency to process more places at once.
FAQ
| Question | Answer |
|---|---|
| Do I need a Google API key? | No. It reads the public data the Google Maps web app shows, so there is no API key, billing account or quota to manage. |
| How is this different from the Google Places API and its pricing? | The Places API bills each field group, caps text search at 60 results and has no popular times. Here you pay per place with the full profile included. |
| How many places per search? | About 180 per map view. With deep search on, the area is split up to three levels deep, so a city returns many hundreds. |
| Can I search by coordinates? | Yes. Set latitude, longitude and zoom, or paste a Maps search URL with @lat,lng,zoom. |
| Can I scrape specific places? | Yes. Paste place URLs, ?cid= links, short links, place IDs (ChIJ...), CIDs or feature IDs. |
| Does it get emails? | Yes, with the website contacts extra. It reads the business's own site and charges only when it finds an email or social profile. |
| Does it scrape reviews? | It returns the rating, review count, star distribution and review topics. For review texts, use a dedicated Google Maps reviews scraper. |
| Which languages are supported? | 43, from English and Spanish to Japanese and Arabic. Categories, weekdays and open status come back translated. |
| How many places per run? | Free plan: 10. Paid: up to 1,000,000, bounded by what Google Maps lists for your searches. |
| Is this an official Google product? | No. It is unofficial and reads only public Google Maps data. |
Recommended Actors
- Google Maps Contacts Scraper: local businesses with the email and phone their own website publishes.
- Google Maps Shared List Scraper: every place in a shared Google Maps list.
- Google Search Scraper: organic and paid Google results for any query.
- Website Contact Leads Scraper: emails, phones and social profiles from any list of websites.
Browse the full ParseForge collection for more scrapers.
๐ Need help? Open our contact form with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Google LLC. It collects only publicly available Google Maps data. You are responsible for using the data in compliance with Google's terms and applicable laws, including GDPR, CCPA, and PIPL. Do not use it to identify, profile, or target individuals.
What input does the Google Maps Scraper: Places, Hours, Popular Times & Leads accept?
| Field | Type | What it does | Default |
|---|---|---|---|
| searchTerms | array | What you would type into Google Maps: a category ("dentists"), a cuisine ("ramen"), a brand or a business name. Each term is searched separately and combined with the location below. | ["coffee shops"] |
| location | string | City, neighborhood, postcode or region, in plain words (for example "Austin, TX", "Shibuya, Tokyo" or "10115 Berlin"). It is added to every search term. Leave it empty to put the place in the term itself or to use the coordinates below. | Seattle, WA |
| startUrls | array | Google Maps search URLs (maps/search/...@lat,lng,zoom), place URLs (maps/place/...), ?cid= links or maps.app.goo.gl short links. A search URL keeps its map area; a place URL returns that one place. | not set |
| placeIds | array | Google place IDs (ChIJ...), CIDs (the long number in ?cid=) or feature IDs (0x...:0x...). Each returns one place. | not set |
| maxItems | integer | Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000 | 10 |
| maxPlacesPerSearch | integer | Upper limit for each search term. One map view of Google Maps lists about 180 places at most; turn on Deep search below to go past that in a big area. | 120 |
| latitude | string | Center of the map, in decimal degrees (for example 47.6062). | not set |
| longitude | string | Center of the map, in decimal degrees (for example -122.3321). | not set |
| zoom | integer | Google Maps zoom level for the coordinates: 11 is a whole city, 14 a district, 17 a few streets. | 13 |
| deepSearch | boolean | When a search fills Google's per-view limit, split the area into smaller views and search each one, up to three levels deep. Finds many more places in a large city; takes longer. | false |
| language | string (43 options) | Language of the text Google returns: category names, weekday names, opening status and descriptions. | en |
| countryCode | string (272 options) | The country Google biases results toward when a search is ambiguous (for example "pizza" with no location, or "Springfield city hall"). | us |
| minRating | string (5 options) | Keep only places with at least this star rating. Places without any rating are left out when this is set. | 0 |
| minReviews | integer | Keep only places with at least this many Google reviews. | not set |
| categoryFilter | array | Keep only places whose Google categories contain one of these words (for example "dentist" keeps "Cosmetic dentist" and "Pediatric dentist"). Use the same language as the Language field. | not set |
| openNow | boolean | Keep only places that Google shows as open at the moment of the run, in their local time. | false |
| requireWebsite | boolean | Keep only places that list a website. | false |
| requirePhone | boolean | Keep only places that list a phone number. | false |
| skipClosedPlaces | boolean | Leave out places Google marks as permanently or temporarily closed. | true |
| includePlaceDetails | boolean | Adds popular times by hour, the 1 to 5 star distribution, the menu link, the owner's description, typical time spent, the venue it is located in, review topics, "people also search for" and up to 20 photo URLs. | false |
| includeContacts | boolean | Adds the primary email, every email found, and LinkedIn, Facebook, Instagram, X, YouTube and TikTok profile links from the business website. | false |
| maxConcurrency | integer | How many places are processed at once. Only matters with place details or website contacts on. | 5 |
| proxyConfiguration | object | Apify Proxy without a group (datacenter) works for Google Maps. Residential is not needed; the run switches to it by itself only if Google keeps refusing. | {"useApifyProxy":true} |
How much does the Google Maps Scraper: Places, Hours, Popular Times & Leads cost?
from $0.89 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 |
| Place scraped | One Google Maps place with name, IDs, full address, coordinates, phone, website, rating, review count, price range, opening hours, attributes and photo count. Filtered-out places are not charged. | $0.00089 to $0.001 |
| Place details | Opt-in. Popular times, star distribution, menu link, owner description, typical time spent, review topics, related places and photo gallery for one place. Charged only when the full place card is returned. | $0.00445 to $0.005 |
| Website contacts | Opt-in. Emails and social profiles read from the business website. Charged only when at least one email or social profile is found. | $0.00445 to $0.005 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
How do I call the Google Maps Scraper: Places, Hours, Popular Times & Leads API?
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~google-maps-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": [
"coffee shops"
],
"location": "Seattle, WA",
"maxItems": 10,
"maxPlacesPerSearch": 120,
"zoom": 13
}' What example inputs can I use?
Use these inputs to see how a run is configured.
{
"searchTerms": [
"coffee shops"
],
"location": "Seattle, WA",
"maxItems": 10,
"maxPlacesPerSearch": 120,
"zoom": 13
} What do users say about the Google Maps Scraper: Places, Hours, Popular Times & Leads?
No reviews yet. Be the first.
How do I report an issue with the Google Maps Scraper: Places, Hours, Popular Times & Leads?
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
What related scrapers can I use?
Run Google Maps Scraper: Places, Hours, Popular Times & Leads on Apify All scrapers
