Local Business Lead Finder avatar

Local Business Lead Finder

Pricing

from $0.30 / 1,000 results

Go to Apify Store
Local Business Lead Finder

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

Solutions Smart

Maintained by Community

Actor stats

0

Bookmarked

26

Total users

7

Monthly active users

4 days ago

Last modified

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.

✨ 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 pointDescription
nameBusiness name
addressFull address
phonePhone number
websiteBusiness website
googleUrlGoogle Maps URL
categoryPrimary category
lat, lngCoordinates
placeIdStable place identifier
emailsExtracted emails (when enrichment is on)
emailQualityQuality score for extracted emails (confidence, domain match, optional MX validation)
socialsFacebook, Instagram, LinkedIn, Twitter, YouTube, TikTok
enrichmentWebsite visit details, including browser fallback review flags for hard no-email sites
rating, reviewCountRating and review count (when available)
fetchedAtISO timestamp
isNewtrue for new items; false for previously seen items
leadScoreComputed score (0-100) and grade (A-F) based on rating, review count, website presence, and social presence
valueNumeric lead value score (0-100) derived from leadScore.score

πŸš€ How do I use Local Business Lead Finder to get local business leads?

  1. Open the Actor on Apify and go to the Input tab.
  2. Set Search Queries (e.g. dentist, dental clinic) and either Locations (Text) (e.g. Berlin, Germany) or Location (Lat/Lng) (latitude, longitude, radius).
  3. Optionally enable Enrich with Website Data to extract emails and social links from business websites.
  4. 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) or geo (form: lat, lng, radius).

ParameterTypeDefaultDescription
queriesarrayrequiredSearch terms, e.g. ["dentist", "pizza"].
locationsarray-Text locations, e.g. ["Berlin, Germany"].
geoobject-Latitude, longitude, radius (km) in the form.
maxResultsTotalinteger10Max unique businesses for the whole run.
languagestring"en"Google Maps language (dropdown).
modestring"fast"fast extracts leads only; deep enables bounded website enrichment.
enrichWebsitebooleanfalseVisit websites to extract emails, phones, contact forms, and socials. Used only in deep mode.
maxWebsitesToEnrichinteger25Max unique websites to visit in deep mode.
maxRunTimeSecinteger120Graceful runtime budget for the whole run.
emailMxCheckbooleanfalseVerify MX records for extracted email domains. Improves confidence but adds DNS lookups and runtime.
dedupeBystring"placeId"Deduplication key: placeId, website, or phone.
newOnlyOutputbooleantrueIf true, export only new items. If false, export unique items from the current run and include isNew.
webhookUrlstring-URL to POST results (batched). Stored encrypted.
resourceProfilestring"auto"Memory preset: Auto, Low (4 GB), Standard (4-8 GB), High (8 GB+). Auto detects the run memory and is recommended for most runs.
detailConcurrencyinteger(from profile)Optional override for place detail pages fetched in parallel (Phase 2). Leave empty to use the selected resource profile.
enrichmentConcurrencyinteger(from profile)Optional override for website pages fetched in parallel during enrichment (Phase 3). Leave empty to use the selected resource profile.

πŸ§ͺ Example input

{
"queries": ["dentist", "dental clinic"],
"locations": ["Berlin, Germany"],
"maxResultsTotal": 10,
"mode": "fast",
"enrichWebsite": false,
"emailMxCheck": false,
"dedupeBy": "placeId",
"newOnlyOutput": true
}

With coordinates πŸ—ΊοΈ:

{
"queries": ["cafe"],
"geo": { "lat": 52.52, "lng": 13.405, "radiusKm": 5 },
"maxResultsTotal": 10
}

With performance options βš™οΈ (match Resource profile to the memory you allocate for the run, or leave it on auto):

{
"queries": ["dentist"],
"locations": ["Berlin, Germany"],
"maxResultsTotal": 10,
"mode": "deep",
"maxWebsitesToEnrich": 25,
"maxRunTimeSec": 120,
"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. Use the 🚩 Review Queue dataset view for sites flagged with enrichment.reviewFlags, including no_email_exposed_after_browser_fallback.


πŸ“„ Example output item

{
"placeId": "0x47a84e339e1b3e6f:0xa3449be1eb562cf5",
"name": "Kottident - Dentist in Berlin Kreuzberg",
"address": "Adalbertstrasse 94, 10999 Berlin, Germany",
"category": "",
"phone": "+49 30 3911155",
"website": "http://www.kottident.de/",
"googleUrl": "https://www.google.com/maps/place/Kottident+-+Dentist+in+Berlin+Kreuzberg/data=!4m7!3m6!1s0x47a84e339e1b3e6f:0xa3449be1eb562cf5!8m2!3d52.5007495!4d13.4187246!16s%2Fg%2F1v_sm8bx!19sChIJbz4bnjNOqEcR9SxW6-GbRKM?authuser=0&hl=en&rclk=1",
"lat": 52.5007495,
"lng": 13.4187246,
"rating": "4.7",
"reviewCount": "",
"discoverySource": "detail",
"fetchedAt": "2026-03-22T22:45:15.688Z",
"isNew": true,
"emails": ["info@kottident.de"],
"socials": {
"facebook": "https://www.facebook.com/kottident",
"other": [
"http://kottident.de/contact.html",
"https://www.kottident.de/index%20-%20english.html"
]
},
"enrichment": {
"websiteVisited": true,
"scannedUrl": "https://www.kottident.de/impressum.html"
},
"emailQuality": {
"bestEmail": "info@kottident.de",
"bestScore": 72,
"averageScore": 72,
"highConfidenceCount": 0,
"mediumConfidenceCount": 1,
"lowConfidenceCount": 0,
"assessments": [
{
"email": "info@kottident.de",
"accepted": true,
"selected": true,
"syntaxValid": true,
"syntaxScore": 100,
"score": 72,
"confidence": "medium",
"domain": "kottident.de",
"domainMatchesWebsite": true,
"domainDistance": 0,
"roleBased": true,
"freeProvider": false,
"disposableProvider": false,
"mxValid": null,
"reasons": ["role_based", "domain_matches_website"]
}
],
"rejected": [],
"selectedEmails": ["info@kottident.de"],
"telemetry": {
"totalCandidates": 20,
"acceptedCount": 2,
"rejectedCount": 0,
"topRejectionReasons": [],
"domainMatchedPercent": 100,
"malformedPatternCounters": {}
}
},
"leadScore": { "score": 72.6, "grade": "B" },
"value": 72.6
}

🚩 Manual review example

{
"name": "Example Clinic Without Public Email",
"website": "https://example-clinic.com",
"emails": [],
"enrichment": {
"websiteVisited": true,
"scannedUrl": "https://example-clinic.com/impressum",
"browserFallbackExhausted": true,
"reviewFlags": ["no_email_exposed_after_browser_fallback"]
}
}

πŸ§ͺ Migration note (email quality update)

As of v0.0.1+email-quality-fix, email handling is stricter and deterministic:

  • emails now contains only normalized, syntax-valid, cleaned emails (no glued phone/URL/text artifacts).
  • emailQuality.bestEmail is guaranteed to be one of emails when emails.length > 0.
  • emailQuality.assessments now includes accepted and rejected candidates (with reasons) for debugging.
  • emailQuality.rejected contains { email, reasons[] } entries for explicit rejection diagnostics.
  • emailQuality.telemetry includes 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 uses explicit pay-per-event billing. lead-extracted is charged only after a unique lead is successfully written to the dataset, and website-enriched is charged only when a visited website yields useful contact signals. Use mode: "fast" for lead-only runs, or bound deep mode with maxResultsTotal, maxWebsitesToEnrich, and maxRunTimeSec.


🎯 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.