Google Maps Popular Times Scraper avatar

Google Maps Popular Times Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Google Maps Popular Times Scraper

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.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

2

Bookmarked

198

Total users

31

Monthly active users

1.2 hours

Issues response

a day ago

Last modified

Share

Extract the Popular Times histogram for any Google Maps place — the busy-hours bar chart that Google shows on most restaurants, shops, gyms, and tourist attractions. Get hourly busyness percentages for all 7 days of the week, plus the live "current busyness" reading and typical visit duration.

What this actor does

Give this actor a Google Maps place URL and it returns:

  • Per-day hourly busyness (0–100%) for Monday through Sunday — a full week of data in one request
  • Live busyness reading at the moment of scraping (e.g. "As busy as it gets", "A little busy")
  • Typical time spent at the place (e.g. "People typically spend 30 min to 1 hour here")
  • Business name, and place identity only when Google actually exposes it — a canonical ChIJ… Google Place ID in placeId, or — only when that is the form Google exposes — the legacy 0x…:0x… token in featureId. The identity form is omitted when unobserved; it is never invented or back-filled
  • Place URL and a popularTimesHasData flag echoed on every record so datasets stay joinable

Use cases

  • Plan field operations and logistics around quietest hours
  • Find optimal times to visit popular tourist attractions
  • Build foot-traffic dashboards for retail, restaurants, and gyms
  • Inform staffing decisions for franchise networks
  • Power "when to go" recommendations in travel apps

Input

FieldTypeRequiredDescription
placeUrlsArray of strings or URL objectsOne of placeUrls/placeIdsOne or more Google Maps place URLs; aliases, short links, copied punctuation, and tracking parameters are normalized
placeIdsArray of stringsOne of placeUrls/placeIdsOne or more canonical ChIJ Google Place IDs; resolved through Google's public Maps URL API
languageStringNoGoogle Maps UI language used for localized labels and popular-times parsing (en, es, fr, de, it, pt, ja, ko, zh, ar, or ru)
proxyConfigurationObjectNoDirect cookieless access is attempted first with bounded fresh-context retries; when omitted, the actor uses a hardcoded Apify US RESIDENTIAL fallback, or respects the supplied proxy configuration.

Examples

Example: single place

{
"placeUrls": [
"https://www.google.com/maps/place/McDonald%27s/@40.7577297,-73.9853627,17z/"
]
}

Example: batch of places

{
"placeUrls": [
"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/",
"https://www.google.com/maps/place/Whole+Foods+Market/@40.7561,-73.9903,17z/"
]
}

Example: canonical Place ID batch

{
"placeIds": ["ChIJabtoT7hlwokRLECK0SW3_8I", "ChIJd3dF_VBZwokRAAFm3WMspbk"]
}

Example: localized labels

{
"placeUrls": ["https://www.google.com/maps/place/McDonald%27s/@40.7577,-73.9853,17z/"],
"language": "es"
}

Output per place

One record per place:

{
"businessName": "McDonald's",
"featureId": "0x89c2597777397641:0x4387a82ee10d3e3b",
"placeUrl": "https://www.google.com/maps/place/McDonald%27s/...",
"popularTimesHasData": true,
"popularTimes": {
"monday": [{"hour": 6, "busyness": 12}, {"hour": 7, "busyness": 38}, "..."],
"tuesday": [{"hour": 6, "busyness": 14}, "..."],
"wednesday": [{"hour": 6, "busyness": 11}, "..."],
"thursday": [{"hour": 6, "busyness": 13}, "..."],
"friday": [{"hour": 6, "busyness": 16}, "..."],
"saturday": [{"hour": 7, "busyness": 22}, "..."],
"sunday": [{"hour": 7, "busyness": 18}, "..."]
},
"currentBusyness": 68,
"currentBusynessText": "Currently 68% busy",
"typicalTimeSpent": "People typically spend 15-30 min here",
"scrapedAt": "2026-06-16T18:23:11+00:00"
}

Place identity fields

FieldTypeDescription
placeIdStringCanonical ChIJ… Google Place ID, present only on records where Google exposed that form
featureIdStringLegacy 0x…:0x… feature token, present only where that is the form Google exposes

The identity is split by form: a canonical ChIJ… token is reported as placeId and a legacy 0x…:0x… token is reported as featureId, never relabelled as a Place ID. When only the legacy form is visible, placeId is omitted rather than filled with the legacy value; when both are observed, the canonical token takes placeId and the legacy token is still recorded as featureId.

Identity is not guaranteed on every record. Google exposes a canonical ChIJ… Place ID for some places and only the legacy feature token (or neither) for others, so placeId is legitimately absent on many records — including, in observed runs, three of four places in a batch. An absent placeId is the honest result: the actor never invents an ID and never back-fills placeId from a legacy token.

Empty / unavailable fields are omitted from the record — no null values appear in the dataset.

Hourly busyness format

Each day in popularTimes is an array of {hour, busyness} pairs:

  • hour — 0–23 (local time at the business)
  • busyness — integer 0–100 (Google's relative busyness percentage; 100 = peak for that place)

Hours with no data (e.g. while the place is closed) are omitted from the array.

FAQ

Which places have Popular Times data? Restaurants, cafés, retail stores, gyms, grocery stores, and major tourist attractions almost always have it. Small businesses, services without foot traffic, and very new listings often do not.

Why is currentBusyness sometimes missing? Google only shows live data while the place is currently open and has enough recent visits to compute it. When the place is closed or hasn't reached the data threshold, the field is omitted.

Is a live busyness label without a percentage still captured? Yes. Google sometimes states the live level in words only, such as "Currently as busy as it gets". In that case you get the wording in currentBusynessText and currentBusyness is omitted rather than filled with a guessed number.

Why is typicalTimeSpent sometimes missing? Google publishes visit duration only for locations with sufficient aggregated visit data. The actor never derives duration from the hourly histogram; it emits the directly displayed text only.

How are non-English labels handled? The selected language is applied to the Maps URL and browser locale. Histogram labels, current-busyness text, and visit-duration phrases are accepted only when their localized semantics are recognized; otherwise the field is omitted.

How is busyness measured? Google reports it as a percentage of peak for that specific place. 100 means "as busy as this place ever gets". The values are derived from aggregated, anonymised Google location-history data.

Do I need a proxy or cookies? No login cookies are required. Direct public access is attempted first with bounded fresh-context retries; if no proxy configuration is supplied, the actor then uses its hardcoded Apify US RESIDENTIAL fallback. A supplied proxy configuration is respected, and an explicit {"useApifyProxy": false} keeps a direct-only control run. If Google does not expose the Popular Times section, the actor omits it or reports a truthful unavailable status.

Can I scrape hundreds of places in one run? Yes — pass them as placeUrls. The actor processes places sequentially with a polite delay between requests. For very large batches, split into multiple runs.

Does this scrape the Google Places API? No. It reads the same public Google Maps page you see in your browser, so no API key, no billing, and no quota are required.

Data Source

Public Google Maps web UI (google.com/maps). No Google API key or login is required.

You are responsible for using the extracted data lawfully and in line with Google's terms.

🗺️ Complete Google Maps Scraper Suite

This actor is part of a comprehensive Google Maps data extraction toolkit by crawlerbros. All actors run cookielessly on the free Apify plan with bounded direct, retry, and residential recovery paths, and return clean, structured data.

ActorWhat it does
🏢 Google Maps Business ScraperExtract business data — name, address, phone, website, rating, reviews, hours, amenities
⭐ Google Maps Reviews ScraperScrape reviews with reviewer Local Guide level, photos, mentioned items, owner replies
📸 Google Maps Photos ScraperExtract all photos from any place — max-resolution URLs, contributor info, categories
🕐 Google Maps Business Hours ScraperFull 7-day hours, timezone, current local time, next open/close, holiday hours
📧 Google Maps Email ExtractorFind business emails + social media links by crawling websites
🗺️ Google Maps Area ScannerGeographic grid scanning — bypass the 120-place limit with bounding box / circle / polygon
💼 Google Maps Leads ScraperB2B lead generation with email + phone enrichment, US states + global countries
🤖 Google Maps MCP ServerUnified MCP server combining search + reviews for AI assistants
🧭 Google Maps Directions ScraperA→B routing — distance, duration, traffic, route alternatives for driving/walking/transit
📍 Google Maps Geocoding ScraperBidirectional geocoding — address ↔ coordinates, with address components
🔗 Google Maps Similar Places Scraper"People also search for" / related place discovery — competitor & alternative finder
🍽️ Google Maps Menu ScraperRestaurant menu items, prices, descriptions, photos
📌 Google Maps Nearby ScraperFind places near a coordinate point — lightweight POI search by category
📋 Google Maps Place List ScraperExtract Google's curated "Top X in Y" lists — best hotels/restaurants/things to do
🌍 Google Maps Timezone ScraperIANA timezone + current local time from coordinates