Google Maps Business Leads avatar

Google Maps Business Leads

Pricing

from $4.00 / 1,000 business leads

Go to Apify Store
Google Maps 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

Harsh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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

  1. Open the Actor in Apify Console
  2. Enter one or more search queries (and/or Maps place URLs)
  3. Set Max results per query, delay, and proxy (residential recommended if blocked)
  4. Click Start
  5. Download results from the Dataset tab, or LEADS.csv / SUMMARY.md from the key-value store

Input

FieldTypeDefaultDescription
searchQueriesstring[]sample queriesMaps search queries (city + niche)
startUrlsarray[]Direct Google Maps place or search URLs
maxResultsPerQueryinteger50Cap unique leads per query
maxConcurrencyinteger2Parallel HTTP requests (keep low for Maps)
maxRequestRetriesinteger3HTTP retry count
requestDelayMsinteger1000Delay used for rate limiting
languagestringenMaps hl language code
countryCodestringusMaps gl country bias
includeEmailsFromWebsitebooleanfalseVisit business websites to collect public emails
proxyConfigurationobjectApify Proxy onProxy 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-leads
npm install
npm run build
npm 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