Google Maps Scraper
Pricing
from $2.10 / 1,000 results
Google Maps Scraper
Powerful Apify Actor that extracts business information from Google Maps. Get names, ratings, reviews, contact details, websites, and addresses for any business type in any location worldwide.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer
No-Code Venture
Maintained by CommunityActor stats
1
Bookmarked
23
Total users
2
Monthly active users
19 days ago
Last modified
Categories
Share
Google Maps Data Extractor
Powerful Apify Actor that extracts business information from Google Maps. Get names, ratings, reviews, contact details, websites, and addresses for any business type in any location worldwide.
Pricing Model — Pay Per Event
This Actor uses Pay Per Event (PPE) pricing. You are charged only for the work actually performed — not a flat rental fee. Charges fire in real time as each action completes:
| What you pay for | When |
|---|---|
| Proxy usage | Once per run, if a proxy is configured |
| Per-record proxy surcharge | Each business record saved, when proxy is enabled |
| Website extraction | Each business whose website is visited for enrichment |
| Review extraction | Each individual review extracted |
| Review debug screenshot | Each screenshot captured during review extraction (when enabled) |
| Contact page follow | Each business whose contact page is visited |
| Finish screenshot | Each location where a finish screenshot is saved |
| Debug screenshot | Each error screenshot captured |
Your run stops automatically when it reaches your configured spending limit — no surprises. Partial results collected up to that point are always saved to the dataset.
What It Does
This tool searches Google Maps for businesses matching your criteria and extracts their public information. Whether you need data on restaurants in Tokyo, plumbers in London, or hotels in New York — this extractor handles it all.
Key Capabilities:
- Search any business category (restaurants, hotels, dentists, gyms, etc.)
- Target multiple locations in a single run with parallel processing
- Extract contact information (phone, website, address)
- Capture ratings and review counts
- Get business hours and status
- Optional deep extraction for complete data
- Concurrent browser sessions for faster multi-location scraping
Output Fields
| Field | Description | Availability |
|---|---|---|
name | Business name | Always |
url | Google Maps link | Always |
placename | Location searched (from input) | Always |
rating | Star rating (1-5) | Usually |
reviewCount | Number of reviews | Usually |
category | Business type | Usually |
address | Full street address | With details |
phone | Contact number | With details |
website | Business website | With details |
hoursStatus | Open/closed status | With details |
priceLevel | Price indicator | When available |
scrapedAt | Extraction timestamp | Always |
enrichment | Emails, social links, contact page | With enrichment |
quality_score | Data completeness score (0-1) | With enrichment |
Sample Output
{"name": "The Coffee House","url": "https://www.google.com/maps/place/...","placename": "New York, NY","rating": 4.7,"reviewCount": 892,"category": "Coffee shop","address": "123 Main Street, New York, NY 10001","phone": "+1 212-555-0123","website": "https://thecoffeehouse.com","hoursStatus": "Open · Closes 9 PM","scrapedAt": "2025-12-02T10:30:00.000Z"}
Sample Output with Enrichment
{"name": "The Coffee House","url": "https://www.google.com/maps/place/...","placename": "New York, NY","rating": 4.7,"reviewCount": 892,"category": "Coffee shop","address": "123 Main Street, New York, NY 10001","phone": "+1 212-555-0123","website": "https://thecoffeehouse.com","hoursStatus": "Open · Closes 9 PM","scrapedAt": "2025-12-02T10:30:00.000Z","enrichment": {"contact_page_url": "https://thecoffeehouse.com/contact","emails_found": ["info@thecoffeehouse.com", "orders@thecoffeehouse.com"],"social": {"facebook": "https://facebook.com/thecoffeehouse","instagram": "https://instagram.com/thecoffeehouse","twitter": "https://twitter.com/thecoffeehouse"}},"quality_score": 0.9}
Input Configuration
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
searchQuery | string | Yes | — | Business type to find (e.g., "dentists", "pizza") |
location | array | No | — | List of locations to search (e.g., ["Chicago, IL", "New York, NY"]) |
maxResults | integer | No | 100 | How many businesses to extract per location (0 = no limit) |
browserConcurrency | integer | No | 1 | Number of parallel browser sessions (1-30). Higher = faster for multiple locations |
scrapeDetails | boolean | No | false | Visit each listing for full details |
proxyConfiguration | object | No | Residential | Proxy settings |
minDelay | integer | No | 1 | Min seconds between requests |
maxDelay | integer | No | 3 | Max seconds between requests |
debugScreenshots | boolean | No | false | Capture screenshots on errors for debugging |
Filtering Options
| Parameter | Type | Default | Description |
|---|---|---|---|
skipSponsored | boolean | false | Skip all sponsored/ad listings, only return organic results |
skipWithWebsite | boolean | false | Only return listings WITHOUT a website (for lead generation) |
skipWithPhone | boolean | false | Only return listings WITHOUT a phone number |
skipWithoutContact | boolean | false | Skip listings that have neither phone nor email |
Website Enrichment (B2B Lead Generation)
| Parameter | Type | Default | Description |
|---|---|---|---|
enrichWebsiteData | boolean | false | Visit business websites to extract emails, social links, and contact pages |
followContactPage | boolean | true | Also scrape contact pages for additional email addresses |
Note: Website enrichment requires residential proxies for reliable results. Business websites often block datacenter IPs.
Usage Examples
Find Restaurants in a City
{"searchQuery": "restaurants","location": ["San Francisco, CA"],"maxResults": 50}
Get Complete Hotel Information
{"searchQuery": "hotels","location": ["Miami Beach, FL"],"maxResults": 30,"scrapeDetails": true}
Extract Local Service Providers
{"searchQuery": "plumbers","location": ["Austin, TX"],"maxResults": 100,"scrapeDetails": true}
Multi-Location Search with Parallel Processing
Search multiple cities simultaneously using concurrent browser sessions:
{"searchQuery": "dentists","location": ["Chicago, IL","Houston, TX","Phoenix, AZ","Philadelphia, PA","San Antonio, TX"],"maxResults": 50,"browserConcurrency": 5,"scrapeDetails": true}
This runs 5 browser sessions in parallel, each scraping a different city. With browserConcurrency: 5, all 5 locations are processed simultaneously instead of one-by-one.
International Search
{"searchQuery": "sushi restaurants","location": ["Tokyo, Japan"],"maxResults": 40,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Lead Generation (Businesses Without Websites)
{"searchQuery": "cleaning services","location": ["Amsterdam, Netherlands"],"maxResults": 50,"skipSponsored": true,"skipWithWebsite": true,"skipWithoutContact": true}
B2B Lead Generation with Enrichment (Emails & Social Links)
{"searchQuery": "plumber","location": ["Paris, France", "Lyon, France", "Marseille, France"],"maxResults": 50,"browserConcurrency": 3,"enrichWebsiteData": true,"followContactPage": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
This extracts emails, social media links (Facebook, Instagram, LinkedIn, Twitter/X), and contact page URLs from each business website across all 3 French cities in parallel.
Practical Applications
Lead Generation Find potential customers or partners in specific industries and locations. Extract contact details for outreach campaigns.
Market Research Analyze business density, ratings distribution, and competitive landscape in target markets.
Competitor Analysis Monitor competitors' ratings, review counts, and presence across different locations.
Location Intelligence Map out business distribution for site selection, franchise planning, or market entry decisions.
Data Enrichment Supplement existing business databases with current contact information and ratings.
Running the Extractor
On Apify Platform
- Go to Apify Console
- Create new Actor from this source
- Build the Actor
- Set your input parameters
- Run and download results
Local Development
npm install# Set your Apify token for proxy accessexport APIFY_TOKEN=your_token# Create input.json with your parametersnpm start
Performance Tips
Multi-Location Concurrency
When scraping multiple locations, use browserConcurrency to run parallel browser sessions:
| Locations | browserConcurrency | Behavior |
|---|---|---|
| 1 | 1 | Single browser, single location |
| 10 | 1 | Sequential: 10 locations one after another |
| 10 | 5 | Parallel: 2 batches of 5 locations each |
| 10 | 10 | All 10 locations simultaneously |
⚠️ Memory considerations: Each browser uses ~500-800 MB RAM.
| Concurrency | Recommended Memory |
|---|---|
| 1-5 browsers | 4 GB |
| 6-10 browsers | 8 GB |
| 11-20 browsers | 16 GB |
| 21-30 browsers | 32 GB |
Speed vs. Completeness
scrapeDetails: false— Fast extraction, basic data only (website will be blank)scrapeDetails: true— Gets phone, website, full address (clicks each listing to open sidebar)
Proxy Options
- Datacenter proxies — Cheapest option, works for basic Google Maps searches but may trigger bot detection
- Residential proxies — More reliable for large-scale extraction, strongly recommended
- Residential proxies required — When using
enrichWebsiteData(business websites often block datacenter IPs) - Keep delays at 1-3 seconds (default)
- Start with smaller batches to test
⚠️ Important: Without residential proxies, Google Maps may detect unusual activity and block requests. This commonly causes:
- Reviews failing to load or being empty
- CAPTCHA challenges appearing
- Incomplete or missing business data
- Requests timing out
For reliable review extraction, always use residential proxies.
Cost Optimization
Because this Actor uses Pay Per Event pricing, you only pay for what you use. The optional features below each add their own charges — enable only what you need.
Reduce charges by disabling optional features
| Feature | Input flag | Adds charges for |
|---|---|---|
| Website enrichment | enrichWebsiteData | Every business with a website |
| Contact page follow | followContactPage | Every business where a contact page is visited |
| Review extraction | extractReviews | Every individual review |
| Review debug screenshots | debugReviewScreenshots | Every screenshot taken during review loading |
| Finish screenshot | captureFinishScreenshot | Every location processed |
| Debug screenshots | debugScreenshots | Every error screenshot |
Proxy and memory
Without proxy — works for many searches, uses minimum resources:
{"searchQuery": "your search","location": ["your location"],"maxResults": 100,"proxyConfiguration": { "useApifyProxy": false }}
With residential proxies — required for large-scale extraction and website enrichment:
{"searchQuery": "your search","location": ["your location"],"maxResults": 500,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Memory requirements:
| Browser concurrency | Recommended memory |
|---|---|
| 1–5 | 4 GB |
| 6–10 | 8 GB |
| 11–20 | 16 GB |
| 21–30 | 32 GB |
Why residential proxies?
- Google Maps actively detects and blocks datacenter IPs
- Residential IPs appear as regular users
- Much lower chance of CAPTCHAs or blocks
- Required for
enrichWebsiteData(business websites block datacenter IPs)
Reliability by proxy type:
| Proxy | Reliability |
|---|---|
| None | 70–80% |
| Datacenter | 80–90% |
| Residential | 95%+ |
💡 Tip: Start without proxies to test your search. If results are incomplete or you encounter blocking, switch to residential proxies.
Best Results
- Be specific with search queries ("italian restaurants" vs "food")
- Always include location for targeted results
- Use realistic
maxResultsvalues (Google Maps shows ~60-120 results per search)
Data Accuracy
From Search Results:
- Name: ~100%
- Rating: ~90%
- Review Count: ~90%
With Detail Extraction (scrapeDetails: true):
- Phone: ~70%
- Address: ~95%
- Website: ~60% (requires
scrapeDetails, otherwise blank) - Hours: ~80%
Some businesses don't list all information publicly.
Troubleshooting
No results returned?
- Verify the location exists and is spelled correctly
- Try broader search terms
- Check that businesses exist for your query in that area
Getting blocked or reviews not loading?
- Enable residential proxies (datacenter proxies are easily detected by Google)
- Increase delay settings (
minDelay: 2,maxDelay: 5) - Reduce batch size
- Google may show "unusual activity" warnings — residential proxies solve this
Missing contact details?
- Enable
scrapeDetails: true - Some businesses simply don't list this information
Technical Details
Stack: Node.js, Puppeteer, Crawlee, Apify SDK
Requirements: Node.js 18+
Concurrency: Supports 1-30 parallel browser sessions for multi-location scraping. Each location gets a fresh, isolated browser instance.
Rate Limiting: Single request per browser (safest for Google Maps). Multiple browsers can run in parallel.
Proxy: Residential proxies strongly recommended
Disclaimer
This project is not affiliated with, endorsed by, or sponsored by Google. Google Maps is a trademark of Google LLC.
This tool extracts publicly available information from Google Maps. Users are responsible for:
- Complying with Google's Terms of Service
- Following applicable data protection laws (GDPR, CCPA, etc.)
- Using extracted data ethically and legally
Support
Having issues? Check:
- Input parameters are valid
- Proxy configuration is correct
- Search returns results when done manually
- Actor logs for specific errors