Complete rewrite. The Actor now reads Google Maps data over plain HTTP instead of
driving a headless browser, which makes runs dramatically cheaper and removes the
dependency on Google's rotating CSS class names.
locationQuery to reuse one set of search queries across cities.
customGeolocation to centre a search on exact coordinates and zoom.
- Filters:
minRating, requireWebsite, requirePhone, skipClosed, categoryIncludes.
maxTotalResults as a hard cap across all queries.
- New output fields:
categories, street, neighborhood, city, state, postalCode, countryCode, phoneUnformatted, websiteDomain, googleFeatureId, googleKnowledgeGraphId, timezone, openingHours, permanentlyClosed, temporarilyClosed, attributes, imageUrl.
- Emails are now also read from JSON-LD structured data and Cloudflare-protected markup.
- Businesses that share one website (chain locations) were deduplicated out of the request queue, so every branch after the first was silently dropped.
- Addresses outside the US were mis-parsed. UK postcodes, German postcode-first lines, Japanese addresses and the country line Google appends when the request IP is in another country are all handled now.
- Phone numbers and nearby words merged into extracted email addresses.
businessStatus was inferred by searching the whole page for the word "Closed", which mislabelled open businesses as permanently closed.
- Bot-challenge responses from business websites are no longer parsed as page content.
- Default memory is 2048 MB, chosen by measuring cost and runtime across memory tiers.
- Removed Playwright; the image is now
apify/actor-node.
reviewCount is usually empty. Google removed review counts from the data behind Maps search results. The field is kept so it repopulates if Google restores it.
openingHours covers the current day only, which is all Google returns in search results.
Initial release. Browser-based scraper using Playwright.