September 23, 2026 · 12 min read
Google Maps Popular Times Scraper: 511 Succeeded Runs (2026)
Each record carries a full 7 days of hourly busyness percentages, peak and quietest hours per day, live current busyness, and typical visit duration directly from public Google Maps pages. Over the last 30 days, 511 of 553 public runs in the last 30 days finished successfully, proving this a stable choice for automated workflows. It runs without requiring any Google API key, paid quotas, or login details. This tool is built for operations teams, logistics planners, and retail analysts needing raw foot-traffic patterns. It is not for anyone who needs customer reviews or contact details, which the records do not include.
How reliable is Google Maps Popular Times Scraper in production?
Across the last 30 days of public runs on the Apify platform, Google Maps Popular Times Scraper recorded 553 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 511 | 92.4% |
| Failed | 31 | 5.6% |
| Aborted by the user | 7 | 1.3% |
| Timed out | 4 | 0.7% |
| Total | 553 | 100.0% |
Outcomes over 553 runs show a reliable execution environment for scheduled tasks. You should expect about six runs out of every hundred to fail or time out during automated schedules. To handle these occurrences cleanly, build automatic retries for failed executions and set up monitoring on dataset outputs to ensure required fields are present.
What does it cost to run Google Maps Popular Times Scraper?
Each result costs $0.005 on the free tier, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. At the observed 5.6% failure rate, budget for re-running a portion of those batches rather than assuming every run completes.
Because result charges are assessed per item written to the dataset, your total bill depends directly on the number of entries in the placeUrls array. A small run-start charge applies whenever execution begins regardless of output. To test compatibility before running large collections, start with a single target URL in placeUrls to keep initial spend minimal.
How do you run Google Maps Popular Times Scraper from the API?
The Actor takes a single input, placeUrls, and it is required. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~google-maps-popular-times/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"placeUrls":["https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/data=!3m1!4b1!4m6!3m5!1s0x89c2597777397641:0x4387a82ee10d3e3b!8m2!3d40.7577297!4d-73.9853627!16s%2Fg%2F11fld77pvs"]}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"placeUrls": [
"https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/data=!3m1!4b1!4m6!3m5!1s0x89c2597777397641:0x4387a82ee10d3e3b!8m2!3d40.7577297!4d-73.9853627!16s%2Fg%2F11fld77pvs"
]
}
run = client.actor("crawlerbros~google-maps-popular-times").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"placeUrls": [
"https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/data=!3m1!4b1!4m6!3m5!1s0x89c2597777397641:0x4387a82ee10d3e3b!8m2!3d40.7577297!4d-73.9853627!16s%2Fg%2F11fld77pvs"
]
}
const run = await client.actor('crawlerbros~google-maps-popular-times').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Google Maps Popular Times Scraper inputs matter, and which can you skip?
A single required input array, placeUrls, controls execution for this scraper. Provide full, unshortened Google Maps venue URLs copied directly from the browser location bar. Ensure each URL points directly to an individual business or place page rather than a general search query.
placeUrls(array): One or more Google Maps place URLs. Copy the URL directly from Google Maps when viewing a place page.
What does Google Maps Popular Times Scraper return?
Returned records provide structured 7-day busyness percentage arrays, peak hours, quietest hours, live busyness strings, and typical time spent. They are well-suited for building foot-traffic dashboards or planning field operations. They conspicuously do not contain exact customer counts, revenue metrics, phone numbers, or user reviews.
Output
businessName(e.g.McDonald's)placeId(e.g.0x89c2597777397641:0x4387a82ee10d3e3b)placeUrllocationliveBusyness(e.g.A little busy)typicalTimeSpentpopularTimespeakHoursscrapedAt(e.g.2026-06-16T18:23:11+00:00)
Hourly busyness format
hour- 0-23 (local time at the business)busyness- integer 0-100 (Google's relative busyness percentage; 100 = peak for that place)
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Google Maps Popular Times Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Assemble a list of unshortened Google Maps venue URLs copied directly from your browser location bar for venues that display busy-hours charts.
- Input your target location URLs into the placeUrls array parameter in the Actor input tab.
- Run a test execution using a single target URL in placeUrls to confirm basic environment and parser connectivity.
- Inspect the resulting dataset record to verify that businessName and placeId fields are populated correctly with no empty values.
- Confirm that the popularTimes object exists on the output record and contains arrays for the days of the week.
- Verify that the hour and busyness integer properties are populated within the daily arrays under popularTimes.
- Check if liveBusyness is present in the output record if the target location was open during the exact time of the test run.
- Scale up your workload by populating the placeUrls array with additional target URLs for multi-place extraction.
How do you apply it? Three worked playbooks
These are Google Maps Popular Times Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Logistics and quietest hours
Outcome: Plan field operations and logistics around quietest hours
Configure: Set placeUrls to ["https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/data=!3m1!4b1!4m6!3m5!1s0x89c2597777397641:0x4387a82ee10d3e3b!8m2!3d40.7577297!4d-73.9853627!16s%2Fg%2F11fld77pvs"]
Working method: Extract historical busyness patterns for each target facility. Parse the popularTimes daily arrays to isolate hours where the busyness value is at its absolute lowest. Map these quiet hours across all target facilities to establish optimal non-peak operational windows for deliveries or maintenance.
Deliverable: A structured CSV file mapping each target facility URL to its lowest busyness operational hours.
Stop condition: The output dataset returns valid place metadata but lacks the popularTimes field across all provided URLs.
Use case 2: Optimal attraction visits
Outcome: Find optimal times to visit popular tourist attractions
Configure: Set placeUrls to ["https://www.google.com/maps/place/Whole+Foods+Market/@40.7561,-73.9903,17z/"]
Working method: Run the extraction for your chosen attraction URLs to pull peak and daily busyness data. Inspect the peakHours object to pinpoint peak visitor times for each day of the week. Identify off-peak hours where the busyness percentage drops to its lowest values to determine ideal visitor hours.
Deliverable: A visit optimization guide listing low-busyness time windows for each target attraction URL.
Stop condition: Execution completes but the dataset contains no results due to broken or malformed place URLs.
Use case 3: Foot traffic dashboards
Outcome: Build foot-traffic dashboards for retail, restaurants, and gyms
Configure: Set placeUrls to ["https://www.google.com/maps/place/Starbucks/@40.7127281,-74.0060152,17z/", "https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/"]
Working method: Execute the scraper across a batch of competitor or store locations. Import the dataset records into a database or analytics dashboard. Aggregate the hourly busyness percentages by day across locations to visualize foot-traffic trends across venue categories.
Deliverable: An updated dataset of hourly busyness metrics integrated into a visualization dashboard.
Stop condition: The placeUrls input array contains multiple valid URLs but the total output dataset record count is zero.
What breaks, and how do you design around it?
- Over the last 30 days, 5.6% of public runs failed and 0.7% timed out. Build retries and alerting around those rates rather than assuming every run completes.
Busyness metrics are relative percentages normalized between 0 and 100 rather than absolute headcount numbers. When scraping businesses without foot-traffic charts on Google Maps, the resulting record will omit the popularTimes field. Filter dataset outputs programmatically to remove records lacking the popularTimes property before sending data to downstream systems.
When should you not use Google Maps Popular Times Scraper?
Do not use this Actor if your project requires structured opening and closing times, timezone offsets, or detailed customer review analysis. If you need explicit operational schedules and holiday opening times rather than busy-hours histograms, use Google Maps Business Hours Scraper instead. For identifying competitor locations that users also visit, Google Maps Similar Places Scraper provides dedicated related-place metrics. If you only need forward or reverse coordinate conversions, Google Maps Geocoding Scraper is the proper choice.
What should you check before trusting the output?
- Verify that the popularTimes object is present in the record; its omission indicates the venue lacks location history on Google Maps.
- Check that the busyness integers within the popularTimes daily arrays fall strictly within the 0 to 100 range.
- Ensure that the hour values within the popularTimes daily arrays are valid integers between 0 and 23.
- Confirm that the scrapedAt field contains a valid ISO date-time string on every extracted dataset record.
- Stop scheduled runs if the output dataset contains zero total records when placeUrls contains multiple valid inputs.
None of this proves a record is correct. It gives a scheduled Google Maps Popular Times Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the historical run success rate for this scraper?
Over the last 30 days, 511 of 553 public runs in the last 30 days finished successfully. That represents a 92.4% success rate, alongside a 5.6% failure rate and a 0.7% timeout rate. Production automation should incorporate retries to handle occasional failures.
How does pricing work for large batch processing?
Data costs $0.005 per result written to the dataset, which equals $5.00 per 1,000 results on the free tier. A small run-start charge of $0.005 per GB of memory is billed when the run starts. If a place URL yields no result, no result charge is billed.
Why do some output records lack popularTimes data?
Google Maps only displays popular times charts for locations with sufficient aggregated visit history. Small businesses, home services, or newly created listings often do not have this data on Google Maps, so the scraper omits the popularTimes object.
Does this scraper require Google API keys or proxies?
No Google API key, login, or cloud console account is required. The scraper loads public Google Maps web pages directly using Playwright and Chromium. Standard datacenter IP addresses work without needing custom proxy configurations.
Are the busyness values absolute headcount numbers?
No, busyness values are relative integers from 0 to 100 derived from Google's aggregated location data. A value of 100 represents peak typical busyness for that specific location, not a direct count of people present.
Where to go next
Start with the Google Maps Popular Times Scraper Actor page for the current input schema, pricing tier, and run history.
It is part of the Google Maps Scraping Suite, which puts every related Actor on one page with its price and run history.
Readers running Google Maps Popular Times Scraper commonly pair it with:
- Google Maps Business Hours Scraper: Extract structured opening hours for all 7 days plus live open/closed status from any Google Maps place page.
- Google Maps Timezone & Local Time Lookup: Resolve the IANA timezone, current local time, UTC offset, and daylight-saving information for any coordinate.
- Google Maps Place List Scraper: Extract ranked places from Google's curated Top lists ('Top hotels in Paris', 'Best coffee in Brooklyn', 'Things to do in Tokyo') or any Google Maps list URL.
- Google Maps Similar Places Scraper: Extract 'People also search for' / similar / related places from any Google Maps business page - name, place ID, rating, reviews, category, image, and coordinates.
- Google Maps Geocoding Scraper: Bidirectional geocoding via Google Maps: convert addresses to coordinates (forward) or coordinates to addresses (reverse).
- Google Maps Area Scanner: Comprehensive geographic area scanner that bypasses Google Maps' 120-place limit using grid-based systematic coverage.
- Google Maps Menu Scraper: Extract restaurant menu items, popular dishes, photos, categories, and external menu links from any Google Maps place page.
- Google Maps Nearby Places: Find places near a coordinate.
Related guides:
- Google Maps Directions Scraper: Operational Guide and Use Cases
- Google Maps Photos Scraper: Practical Applications
- Google Maps Email Extractor: 3 Practical Use Cases
- Google Maps Area Scanner: Practical Use Cases and Implementation Guide
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-23.
Actor last updated by its maintainers on 2026-07-15.
Run outcome figures cover the 30 day public window ending 2026-09-23.
● Featured actors
Google Maps Popular Times Scraper
Extract popular times busy-hours histograms and live busyness data from Google Maps places - all 7 days with hourly percentages, current busyness, and typical time spent.
Run on Apify ↗