Google Maps Places Extractor
Pricing
Pay per event
Google Maps Places Extractor
Extract Places and businesses from Google Maps. Scrap phone numbers, emails, website, business hours, address and gps, Google Place ID. Use filters to include or exclude irrelevant leads.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Enckay Data
Actor stats
0
Bookmarked
18
Total users
13
Monthly active users
2.5 hours
Issues response
6 days ago
Last modified
Categories
Share
Google Maps Lead Extractor
Advanced lead extraction from Google Maps with comprehensive business data, contact information, reviews, and 80+ additional data fields.
Features
Core Extraction
- Multi-cell area coverage - Systematic grid-based or polygon-based scraping for complete area coverage
- Contact information - Phone numbers (70-85% success) and emails (20-40% from Google, 60-80% from websites)
- Business reviews - Extract customer reviews with ratings, text, dates, and reviewer info using browser automation
- Multiple photos - Extract up to 50 photo URLs per business
Advanced Data Fields (82+ Fields)
- Amenities (82 fields) - Seating, accessibility, parking, payments, food/beverage options
- Hourly busyness (168 datapoints) - 7-day hourly traffic patterns with smart contact timing recommendations
- Price distribution - Customer spending patterns by price range with percentages
- Atmosphere - Vibe descriptors (casual, cozy, hip, upscale, etc.)
- Social media - Extract from Google profile and scrape business websites for additional links
- Lead quality scoring - Automatic scoring (0-100) and priority classification (PREMIUM/HIGH/MEDIUM/LOW)
Filtering & Export
- Filter by rating, reviews, price level, and price range
- Export to CSV or JSON
- Deduplication across search cells
Quick Start
Basic Search
{"keyword": "coffee shops","location": "Brooklyn, NY","maxResults": 50,"exportToCsv": true}
Full Feature Extraction
{"keyword": "restaurants","location": "Austin, TX","maxResults": 100,"minRating": 4.0,"minReviews": 10,"extractContactDetails": true,"extractAmenities": true,"extractBusyness": true,"extractPhotos": true,"maxPhotos": 10,"extractSocialMedia": true,"extractWebsiteEmails": true,"extractReviews": true,"maxReviewsPerBusiness": 50,"calculateLeadScore": true,"exportToCsv": true}
Input Parameters
Basic Search
| Parameter | Required | Default | Description |
|---|---|---|---|
keyword | Yes | - | Business type to search (e.g., "dentists", "coffee shops") |
location | Yes | - | City, address, or ZIP code (e.g., "Seattle, WA", "90210") |
maxResults | No | 100 | Maximum number of unique businesses to extract (1-10,000) |
Filters
| Parameter | Default | Description |
|---|---|---|
minRating | 0 | Minimum rating (0-5.0) |
minReviews | 0 | Minimum number of reviews |
filterByPriceLevel | - | Filter by price symbols (["$", "$$", "$$$", "$$$$"]) |
minPrice | 0 | Minimum price in dollars |
maxPrice | 0 | Maximum price in dollars |
Extraction Features (All Optional)
| Parameter | Default | Description |
|---|---|---|
extractContactDetails | false | Extract phone and email from Google profile |
extractAmenities | false | Extract 82 amenity fields |
extractBusyness | false | Extract 168 hourly busyness datapoints |
extractPriceDistribution | false | Extract customer spending patterns |
extractAtmosphere | false | Extract atmosphere descriptors |
extractPhotos | false | Extract multiple photo URLs |
maxPhotos | 10 | Maximum photos per business (1-50) |
extractSocialMedia | false | Extract social media from Google profile |
extractSocialMediaFromWebsite | false | Scrape website for social media links |
socialMediaPlatforms | All | Platforms to extract (facebook, instagram, twitter, linkedin, tiktok, youtube) |
extractWebsiteEmails | false | Scrape business websites for email addresses |
websiteTimeout | 5000 | Website scraping timeout in ms (1000-30000) |
websiteMaxPages | 3 | Max pages to scrape per website (1-10) |
maxEmails | 5 | Max emails to extract from website (1-20) |
calculateLeadScore | false | Calculate lead quality score (0-100) and priority |
extractReviews | false | Extract customer reviews using browser automation |
maxReviewsPerBusiness | 100 | Max reviews per business (10-500) |
Performance Settings
| Parameter | Default | Description |
|---|---|---|
concurrency | 2 | Search cells to process in parallel (1-10) |
detailsConcurrency | 10 | Concurrent business detail extractions (1-50) |
Advanced Options
| Parameter | Description |
|---|---|
customPolygon | GeoJSON Polygon/MultiPolygon for exact search boundaries |
exportToCsv | Export results as CSV (saved in key-value store as 'OUTPUT') |
Output Format
Complete Dataset Structure
{"businessName": "Acme Coffee Roasters","placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4","address": "123 Main St, Brooklyn, NY 11201, United States","street": "123 Main St","city": "Brooklyn","state": "NY","zip": "11201","country": "United States","latitude": 40.6892,"longitude": -73.9915,"phone": "+17185551234","website": "https://acmecoffee.com","email": "info@acmecoffee.com","emailSource": "google","rating": 4.8,"reviewCount": 542,"category": "Coffee shop","priceLevel": "$$","priceRange": "$10–20","googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJN1t_tDeuEmsRUsoyG83frY4","mainPhoto": "https://lh3.googleusercontent.com/...","businessHours": {"Monday": "7:00 AM – 7:00 PM","Tuesday": "7:00 AM – 7:00 PM","Wednesday": "7:00 AM – 7:00 PM","Thursday": "7:00 AM – 7:00 PM","Friday": "7:00 AM – 8:00 PM","Saturday": "8:00 AM – 8:00 PM","Sunday": "8:00 AM – 6:00 PM"},"temporarilyClosed": false,"permanentlyClosed": false,"photos": ["https://lh3.googleusercontent.com/photo1...","https://lh3.googleusercontent.com/photo2...","https://lh3.googleusercontent.com/photo3..."],"amenities": {"dineIn": true,"takeout": true,"delivery": false,"outdoorSeating": true,"wheelchairAccessible": true,"parking": true,"wifi": true,"creditCards": true,"reservations": false,"goodForGroups": true,"goodForKids": true,"restroom": true,"petFriendly": true,"liveMusic": false,"breakfast": true,"lunch": true,"dinner": false,"coffee": true,"dessert": true,"alcohol": false},"amenitiesSummary": {"total": 82,"available": 15,"categories": {"dining": 8,"accessibility": 3,"amenities": 4}},"busyness": {"Monday": [0, 0, 0, 0, 0, 0, 15, 35, 60, 75, 80, 70, 65, 55, 50, 60, 70, 50, 30, 20, 10, 0, 0, 0],"Tuesday": [0, 0, 0, 0, 0, 0, 20, 40, 65, 80, 85, 75, 70, 60, 55, 65, 75, 55, 35, 25, 15, 0, 0, 0],"Wednesday": [0, 0, 0, 0, 0, 0, 20, 40, 65, 80, 85, 75, 70, 60, 55, 65, 75, 55, 35, 25, 15, 0, 0, 0],"Thursday": [0, 0, 0, 0, 0, 0, 25, 45, 70, 85, 90, 80, 75, 65, 60, 70, 80, 60, 40, 30, 20, 0, 0, 0],"Friday": [0, 0, 0, 0, 0, 0, 25, 45, 70, 85, 90, 85, 80, 70, 65, 75, 90, 80, 60, 45, 30, 0, 0, 0],"Saturday": [0, 0, 0, 0, 0, 0, 0, 30, 60, 85, 95, 90, 85, 75, 70, 80, 90, 75, 50, 35, 20, 0, 0, 0],"Sunday": [0, 0, 0, 0, 0, 0, 0, 25, 55, 80, 90, 85, 80, 70, 65, 75, 70, 50, 30, 20, 10, 0, 0, 0]},"bestContactTimes": {"leastBusy": ["Monday 6 AM", "Tuesday 6 AM", "Sunday 6 PM"],"moderatelyBusy": ["Monday 10 AM", "Tuesday 3 PM"],"recommendation": "Best times to contact: Monday 6 AM, Tuesday 6 AM, or Sunday 6 PM (least busy)"},"priceDistribution": {"under10": 15,"10to20": 65,"20to30": 15,"over30": 5},"averagePrice": "$12–18","atmosphere": ["casual", "cozy", "trendy", "hip"],"socialMedia": {"facebook": "https://facebook.com/acmecoffee","instagram": "https://instagram.com/acmecoffee","twitter": "https://twitter.com/acmecoffee"},"socialMediaSources": {"facebook": "google","instagram": "website","twitter": "website"},"websiteEmails": ["contact@acmecoffee.com", "info@acmecoffee.com"],"allEmails": ["info@acmecoffee.com", "contact@acmecoffee.com"],"emailsSource": "website","reviews": [{"reviewId": "ChZDSUhNMG9nS0VJQ0FnSUQ3...","rating": 5,"text": "Amazing coffee and friendly staff! The atmosphere is perfect for working or meeting friends.","publishedAt": "2025-10-15","publishedAtDate": 1729036800000,"reviewerName": "Jane Smith","reviewerPhotoUrl": "https://lh3.googleusercontent.com/...","reviewerTotalReviews": 42,"reviewerIsLocalGuide": true,"ownerResponse": {"text": "Thank you for your kind words!","publishedAt": "2025-10-16"}}],"leadScore": 87,"leadPriority": "PREMIUM"}
Field Descriptions
Basic Information
| Field | Type | Description |
|---|---|---|
businessName | string | Business name |
placeId | string | Google Place ID (unique identifier) |
category | string | Primary business category |
Location
| Field | Type | Description |
|---|---|---|
address | string | Full formatted address |
street | string | Street address |
city | string | City name |
state | string | State/province code |
zip | string | ZIP/postal code |
country | string | Country name |
latitude | number | GPS latitude |
longitude | number | GPS longitude |
googleMapsUrl | string | Direct link to Google Maps |
Contact Information
| Field | Type | Description |
|---|---|---|
phone | string | Phone number (from Google profile) |
website | string | Official website URL |
email | string | Primary email (from Google profile) |
emailSource | string | Source: google, website, or not_found |
websiteEmails | array | Emails extracted from website scraping |
allEmails | array | All unique emails (Google + website) |
Ratings & Reviews
| Field | Type | Description |
|---|---|---|
rating | number | Average rating (0-5.0) |
reviewCount | number | Total number of reviews |
reviews | array | Customer reviews (if extractReviews: true) |
Pricing
| Field | Type | Description |
|---|---|---|
priceLevel | string | Price level symbols ($, $$, $$$, $$$$) |
priceRange | string | Price range (e.g., "$10-20") |
priceDistribution | object | Spending patterns by price range |
averagePrice | string | Calculated average price |
Photos
| Field | Type | Description |
|---|---|---|
mainPhoto | string | Primary business photo (always included) |
photos | array | Additional photo URLs (if extractPhotos: true) |
Hours & Status
| Field | Type | Description |
|---|---|---|
businessHours | object | Operating hours by day of week (e.g., {"Monday": "9:00 AM – 5:00 PM"}) - May include multiple time windows per day (e.g., "10 AM-2 PM, 6 PM-10 PM") |
temporarilyClosed | boolean | Whether the business is temporarily closed |
permanentlyClosed | boolean | Whether the business is permanently closed |
Amenities (82 fields)
| Field | Type | Description |
|---|---|---|
amenities | object | 82 boolean fields for business amenities |
amenitiesSummary | object | Summary statistics for amenities |
Amenity categories include:
- Dining: dineIn, takeout, delivery, curbsidePickup, breakfast, lunch, dinner, dessert, coffee
- Accessibility: wheelchairAccessible, wheelchairAccessibleEntrance, wheelchairAccessibleParking, wheelchairAccessibleRestroom, wheelchairAccessibleSeating
- Seating: outdoorSeating, indoorSeating, bar, highChairs
- Parking: parking, paidParking, freeParking, streetParking, garagePark, valetParking
- Payments: creditCards, debitCards, nfcMobilePayments, cashOnly
- Services: wifi, restroom, petFriendly, goodForKids, goodForGroups, reservations, waitlist, liveMusic, karaoke
- Food/Beverage: alcohol, beer, wine, cocktails, happyHour, lateNightFood, healthyOptions, vegetarianOptions, veganOptions
- And 40+ more...
Busyness Patterns
| Field | Type | Description |
|---|---|---|
busyness | object | 7-day hourly traffic (168 datapoints, 0-100 scale) |
bestContactTimes | object | AI-recommended contact times based on traffic |
Atmosphere
| Field | Type | Description |
|---|---|---|
atmosphere | array | Vibe descriptors (casual, cozy, romantic, trendy, upscale, etc.) |
Social Media
| Field | Type | Description |
|---|---|---|
socialMedia | object | Social media profile URLs by platform |
socialMediaSources | object | Source for each platform (google or website) |
Supported platforms: Facebook, Instagram, Twitter, LinkedIn, TikTok, YouTube
Lead Scoring
| Field | Type | Description |
|---|---|---|
leadScore | number | Quality score 0-100 (higher = better quality lead) |
leadPriority | string | Priority classification: PREMIUM, HIGH, MEDIUM, LOW |
Scoring factors:
- Rating (weight: 25%)
- Review count (weight: 20%)
- Contact completeness - phone, email, website (weight: 30%)
- Social media presence (weight: 15%)
- Data richness - amenities, photos, hours (weight: 10%)
Reviews (if enabled)
| Field | Type | Description |
|---|---|---|
reviewId | string | Unique review identifier |
rating | number | Review rating (1-5) |
text | string | Review text content |
publishedAt | string | Publication date (YYYY-MM-DD) |
publishedAtDate | number | Unix timestamp |
reviewerName | string | Reviewer display name |
reviewerPhotoUrl | string | Reviewer profile photo URL |
reviewerTotalReviews | number | Total reviews by this reviewer |
reviewerIsLocalGuide | boolean | Whether reviewer is a Google Local Guide |
ownerResponse | object | Owner's response (if any) with text and date |
CSV Export
When exportToCsv: true, results are saved to the Key-Value Store as OUTPUT.csv with all extracted fields flattened.
Note: Complex fields (amenities, busyness, reviews, photos, etc.) are JSON-stringified in CSV format.
Performance
Factors Affecting Speed
- Number of enabled features
- Website scraping (adds time per business)
- Review extraction (adds time per business depending on
maxReviewsPerBusiness) - Concurrency settings
- Rate limiting
- Total number of businesses to extract
Success Rates
- Phone numbers: 70-85% (from Google profile)
- Emails from Google: 20-40%
- Emails from websites: 60-80% (when website is accessible)
- Amenities: 90-95% (varies by business category)
- Busyness data: 60-70% (not all businesses provide this)
- Social media: 40-60% (Google), 70-80% (Google + website scraping)
- Reviews: 95-100% (limited by
maxReviewsPerBusiness)
Use Cases
Lead Generation
- Extract contact information for cold outreach
- Calculate lead quality scores to prioritize prospects
- Find businesses with specific amenities (e.g., "pet-friendly coffee shops")
Market Research
- Analyze competitor pricing and amenities
- Study customer reviews and sentiment
- Map business density in specific areas
Business Intelligence
- Identify optimal contact times using busyness patterns
- Track social media presence across competitors
- Monitor review trends and ratings
Data Enrichment
- Enhance existing CRM data with additional fields
- Verify and update contact information
- Add social media profiles and photos
Pricing Model
This actor uses pay-per-event pricing for transparent, usage-based billing. You only pay for the specific features and data you extract.
Event Types
- Core: Actor start, place scraped
- Filters: Per filter per place (rating, reviews, price)
- Features: Contact info, amenities, busyness, photos, social media (per place)
- Website Scraping: Only charged on successful extraction
- Reviews: Per review extracted (structure ready, pricing TBD)
See Apify Console for current pricing details.
Advanced Features
Custom Polygon Search
Define exact search boundaries using GeoJSON:
{"keyword": "restaurants","customPolygon": {"type": "Polygon","coordinates": [[[-122.4, 47.6],[-122.3, 47.6],[-122.3, 47.7],[-122.4, 47.7],[-122.4, 47.6]]]},"maxResults": 500}
Multi-Cell Grid Coverage
The actor automatically divides large areas into smaller cells for complete coverage:
- Systematic grid-based scanning
- Deduplication across cells
- Progress tracking per cell
- Optimal for extracting 1,000+ businesses from large areas
Troubleshooting
No Results Found
- Verify location spelling and format
- Try broader keywords (e.g., "restaurants" instead of "Italian restaurants")
- Use full city names (e.g., "Brooklyn, New York" instead of "Brooklyn")
- Check if location is supported by Google Maps geocoding
Low Email Success Rate
- Enable
extractWebsiteEmails: trueto scrape websites (60-80% vs 20-40%) - Increase
websiteMaxPagesto 5-10 for deeper scraping - Some businesses don't publish emails publicly
CSV Not Generated
- Ensure
exportToCsv: trueis set - Check Key-Value Store (not Dataset) for
OUTPUT.csv - Large datasets may take time to generate
Slow Extraction
- Reduce
maxReviewsPerBusiness(reviews extraction add significant time) - Disable website scraping features if not needed
- Reduce
detailsConcurrencyif hitting rate limits or overwhelming Google APIs - Reduce
concurrencyto process fewer cells in parallel
Missing Amenities or Busyness
- Not all businesses provide this data
- Try different business categories (restaurants have higher success rates)
- This is normal - check
amenitiesSummaryfor availability stats
Results & Output Location
Your extracted data is saved to:
- Dataset: JSON array of all business records (default output)
- Key-Value Store (when CSV export is enabled):
OUTPUT.csv- Flattened CSV with all extracted fieldsSCRAPE_STATS- Detailed extraction statistics
The actor provides detailed progress updates in the console log including:
- Cell processing progress
- Business extraction counts
- Feature extraction statistics
- Deduplication metrics
- Pay-per-event charging summary