Google Maps Search & Directions Scraper avatar

Google Maps Search & Directions Scraper

Pricing

from $2.00 / 1,000 scraped results

Go to Apify Store
Google Maps Search & Directions Scraper

Google Maps Search & Directions Scraper

Extract Google Maps places data + calculate routes with live traffic — in a single lightweight Actor run.

Pricing

from $2.00 / 1,000 scraped results

Rating

0.0

(0)

Developer

REXREUS D.O

REXREUS D.O

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Google Maps Search & Directions Scraper

Ultra-fast HTTP-first Google Maps scraper for places and route directions

Extract Google Maps places data + calculate routes with live traffic — in a single lightweight Actor run.

Pure HTTP · No Browser · 256 MB RAM · Sub-second per query · Pay-Per-Result

Quick Start Apify Node.js


🗺️ Why this Actor?

FeatureWhat you get
Dual-Mode OperationExtract places and calculate routes in one unified run — no glue code, no webhook juggling
Zero Browser OverheadPure HTTP requests to Google Maps internal JSON endpoints — no Playwright, no Chrome, no 4GB RAM penalty
Ultra-Low Compute Cost~0.002 CU per 1,000 places vs 0.5–2.0 CU for browser-based scrapers — 50× cheaper
Places SearchName, PlaceID, address, coordinates, phone, website, rating, review count, hours, category
Directions & TrafficDistance, duration, duration in traffic, turn-by-turn navigation steps, Google Encoded Polyline
Multi-Waypoint RoutingUp to 25 intermediate stops per route — perfect for delivery optimization
All Travel ModesDriving, walking, bicycling, and transit
Route AvoidanceOptionally avoid tolls and highways
Transparent PricingFlat $2.50 / 1,000 results — no filter surcharges, no CU penalties, no setup fees
Smart Proxy TieringDatacenter default → automatic Residential fallback on rate limits
256 MB RAMNo browser overhead; runs in 256 MB containers with headroom to spare

⚡ Quick start

  1. Open this Actor on the Apify Console and click Start.
  2. Choose your mode: Places, Directions, or Both.
  3. For Places mode — paste search queries:
{
"mode": "places",
"searchQueries": ["coffee shops in Manhattan, New York"],
"maxItemsPerQuery": 20,
"language": "en",
"country": "us"
}
  1. For Directions mode — provide origin and destination:
{
"mode": "directions",
"origin": "Empire State Building, New York",
"destination": "Times Square, New York",
"travelMode": "driving"
}
  1. Click Start and download results as JSON, CSV, or Excel.

🔧 How it works

User Input → Places Search Request → Google Maps HTTP Endpoint
↓ ↓ ↓
searchQueries maxItemsPerQuery /search?tbm=map&pb=...
↓ ↓ ↓
origin destination /maps/preview/directions?pb=...
↓ ↓
Strip )]}'\n prefix → JSON.parse() → Clean Dataset

The Actor communicates directly with Google Maps' internal JSON/Protobuf RPC endpoints — no headless browser, no DOM parsing, no WebGL, no fingerprint battles. Data is extracted from structured JSON arrays and normalized through strict whitelist domain projections.


📥 Input

{
"mode": "places",
"searchQueries": ["Italian restaurants in Chicago"],
"maxItemsPerQuery": 100,
"locationBias": { "lat": 41.8781, "lng": -87.6298, "zoom": 13 }
}

Full Example — Directions with Waypoints

{
"mode": "directions",
"origin": "O'Hare International Airport, Chicago",
"destination": "Millennium Park, Chicago",
"waypoints": ["Willis Tower, Chicago"],
"travelMode": "driving",
"avoidTolls": true,
"language": "en",
"country": "us"
}

Input Fields

FieldTypeRequiredDefaultDescription
modestring✅placesplaces, directions, or both
searchQueriesstring[]for places—Place search queries (max 1,000 per run)
maxItemsPerQueryinteger❌20Max results per query (1–500)
locationBiasobject❌—{ lat, lng, zoom } to center viewport
originstringfor directions—Route starting point
destinationstringfor directions—Route ending point
waypointsstring[]❌[]Intermediate stops (max 25)
travelModestring❌drivingdriving, walking, bicycling, transit
avoidTollsboolean❌falseAvoid toll roads
avoidHighwaysboolean❌falseAvoid highways
languagestring❌enLanguage code for results
countrystring❌usCountry code for regional bias
proxyConfigurationobject❌Apify ProxyProxy settings

📤 Output

Places Record Example

{
"searchQuery": "coffee shops in Manhattan, New York",
"placeId": "ChIJfbedxbZZwokRpbnR5BBdz1c",
"title": "787 Coffee",
"category": "Coffee shop",
"address": "245 W 46th St, New York, NY 10036",
"location": { "lat": 40.7597441, "lng": -73.9875048 },
"phone": "(646) 596-7178",
"website": "https://www.787coffee.com/",
"rating": 4.9,
"reviewsCount": 3673,
"openingHours": ["Monday: 7:00 AM – 9:00 PM", "Tuesday: 7:00 AM – 9:00 PM"],
"priceLevel": "$$",
"url": "https://www.google.com/maps/place/?q=place_id:ChIJfbedxbZZwokRpbnR5BBdz1c",
"scrapedAt": "2026-10-14T09:00:00.000Z"
}

Directions Record Example

{
"origin": "Empire State Building, New York",
"destination": "Times Square, New York",
"waypoints": [],
"travelMode": "driving",
"distanceMeters": 1219,
"distanceText": "0.8 mile",
"durationSeconds": 393,
"durationText": "7 min",
"durationInTrafficSeconds": 365,
"durationInTrafficText": "6 min",
"trafficCondition": "Fastest route, despite the usual traffic",
"polyline": "yvvwFjtubMaAcBiAmB...",
"steps": [
{
"instruction": "Head north on 5th Ave toward W 34th St",
"distanceMeters": 182,
"durationSeconds": 55
}
],
"warnings": [],
"scrapedAt": "2026-10-14T09:00:00.000Z"
}

Output Fields

FieldTypeDescription
searchQuery / originstringSource query or route start
placeIdstringGoogle Place ID
titlestringBusiness or place name
categorystringPrimary business category
addressstringFull formatted address
locationobject{ lat, lng } coordinates
phonestringBusiness phone number
websitestringBusiness website URL
ratingnumberAggregate star rating (0–5)
reviewsCountintegerTotal number of reviews
openingHoursstring[]Daily hours array
distanceTextstringHuman-readable distance
durationTextstringHuman-readable travel time
durationInTrafficTextstringReal-time traffic duration
polylinestringGoogle Encoded Polyline (route shape)
stepsobject[]Turn-by-turn navigation steps

💰 Cost, limits, proxy

MetricValue
Pricing$2.50 per 1,000 items / routes
Memory256 MB (minimal container)
Runtime / 1,000 places~30 seconds
Runtime / 1,000 routes~75 seconds
Compute Units / 1,000 places< 0.003 CU
ProxyApify Datacenter (default) → Residential (auto-escalation on 429)
Max items per query500
Max waypoints25 per route
Max queries per run1,000

📋 Recipes

1. B2B Lead Prospecting — Coffee Shops in NYC

{
"mode": "places",
"searchQueries": [
"coffee shops in Manhattan",
"coffee shops in Brooklyn"
],
"maxItemsPerQuery": 100
}

2. Field Sales Route Optimization

{
"mode": "directions",
"origin": "Madison Square Garden, New York",
"destination": "JFK Airport, Queens",
"waypoints": ["Brooklyn Bridge", "Red Hook, Brooklyn"],
"travelMode": "driving",
"avoidTolls": false
}

3. Unified Pipeline — Find Plumbers + Calculate Delivery Routes

{
"mode": "both",
"searchQueries": ["plumbing supplies in Chicago"],
"maxItemsPerQuery": 20,
"origin": "My Warehouse, Chicago",
"destination": "Downtown Chicago",
"travelMode": "driving"
}

🔍 Troubleshooting

SymptomCauseFix
Empty datasetRate-limited by GoogleReduce concurrency; enable Residential proxies
Results in wrong languagelanguage/country mismatchSet "language": "en" and "country": "us" explicitly
Missing phone/websiteNot publicly listed on Google MapsNormal — these fields are null when unavailable
Route not foundInvalid location namesUse full address format or "lat,lng" coordinate string
Direction duration mismatchTraffic data unavailable at query timeTry again — traffic data is real-time

❓ FAQ

Q: How much does this Actor cost to run? A: Flat $2.50 per 1,000 places or routes. No filter taxes, no detail penalties, no CU surprises. A 10,000-place scrape costs approximately $25.

Q: Is this faster than other Google Maps scrapers? A: Yes. By skipping headless browsers and using direct HTTP endpoints, this Actor processes queries 10–50× faster with 16× less memory (256 MB vs 4 GB).

Q: Can I scrape private or unlisted locations? A: No. This Actor only accesses publicly visible Google Maps business listings and routing data.

Q: Does this work for any country? A: Yes. Set "language" and "country" input fields to target any Google Maps regional endpoint.

Q: Is this legal to use? A: This Actor scrapes publicly accessible data from Google Maps web interfaces. Ensure compliance with Google's Terms of Service and applicable privacy laws (GDPR, CCPA). You are responsible for how you use the extracted data.

Q: Can I republish or rebrand this Actor? A: No. This Actor is proprietary. You may run it on Apify. You may not copy, rebrand, or republish it. See ./LICENSE.


⚠️ Limitations

  • Public Google Maps data only. Private or login-protected business data is not accessible.
  • Review text and individual reviewer profiles are intentionally excluded (GDPR compliance).
  • High-volume runs on residential IP segments may trigger rate limits.
  • You are responsible for compliance with Google Maps Terms of Service and privacy laws in your jurisdiction.

🚀 Run it

Open the Actor on Apify Console and click Start.


License

Proprietary. All rights reserved. Copyright (c) 2026 REXREUS.

You may run this Actor on Apify under the terms of your Apify account. You may not copy, rebrand, republish, redistribute, or claim authorship of this Actor. See ./LICENSE.