Google Maps Business Scraper avatar

Google Maps Business Scraper

Pricing

from $0.10 / 1,000 results

Go to Apify Store
Google Maps Business Scraper

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

theodore

theodore

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

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)

FieldTypeDescriptionSource
namestringBusiness nameFeed card label (preferred); detail panel h1 fallback
ratingnumberStar rating (1.0–5.0)aria-label on star rating element
reviewsCountintegerNumber of Google reviewsText matching /^\(?([\d,]+)\)?\s*reviews?$/i
addressstringFull formatted addressbutton[data-item-id*="address"] aria-label
phonestringPhone numberbutton[data-item-id*="phone:tel"] aria-label
websitestringWebsite URLa[data-item-id*="authority"] href attribute
categorystringPrimary business categorybutton[jsaction*="category"] text content
coordinatesobject{ lat, lng } GPS coordinatesPage scripts, URL pattern, card href (priority order)
searchQuerystringThe search query that produced this resultSet programmatically

Layer 2 — Extended (always present)

FieldTypeDescriptionSource
hoursstring[]Opening hours per daytable.WgFkxc rows in the detail panel
hoursRawstringHours as compact text (fallback)[data-item-id*="oh"] button aria-label
priceLevelstringPrice category[aria-label*="Price"] aria-label
descriptionstringEditorial summary.PYvSYb or .uxOu7 selector
closedStatusstringPermanently/temporarily closed.dN94De or [class*="closed"] text
photosCountintegerTotal photos count[aria-label*="Photo"] aria-label, first number
plusCodestringOpen Location Code[data-item-id*="oloc"] aria-label
distanceKmnumberStraight-line distance from search centerHaversine calculation (requires searchCenterLat, searchCenterLng, radiusKm)

Layer 3 — Enrichment (requires enrichFromWebsite: true)

FieldTypeDescription
emailsstring[]Email addresses found on the business website
socialobjectSocial 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)

FieldTypeValuesDescription
tierstring"premium" | "mid" | "budget"Business pricing tier inferred from rating, reviews, price level, and category
targetAudiencestringOne-sentence summaryTarget customer description inferred from name, category, rating, description
businessHealthstring"thriving" | "stable" | "struggling"Business health inferred from rating, reviews, closed status
leadScoreinteger0–100Outreach priority score — higher = more promising lead
competitiveStrengthstring"strong" | "moderate" | "weak"Competitive standing relative to local peers
tagsstring[]Up to 5 hyphenated tagse.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)

FieldTypeDescription
latitudenumberFlattened copy of coordinates.lat (for CSV export)
longitudenumberFlattened copy of coordinates.lng (for CSV export)
errorstringError 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

FieldTypeDefaultDescription
searchStringsstring[]["plumber new york"]Search queries (required)
maxResultsinteger50Max results per query (max 500)
languageselectenInterface language
onlyOpenbooleanfalseFilter out permanently/temporarily closed businesses
searchCenterLatnumber40.7128Search center latitude (for distance filtering)
searchCenterLngnumber-74.006Search center longitude (for distance filtering)
radiusKmnumber10Max distance from search center (km)
enrichFromWebsitebooleanfalseExtract emails + social from business websites
enableAIbooleanfalseEnable AI-powered business intelligence
openaiApiKeystring (secret)OpenAI API key (or set OPENAI_API_KEY env var)

Language Options

  • en — English
  • zh-CN — Chinese (Simplified)
  • ja — Japanese
  • ko — Korean
  • de — German
  • fr — French
  • es — 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

TierPriceRuns/month
Free$010 runs
Pay-as-you-go$0.05/runUnlimited
Unlimited$9.99/monthUnlimited 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