Google Maps Business Leads
Pricing
from $4.00 / 1,000 business leads
Google Maps Business Leads
Extract local business leads from Google Maps search queries or place URLs. Returns name, address, phone, website, rating, review count, category, coordinates, hours, and Maps URL — ready for outreach and CRM import.
Pricing
from $4.00 / 1,000 business leads
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Extract local business leads from Google Maps search queries or place URLs. Returns name, address, phone, website, rating, review count, category, coordinates, opening hours, and Maps URL — ready for outreach and CRM import.
Built with TypeScript and Crawlee CheerioCrawler (no browser by default). Multi-strategy HTML parsing (fixture cards, JSON-LD, embedded Maps payloads, place links, meta tags, DOM panels) with retries, rate limiting, proxy support, and placeId deduplication.
Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel).
Features
- Search by free-text query (city + niche), e.g.
coffee shops in Austin TX - Or scrape direct Google Maps place / search URLs
- Fields:
name,category,address,city,state,country,phone,website,emails,rating,reviewCount,placeId,lat,lng,mapsUrl,openingHours,searchQuery,scrapedAt - Deduplicate by
placeId(with name+address fallback) - Retries, rate limiting (
requestDelayMs), concurrency controls - Apify Proxy enabled by default (recommended for Maps)
- Graceful handling of captcha/blocks (records error, does not crash the run)
- Dataset JSON + LEADS.csv + SUMMARY.md in the key-value store
- Optional email harvest from business websites (
includeEmailsFromWebsite)
Why use Google Maps Business Leads?
- Lead generation — build outreach lists for local services and retail
- Market research — compare density, ratings, and categories by city
- CRM enrichment — import phone, website, and address fields
- Sales ops — monitor competitor footprints by query
How to use
- Open the Actor in Apify Console
- Enter one or more search queries (and/or Maps place URLs)
- Set Max results per query, delay, and proxy (residential recommended if blocked)
- Click Start
- Download results from the Dataset tab, or LEADS.csv / SUMMARY.md from the key-value store
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | sample queries | Maps search queries (city + niche) |
startUrls | array | [] | Direct Google Maps place or search URLs |
maxResultsPerQuery | integer | 50 | Cap unique leads per query |
maxConcurrency | integer | 2 | Parallel HTTP requests (keep low for Maps) |
maxRequestRetries | integer | 3 | HTTP retry count |
requestDelayMs | integer | 1000 | Delay used for rate limiting |
language | string | en | Maps hl language code |
countryCode | string | us | Maps gl country bias |
includeEmailsFromWebsite | boolean | false | Visit business websites to collect public emails |
proxyConfiguration | object | Apify Proxy on | Proxy settings |
Example:
{"searchQueries": ["coffee shops in Austin TX", "plumbers in Chicago"],"startUrls": [],"maxResultsPerQuery": 50,"maxConcurrency": 2,"maxRequestRetries": 3,"requestDelayMs": 1000,"proxyConfiguration": { "useApifyProxy": true },"language": "en","includeEmailsFromWebsite": false,"countryCode": "us"}
See examples/input.json.
Output
Each dataset item is one business lead:
{"name": "Joe's Coffee","category": "Coffee shop","address": "123 Congress Ave, Austin, TX 78701, United States","city": "Austin","state": "TX","country": "United States","phone": "+1 512-555-0101","website": "https://joescoffee.example.com","emails": [],"rating": 4.7,"reviewCount": 842,"placeId": "ChIJfixture0001joescoffee","lat": 30.2672,"lng": -97.7431,"mapsUrl": "https://www.google.com/maps/place/...","openingHours": ["Monday: 7AM-6PM", "Tuesday: 7AM-6PM"],"searchQuery": "coffee shops in Austin TX","scrapedAt": "2026-07-13T12:00:00.000Z","error": null}
Key-value store exports:
- LEADS.csv — flat CRM-friendly CSV of all leads
- SUMMARY.md — human-readable run summary
- OUTPUT — JSON totals and export keys
See examples/output.json.
Pricing
Pay-per-event pricing: charged primarily per business lead written to the default dataset (apify-default-dataset-item), plus a small actor-start fee.
Installation (local)
cd factory/google-maps-business-leadsnpm installnpm run buildnpm test# Optional local run (live Maps often requires residential proxy):# apify run -p
Limitations
- Google Maps is heavily protected. Datacenter IPs are frequently captcha’d; use Apify Proxy (residential groups when needed).
- Result volume and field completeness depend on what Maps returns in HTML for your IP/locale. Some sessions return thin or empty payloads.
- This Actor prefers Cheerio/HTTP (fast, cheap). It does not drive a full browser; highly interactive Maps UI may need additional strategies over time.
- Opening hours, emails, and some fields may be missing for certain listings.
- Respect Google Terms of Service, local laws, and do not use data for spam or prohibited purposes.
- Email extraction from websites is best-effort regex on public HTML only.
FAQ
Why did I get zero results?
Likely a block/captcha or empty HTML payload. Check logs for “blocked”, enable residential proxy, lower concurrency, and increase requestDelayMs.
Can I scrape only place URLs?
Yes — put place URLs in startUrls and leave searchQueries empty.
How are duplicates handled?
Leads are deduplicated primarily by placeId, then by name+address / coordinates.
Does it support languages other than English?
Set language (hl) and countryCode (gl) to bias Maps results.
Changelog
1.0.0
- Initial release: search queries + place URLs, multi-strategy extractors, CSV/Markdown export, proxy/retries, unit tests with HTML fixtures
License
Apache-2.0