Google Maps Leads Extractor API
Pricing
from $3.50 / 1,000 lead extracteds
Google Maps Leads Extractor API
Extract public Google Maps business leads by search query or place URL. Get name, category, address, phone, website, rating, review count, coordinates, and optional website email/social enrichment.
Pricing
from $3.50 / 1,000 lead extracteds
Rating
0.0
(0)
Developer
Tugelbay Konabayev
Actor stats
0
Bookmarked
18
Total users
7
Monthly active users
2 hours ago
Last modified
Categories
Share
Google Maps Leads Extractor API — Local Business Data and Optional Email Enrichment
Extract Google Maps business leads by search query or place URL — get business name, category, address, phone, website, rating, review count, coordinates, and Google Maps URL. Fast default mode — first runs use Google Maps data only:
maxItems: 10,extractEmails: false,extractSocialMedia: false, andmaxConcurrency: 3. Optional website enrichment — turn on email and social discovery only when you need it; enrichment visits business websites and is slower than the default path.
Google Maps Leads Extractor collects public Google Maps business listing data for sales prospecting, local SEO research, competitor analysis, market mapping, and CRM enrichment.
Use it when you want an Apify-native Google Maps lead workflow with datasets, scheduling, webhooks, API access, CSV/Excel/Sheets exports, and MCP/AI compatibility.
What This Actor Does
The actor accepts either:
searchQueries, such as["dentists in Miami FL"]placeUrls, direct Google Maps place URLs
It opens Google Maps in a browser, collects visible place URLs, opens each place, extracts business fields, deduplicates by name, and pushes one structured dataset item per business.
Website enrichment is opt-in:
extractEmails: truescans each business website for visible email addresses.extractSocialMedia: truescans each business website for social profile links.
Data You Can Extract
Default Google Maps fields:
- business name
- category
- full address
- parsed city, state, postal code, and country when parseable
- phone number when listed
- website URL when listed
- rating and review count when visible
- price level when visible
- opening-hours summary when visible
- latitude and longitude from the Google Maps URL
- Google Maps place URL
- source search query
- extraction timestamp
Optional website enrichment fields:
emailsocialMedia.facebooksocialMedia.instagramsocialMedia.twitter/xsocialMedia.linkedinsocialMedia.youtubesocialMedia.tiktok
Important: email and social fields depend on the business having a website and publicly visible contact links. Many businesses do not expose this data.
Best Use Cases
- Local B2B lead generation — find businesses by industry and location, then export names, phone numbers, websites, and Maps URLs.
- Agency prospecting — identify local businesses with low review counts, missing websites, or weak online presence.
- Local SEO audits — compare ratings, review counts, categories, and locations across a market.
- CRM enrichment — start from Google Maps URLs or search queries and append structured contact/location fields.
- Market mapping — estimate business density and competitor clusters by category and city.
- Recurring monitoring — schedule the same query weekly or monthly to watch local-market changes.
Why Use This Instead of Alternatives?
| Need | This actor | Official Google Places API | Large Google Maps scrapers | Manual research |
|---|---|---|---|---|
| Best fit | Pay-per-result lead workflows with optional website email/social enrichment | Compliant app integrations using selected Places fields | High-volume maps datasets and reviews | One-off checks |
| Setup | Apify actor input + dataset export | Google Cloud project, billing, API key, field masks | Actor-specific setup | Browser work |
| Email/social enrichment | Optional website scan | Not a direct Places contact-enrichment feature | Varies by actor | Manual clicks |
| Scheduling/webhooks | Built in through Apify | Build it yourself | Usually through Apify | Manual |
| Pricing model | Pay per extracted lead | Pay-as-you-go by SKU/field tier | Mixed compute/PPE/subscription | Labor time |
| AI/MCP workflows | Apify API + MCP-friendly PPE | Custom integration | Varies | No |
The useful distinction is not that this replaces every Google Maps scraper. It is a focused paid actor for lead workflows where optional email/social enrichment and Apify automation matter.
Input Examples
Fast first run
{"searchQueries": ["restaurants in New York"],"maxItems": 10,"extractEmails": false,"extractSocialMedia": false}
Service businesses in one city
{"searchQueries": ["plumber in Chicago IL"],"maxItems": 100,"extractEmails": false,"extractSocialMedia": false}
Enriched lead list
{"searchQueries": ["dentist in Miami FL"],"maxItems": 50,"extractEmails": true,"extractSocialMedia": true,"maxConcurrency": 3}
Direct place URLs
{"placeUrls": [{"url": "https://www.google.com/maps/place/Joe's+Pizza/@40.7303,-74.0021,17z/"}],"extractEmails": false,"extractSocialMedia": false}
International search
{"searchQueries": ["restaurant in Tokyo"],"maxItems": 25,"language": "ja","extractEmails": false}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | Array | ["restaurants in New York"] as prefill | Search terms with location, such as ["restaurants in New York"] or ["plumber in Chicago IL"]. |
placeUrls | Array | none | Direct Google Maps place URLs to scrape instead of search queries. |
maxItems | Integer | 10 | Maximum places to extract per search query. Start small, then increase after checking quality and runtime. |
extractEmails | Boolean | false | Visit business websites and scan visible HTML for email addresses. Slower and best-effort. |
extractSocialMedia | Boolean | false | Visit business websites and scan for social media links. Slower and best-effort. |
language | String | en | Google Maps interface language, ISO 639-1 code. |
maxConcurrency | Integer | 3 | Number of parallel browser pages. Higher can be faster but less stable. |
proxyConfiguration | Object | Apify proxy | Proxy settings for website enrichment and CAPTCHA fallback. |
Output Format
Each lead in the dataset can include:
| Field | Type | Description |
|---|---|---|
name | String | Business name. |
category | String or null | Google Maps category. |
address | String or null | Full address text. |
city | String or null | Parsed city when available. |
state | String or null | Parsed state/province when available. |
postalCode | String or null | Parsed postal code when available. |
country | String or null | Parsed country when available. |
phone | String or null | Phone number when listed. |
website | String or null | Business website when listed. |
email | String or null | Email found on the business website when enrichment is enabled. |
socialMedia | Object | Social links found on the website when enrichment is enabled. |
rating | Number or null | Google Maps rating. |
reviewsCount | Integer or null | Number of Google reviews. |
priceLevel | String or null | Price level when visible. |
openingHours | String or null | Opening-hours summary when visible. |
latitude | Number or null | Latitude from Maps URL. |
longitude | Number or null | Longitude from Maps URL. |
placeUrl | String | Google Maps place URL. |
searchQuery | String | Query that found the business, or direct for URL inputs. |
extractedAt | String | ISO timestamp. |
Example Output
{"name": "Joe's Pizza Broadway","category": "Pizza restaurant","address": "1435 Broadway, New York, NY 10018","city": "New York","state": "NY","postalCode": "10018","country": null,"phone": "(646) 559-4878","website": "https://www.joespizzanyc.com","email": null,"socialMedia": {},"rating": 4.4,"reviewsCount": 5847,"priceLevel": "$","openingHours": "Open 24 hours","latitude": 40.7555,"longitude": -73.9862,"placeUrl": "https://www.google.com/maps/place/...","searchQuery": "pizza in Manhattan","extractedAt": "2026-04-26T10:00:00+00:00"}
Cost Estimation
This actor uses Pay-Per-Event (PPE) pricing. Each successfully extracted business lead is one primary event.
Current Store pricing is tiered by Apify plan:
| Plan tier | Price per lead | Approx. per 1,000 leads |
|---|---|---|
| Free | $0.0050 | $5.00 |
| Bronze | $0.0045 | $4.50 |
| Silver | $0.0040 | $4.00 |
| Gold+ | $0.0035 | $3.50 |
Example PPE costs:
| Run size | Estimated actor event cost |
|---|---|
| 10 leads | ~$0.035-$0.05 |
| 100 leads | ~$0.35-$0.50 |
| 1,000 leads | ~$3.50-$5.00 |
| 3,000 leads/month | ~$10.50-$15.00 |
Your total Apify account spend can also include compute and proxy usage. Email/social enrichment is slower because it visits external business websites.
Integrations
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("tugelbay/google-maps-leads").call(run_input={"searchQueries": ["pizza in Manhattan"],"maxItems": 25,"extractEmails": False,"extractSocialMedia": False,})for lead in client.dataset(run["defaultDatasetId"]).iterate_items():print(lead["name"], lead.get("phone"), lead.get("website"))
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("tugelbay/google-maps-leads").call({searchQueries: ["dentist in Miami FL"],maxItems: 50,extractEmails: true,extractSocialMedia: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const lead of items) {console.log(lead.name, lead.phone, lead.email);}
Export Options
- CSV / Excel from Apify datasets
- Google Sheets through Apify integrations
- Webhooks for CRM workflows
- Apify API for custom apps
- Apify MCP Server for agent workflows
- Scheduled runs for recurring lead collection
Practical Workflow
- Start with
maxItems: 10and enrichment off. - Check if the query returns the right business type and location.
- Increase
maxItemsgradually. - Turn on
extractEmailsandextractSocialMediaonly for categories where website enrichment is worth the slower runtime. - Export to Sheets/CSV or push results into your CRM.
FAQ
Does it extract email addresses?
Yes, when extractEmails is enabled and the business has a website with a visible email address in the HTML. Coverage varies by category, country, and website quality. Many businesses do not publish emails.
Does it extract social media links?
Yes, when extractSocialMedia is enabled and the business website links to social profiles. It scans for Facebook, Instagram, Twitter/X, LinkedIn, YouTube, and TikTok links.
Does it work outside the US?
Yes, Google Maps works globally. Set language for the Maps interface. Address parsing is strongest for US-style addresses and partial for international formats.
Why are some fields empty?
Google Maps profiles vary. Some businesses do not list phone numbers, websites, hours, prices, or full addresses. Enrichment fields also require a reachable business website.
How many leads can I request?
The input allows up to 500 per query. Google Maps visible-result limits vary by query and location. For better coverage, use several specific searches instead of one broad query.
Is this a replacement for the Google Places API?
No. Use the official Google Places API when you need a compliant app integration with Google-managed SKUs, field masks, quotas, and platform terms. Use this actor when you need an Apify scraping workflow, dataset exports, scheduling, and optional website enrichment.
Does it handle CAPTCHAs?
The actor detects CAPTCHA/blocking states and retries with proxy fallback. Very large or aggressive runs can still be affected by Google rate limiting. Smaller batches and conservative concurrency are more stable.
Troubleshooting
No results returned
- Try a broader query, such as
restaurant in New Yorkinstead of a street-level query. - Make sure the search has a location.
- Try fewer
maxItemsfirst. - If Google blocks the search, retry later or use proxy settings.
Run is slow
- Keep
extractEmailsandextractSocialMediaoff unless needed. - Keep
maxConcurrencynear the default3. - Reduce
maxItems. - Split very large lead lists into multiple smaller runs.
Email extraction returns many null values
- Many businesses do not have websites.
- Many websites do not publish emails.
- Some sites block automated HTTP requests.
- Use extracted website URLs with a dedicated email finder if email coverage is mission-critical.
Only a few results when requesting more
- Google Maps may show only a limited visible set for a query.
- Use more specific category/location combinations.
- Run multiple related queries.
Limitations
- Maximum 500 requested results per search query.
- Actual visible results depend on Google Maps and the query.
- Email and social extraction are best-effort website scans.
- Google may show CAPTCHAs or rate-limit large runs.
- Address parsing is strongest for US-style addresses.
- Review text is not extracted; only rating and review count are returned when visible.
- Output reflects current Google Maps pages at extraction time; it is not historical data.
Changelog
v2.0 (2026-04-03)
- Fixed browser/proxy behavior and CAPTCHA retry paths.
- Added safer first-run defaults:
maxItems: 10,extractEmails: false,extractSocialMedia: false,maxConcurrency: 3. - Added YouTube and TikTok social media detection.
- Improved stale-scroll detection and retry behavior.
- Updated PPE pricing.
v1.0 (2026-03-30)
- Initial Google Maps search extraction.
- Place detail extraction.
- Optional website email and social discovery.
- Address parsing, coordinates, deduplication, and PPE pricing.
Related Actors
- JustDial Leads Extractor — Extract public business listings from JustDial
- 2GIS Scraper — Extract business data from 2GIS
- Website Tech Stack Detector — Identify technologies on any website
- RAG Web Browser — Search Google and extract pages as Markdown for AI workflows
See all actors: apify.com/tugelbay