Google Maps Business Hours Scraper
Pricing
from $3.00 / 1,000 results
Google Maps Business Hours Scraper
Extract structured opening hours for all 7 days plus live open/closed status from any Google Maps place page. Supports batch input of multiple place URLs.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract structured opening hours for all 7 days and the live open/closed status from any Google Maps place page — in one click.
What this actor does
Provide one or more Google Maps place URLs and this actor returns:
- Structured hours for every day of the week (open time, close time, or "closed")
- Live open/closed status (
isOpenNow) at the moment of scraping - Inline status badge like "Open - Closes 11 PM" (
hoursStatus) - Next open / next close computed in the business's local timezone — useful for "closes in 2 hours" UX
- Human-readable countdown such as "Closes in 2 hours" or "Opens in 3 days"
- Weekly summary:
is24Hours,totalHoursPerWeek, and aweeklyPattern(e.g. "Mon-Fri 9 AM - 5 PM, Sat-Sun closed") - Holiday / special hours when Google flags a day as "Hours might differ"
- Temporary and permanent closure badges when Google explicitly labels the place
- Business location (lat/lng) and IANA timezone
- Raw opening hours text as shown on the place page
- Place identity — canonical
placeId(beginning withChIJ) for cross-referencing with the Google Maps API, plus the legacyfeatureIdwhen Google exposes that form
Use cases
- Build a database of business hours across many locations
- Monitor schedule changes for franchise locations
- Power local-SEO dashboards with up-to-date hours
- Feed hours data into CRMs, booking tools, or notification systems
Input
| Field | Type | Description |
|---|---|---|
placeUrl | String | Google Maps URL of a single place |
placeUrls | Array of strings or URL objects | Scrape multiple places in one run; copied punctuation and tracking parameters are normalized |
placeIds | Array of strings | Canonical Google Place IDs beginning with ChIJ; resolved through Google's public Maps URL API |
language | String | Google Maps interface language used for localized labels and weekday parsing (en, es, fr, de, it, pt, ja, ko, zh, ar, or ru) |
proxyConfiguration | Object | Apify proxy settings (recommended) |
Examples
Example: single place
{"placeUrl": "https://www.google.com/maps/place/Starbucks/@40.7127281,-74.0060152,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.7580,−73.9855,17z/"],"proxyConfiguration": { "useApifyProxy": true }}
Example: canonical Place IDs
{"placeIds": ["ChIJabtoT7hlwokRLECK0SW3_8I", "ChIJd3dF_VBZwokRAAFm3WMspbk"]}
Example: localized hours
{"placeUrl": "https://www.google.com/maps/place/McDonald%27s/@40.7580,-73.9855,17z/","language": "es"}
Tip: Copy the URL directly from the address bar after opening a place on Google Maps.
Output per place
Each place produces one dataset record:
{"businessName": "Starbucks","placeId": "ChIJfbedxbZZwokRpbnR5BBdz1c","featureId": "0x89c259b6c59db77d:0x57cf5d10e4d1b9a5","placeUrl": "https://www.google.com/maps/place/Starbucks/@40.7127281,-74.0060152,17z/","location": { "lat": 40.7127281, "lng": -74.0060152 },"isOpenNow": true,"openingHoursText": "Open · Closes 9 PM","hoursStatus": "Open - Closes 9 PM","hours": {"monday": { "open": "5:30 AM", "close": "9:00 PM" },"tuesday": { "open": "5:30 AM", "close": "9:00 PM" },"wednesday": { "open": "5:30 AM", "close": "9:00 PM" },"thursday": { "open": "5:30 AM", "close": "9:00 PM" },"friday": { "open": "5:30 AM", "close": "9:00 PM" },"saturday": { "open": "6:00 AM", "close": "8:00 PM" },"sunday": { "closed": true }},"weeklyPattern": "Mon-Fri 5:30 AM - 9:00 PM, Sat 6:00 AM - 8:00 PM, Sun closed","totalHoursPerWeek": 91.5,"holidayHours": [{ "day": "friday", "label": "Juneteenth", "note": "Hours might differ", "open": "5:30 AM", "close": "8:00 PM" }],"timezone": "America/New_York","currentLocalTime": "2026-06-17T14:23:11-04:00","nextOpenTime": "2026-06-18T05:30:00-04:00","nextCloseTime": "2026-06-17T21:00:00-04:00","timeUntilNextChange": "Closes in 6 hours","scrapedAt": "2026-06-17T18:23:11+00:00"}
Place identity
| Field | Type | Description |
|---|---|---|
placeId | string | Canonical Google Place ID beginning with ChIJ, when Google exposes one. |
featureId | string | Legacy feature/CID token (0x…:0x…), when Google exposes one. |
A canonical ChIJ… token is recorded in placeId; a legacy 0x…:0x… token is
recorded in featureId and is never relabelled as a Place ID. When both are
observed, the canonical token takes placeId and the legacy token is still
recorded as featureId. An identity that was never observed is omitted rather
than invented.
Hours object format
Each day in hours is one of:
| Format | Meaning |
|---|---|
{"open": "9:00 AM", "close": "5:00 PM"} | Regular open hours |
{"closed": true} | The place is closed that day |
{"open": "12:00 AM", "close": "11:59 PM", "is24Hours": true} | Open 24 hours |
{"raw": "..."} | Unusual format — raw text preserved |
Fields with no data are never included in the output (no null values).
Output fields
businessName— place name shown by Google MapsplaceId— canonical Google Place ID, when exposedfeatureId— legacy Maps feature/CID identifier, when exposedplaceUrl— the Maps URL supplied for this placesourceUrl— source place URL used for the recordlocation— place centroid as latitude and longitude, when availableisOpenNow— observed live open/closed state, when availabletemporarilyClosed— included astruewhen Google explicitly shows this badgepermanentlyClosed— included astruewhen Google explicitly shows this badgeis24Hours— whether the parsed complete weekly schedule is open 24 hoursopeningHoursText— opening-hours status text shown by Google MapshoursStatus— cleaned inline open/closed status texthours— parsed schedule by weekday, preserving unusual source text when neededweeklyPattern— concise summary derived from the parsed weekly scheduletotalHoursPerWeek— total scheduled hours when the schedule supports calculationholidayHours— parsed holiday-specific hours, when shownspecialHours— the same source holiday/special-hours entries under an alternate nametimezone— place's IANA time-zone identifier, when availablecurrentLocalTime— observation time in the place's local time zonenextOpenTime— next scheduled opening as a local-time ISO timestamp, when calculablenextCloseTime— next scheduled closing as a local-time ISO timestamp, when calculabletimeUntilNextChange— human-readable time until the next opening-hours changehoursSurfaceRendered— whether the opening-hours surface was observedrecordType— record label (businessHours)scrapedAt— UTC timestamp when the record was collected
Closure flags are omitted unless Google positively displays the matching badge; an omitted flag does not assert that the place is open or operating.
FAQ
Which Google Maps URLs are supported? Google Maps place URLs from desktop or mobile, country-specific Google domains, and supported short links are accepted. Copied wrapping quotes, trailing commas, fragments, and tracking parameters are cleaned before navigation.
Can I scrape hundreds of places?
Yes — use the placeUrls array. The actor processes them sequentially with a short delay between requests. For very large batches, split into separate runs.
Why might hours be missing?
Google Maps occasionally renders hours behind an additional interaction or varies the page structure by location/IP. When hours cannot be extracted the hours field is omitted from the record; openingHoursText may still be present.
How are localized hours handled?
The selected language is sent through the Maps URL and the anonymous public page. Day names, closed/24-hour labels, localized meridiem forms, and 24-hour clock ranges are normalized only when the source exposes them; unrecognized text is retained under raw.
Is a proxy required?
No login or cookies are required. After bounded fresh-context retries, the actor automatically uses its hardcoded Apify US RESIDENTIAL recovery path when the hours surface is not observed. An explicit {"useApifyProxy": false} keeps a direct-only diagnostic run.
Does this scrape the Google Maps API? No. It reads the same public Google Maps page you see in your browser. No API key or login is needed.
What is placeId?
The canonical Google Place ID beginning with ChIJ, extracted from the URL. It matches the place_id returned by the Google Maps Places API and can be used to query additional data from Google's API. Google also exposes a legacy 0x…:0x… token for the same place; it is recorded separately in featureId and is never presented as a Place ID.
Data Source
Data is extracted from the public Google Maps website (google.com/maps). No Google API key or login is required.
You are responsible for using this hours 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.
| Actor | What it does |
|---|---|
| 🏢 Google Maps Business Scraper | Extract business data — name, address, phone, website, rating, reviews, hours, amenities |
| ⭐ Google Maps Reviews Scraper | Scrape reviews with reviewer Local Guide level, photos, mentioned items, owner replies |
| 📸 Google Maps Photos Scraper | Extract all photos from any place — max-resolution URLs, contributor info, categories |
| 📊 Google Maps Popular Times Scraper | Busy hours histogram for all 7 days + current busyness + typical visit time |
| 📧 Google Maps Email Extractor | Find business emails + social media links by crawling websites |
| 🗺️ Google Maps Area Scanner | Geographic grid scanning — bypass the 120-place limit with bounding box / circle / polygon |
| 💼 Google Maps Leads Scraper | B2B lead generation with email + phone enrichment, US states + global countries |
| 🤖 Google Maps MCP Server | Unified MCP server combining search + reviews for AI assistants |
| 🧭 Google Maps Directions Scraper | A→B routing — distance, duration, traffic, route alternatives for driving/walking/transit |
| 📍 Google Maps Geocoding Scraper | Bidirectional geocoding — address ↔ coordinates, with address components |
| 🔗 Google Maps Similar Places Scraper | "People also search for" / related place discovery — competitor & alternative finder |
| 🍽️ Google Maps Menu Scraper | Restaurant menu items, prices, descriptions, photos |
| 📌 Google Maps Nearby Scraper | Find places near a coordinate point — lightweight POI search by category |
| 📋 Google Maps Place List Scraper | Extract Google's curated "Top X in Y" lists — best hotels/restaurants/things to do |
| 🌍 Google Maps Timezone Scraper | IANA timezone + current local time from coordinates |