Google Maps Place List Scraper
Pricing
from $3.00 / 1,000 results
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.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
Extract ranked places from Google's curated Top lists on Google Maps - e.g. Top hotels in Paris, Best coffee in Brooklyn, Things to do in Tokyo - or from a direct Google Maps list / search URL.
What this actor does
- Top list query mode - type a curated query and get the ranked feed Google shows
- Direct list URL mode - paste any Google Maps list or search URL
- Rank preserved - each record carries the position it had in the feed
- Highlights - the short feature pills Google prints on the list card (Pool, Spa, Free parking, etc.)
- Amenities - the fuller set of amenity badges the place page itself publishes (with
enrichDetails) - Optional full enrichment - fetches phone, website, full address, coordinates, place ID via the place page
- Cookieless recovery - direct access is followed by a hardcoded Apify US
RESIDENTIALrecovery path when needed - No cookies, no login
Input
| Field | Type | Description |
|---|---|---|
mode | enum (topList / listUrl) | Choose how to drive the run. Default topList. |
query | string | The curated list query (required when mode=topList). |
listUrl | string | A Google Maps list / search URL (required when mode=listUrl); country-domain and supported short-link variants are normalized. |
maxResults | integer (1-100,000) | Requested ceiling. The actor follows the public feed until this ceiling, source exhaustion, or its bounded runtime deadline; Google may expose fewer records. Default 30. |
enrichDetails | boolean | Visit each place page for full details. Default true. |
language | enum | Interface language. Default en. |
proxyConfiguration | proxy | Optional. Defaults to a bounded hardcoded US RESIDENTIAL recovery path after direct attempts. |
Examples
Example: curated hotel list
{"mode": "topList","query": "Top hotels in Paris","maxResults": 10,"language": "en"}
Example: restaurant list with lightweight records
{"mode": "topList","query": "Best sushi restaurants in Tokyo","maxResults": 25,"enrichDetails": false,"language": "ja"}
Example: direct Google Maps list URL
{"mode": "listUrl","listUrl": "https://www.google.com/maps/search/top+coffee+shops+in+Seattle","maxResults": 50}
Output per place
{"recordType": "business","listSource": "Top hotels in Paris","rank": 1,"name": "Hôtel Le Bristol Paris","categoryName": "5-star hotel","totalScore": 4.7,"reviewsCount": 2891,"address": "112 Rue du Faubourg Saint-Honoré, 75008 Paris, France","phone": "+33 1 53 43 43 00","website": "https://www.oetkercollection.com/...","priceLevel": "$$$$","price": "PKR 980K","placeId": "ChIJ...","featureId": "0x...:0x...","location": {"lat": 48.8718, "lng": 2.3163},"googleMapsUrl": "https://www.google.com/maps/place/...","highlights": ["Pool", "Spa", "Restaurant"],"amenities": ["Free Wi-Fi", "Paid breakfast", "Parking", "Accessible", "Indoor pool", "Air-conditioned", "Laundry service", "Business center", "Pet-friendly", "Room service", "Kid-friendly", "Restaurant", "Spa", "Fitness center", "Bar"],"sourceUrl": "https://www.google.com/maps/place/...","scrapedAt": "2026-06-16T08:00:00+00:00"}
A canonical ChIJ... token is always reported as placeId. A legacy 0x...:0x...
token is reported as featureId and is never relabelled as a Place ID; if only the
legacy form is visible, placeId is omitted rather than filled with it.
priceLevel and price are different datapoints. priceLevel is the standing
price band Google shows for a place ($$$$, €€) — a stable classification.
price is a price Google prints on the list card itself, exactly as displayed
and often as a nightly rate on hotel lists (e.g. PKR 980K for the Ritz,
PKR 933K for the Four Seasons). It is returned verbatim — never converted,
normalised, or turned into a number — because that string is currency- and
viewer-localized and can change between renders (the same hotel was seen at
$851, $978, $1,017, and in several currencies depending on the viewer). It
is a display string, not a stable fact; when no price is shown on the card the
field is omitted (not empty).
Empty / unavailable fields are omitted entirely - no null or "" values appear in the dataset.
With enrichDetails: true (the default), a record may also carry description, plusCode, ratingHistogram, hours, hoursStatus, isOpenNow, serviceOptions, amenities, menuLink, bookingLinks, photosSample, photoCount, popularTimesSummary, claimed, temporarilyClosed, and permanentlyClosed when Google exposes them on the place page.
highlights and amenities are different datapoints. highlights is the short set of
feature pills Google prints on the list card itself (typically 3–5 items on a hotel
card). amenities is read from the place page's own amenity strip when
enrichDetails: true: every badge Google publishes there, including the ones behind
"View more amenities", published exactly as displayed (e.g. Spa, Restaurant,
Fitness center, Room service, Bar, Airport shuttle, Kitchens in some rooms).
Nothing is translated, retitled, or invented. A badge that states the place does not
have a feature (e.g. Pool unavailable) is not an amenity and is omitted, and the field
is omitted entirely when Google shows no amenity strip — restaurants, cafés, and
attractions usually have none, while hotels typically publish 10–19 badges.
Use cases
- Travel & hospitality research (top hotels, top restaurants per city)
- Local SEO competitor analysis
- Lead generation for hospitality / F&B services
- Tourism content (things-to-do compilations)
- Market research for new locations
FAQ
Does it need cookies or an API key? No. The scraper is fully self-contained.
Will it work on the Apify free plan? Yes. No login or cookies are required; the actor uses the free-account-compatible Apify RESIDENTIAL group only as a bounded cookieless recovery path.
How many results can I get? You can request up to 100,000. A single public Google feed commonly exposes around 120 or fewer cards; the actor does not hard-clamp that observation and will continue if Google exposes more cards or pages.
Will the highlights match for every place? No. Google only shows feature pills on certain card types (notably hotels). Restaurants, cafés, and attractions usually have a short description instead.
How complete is amenities? It carries the whole set of amenity badges Google publishes for the place when enrichDetails: true, not a hand-picked subset — including the ones only revealed by "View more amenities" (e.g. a 5-star Paris hotel returns all 11–19 badges). Each value is the badge's own displayed text. The field is omitted when Google shows no amenity strip, so its absence means "not published by Google", never "no amenities".
Does it support non-English Maps interfaces? Yes - pick a language from the dropdown.
What happens when Google blocks a run or shows a degraded page? The run status tells the two cases apart. If Google served the results feed and it was genuinely empty, the status is "No places found for this query or list URL." If Google never rendered a results view at all (an upstream block or degraded response), the status instead reads "Google Maps did not return a results view for this query or list URL, even after retrying. This is an upstream block or degraded response, not an empty result set - retry later or configure a different proxy." A zero-row run is never presented as a legitimate empty result when the feed never loaded.
You are responsible for using this public data lawfully and in keeping 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 Business Hours Scraper | Full 7-day hours, timezone, current local time, next open/close, holiday hours |
| 📊 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 Timezone Scraper | IANA timezone + current local time from coordinates |
