Advanced Google Maps scraper for business lead generation with email discovery, social media extraction, and comprehensive data enrichment. Extract business details, reviews, photos, contact info, and social profiles. Perfect for B2B sales, market research, and local SEO. Multi-language support.
🐛 Runs no longer hit the platform run timeout. Automated QA runs were being
aborted at the 300s mark and marked as failed, with an empty dataset. Three
causes, all fixed:
The actor ran with the platform's default memory allocation, which grants only
a fraction of a CPU core. Chromium was CPU-starved for the whole run (autoscaling
stayed pinned at concurrency 1), so a single consent check could take 30+ seconds.
defaultMemoryMbytes/minMemoryMbytes now request 4096 MB — one full CPU core.
The run deadline was only checked when a request started. A business page takes
tens of seconds, so one accepted a few seconds before the deadline still overran
the hard timeout. Requests are now admitted only if enough time remains to finish
them, and a hard-exit safety net abandons any wedged request before the platform
can kill the run.
Businesses were saved only after their website visit completed, so a run that
stopped early reported zero results despite having scraped many. Scraped
businesses whose enrichment never ran are now flushed to the dataset on exit.
🐛 Review extraction returned 0 reviews while still costing ~40s per business.
It slept on fixed timers and matched overly broad containers; it now waits for the
review list to actually render and reads it from the real review containers.
Changed
⚡ Blocks images, fonts and media, and navigates on domcontentloaded instead of
load — the single biggest reduction in per-page time. Photo URL extraction is
unaffected.
⚡ Cookie consent is detected with one cheap CSS query instead of probing six
selectors (including expensive :has-text() ones) on every page.
⚡ Every wait, navigation and selector timeout is now clamped to the time actually
left in the run.
🔧 maxResults prefill lowered from 10 to 5 so the console's prefilled example run
finishes comfortably.
Note
The Actor's default run timeout is a platform setting and cannot be expressed in
.actor/actor.json. See DEPLOYMENT.md — raise it in the Apify Console for large
maxResults values.
[1.0.0] - 2025-10-31
Added
🎉 Initial release of Google Maps Lead Extractor Pro
✅ Multi-query search support for batch processing
✅ Comprehensive business data extraction:
Business name, category, rating, review count
Address, phone number, website
Operating hours and Plus Code
Geolocation coordinates (latitude/longitude)
✅ Review extraction with configurable limits
✅ Email discovery from business websites
✅ Social media profile extraction (Facebook, Instagram, LinkedIn, Twitter)
✅ Photo URL extraction
✅ Multi-language support (9 languages)
✅ Configurable concurrency for performance optimization
✅ Apify proxy integration for reliability
✅ Multiple export formats (JSON, CSV, Excel)
📚 Comprehensive documentation:
README with features and use cases
DEPLOYMENT guide for Apify platform
EXAMPLES with real-world use cases
Utility functions for data processing
🛠️ Utility functions:
Lead scoring algorithm
CRM formatting (Salesforce, HubSpot, Pipedrive)
Data deduplication
Filtering and sorting helpers
Summary statistics generation
🎯 Input schema with validation
🐳 Docker configuration for Apify deployment
📊 Dataset views for result visualization
Technical Details
Built with Apify SDK v3.0
Uses Playwright for browser automation
Crawlee v3.0 for web crawling
Node.js 18+ runtime
Modular architecture for easy maintenance
Performance
~50-100 businesses per minute (basic scraping)
~30-50 businesses per minute (with email extraction)
~20-30 businesses per minute (with reviews + emails)
Configurable concurrency (1-20 parallel browsers)
Known Limitations
Email extraction success depends on website accessibility
Some websites may block automated access
Google Maps may rate-limit requests without proxies
Review extraction limited to visible reviews on page