Google Maps Scraper avatar

Google Maps Scraper

Pricing

Pay per usage

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Scrape Google Maps businesses with reviews, ratings, phone numbers, websites, and opening hours. Uses hybrid architecture for speed and reliability.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Categories

Share

Extract business data from Google Maps at scale — names, addresses, phone numbers, websites, ratings, opening hours, photos, and full customer reviews.

Architecture

Two-phase hybrid approach:

  1. Playwright search — opens Google Maps, extracts all results from APP_INITIALIZATION_STATE[3] (embedded protobuf-over-JSON, ~270KB per search)
  2. HTTP RPC — uses curl_cffi with TLS fingerprint impersonation to fetch details (/maps/preview/place) and reviews (/maps/rpc/listugcposts) via Google's internal endpoints. 10x faster than browser-based scraping.

Features

  • Full business profiles (name, address, phone, website, coordinates, category, price, hours, photos)
  • Customer reviews with metadata (text, rating, reviewer, photos, dining ratings, owner replies)
  • Geographic grid mode — subdivide any area into cells for complete coverage beyond the 120-result limit
  • Residential proxy support with geo-targeting
  • Anti-detection: TLS fingerprint rotation, randomized delays, cookie reuse from browser sessions

Input

ParameterTypeDefaultDescription
searchQuerystringrequiredWhat to search (e.g. "restaurants in Tokyo")
maxResultsinteger100Max places to scrape (1-10000)
includeReviewsbooleantrueScrape customer reviews
maxReviewsPerPlaceinteger10Max reviews per place (0 = unlimited)
languagestring"en"Language code (en, ja, de, fr...)
countrystring""Proxy country code (US, JP, DE). Empty = no proxy
gridBboxstring""Bounding box: "min_lat,min_lng,max_lat,max_lng"
gridCellSizeKmnumber1.0Grid cell size in km (0.1-10.0)

Output

{
"place_id": "0x60188b78f26a7357:0x15ec7c200a23c52a",
"name": "Matsue Sushi",
"category": "Sushi restaurant",
"address": "2-24-12 Shibuya, Tokyo",
"phone": "+81 3-6452-6338",
"website": "https://example.com",
"latitude": 35.6583,
"longitude": 139.7021,
"rating": 4.9,
"review_count": 287,
"price_level": "$$$$",
"opening_hours": ["Mon: 11AM-3PM, 5PM-11PM"],
"photos": ["https://lh3.googleusercontent.com/..."],
"reviews": [
{
"reviewer_name": "Albert Huang",
"rating": 5,
"relative_date": "a month ago",
"text": "I enjoyed the Rin course for dinner...",
"language": "en",
"meal_type": "Dinner",
"price_per_person": "¥7,000-8,000",
"food_rating": 5,
"service_rating": 5,
"atmosphere_rating": 5
}
]
}

Usage Examples

Basic search:

{"searchQuery": "Italian restaurants in Manhattan", "maxResults": 50, "includeReviews": false}

With reviews:

{"searchQuery": "coworking spaces in Berlin", "maxResults": 30, "includeReviews": true, "maxReviewsPerPlace": 20, "language": "de", "country": "DE"}

Grid mode for full coverage:

{"searchQuery": "coffee shops", "maxResults": 500, "gridBbox": "35.658,139.698,35.665,139.710", "gridCellSizeKm": 0.5}

Cost

ScenarioPlacesReviewsEst. Cost
Basic, no reviews200~$0.05
With reviews5010/place~$0.30
Grid mode2005/place~$1.00

Limitations

  • Single search returns 20-60 results. Use grid mode for more.
  • Google may rate-limit heavy usage. Built-in delays help, but very large runs may need proxies.
  • Protobuf-over-JSON structure can change without notice.

Need to verify these businesses? Try Global Company Search — check company registration across 40+ country registries.