Google Maps Scraper | Lead Gen, Emails & Multi-City Search avatar

Google Maps Scraper | Lead Gen, Emails & Multi-City Search

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Google Maps Scraper | Lead Gen, Emails & Multi-City Search

Google Maps Scraper | Lead Gen, Emails & Multi-City Search

Google Maps lead generation scraper: parallel multi-city keyword search, business email finder, phone, website & ratings. Nearby discovery, place URLs, lead filters & webhooks. Real-time data for outbound sales, agencies, local SEO & market research. Fast, no browser.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Chidubem Aneke

Chidubem Aneke

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

Share

Google Maps Real-Time Data

Collect local business intelligence from Google Maps at scale. Search multiple cities and keywords in one run, discover nearby competitors, extract place details and reviews, and filter for sales-ready leads — all as clean, structured JSON streamed to your Apify dataset in real time.

Built for agencies, growth teams, data engineers, and AI workflows that need reliable Google Maps data without slow, expensive browser automation.


Why this Actor

Google Maps Real-Time DataTypical browser scraper
SpeedFast per-result collectionOften 5–15 s per place
Memory512 MB default2–4 GB+
SetupOrganized input UI, run immediatelyOften fragile & high-maintenance
CostLow compute, efficient proxy useHigh
OutputStructured JSON, LLM-readyOften messy HTML
ScaleLarge runs — 10,000+ items per runOften capped lower
Multi-marketMany keyword + location pairs per runUsually one query at a time

What you get — 40+ data points per place

Every record includes featureType and scrapedAt so you can filter, join, and pipe into any workflow.

Search results (featureType: "search")

FieldDescription
title, category, categories[]Business name and types
address, completeAddress, neighborhoodFull location breakdown (street, city, state, ZIP, country)
phone, websiteContact channels
rating, reviewCount, reviewsPerRatingReputation signals
latitude, longitude, placeUrlCoordinates and Maps link
openHours, status, descriptionHours, open/closed, summary
priceRange, thumbnail, images[]Price tier and photos
reservations[], orderOnline[], menuBooking and ordering links
ownerOwner name and profile link when available
searchQuery, searchLocationWhich search produced this row
searchTaskIndex, searchTaskLabelTraceability for multi-task runs
positionRank in search results

Nearby discovery (featureType: "nearby")

Same rich place fields as search, tagged for category-based discovery around a map point (restaurants, dentists, hotels, gyms, and 14 more categories).

Place details (featureType: "place" or "scrape_by_url")

Full structured profile for a specific Google Maps URL — ideal when you already have a list of businesses to enrich.

Reviews (featureType: "review")

FieldDescription
authorName, authorUrl, authorPhotoReviewer identity
rating, text, textTranslatedScore and content
relativeDate, publishedAtWhen the review was posted
likes, images[]Engagement and photos
ownerResponse, ownerResponseDateBusiness reply
placeTitle, placeUrl, placeIdLinked business

Set includeRaw: true to attach extended debug data on any record (larger output, for advanced users).


Reliability by feature

CapabilitySearch / NearbyPlace URLsNotes
Fast place listing✅ ReliableCore strength — no browser
Rating & review count✅ Always includedFrom search/preview — no extra request
Extended details (phone, hours, description)✅ With fetchExtendedDetailsOne lightweight preview request per place
Email discovery✅ With fetchEmailsWebsite + Maps page scan — best for lead gen
Full review text❌ Not on search⚠️ Best-effortUse dedicated Reviews feature with place URLs

Search and nearby always emit one row per business — review text never mixes into the place table.


Features

Search terms & locations — on by default

Run multiple keyword + location pairs in one actor run — e.g. restaurants in Manhattan and dentists in Brooklyn side by side. Each task has its own max results limit. Filters include minimum rating, price level, open now, phone/website required, category contains, and permanently closed exclusion.

Every search result includes rating and reviewCount automatically. Enable Fetch extended details for phone, hours, and descriptions (one extra request per business). Enable Find emails for lead-gen contact discovery (emails[] on each place).

Nearby Discovery

Automatically map a local market: pick from 18 business categories (restaurants, hotels, cafes, dentists, lawyers, hospitals, and more) around a city or area. Set radius in meters and cap results per category.

Place Details

Paste Google Maps place URLs (including maps.app.goo.gl short links). Get name, address, phone, website, hours, ratings, images, reservations, menus, and optional reviews as separate rows.

Reviews

Dedicated review extraction for specific place URLs — text, author, rating, date, photos, and owner responses. Filter by minimum review rating.

Scrape By URL

Quick path for any supported Maps URL — same rich output as Place Details.

Lead Generation Filters

Layer extra filters on search and nearby output: require phone, require website, minimum rating. Perfect for outbound sales and local lead-gen lists.


Use cases

  • Local lead generation — plumbers, dentists, lawyers, agencies with phone + website + rating filters
  • Multi-city prospecting — one run across dozens of keyword + location pairs
  • Competitive mapping — nearby discovery to see who operates in a neighborhood or radius
  • Reputation monitoring — pull reviews for your locations or competitors
  • Market research — compare density, ratings, and categories across regions
  • Data enrichment — start from a URL list and backfill structured business profiles
  • AI & LLM pipelines — JSON for RAG, scoring, outreach drafts, and territory summaries
  • CRM & warehouse feeds — push dataset items via Apify API, optional real-time webhook, or integrations

LLM & MCP integration

Output is JSON Lines–friendly structured data — ideal for ChatGPT, Claude, Gemini, LangChain, LlamaIndex, and custom agents.

  1. Run the Actor with the features you need (search tasks, nearby, URLs, etc.).
  2. Fetch dataset items via Apify API or export JSON/CSV.
  3. Pass records to your LLM with a system prompt, or index into a vector store.

Example: single business for an LLM prompt

{
"featureType": "search",
"title": "Brooklyn Dental Studio",
"category": "Dentist",
"address": "123 Main St, Brooklyn, NY 11201",
"phone": "(718) 555-0142",
"website": "https://example.com",
"rating": 4.8,
"reviewCount": 214,
"searchTaskLabel": "dentists | Brooklyn, NY",
"placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ..."
}

Apify MCP (Model Context Protocol)

Use the Apify MCP server so AI assistants can:

  • Run this Actor with natural-language instructions
  • Read dataset results directly in the chat
  • Chain with other Actors (e.g. enrich → score → CRM)

Typical MCP tool flow:

User: "Find 30 highly rated Italian restaurants in Manhattan and summarize each for outreach"
→ MCP runs Actor with searchTasks=[{ query: "Italian restaurants", location: "Manhattan, NY" }], minRating=4
→ MCP reads dataset items
→ LLM summarizes and drafts emails

API quick start

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enableSearch": true,
"searchTasks": [
{ "query": "plumbers", "location": "Austin, TX", "placesPerQuery": 50 },
{ "query": "electricians", "location": "Dallas, TX", "placesPerQuery": 50 }
],
"leadRequirePhone": true,
"enableLeadFilters": true
}'

Dataset items: GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json


Input reference

Enable only what you need. All features are independent.

InputTypeDefaultDescription
Search terms & locations
enableSearchbooleantrueKeyword + location search
searchTasksobject[]2 example tasksPrimary input: { query, location, placesPerQuery? } per row
placesPerQueryinteger20Default max businesses per search task
maxPagesPerQueryinteger50Pagination depth cap per task
minRatingnumberMinimum star rating (0–5)
priceLevelsenum[]free, inexpensive, moderate, expensive, very_expensive
openNowbooleanfalseOpen right now only
excludeClosedbooleantrueSkip permanently closed
requirePhonebooleanfalseMust have phone
requireWebsitebooleanfalseMust have website
categoryFilterstringCategory text filter
fetchExtendedDetailsbooleanfalseRicher hours, phone & descriptions (1 extra request per business)
fetchEmailsbooleanfalseFind emails on Maps page + business website (emails[] on each place)
Nearby Discovery
enableNearbybooleanfalseCategory discovery around a location
nearbyCategoriesenum[]5 defaultsrestaurants, hotels, cafes, dentists, gyms, … (18 total)
nearbyLocationstringCity or area name
nearbyRadiusMetersinteger5000Search radius (100–100,000 m)
placesPerCategoryinteger20Max per category
Place Details
enablePlaceDetailsbooleanfalseScrape place URLs
placeUrlsstring[]Maps or short links
fetchReviewsOnDetailsbooleantrueEmit reviews as separate rows
maxReviewsPerPlaceinteger20Review cap per place
includeImagesbooleantruePhoto URLs
Reviews
enableReviewsbooleanfalseDedicated review scraping
reviewPlaceUrlsstring[]Place URLs
reviewsPerPlaceinteger50Max reviews per URL
minReviewRatingintegerFilter (1–5)
includeReviewImagesbooleantrueReview photos
includeOwnerResponsesbooleantrueOwner replies
Scrape By URL
enableScrapeByUrlbooleanfalsePaste any supported Maps URL
scrapeUrlsstring[]URL list
Lead Generation
enableLeadFiltersbooleanfalseExtra filters on search/nearby
leadRequirePhonebooleantrueLeads must have phone
leadRequireWebsitebooleanfalseLeads must have website
leadMinRatingnumberMinimum rating
Output & limits
languagestringenResults language
countrystringusRegion for localized results
maxItemsinteger10000Global cap across all features (set higher for large runs)
webhookUrlstringOptional real-time POST URL — dataset is always written; webhook is additional
webhookFormatenumjsonjson (full record) or slack (Slack message)
includeRawbooleanfalseAttach debug payload
proxyConfigurationobjectresidential USApify proxy settings

Full schema: see .actor/input_schema.json or the Input tab on Apify Console.


Output reference

Each dataset row is one record. Filter by featureType:

featureTypeDescription
searchBusiness from keyword search
nearbyBusiness from nearby category discovery
placeBusiness from Place Details URL
scrape_by_urlBusiness from Scrape By URL
reviewSingle review (linked to a place)

Traceability fields on search results:

  • searchTaskIndex — 0-based task number
  • searchTaskLabel — e.g. "restaurants | Manhattan, NY"

Export formats: JSON, CSV, Excel, RSS, or via API.


Webhook delivery (optional)

Every record is always saved to the Apify dataset first. If you set webhookUrl in the Output & limits section, each new record is also POSTed in real time to your endpoint — useful for CRMs, Slack, Zapier, Make, or custom pipelines.

SettingDescription
webhookUrlYour endpoint (https). Leave empty to use dataset only.
webhookFormatjson — full place or review object. slack — compact Slack incoming-webhook message.

Webhook delivery is best-effort: a failed webhook never stops the run or prevents dataset writes.

Example — search with Slack alerts

{
"enableSearch": true,
"searchTasks": [{ "query": "coffee shops", "location": "Seattle, WA", "placesPerQuery": 50 }],
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"webhookFormat": "slack"
}

Example — search with emails + JSON webhook

{
"enableSearch": true,
"searchTasks": [{ "query": "dentists", "location": "Chicago, IL" }],
"fetchEmails": true,
"fetchExtendedDetails": true,
"webhookUrl": "https://your-crm.example.com/api/leads",
"webhookFormat": "json"
}

Quick start examples

Multi-city lead gen (default pattern)

{
"enableSearch": true,
"searchTasks": [
{ "query": "roofing contractors", "location": "Phoenix, AZ", "placesPerQuery": 100 },
{ "query": "roofing contractors", "location": "Tucson, AZ", "placesPerQuery": 100 }
],
"enableLeadFilters": true,
"leadRequirePhone": true,
"leadMinRating": 4,
"minRating": 4
}

Nearby market map

{
"enableSearch": false,
"enableNearby": true,
"nearbyLocation": "Miami, FL",
"nearbyRadiusMeters": 3000,
"nearbyCategories": ["restaurants", "bars", "hotels", "beauty_salons"],
"placesPerCategory": 30
}

Enrich a URL list

{
"enableSearch": false,
"enablePlaceDetails": true,
"placeUrls": [
"https://maps.app.goo.gl/example1",
"https://www.google.com/maps/place/?q=place_id:ChIJ..."
],
"fetchReviewsOnDetails": true,
"maxReviewsPerPlace": 25
}

Search with emails + extended details (lead gen)

{
"enableSearch": true,
"searchTasks": [{ "query": "Italian restaurants", "location": "Boston, MA", "placesPerQuery": 30 }],
"fetchExtendedDetails": true,
"fetchEmails": true,
"minRating": 4,
"requireWebsite": true
}

Reviews only (specific URLs)

{
"enableSearch": false,
"enableReviews": true,
"reviewPlaceUrls": ["https://www.google.com/maps/place/?q=place_id:ChIJ..."],
"reviewsPerPlace": 100,
"minReviewRating": 4,
"includeOwnerResponses": true
}

Proxy & performance

  • Apify residential proxy (US) is enabled by default — no extra setup required on Apify.
  • Default memory: 512 MB — enough headroom for most runs without users needing to tune it.
  • Results are streamed to the dataset as they are collected; long runs do not pile up data in memory.

Limitations & compliance

  • Review volume may be limited by what Google Maps displays for a given place.
  • Not affiliated with Google. Use responsibly and comply with applicable laws and Google's Terms of Service.
  • Always respect rate limits, robots terms, and local regulations when collecting business data.

Contact & custom work

Need something beyond this Actor? I build custom scrapers, data pipelines, and full-stack web applications for startups and enterprises.

Reach out for:

  • Custom Apify Actors (any website or data source)
  • Google Maps / local SEO / reputation data projects at scale
  • LLM & MCP integrations with your data stack
  • Web apps, dashboards, and automation tools

Google Maps Real-Time Data · by DrunkCodes