Google Maps Scraper | $0.25/1K Results π°
Pricing
from $0.25 / 1,000 results
Google Maps Scraper | $0.25/1K Results π°
π₯ $0.25/1K resultsπ₯ **CHEAPEST** Google Maps Scraper on Apify β 10Γ cheaper than competitors. Proxies & platform costs included. Results in seconds. Extract names, phones, addresses, ratings, hours & more. Multi-query, up to 200 results per search.
Pricing
from $0.25 / 1,000 results
Rating
5.0
(31)
Developer
ScraperLink
Maintained by CommunityActor stats
66
Bookmarked
5.5K
Total users
860
Monthly active users
9.1 hours
Issues response
a day ago
Last modified
Categories
Share
Google Maps Scraper
From $0.25 per 1,000 Google Maps results. Detail enrichment costs $0.25 per 1,000 places, and full reviews cost $0.25 per 1,000 reviews returned.
Pull structured business data from Google Maps at a fraction of what other actors charge. Every Google Maps run is fast, lightweight, and billed only for Google Maps results you actually receive β each Google Maps business listing lands as its own row in the dataset.
Compass charges $4.00 per 1,000 places without a pricing discount and $1.50 at its highest discount tier. This actor costs $0.50 and $0.25 at the corresponding tiers β 6β8Γ cheaper, with rich Google Maps data and straightforward result-based pricing.
What makes this Google Maps scraper different
| This Google Maps actor | Top competitor | |
|---|---|---|
| Base price per 1,000 Google Maps results | From $0.25 | $1.50+ |
| Detail enrichment: Place Details, images, and Popular Times | +$0.25 per 1,000 places | Varies |
| Full Google reviews | +$0.25 per 1,000 reviews | Often $0.30+ |
| Google Maps data fields per result | 80+ | ~20 |
| Google Maps output organized into tabs | 6 tabs | Basic table |
| Bulk Google Maps queries in one run | Yes | Yes |
| Google Maps results as individual rows | Yes | Sometimes nested |
| Max Google Maps results per query | 200 normally; 500 with area search | 120β200 |
Choose your searches and optional add-ons, then receive one structured dataset row per place.
Google Maps data you get (80+ fields across 6 tabs)
Overview
Name, rating, review count, price level, category, full address, website, phone, and direct Google Maps URL β everything you need at a glance from Google Maps.
Contact Info
Full Google Maps address broken into components (street, number, neighborhood, city, postal code, state, country), domain, all three phone formats (international, formatted, digits-only), Google Maps coordinates (lat/lng), plus code, and the building or complex the business is located in.
Hours
Live Google Maps open/closed status, weekly opening hours, service-specific hours (lunch, dinner, brunch, happy hour, and more), and booking/reservation links from Google Maps.
Ratings & Reviews
Google Maps total score, star rating, rating count, review count, full 1β5 star distribution, price tier, and optional full reviews with reviewer metadata, dates, text, photos, ratings, and owner responses.
Media & Identity
Google Maps Place ID, Data ID, CID, FID, Google Maps URL, optional image galleries and contributor attribution, thumbnail, logo, owner information, menus, order links, and related places.
Metadata
Original Google Maps search query, rank and position, language, advertisement flag, timezone, temporarily/permanently closed flags, about text, dynamic Google place tags and attribute groups (service options, highlights, offerings, dining options, accessibility, amenities, atmosphere, crowd, planning, payments, parking, and any future groups Google returns), plus optional compact Popular Times and live busyness data.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query | string list | β | One or more Google Maps search queries; optional with URLs or Place IDs | |
startUrls | URL list | β | Direct Google Maps place URLs; API object entries may include userData, returned as inputUserData | |
placeIds | string list | β | Direct Google Maps Place IDs; API object entries may include userData, returned as inputUserData | |
location | string | β | Named location separate from the search term; explicit geometry takes precedence | |
locations | string list | β | Run every query in every listed location; replaces location when provided | |
latitude, longitude | number | β | Precise Google Maps search center | |
radiusKm | number | β | Search radius around the coordinates | |
boundingBox | object | β | Area as south, west, north, east | |
polygon | array | β | Area as [latitude, longitude] points | |
customGeolocation | object | β | Area as a GeoJSON Polygon using [longitude, latitude] coordinates; takes precedence over polygon | |
gridSpacingKm | number | 2 | Coverage spacing for area searches | |
searchWorkers | integer | 4 | Concurrent map-center searches; from 1 to 4 | |
skipClosedPlaces | boolean | false | Exclude temporarily or permanently closed places before saving or billing | |
geoStrictMatch | boolean | true | Exclude results whose coordinates fall outside an explicit radius, bounding box, or polygon | |
keepUnverifiedLocations | boolean | true | Keep service-area businesses and places for which Google exposes no address | |
skipPlacesNotMatchingSearch | boolean | false | Keep only results whose title or Google categories match a meaningful search term | |
num | integer | 200 | Unique results per query; up to 500 with an explicit area search | |
gl | string | us | Country for Google Maps results β match this to the country you're searching in (ca, gb, de, etc.) | |
hl | string | en | Interface language for Google Maps results (fr, es, de, etc.) | |
languages | string list | β | Run every query or direct source once per language; replaces hl when provided | |
placeDetails | boolean | false | Include descriptions, amenities, accessibility, menus, booking options, related places, and additional metadata. Adds $0.25 per 1,000 returned places. | |
includeImages | boolean | false | Include available image galleries, dimensions, identifiers, and capture dates. Uses the same place add-on charge. | |
includeImageAuthors | boolean | false | Include available contributor identifiers and Google Maps profile links. Uses the same place add-on charge. | |
maxImages | integer | 20 | Maximum images retained per place, up to 100 | |
popularTimes | boolean | false | Include Popular Times when Google provides it. Adds $0.25 per 1,000 places with Popular Times data; unavailable places are not charged unless another detail option is enabled. | |
reviews | boolean | false | Fetch full Google review records. Adds $0.25 per 1,000 reviews actually returned. | |
maxReviews | integer | 10 | Maximum reviews per place, up to 1,000 | |
reviewsSort | string | most_relevant | most_relevant, newest, highest_rating, or lowest_rating | |
fields | string | β | Comma-separated list of Google Maps fields to keep β leave blank to get everything |
Example: multi-city Google Maps lead generation
{"query": ["personal injury lawyers in houston","personal injury lawyers in dallas","personal injury lawyers in austin"],"num": 200,"gl": "us","hl": "en"}
Example: international Google Maps search
{"query": ["coffee shops in london"],"num": 100,"gl": "gb","hl": "en"}
Example: multiple languages and a strict GeoJSON area
{"query": ["restaurants"],"languages": ["en", "fr"],"gl": "ca","num": 500,"geoStrictMatch": true,"customGeolocation": {"type": "Polygon","coordinates": [[[-79.50, 43.60],[-79.20, 43.60],[-79.20, 43.80],[-79.50, 43.80],[-79.50, 43.60]]]}}
Example: include Popular Times
{"query": ["restaurants in toronto"],"num": 200,"gl": "ca","hl": "en","popularTimes": true}
Example: include place details and attributed images
{"placeIds": ["ChIJ243-C381K4gRHMKWCGU86iM"],"placeDetails": true,"includeImages": true,"includeImageAuthors": true,"maxImages": 20}
Example: include reviews
{"query": ["restaurants in toronto"],"num": 100,"gl": "ca","reviews": true,"maxReviews": 20,"reviewsSort": "newest"}
Add-on pricing
Detail enrichment and full review records are optional paid add-ons. Add-on rates are fixed across every Apify plan.
| Apify pricing tier | Base results | Detail enrichment | Base + Detail enrichment |
|---|---|---|---|
| No discount | $0.50 / 1,000 | $0.25 / 1,000 | $0.75 / 1,000 |
| Bronze | $0.45 / 1,000 | $0.25 / 1,000 | $0.70 / 1,000 |
| Silver | $0.40 / 1,000 | $0.25 / 1,000 | $0.65 / 1,000 |
| Gold | $0.25 / 1,000 | $0.25 / 1,000 | $0.50 / 1,000 |
Detail enrichment is charged once for each returned place when Place Details, Images, or image attribution is enabled. Place Details includes Google's payload-driven place tags and all available attribute groups rather than a hardcoded category list. Popular Times-only requests are charged only for places where Google returns Popular Times data. Enabling Popular Times together with another detail option does not multiply the charge. Google does not publish every field for every business, so some enriched values may be null.
Full reviews are charged separately at $0.25 per 1,000 review records actually returned. Billing uses the number of reviews received, not maxReviews, so unavailable reviews are never charged. Base result, Detail enrichment, and review charges are additive when enabled together.
total cost = base result charge + optional Detail enrichment + actual review records Γ $0.00025
Sample Google Maps result
{"query": "restaurants in toronto","searchString": "restaurants in toronto","rank": 1,"position": 1,"title": "Black+Blue Toronto","categoryName": "Restaurant","type": "Restaurant","categories": ["Restaurant","Brunch restaurant","Event venue","Fine dining restaurant","Lounge bar","Seafood restaurant","Steak house","Sushi restaurant","Wine bar"],"types": ["Restaurant","Brunch restaurant","Event venue","Fine dining restaurant","Lounge bar","Seafood restaurant","Steak house","Sushi restaurant","Wine bar"],"address": "130 King St W, Toronto, ON M5X 2A2, Canada","neighborhood": "Old Toronto","street": "130 King St W","streetNumber": "130","city": "Toronto","postalCode": "M5X 2A2","state": "Ontario","countryCode": "CA","locatedIn": "Old Toronto","timezone": "America/Toronto","totalScore": 4.7,"rating": 4.7,"reviewsCount": 5589,"ratingCount": 5589,"reviewsDistribution": null,"priceLevel": "CA$100 or above","phone": "+1 647-368-8283","phoneNumber": "(647) 368-8283","phoneUnformatted": "+16473688283","website": "https://blackandbluesteakhouse.ca/toronto-home/","domain": "blackandbluesteakhouse.ca","placeId": "ChIJ243-C381K4gRHMKWCGU86iM","dataId": "/g/11s9wnk_vb","cid": "2587947340511232540","cidHex": "0x882b357f0bfe8ddb:0x23ea3c650896c21c","fid": "0x882b357f0bfe8ddb:0x23ea3c650896c21c","googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ243-C381K4gRHMKWCGU86iM","url": "https://www.google.com/maps/search/?api=1&query=Black%2BBlue+Toronto&query_place_id=ChIJ243-C381K4gRHMKWCGU86iM","imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/APNQkA...","thumbnailUrl": "https://lh3.googleusercontent.com/gps-cs-s/APNQkA...","logoUrl": "https://lh3.googleusercontent.com/-ih84iASeZ7Y/AAAAAAA.../photo.jpg","owner": {"name": "Black+Blue Toronto (Owner)","googleId": "102477914189084708456"},"location": {"lat": 43.6480996,"lng": -79.3831247},"latitude": 43.6480996,"longitude": -79.3831247,"plusCode": null,"temporarilyClosed": null,"permanentlyClosed": null,"openingHours": {"Friday": "11:30 AMβ12 AM","Saturday": "10:30 AMβ12 AM","Sunday": "10:30 AMβ12 AM","Monday": "11:30 AMβ12 AM","Tuesday": "11:30 AMβ12 AM","Wednesday": "11:30 AMβ12 AM","Thursday": "11:30 AMβ12 AM"},"openingHoursDetailed": [{ "day": "Friday", "hours": ["11:30 AMβ12 AM"] },{ "day": "Saturday", "hours": ["10:30 AMβ12 AM"] },{ "day": "Sunday", "hours": ["10:30 AMβ12 AM"] },{ "day": "Monday", "hours": ["11:30 AMβ12 AM"] },{ "day": "Tuesday", "hours": ["11:30 AMβ12 AM"] },{ "day": "Wednesday", "hours": ["11:30 AMβ12 AM"] },{ "day": "Thursday", "hours": ["11:30 AMβ12 AM"] }],"openingHoursState": "Open Β· Closes 12 AM","serviceHours": {"Lunch": { "Friday": "11:30 AMβ2 PM" },"Happy hours": { "Friday": "2:30β5:30 PM" },"Kitchen": { "Friday": "11:30 AMβ12 AM" },"Dinner": { "Friday": "3 PMβ12 AM" },"Brunch": { "Friday": "Closed" }},"bookingLinks": ["https://party-request.tripleseat.com/venues/8qsUeRbI/?rwg_token=...","https://www.google.com/maps/reserve/v/dine/c/DUtUFyMlWBE?source=pa","https://party-request.tripleseat.com/venues/8qsUeRbI/?rwg_token=..."],"popularTimesStatus": "unavailable","popularTimes": null,"popularTimesLiveText": null,"popularTimesLivePercent": null,"about": null}
Google Maps use cases
- Lead generation β Build targeted prospect lists from Google Maps by business type and location
- Competitor research β Monitor Google Maps competitor ratings, hours, and pricing across cities
- Market analysis β Map Google Maps business density and coverage in any region
- Directory building β Populate local business directories with verified Google Maps contact data
- CRM enrichment β Append Google Maps phone, website, coordinates, and hours to existing records
Notes
- Multiple Google Maps queries run in one actor invocation β no need to start separate Google Maps runs per city or keyword.
- Set
glto match the country you're targeting for the most accurate local Google Maps results (gl=cafor Canada,gl=gbfor UK,gl=defor Germany). - Use
fieldsto trim Google Maps output to only the columns you need β useful for large Google Maps runs where you want a lean dataset. - When
popularTimesis enabled, its output fields are included even whenfieldscontains a custom field list. - When place details or images are enabled, their output fields are included even when
fieldscontains a custom field list. - Popular Times is not available for every Google Maps place. Check
popularTimesStatusforavailableorunavailable. - Popular Times is returned as a compact
day -> hour -> occupancy percentmap. - Direct Google Maps URLs and Place IDs can be used without a text query.
- Radius, bounding-box, and polygon inputs are processed incrementally and returned places are filtered to the requested area.
- Duplicate places from overlapping centers, continuation requests, or multiple inputs are returned and charged once per run. The
queryfield identifies the first input that emitted the place. - Results are written incrementally. The
CHECKPOINTkey-value-store record can resume an interrupted run without retaining full result rows in Actor memory. - A restarted execution can paste a prior run's
CHECKPOINTrecord intoresumeState. The input fingerprint must match, and the new run continues at the saved query and map-center offset. - The 500-place area limit applies per query, not per Actor run. A list of 100 queries continues through all 100 and can therefore emit up to 50,000 rows before run-wide deduplication.
- Review output is limited by
maxReviews; fewer reviews may be returned when Google has fewer available. - Failed or empty sources are logged and saved in the run's
ERRORSkey-value-store record; they are not written to the result dataset or billed as results. - Rich details can include image galleries, contributor attribution, review links, descriptions, accessibility, amenities, menus, order links, and related places.