Pricing
from $0.10 / 1,000 results
Google Maps Business Scraper
Extract business listings from Google Maps β get names, ratings, reviews count, addresses, phone numbers, websites, categories, and GPS coordinates. Perfect for lead generation, market research, and local SEO analysis.
Pricing
from $0.10 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Google Maps Business Scraper v3.0
Extract 28+ data fields from Google Maps business listings β ideal for lead generation, market research, local SEO analysis, and data enrichment.
Features
- π Search by keyword + location β e.g.
"plumber new york","restaurant san francisco" - π 28 fields across 5 data layers β from basic contact info to AI-powered business intelligence
- π¦ Batch processing β multiple search queries in a single run
- π Multi-language β English, Chinese, Japanese, Korean, German, French, Spanish
- π’ Website enrichment β extract emails and social media links from business websites
- π§ AI Business Intelligence β GPT-4o-mini analysis: tier, health, lead score, competitive strength, tags
- β‘ Fast parallel extraction β concurrent browser contexts for high throughput
- πΊοΈ Distance-based filtering β filter results by radius from a search center point
- π« Closed business filter β remove permanently or temporarily closed businesses
Data Layers
The output is organized into 5 layers, ranging from always-present fields to optional AI-powered enrichment.
Layer 1 β Base (always present)
| Field | Type | Description | Source |
|---|---|---|---|
name | string | Business name | Feed card label (preferred); detail panel h1 fallback |
rating | number | Star rating (1.0β5.0) | aria-label on star rating element |
reviewsCount | integer | Number of Google reviews | Text matching /^\(?([\d,]+)\)?\s*reviews?$/i |
address | string | Full formatted address | button[data-item-id*="address"] aria-label |
phone | string | Phone number | button[data-item-id*="phone:tel"] aria-label |
website | string | Website URL | a[data-item-id*="authority"] href attribute |
category | string | Primary business category | button[jsaction*="category"] text content |
coordinates | object | { lat, lng } GPS coordinates | Page scripts, URL pattern, card href (priority order) |
searchQuery | string | The search query that produced this result | Set programmatically |
Layer 2 β Extended (always present)
| Field | Type | Description | Source |
|---|---|---|---|
hours | string[] | Opening hours per day | table.WgFkxc rows in the detail panel |
hoursRaw | string | Hours as compact text (fallback) | [data-item-id*="oh"] button aria-label |
priceLevel | string | Price category | [aria-label*="Price"] aria-label |
description | string | Editorial summary | .PYvSYb or .uxOu7 selector |
closedStatus | string | Permanently/temporarily closed | .dN94De or [class*="closed"] text |
photosCount | integer | Total photos count | [aria-label*="Photo"] aria-label, first number |
plusCode | string | Open Location Code | [data-item-id*="oloc"] aria-label |
distanceKm | number | Straight-line distance from search center | Haversine calculation (requires searchCenterLat, searchCenterLng, radiusKm) |
Layer 3 β Enrichment (requires enrichFromWebsite: true)
| Field | Type | Description |
|---|---|---|
emails | string[] | Email addresses found on the business website |
social | object | Social media links (Instagram, Facebook, Twitter/X, LinkedIn, TikTok, YouTube, Pinterest, Yelp) |
Emails containing noreply, donotreply, spamtrap, mailer-daemon, or postmaster are automatically filtered out. Supported social platforms: instagram, facebook, twitter, x, linkedin, tiktok, youtube, pinterest, yelp.
Layer 4 β AI Intelligence (requires enableAI: true + OpenAI API key)
| Field | Type | Values | Description |
|---|---|---|---|
tier | string | "premium" | "mid" | "budget" | Business pricing tier inferred from rating, reviews, price level, and category |
targetAudience | string | One-sentence summary | Target customer description inferred from name, category, rating, description |
businessHealth | string | "thriving" | "stable" | "struggling" | Business health inferred from rating, reviews, closed status |
leadScore | integer | 0β100 | Outreach priority score β higher = more promising lead |
competitiveStrength | string | "strong" | "moderate" | "weak" | Competitive standing relative to local peers |
tags | string[] | Up to 5 hyphenated tags | e.g. ["specialty-coffee", "remote-work-friendly"] |
Model: gpt-4o-mini with response_format: json_object. Requires an OpenAI API key (passed via input or the OPENAI_API_KEY environment variable).
Layer 5 β Meta (always present, auto-generated)
| Field | Type | Description |
|---|---|---|
latitude | number | Flattened copy of coordinates.lat (for CSV export) |
longitude | number | Flattened copy of coordinates.lng (for CSV export) |
error | string | Error message on failed records (absent on successful ones) |
Failed records are pushed to the dataset with an error field so failures are visible without aborting the run.
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchStrings | string[] | ["plumber new york"] | Search queries (required) |
maxResults | integer | 50 | Max results per query (max 500) |
language | select | en | Interface language |
onlyOpen | boolean | false | Filter out permanently/temporarily closed businesses |
searchCenterLat | number | 40.7128 | Search center latitude (for distance filtering) |
searchCenterLng | number | -74.006 | Search center longitude (for distance filtering) |
radiusKm | number | 10 | Max distance from search center (km) |
enrichFromWebsite | boolean | false | Extract emails + social from business websites |
enableAI | boolean | false | Enable AI-powered business intelligence |
openaiApiKey | string (secret) | β | OpenAI API key (or set OPENAI_API_KEY env var) |
Language Options
enβ Englishzh-CNβ Chinese (Simplified)jaβ Japanesekoβ Koreandeβ Germanfrβ Frenchesβ Spanish
Example
Input:
{"searchStrings":["coffee shop tokyo","ramen shinjuku"],"maxResults":20,"language":"en","onlyOpen":true,"enrichFromWebsite":true,"enableAI":true,"openaiApiKey":"sk-..."}
Output (sample β 1 of 20 results):
{"name":"Blue Bottle Coffee","rating":4.5,"reviewsCount":823,"address":"1-4-8 Jingumae, Shibuya, Tokyo","phone":"+81 3-1234-5678","website":"https://bluebottlecoffee.jp","category":"Coffee shop","coordinates":{"lat":35.6677,"lng":139.7106},"searchQuery":"coffee shop tokyo","hours":["Monday: 8 AMβ6 PM","Tuesday: 8 AMβ6 PM","Wednesday: 8 AMβ6 PM","Thursday: 8 AMβ6 PM","Friday: 8 AMβ7 PM","Saturday: 9 AMβ7 PM","Sunday: 9 AMβ6 PM"],"priceLevel":"Moderate","description":"Trendy cafe chain offering specialty coffee, pastries, and a minimalist atmosphere.","photosCount":348,"plusCode":"VQGP+4F Tokyo, Japan","latitude":35.6677,"longitude":139.7106,"emails":["hello@bluebottlecoffee.jp"],"social":{"instagram":"https://instagram.com/bluebottle","facebook":"https://facebook.com/bluebottlecoffee"},"tier":"premium","targetAudience":"Coffee enthusiasts and remote workers seeking quality espresso.","businessHealth":"thriving","leadScore":92,"competitiveStrength":"strong","tags":["specialty-coffee","remote-work-friendly","minimalist"]}
Pricing
| Tier | Price | Runs/month |
|---|---|---|
| Free | $0 | 10 runs |
| Pay-as-you-go | $0.05/run | Unlimited |
| Unlimited | $9.99/month | Unlimited runs |
Note: AI analysis (Layer 4) and website enrichment (Layer 3) consume additional tokens/bandwidth and may increase run duration.
Use Cases
- π’ Lead generation β collect contact info, emails, and social links for local businesses
- π Market research β analyze competitor density, ratings, pricing tiers, and market positioning
- π Local SEO β audit business listings, check hours, monitor closed/paused operations
- πΊοΈ Data enrichment β add location data, social profiles, and AI insights to your CRM
- π§ Sales intelligence β use lead scores, business health, and tags to prioritize outreach
Technical Details
- Stack: Playwright (Chromium) + Node.js + Apify SDK
- Browser: Headless Chrome with anti-detection user agent
- Parallelism: Configurable concurrent browser contexts (default: 5, max: 10)
- Resilience: Auto-retry on failures, error records for failed extractions
- Runtime: Runs on Apify's cloud infrastructure with auto-scaling
- Output: Apify dataset (viewable in Console) + local
storage/results.json
Version History
- v3.0 β 28 fields across 5 layers: AI intelligence, website enrichment, hours, price level, photos count, distance filtering, closed business filter, error records
- v1.2 β Core fields, parallel extraction, multi-language, Apify deployment
- v1.0 β MVP with Playwright-based scraping
Built by theo_12134
