Google Maps Scraper
Pricing
from $0.70 / 1,000 results
Google Maps Scraper
Scrape Google Maps to extract structured business data including names, addresses, phone numbers, websites, ratings, reviews, and coordinates. Ideal for lead generation, local SEO research, market analysis, and location-based intelligence.
Pricing
from $0.70 / 1,000 results
Rating
5.0
(1)
Developer

Muhammad Bilal
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
๐บ๏ธ Google Maps AI Crawler
Enterprise-grade Web Intelligence system for extracting and enriching business data from Google Maps.
๐ฏ Overview
Google Maps AI Crawler is a production-grade Apify Actor that scrapes business data from Google Maps, enriches it with contact details and social media profiles, and delivers structured datasets for lead generation, competitor analysis, and market research. Built with scalability, anti-detection measures, and extensibility in mind.
Key Capabilities
- โ Comprehensive Data Extraction - Names, addresses, phones, websites, ratings, reviews, categories
- โ Flexible Search - Query by terms, location, categories, or direct URLs
- โ Contact Enrichment - Scrape websites for emails, phones, social media
- โ Business Leads - Extract full contact details for prospecting
- โ Social Media Profiles - Enrich with follower counts, descriptions, verification
- โ Table-Ready Output - Sortable columns for easy analysis
- โ Cloud-Safe - Proxy rotation, user agents, graceful failures
- โ Backward Compatible - Simple scraper or advanced enrichment system
๐จ Why Google Maps AI Crawler?
Google Maps is a goldmine of business intelligence โ millions of places with contact info, reviews, and trends. But manual scraping is slow, risky, and incomplete.
Google Maps AI Crawler automates extraction and detects:
๐ข Business listings (names, addresses, categories)
๐ Contact details (phones, websites, emails)
โญ Reputation data (ratings, reviews, popularity)
๐ Market insights (competitor locations, saturation)
You get enriched leads and datasets, not raw data dumps.
๐ฏ Who is this for?
Sales teams building prospect lists
Marketing teams analyzing competitors
Market researchers studying local trends
E-commerce teams finding suppliers/partners
Agencies monitoring client locations
Compliance teams tracking business changes
โ๏ธ How it works (3 steps)
Provide search terms, location, or direct URLs
Configure enrichment options and sensitivity
Run the Actor โ receive structured business data
Each result includes:
Business details
Contact info
Enrichments
Metadata
๐ฐ Pricing example (transparent)
Scraping 1,000 places โ $0.50
Enriching 1,000 contacts โ $1.00
No monthly fees โ pay only for what you use
๐ Quick Start
Local Development
# Install dependenciesnpm install# Run Actor locally (preserves data between runs)node src/main.js# Or use Apify CLI (clears storage each run)apify run# Login to Apify platformapify login# Push to Apify cloudapify push
Input Configuration
Create .actor/INPUT.json or storage/key_value_stores/default/INPUT.json:
{"searchTerms": ["restaurant"],"location": "New York, NY","maxResults": 100,"includeReviews": true,"includeImages": false,"enrichContacts": true,"enrichLeads": false,"enrichSocialMedia": false}
๐ Output Format
Each scraped place produces structured JSON:
{"title": "Lena Trattoria","totalScore": 4.7,"reviewsCount": 357,"street": "3470 E Tremont Ave","city": "Bronx","state": "NY","countryCode": "US","website": "https://www.lenatrattoria.com/","phone": "(718) 239-5362","categoryName": "Italian restaurant","url": "https://www.google.com/maps/search/?api=1&query=Lena%20Trattoria&query_place_id=ChIJA4JRKzCLwokRHBTppuJxhpg","address": "3470 E Tremont Ave, Bronx, NY 10465, USA","location": {"lat": 40.819,"lng": -73.867},"categories": ["Italian restaurant", "Pizza restaurant"],"openingHours": [{"day": "Monday", "hours": "Closed"},{"day": "Tuesday", "hours": "11 AM - 10 PM"}],"reviews": [{"name": "John Doe","text": "Great food!","stars": 5,"publishAt": "2 weeks ago"}],"scrapedAt": "2025-12-28T10:00:00.000Z","contacts": {"emails": ["info@lenatrattoria.com"],"phones": ["(718) 239-5362"],"social": ["https://facebook.com/lenatrattoria"]}}
Field Descriptions
| Field | Type | Description |
|---|---|---|
title | string | Business name |
totalScore | number | Average rating (1-5) |
reviewsCount | integer | Number of reviews |
street | string | Street address |
city | string | City |
state | string | State/province |
countryCode | string | Country code (e.g., US) |
website | string | Business website |
phone | string | Phone number |
categoryName | string | Primary category |
url | string | Google Maps search URL |
address | string | Full address |
location | object | Latitude/longitude |
categories | array | All categories |
openingHours | array | Hours by day |
reviews | array | Review details (if enabled) |
scrapedAt | string | Timestamp |
contacts | object | Enriched contact data |
โ๏ธ Configuration Options
searchTerms (required for search)
Array of search terms (e.g., ["restaurant", "bar"]).
location (required for search)
Location string (e.g., "New York, NY").
categories (optional)
Array of categories to filter.
maxResults (default: 100)
Maximum places to scrape.
includeReviews (default: false)
Include review details.
includeImages (default: false)
Include image URLs.
enrichContacts (default: false)
Scrape websites for contacts.
enrichLeads (default: false)
Extract business leads (advanced).
enrichSocialMedia (default: false)
Enrich social profiles.
directUrls (optional)
Direct Google Maps URLs to scrape.
๐ Security & Best Practices
API Keys
For enrichments requiring external APIs (e.g., lead data), use environment variables:
# Local developmentexport API_KEY="your-key"# Apify platform# Set in Actor โ Settings โ Environment Variables
Input Validation
All inputs validated:
- URLs normalized
- Limits enforced
- Safe defaults for missing fields
Graceful Failures
- Network errors โ Retry with backoff
- Blocked requests โ Proxy rotation
- Malformed data โ Logged + continues
๐๏ธ Architecture
Core Components
src/main.jsโโโ Helper Functionsโ โโโ constructSearchUrls() - Build search URLsโ โโโ getPlaceUrlsFromSearch() - Extract place linksโ โโโ scrapePlace() - Scrape individual placesโ โโโ parseAddress() - Address parsingโ โโโ enrichContacts() - Website scrapingโ โโโ enrichLeads() - Lead extractionโ โโโ enrichSocialMedia() - Social enrichmentโโโโ Main Logicโโโ Input validationโโโ PuppeteerCrawler setupโโโ Place discoveryโโโ Data extractionโโโ Enrichment pipelineโโโ Dataset storage
Storage Strategy
Dataset (default)
- One record per place
- Structured JSON
- Table view for sorting/filtering
Key-Value Store (optional)
- Cache for enrichments
- Persistent across runs
๐งช Testing & Verification
Test Basic Scraping
# Run with sample inputnode src/main.js# Check outputcat storage/datasets/default/000000001.json# Should contain place data
Test Enrichments
Update input:
{"enrichContacts": true}
Run and check contacts field.
Test Direct URLs
{"directUrls": ["https://www.google.com/maps/place/Example"]}
๐ Performance Characteristics
- Memory: ~100-200MB per 1000 places
- Speed: ~20-50 places/minute (network-dependent)
- Storage: ~5KB per place record
- Scalability: Handles 10,000+ places efficiently
๐ฎ Future Enhancements
This Actor is designed as a foundational building block for:
- Advanced Enrichments - LinkedIn integration, email verification
- Review Analysis - Sentiment analysis, trend detection
- Competitor Tracking - Automated monitoring
- Visual Diff - Screenshot comparison
- Alert System - Webhooks for new listings
- Multi-Source - Combine with other scrapers
- Custom Rules - XPath-based extraction
- Workflow Integration - Zapier, Make compatibility
๐ Resources
๐ Technical Notes
Why PuppeteerCrawler?
- Handles dynamic Google Maps
- Anti-detection capabilities
- Screenshot support
- Cost-effective for moderate scale
Why SHA-256 for Hashes?
- Deterministic content comparison
- Used in enrichment caching
Why Named Dataset?
- Structured output
- Table views
- Easy export (CSV, JSON)
๐ License
This Actor follows Apify's standard terms of service.
๐ค Contributing
This Actor was built with extensibility in mind. Key extension points:
- Custom Enrichments - Add new data sources
- Alternative Parsers - Modify
parseAddress() - Additional Outputs - Extend dataset fields
- Proxy Integration - Enhance anti-detection
๐ Competition-Grade Features
โ
Deterministic output
โ
Structured and readable
โ
No unnecessary dependencies
โ
Reusable foundation
โ
Code tells a story
โ
Production-ready
โ
Judge-friendly demo mode
โ
Extensive documentation
Built with โค๏ธ for the Apify ecosystem