Local Business Lead Finder
Pricing
from $0.30 / 1,000 results
Local Business Lead Finder
Discover, extract, and enrich local business leads from Google Maps. Find businesses by keyword and location, collect contact details, emails, and social profiles, and export clean, deduplicated data. Built for automation, CRMs, and recurring lead generation workflows.
Pricing
from $0.30 / 1,000 results
Rating
0.0
(0)
Developer

Solutions Smart
Actor stats
0
Bookmarked
13
Total users
8
Monthly active users
4 days ago
Last modified
Categories
Share
Local Business Lead Finder (Google Maps Leads Scraper)
If you found this Actor saved you time, a 5-star review helps me keep improving!
Extract thousands of local business leads from Google Maps including phone numbers, websites, and emails.
Local Business Lead Finder finds and enriches local business leads from Google Maps. Enter search queries (e.g. dentist, pizza) and locations (city/country or latitude & longitude), and the Actor discovers businesses, extracts contact details, optionally visits each website to get emails and social links, deduplicates across runs, and exports to a dataset or your webhook. Ideal for lead generation, outreach lists, local SEO research, and CRM enrichment.
See it in action
Local Business Lead Finder
by u/Hayder_Germany in apify
What can Local Business Lead Finder do?
- Discover businesses on Google Maps by keyword (e.g. "dentist", "pizza") and location (city/country or lat/lng + radius).
- Extract from each place: name, address, phone, website, category, rating, coordinates, and Google Maps URL.
- Enrich (optional): visit business websites, follow contact/about pages, and extract emails and social profiles (Facebook, Instagram, LinkedIn, Twitter/X, TikTok, YouTube).
- Deduplicate across runs (by place ID, website, or phone) so scheduled runs only add new leads.
- Export to the run’s dataset (Apify Console Output tab) and/or to a webhook URL in configurable batches with retries.
Run it on Apify for monitoring, API access, scheduling, and integrations (n8n, Make, Zapier). Your Actor + the Apify platform come as a package—scaling, storage, and automation are built in.
What data can Local Business Lead Finder extract?
| Data point | Description |
|---|---|
| name | Business name |
| address | Full address |
| phone | Phone number |
| website | Business website |
| googleUrl | Google Maps URL |
| category | Primary category |
| lat, lng | Coordinates |
| placeId | Stable place identifier |
| emails | Extracted emails (when enrichment is on) |
| emailQuality | Quality score for extracted emails (confidence, domain match, optional MX validation) |
| socials | Facebook, Instagram, LinkedIn, Twitter, YouTube, TikTok |
| rating, reviewCount | Rating and review count (when available) |
| fetchedAt | ISO timestamp |
| isNew | true for new items; false for previously seen items |
| leadScore | Computed score (0-100) and grade (A-F) based on rating, review count, website presence, and social presence |
| value | Numeric lead value score (0-100) derived from leadScore.score |
How do I use Local Business Lead Finder to get local business leads?
- Open the Actor on Apify and go to the Input tab.
- Set Search Queries (e.g.
dentist,dental clinic) and either Locations (Text) (e.g.Berlin, Germany) or Location (Lat/Lng) (latitude, longitude, radius). - Optionally enable Enrich with Website Data to extract emails and social links from business websites.
- Click Start and check the Output tab for the dataset. Use Schedule for recurring lead refresh.
Local Business Lead Finder has a simple form input—no code required to run it from the Console. For automation, use the Apify API or webhookUrl to push results to your CRM or workflow.
Input
Click on the Input tab in the Actor detail page for the full schema. You need queries (required) and either locations (text), geo (form: lat, lng, radius), or geoRaw (raw string e.g. 52.52, 13.405, 5).
| Parameter | Type | Default | Description |
|---|---|---|---|
| queries | array | required | Search terms, e.g. ["dentist", "pizza"]. |
| locations | array | — | Text locations, e.g. ["Berlin, Germany"]. |
| geo | object | — | Latitude, longitude, radius (km) in the form. |
| geoRaw | string | — | Raw: "lat, lng" or "lat, lng, radiusKm" (e.g. 52.52, 13.405, 5). |
| maxResultsPerQuery | integer | 50 | Max businesses per query/location. |
| language | string | "en" | Google Maps language (dropdown). |
| enrichWebsite | boolean | true | Visit websites to extract emails and socials. |
| emailMxCheck | boolean | false | Verify MX records for extracted email domains. Improves confidence but adds DNS lookups and runtime. |
| dedupeBy | string | "placeId" | Deduplication key: placeId, website, or phone. |
| newOnlyOutput | boolean | true | If true, export only new items. If false, export all discovered items and include isNew. |
| webhookUrl | string | — | URL to POST results (batched). Stored encrypted. |
| resourceProfile | string | "low" | Memory preset: Low (4 GB), Standard (4–8 GB), High (8 GB+). Sets recommended concurrency for the memory you allocate when starting the run. |
| detailConcurrency | integer | (from profile) | Place detail pages fetched in parallel (Phase 2). Override profile: 1–8. Higher = faster, more memory. |
| enrichmentConcurrency | integer | (from profile) | Website pages fetched in parallel during enrichment (Phase 3). Override profile: 1–20. |
Example input
{"queries": ["dentist", "dental clinic"],"locations": ["Berlin, Germany"],"maxResultsPerQuery": 25,"enrichWebsite": true,"emailMxCheck": false,"dedupeBy": "placeId","newOnlyOutput": true}
With coordinates (form or raw string):
{"queries": ["cafe"],"geo": { "lat": 52.52, "lng": 13.405, "radiusKm": 5 },"maxResultsPerQuery": 50}
{"queries": ["cafe"],"geoRaw": "52.52, 13.405, 5","maxResultsPerQuery": 50}
With performance options (match Resource profile to the memory you allocate for the run):
{"queries": ["dentist"],"locations": ["Berlin, Germany"],"maxResultsPerQuery": 50,"resourceProfile": "high","enrichWebsite": true}
Output
Results are stored in the run’s default dataset and shown in the Output tab. You can download the dataset in JSON, CSV, Excel, or other formats from the dataset page.
Each item includes isNew, leadScore, and emailQuality so you can filter and prioritize leads quickly.
Example output item
{"name": "Example Dental Studio","googleUrl": "https://www.google.com/maps/place/...","website": "https://example-dental.com","phone": "+49 30 12345678","address": "Example St 1, 10115 Berlin","category": "Dentist","emails": ["contact@example-dental.com"],"emailQuality": {"bestEmail": "contact@example-dental.com","bestScore": 78,"averageScore": 78,"highConfidenceCount": 1,"mediumConfidenceCount": 0,"lowConfidenceCount": 0},"socials": {"facebook": "https://facebook.com/example-dental","instagram": "https://instagram.com/example_dental","other": []},"enrichment": { "websiteVisited": true, "scannedUrl": "https://example-dental.com" },"isNew": true,"leadScore": { "score": 84, "grade": "A" },"value": 84,"discoverySource": "detail","fetchedAt": "2025-02-13T12:00:00.000Z"}
Migration note (email quality update)
As of v0.0.1+email-quality-fix, email handling is stricter and deterministic:
emailsnow contains only normalized, syntax-valid, cleaned emails (no glued phone/URL/text artifacts).emailQuality.bestEmailis guaranteed to be one ofemailswhenemails.length > 0.emailQuality.assessmentsnow includes accepted and rejected candidates (with reasons) for debugging.emailQuality.rejectedcontains{ email, reasons[] }entries for explicit rejection diagnostics.emailQuality.telemetryincludes extraction/validation counters (candidate totals, rejections, domain-match %, malformed pattern counters).
Before/after sample
Before:
{"emails": ["4445656info@zahnarztmichael.dewww.zahnarztmichael.de","praxis@schoene-zaehne-berlin.deweb"]}
After:
{"emails": ["info@zahnarztmichael.de","praxis@schoene-zaehne-berlin.de"],"emailQuality": {"bestEmail": "info@zahnarztmichael.de","rejected": [{"email": "4445656info@zahnarztmichael.dewww","reasons": ["numeric_prefix_pollution", "trailing_word_after_tld"]}]}}
How much does it cost to get local business leads with this Actor?
The Actor runs on Apify Compute Units (CUs). Cost depends on run length, number of places discovered, and whether website enrichment is enabled. Use the Input tab to limit maxResultsPerQuery and turn off Enrich with Website Data to reduce usage. Pricing and free tier are shown on the Actor page; you only pay for what you consume.
Use cases
- Sales & agencies — Build prospect lists of local businesses (plumbers, restaurants, clinics) with verified contact data.
- Local SEO — Research competitors and business density by area.
- Market research — Track businesses by geography; optionally include closed businesses.
- CRM pipelines — Feed leads into HubSpot, Salesforce, Pipedrive, or any system that accepts webhooks.
- Scheduled lead refresh — Run on a schedule and only process new or updated businesses.
Tips and options
- Resource profile & memory — Set Resource profile (memory) to match the memory you allocate when starting the run (e.g. 4 GB → Low, 8 GB → High). This tunes concurrency for speed vs memory use. You can override Detail concurrency and Enrichment concurrency for finer control.
- Google Maps — The Actor uses a browser on Apify; for production, use the recommended resources. Consent or layout changes on Google Maps can occasionally affect results.
- Enrichment — Only same-domain (and subdomain) links are followed; contact-style paths (e.g. /contact, /about) are prioritized.
- Email quality checks — Enable emailMxCheck only when you need stronger email confidence. It adds DNS lookups and can increase run time.
- Webhook — Failed batches after retries are visible in the run; you can implement manual retry if needed.
- API & integrations — Use the Apify API to run the Actor and fetch results; use webhookUrl to push directly to n8n, Make, Zapier, or your own endpoint.
Compliance, disclaimers, and support
Use this Actor for legitimate lead generation and research only. Obtain consent or have a lawful basis (e.g. legitimate interest) before contacting businesses. You are responsible for complying with GDPR, CAN-SPAM, and local regulations when using extracted emails or phone numbers.
If you run into issues, check the Input tab and this README first. For bugs or feature requests, use the Issues tab on the Actor page—feedback is welcome. For custom solutions based on this Actor, contact the creator via the Actor profile.