AI-Verified Local Business Lead avatar

AI-Verified Local Business Lead

Pricing

from $6.90 / 1,000 results

Go to Apify Store
AI-Verified Local Business Lead

AI-Verified Local Business Lead

a"Stop paying for rows — start paying for leads that answer the phone." AI audits each business (website, speed, booking, reviews), verifies decision-maker contacts, scores them against your ideal customer profile, and drafts a personalised opener. Pay only for qualifying leads — first 50 free.

Pricing

from $6.90 / 1,000 results

Rating

0.0

(0)

Developer

Rich Minds

Rich Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Categories

Share

AI Local Business Lead Generator — Digital Health Audit, Verified Contacts & Decision-Makers

Turn Google Maps places — or any list of businesses — into qualified, audited, contact-verified leads with a personalised outreach opener for each one. Every lead comes with a digital health audit of the business's website and reviews, a verified email that reaches a person where one exists, the owner's name when the site publishes it, an AI fit score against your ideal customer, and a first line written for that business.

You pay only for the leads that pass your filters: first 50 free, then $0.01 per lead, or $0.04 with AI qualification. No API keys required.

What does this Actor do?

For every business that passes your filters it delivers:

  • Digital health audit — website live/dead, HTTPS, mobile viewport, homepage speed grade, CMS/site builder, which tracking tools are installed (Google Tag Manager, Meta Pixel, Google Ads, TikTok…), online booking, chat/WhatsApp, hiring signals, and a digital maturity score with an A–F grade plus plain-English findings.
  • Contacts that reach a persondirectEmail (a named mailbox on the business's own domain) separated from genericEmail (info@), every domain MX-checked, optional mailbox verification with your MillionVerifier or NeverBounce account; phone in E.164, WhatsApp number, and Facebook / Instagram / LinkedIn / X / YouTube / TikTok / Yelp profiles.
  • Decision-maker — owner / founder / principal name and role when the website's about page or structured data names one. Never invented.
  • Reputation audit — negative-review count, unanswered negative reviews, rating distribution and, with AI on, the recurring complaints summarised in a line.
  • AI qualification — an ICP-fit score (0–100) against your description of your ideal customer, the reasons behind it, likely pain points, a one-line summary, an email subject line and a ready-to-send opener for email, SMS, WhatsApp, social DM or a cold call.
  • A lead score and label (hot / warm / cold) that blends fit, contactability and how many of your target opportunities the business has, so the sheet is sorted by who to contact first.

It also remembers every lead you have already received (never billed twice), honours a do-not-contact list, and works as a tool for AI agents and n8n / Make / Zapier workflows because every input is a plain typed field.

Why use it instead of a Google Maps scraper?

Google Maps scrapers all return the same rows: name, address, phone, rating. The work starts afterwards — opening each website, hunting for an email that is not info@, checking whether they run ads or take bookings, reading their bad reviews, deciding who is worth a call, writing a first line. This Actor does that work and charges only for the businesses that survive it.

A typical Google Maps scraperThis Actor
Pay per place scraped, including closed, duplicate and irrelevant onesPay per qualified lead; everything that fails your filters costs $0
Emails as a paid add-on, mostly info@ or emptyCrawls each site, de-obfuscates emails, separates direct (named) from generic, MX-checks every domain, optional mailbox verification
No idea who runs the businessOwner / founder / principal from the about page and structured data, confirmed by the AI
Nothing to talk aboutA digital health audit per business: speed grade, mobile, HTTPS, tracking pixels, booking, chat, CMS — with an A–F grade and written findings
Reviews are just a numberPulls the lowest-rated Google reviews, flags unanswered ones, and the AI summarises recurring complaints
Generic "lead quality"AI ICP-fit score with reasons, pain points, subject line and opener for the channel you choose
Same leads again next weekCross-run memory plus a do-not-contact list
Scrapes onlyThree input modes: search Google Maps, enrich an existing Apify dataset, or paste your own list
Unpredictable spendFour hard caps: maxQualifiedLeads, maxLeadsToProcess, maxDiscoveryChargeUsd and Apify's own max charge
"Bring your OpenAI key"No keys needed — AI runs through Apify's built-in model access, tokens land on your Apify bill at cost

A worked example. 3 search terms × 100 places in one city, AI on, minLeadScore: 60, requireEmail: true:

Raw scraper + manual researchThis Actor
Scraping ~300 places≈ $0.45–1.20≈ $0.45–1.20 (same scraper, run on your account)
Auditing each site, finding a direct email, reading reviews, judging fit, writing a first line300 rows × 2–3 min ≈ 10–15 hoursincluded
AI qualification of the ~55 leads that pass55 × $0.04 = $2.20 + ≈ $0.40 of AI tokens
Result300 rows you still have to clean~55 audited, ranked leads with subject lines and openers
Total≈ $1 + two working days≈ $3–4 — and $0 on this Actor for your first 50 leads

The funnel numbers are illustrative; your pass rate depends on the niche, the city and how strict your filters are. The shape is always the same: cents for the leads that survive, nothing for the ones that don't.

How much does it cost?

Pay-per-event: one event per qualified lead, nothing else.

EventWhen it is chargedPrice
free-tierYour first 50 qualified leads on this Actor, in any mode$0.00
qualified-lead-basicAI off — audit, verified contacts (direct / generic), decision-maker, socials, tech, review health, flags, rule-based scores$0.01
qualified-lead-aiAI on — everything above plus ICP score, reasons, pain points, recurring complaints, summary, subject line, opener, next step$0.04

Never charged: discovery, crawling, verification, leads below minLeadScore, leads that fail any filter, leads on your do-not-contact list, leads seen in a previous run. Platform compute is included in the event price.

Billed separately, at cost:

  • AI tokens — billed to your Apify account at OpenRouter's rates as the run happens (≈ $0.005–0.01 per AI lead with the default model), or to your own key in byok mode. An AI lead therefore costs ≈ $0.045–0.05 all-in, and the token line is visible separately in your usage.
  • Google Maps discovery — the Google Maps Scraper runs on your account (≈ $1.5–4 per 1,000 places; a little more when reviews are on). Not needed in dataset or list mode.
  • Mailbox verification — your own MillionVerifier / NeverBounce credits, at most 2 per lead. Optional.

What a run typically costs

ScenarioLeads deliveredOn this ActorPlus
First run, any modeup to 50$0tokens if AI is on (≈ $0.35 for 50)
Paste 20 businesses, AI on20$0.80≈ $0.15 tokens
Enrich a 300-row dataset you already have, AI off~180≈ $1.80nothing
One city, 3 search terms, AI on (example above)~55≈ $2.20≈ $0.40 tokens + ≈ $0.45–1.20 scraper
1,000 audited, AI-qualified leads a month1,000$40≈ $8 tokens + scraper
Weekly schedule, same city, dedupe ononly new leadsoften < $1tokens for the new leads only

On the Apify free plan, built-in model access is priced at 10× and capped at 2,048 tokens per response — fine for testing; a paid plan or your own key is the cheaper way to run real volumes.

How to use it

  1. Pick a campaign preset (or leave Custom). A preset fills the search terms, ideal-customer description, offer, filters and target opportunities; anything you type yourself always wins.
  2. Pick a source. Search Google Maps (search terms + location), Existing Apify dataset (a previous scraper run), or Paste my own list (name / website / phone per business).
  3. Describe your ideal customer and your offer in two sentences each — presets pre-fill this. Be specific: "Independent dental clinics with 4+ stars and 20+ reviews that do not offer online booking" beats "dentists".
  4. Set filters and caps. targetFlags, minRating, minReviews, requireEmail + minEmailQuality, then maxQualifiedLeads for the budget you want to spend.
  5. Run. The status line shows Discovering → Crawling → Verifying → AI-qualifying → Delivered.
  6. Use the leads. Open the Qualified leads, Outreach sheet, Digital health audit or Contact sheet table; export CSV / Excel / JSON; or push to Google Sheets, HubSpot, Slack, Make or Zapier from the Integrations tab.

Campaign presets

PresetBuilt forWhat it looks forFlags to filter the sheet by
Web agency — no websiteWeb design agencies, freelancers4★+ service businesses with no website; cold-call scriptno_website
Web agency — outdated / slow siteRedesign and CRO agenciesSite-builder templates, no mobile viewport, no HTTPS, speed grade D/Fsite_builder_template, slow_website, no_mobile_viewport
Booking softwareScheduling / booking SaaSAppointment businesses with no online booking; direct email requiredno_online_booking
Paid-ads agencyPPC and social-ads agencies4.3★+ with 30+ reviews and no ad pixel or analyticsno_ads_pixel, no_analytics
Reputation managementReview and reputation agenciesRating below 4.3, unanswered negative reviews, few reviews, unclaimed profile; pulls the 10 lowest reviewsunanswered_negative_reviews, low_rating
Local SEOLocal SEO agenciesUnclaimed listings, no analytics, few reviews, weak or missing siteunclaimed_listing, no_analytics
WhatsApp / messaging toolsWhatsApp Business, chat and CRM vendors (India, LATAM, SEA)Customer-facing businesses with no WhatsApp or chat button; WhatsApp openerno_whatsapp, no_chat_widget

With Custom, set targetFlags yourself: the Actor then delivers only leads that have at least one of them and ranks leads with more of them higher.

How the pipeline works

  1. Source — runs the Google Maps Scraper on your account, reads a dataset from any previous scraper run, or takes the list you paste in.
  2. Pre-filter (free) — closed businesses, duplicates, leads seen in earlier runs, your do-not-contact list, minimum rating / reviews, with or without website.
  3. Audit and enrich (free) — crawls each website (home + up to 3 contact/about pages) for emails, phones, WhatsApp, social profiles, decision-maker names, tech stack, tracking and ad pixels, booking vendors, chat widgets, hiring signals, HTTPS, mobile viewport and homepage response time / weight / script count. MX-checks every email domain; optionally verifies mailboxes with your verifier account.
  4. Score (free) — contactability score, digital maturity score (A–F), opportunity flags, growth signals, and which of your target opportunities each lead has.
  5. AI qualify — scores ICP fit against your description of who you sell to and what you sell, explains why, lists pain points, summarises recurring review complaints, confirms the decision-maker and writes the subject line and opener. The most contactable candidates are assessed first, so tokens go where they matter.
  6. Rank, cap, deliver — leads above minLeadScore are sorted best-first, capped at maxQualifiedLeads, and only then charged (or taken from your free 50) and pushed. Optional webhook per lead or per batch.

Nothing before step 6 costs anything on this Actor.

Input

The shortest useful input — a preset and a city:

{
"campaignPreset": "booking-saas",
"sourceMode": "googleMaps",
"location": "Austin, TX",
"maxPlacesPerSearch": 100,
"maxQualifiedLeads": 50
}

A fully custom Google Maps search:

{
"sourceMode": "googleMaps",
"searchTerms": ["dentist", "orthodontist"],
"location": "Austin, TX",
"maxPlacesPerSearch": 100,
"maxReviewsPerPlace": 10,
"icpDescription": "Independent dental clinics with 4+ stars and 20+ reviews that do not offer online booking.",
"serviceOffered": "We build modern dental websites with built-in online booking, live in 14 days.",
"minRating": 4,
"minReviews": 20,
"targetFlags": ["no_online_booking", "site_builder_template"],
"requireEmail": true,
"minEmailQuality": "verified",
"suppressionList": ["existing-client.com", "+15125550100"],
"minLeadScore": 60,
"maxQualifiedLeads": 50,
"outreachChannel": "email"
}

Enrich a list you already have (no Google Maps cost):

{
"sourceMode": "list",
"leadsList": [
{ "name": "Bright Smile Dental", "website": "brightsmile.example", "phone": "(512) 555-0134", "city": "Austin", "countryCode": "US" },
{ "name": "Corner Café", "website": "cornercafe.example", "countryCode": "GB" }
],
"enableAi": false
}

Enrich the output of any Google Maps scraper run (pick the dataset in the form):

{ "sourceMode": "dataset", "datasetId": "abc123DatasetId", "minLeadScore": 50 }

Input options

FieldWhat it does
campaignPresetOne of the 7 presets above, or custom (default)
sourceModegoogleMaps, dataset or list
searchTerms, location, maxPlacesPerSearchGoogle Maps search (one term per line; a preset fills the terms if you leave them empty)
language, skipClosedPlaces, discoveryActorId, maxDiscoveryChargeUsdGoogle Maps search details: result language, drop closed places (default on), which scraper Actor to run, and a cap on its spend
maxReviewsPerPlacePull the N lowest-rated Google reviews per place for the reputation audit (Google Maps mode; 0 = off)
datasetIddataset mode: the Apify dataset to enrich (pick it in the form)
leadsList, defaultCountryCodelist mode: the businesses to enrich (name, website, phone, city, countryCode, rating, reviewCount, reviews…) and the country used to normalise phone numbers
icpDescription, serviceOfferedDrive the AI score and the opener — be specific
minRating, minReviews, websiteFilterCheap pre-filters; websiteFilter: "withoutWebsite" gives pure no-website leads
targetFlagsDeliver only leads with at least one of these audit findings; more matches rank higher
requireEmail + minEmailQualityany / verified (MX or verifier OK) / direct (a named person on the business's own domain)
minLeadScoreBelow this the lead is discarded and not charged (default 50)
suppressionListDomains, emails, phones or exact names never to deliver — customers, competitors, opt-outs
enrichWebsite, maxPagesPerSite, respectRobotsTxtWebsite crawl controls (default on, 3 pages, robots.txt respected)
verifyEmailsFree MX check on every email domain (default on)
emailVerifier + emailVerifierApiKeyOptional mailbox verification with your MillionVerifier or NeverBounce account
excludeFreeEmailProvidersDrop gmail / yahoo / hotmail-style addresses
enableAiAI qualification on/off (default on)
llmProvider, llmModel, llmApiKeyapify (default, no keys; Claude Haiku 4.5 or any OpenRouter slug) or byok with your OpenAI / Anthropic / Gemini / Groq key
outreachChannel, outreachToneemail (with subject line), sms, whatsapp, dm or call × friendly, professional or direct
aiCandidateMultiplierHow many of the best candidates get the AI pass, as a multiple of maxQualifiedLeads (default 2)
maxQualifiedLeads, maxLeadsToProcessHard caps on delivered leads (and therefore on what you pay) and on sites crawled per run
dedupeAcrossRuns, dedupeStoreNameNever receive the same lead twice; one store per campaign
webhookUrl, webhookHeaders, webhookBatchSizePOST leads as JSON with your auth headers, one per lead or in batches
proxyConfigurationApify Proxy for the website crawl (recommended)

Every field has a description in the input form.

Output

One dataset item per qualified lead, best-scoring first. Four table views are ready in the run's Output tab, each exportable as CSV, Excel or JSON:

ViewColumnsUse it for
Qualified leadsBusiness, score, fit, digital grade, contact quality, email, phone, website, rating, target hits, opportunities, openerThe overview
Outreach sheetBusiness, decision-maker, direct email, best email, phone, WhatsApp, subject, opener, next stepImporting into Smartlead / Instantly / lemlist or a dialer — outreachOpener becomes the first line of the sequence
Digital health auditMaturity score and grade, speed, mobile, HTTPS, tech, tracking tools, paid ads, booking, chat, review health, findings, growth signalsThe audit an agency shows the prospect
Contact sheetBusiness, decision-maker, direct / generic email, quality, phone, WhatsApp, website, socials, addressCRM import

A qualified lead with AI on:

{
"name": "Bright Smile Dental",
"category": "Dentist",
"city": "Austin",
"countryCode": "US",
"phone": "+15125550134",
"website": "https://www.brightsmile.example/",
"googleRating": 4.7,
"reviewCount": 132,
"isClaimed": false,
"bestEmail": "dr.patel@brightsmile.example",
"directEmail": "dr.patel@brightsmile.example",
"genericEmail": "info@brightsmile.example",
"contactQuality": "direct",
"decisionMakerName": "Dr. Anjali Patel",
"decisionMakerRole": "Principal Dentist",
"socials": { "facebook": "https://www.facebook.com/brightsmileatx", "instagram": "https://instagram.com/brightsmile.atx" },
"techStack": ["Wix"],
"trackingTools": ["Google Analytics"],
"runsPaidAds": false,
"hasOnlineBooking": false,
"hasChatWidget": false,
"performanceGrade": "D",
"digitalMaturityScore": 52,
"digitalMaturityGrade": "C",
"opportunityFlags": ["slow_website", "no_online_booking", "no_chat_widget", "no_whatsapp", "no_ads_pixel", "site_builder_template", "unclaimed_listing", "unanswered_negative_reviews"],
"auditFindings": ["Homepage is slow or heavy (performance grade D/F)", "No online booking / ordering detected", "…"],
"growthSignals": ["high_review_volume", "strong_reputation"],
"targetFlagsMatched": ["no_online_booking", "site_builder_template"],
"negativeReviewCount": 3,
"unansweredNegativeReviews": 2,
"recurringComplaints": ["Phone not answered when trying to book", "Website unusable on mobile"],
"contactabilityScore": 100,
"icpFitScore": 88,
"leadScore": 91,
"fitLabel": "hot",
"scoreReasons": [
"Independent dentist with 4.7★ / 132 reviews — strong reputation, matches ICP",
"No online booking on a slow Wix site (grade D) — core pain the offer solves",
"Negative reviews mention unanswered phones — patients already want to book online",
"Google Business Profile unclaimed — low digital maturity"
],
"painPoints": ["Phone-only appointment booking", "Slow template site limits conversions", "Unclaimed listing hurts local SEO"],
"businessSummary": "Independent family dental clinic in downtown Austin with a strong review base and a slow template website.",
"outreachSubject": "Bright Smile's 4.7 stars, without the phone tag",
"outreachOpener": "Anjali, Bright Smile has a 4.7-star reputation on Google, yet two recent reviews say patients couldn't get through to book — would it be worth seeing how a 14-day site with built-in booking turns those reviews into appointments?",
"recommendedNextStep": "Email Dr. Patel directly with a 2-minute Loom of a booking-enabled dental site.",
"chargedEvent": "qualified-lead-ai",
"enrichedAt": "2026-09-20T09:12:44+00:00"
}

Output fields

GroupFields
BusinessleadId, name, category, categories, address, street, city, state, postalCode, countryCode, lat, lng, placeUrl, placeId, isClaimed, googleRating, reviewCount, reviewsDistribution
Contactsphone (E.164), phoneRaw, phonesFromWebsite, whatsappNumber, bestEmail, directEmail, genericEmail, contactQuality (direct / generic / other / free-provider / none), emails[] (email, type, domainMatchesWebsite, mxValid, verification, verifiedBy, sourceUrl), decisionMakerName, decisionMakerRole, peopleFound[], socials{}
Website & auditwebsite, websiteDomain, websiteStatus, websiteTitle, websiteDescription, usesSsl, hasMobileViewport, responseMs, pageWeightKb, scriptCount, performanceGrade, techStack, trackingTools, hasAnalytics, hasAdsPixel, runsPaidAds, hasOnlineBooking, hasChatWidget, hasWhatsApp, isHiring, pagesCrawled, digitalMaturityScore, digitalMaturityGrade, opportunityFlags, auditFindings, growthSignals, targetFlagsMatched
ReputationnegativeReviewCount, negativeReviewSample (text only), unansweredNegativeReviews, recurringComplaints (AI)
ScorescontactabilityScore, icpFitScore (AI), leadScore, fitLabel, scoreReasons (AI), painPoints (AI), businessSummary (AI)
OutreachoutreachSubject, outreachOpener, recommendedNextStep (all AI), aiModel
BookkeepingchargedEvent (free-tier / qualified-lead-basic / qualified-lead-ai), source, dedupeKey, enrichedAt

Opportunity flags: no_website, website_unreachable, no_ssl, no_mobile_viewport, slow_website, no_email_found, no_online_booking, no_chat_widget, no_whatsapp, no_analytics, no_ads_pixel, no_social_presence, weak_social_presence, site_builder_template, unclaimed_listing, low_rating, few_reviews, recent_negative_reviews, unanswered_negative_reviews. Growth signals: hiring, runs_paid_ads, high_review_volume, strong_reputation, multi_channel.

The run's key-value store also holds a RUN_SUMMARY record with the funnel (discovered → filtered → enriched → AI-assessed → qualified), per-reason skip counts, charged events, free-tier balance and webhook delivery counts.

What the openers look like

The AI writes for the channel you choose and must anchor on one specific, observed detail — never a placeholder, never a claim it cannot see in the data. When the site names an owner, the opener uses their first name. Leads rated cold get no opener at all.

  • Email (friendly) — subject "Bright Smile's 4.7 stars, without the phone tag""Anjali, Bright Smile has a 4.7-star reputation on Google, yet two recent reviews say patients couldn't get through to book — would it be worth seeing how a 14-day site with built-in booking turns those reviews into appointments?"
  • WhatsApp (friendly) — "Hi! Found Spice Garden on Google Maps — 4.6★ from 210 reviews, but there's no WhatsApp button on your site, so evening enquiries go unanswered. We set up click-to-chat with instant replies in two days. Want a quick look?"
  • SMS (direct) — "Zen Yoga has 4.9★ across 210 reviews but classes still can't be booked online. We launch booking-enabled studio sites in 14 days — worth a 10-minute look this week?"
  • Cold call (friendly) — "Hi, I found Rosa's Cleaning on Google Maps — 4.9 stars from 63 reviews, but no website linked, so new customers can only reach you by phone. We put cleaning businesses online with booking in about a week. Have you got a minute for me to explain how that works?"

Integrations and automation

  • Schedules — run weekly per city and category; the dedupe store guarantees only new leads are delivered and billed.
  • Integrations tab — Google Sheets, HubSpot, Slack, Make, Zapier, GitHub and generic webhooks, no code.
  • WebhookwebhookUrl receives { "event": "lead.qualified", "lead": { … } } per lead, or { "event": "leads.qualified", "leads": [ … ] } in batches (webhookBatchSize), with any headers you set in webhookHeaders (API keys, bearer tokens). Point it at an n8n / Make webhook node or straight at a cold-email tool's lead-import endpoint.
  • Cold-email tools — export the Outreach sheet view as CSV; its columns map onto Smartlead / Instantly / lemlist custom fields so every email in the sequence can start with {{outreachOpener}}.
  • AI agents (MCP) — add the Actor to your Apify MCP server and let Claude or ChatGPT find, audit and qualify leads on request ("find 20 Austin dentists without online booking and draft openers").

Using the API

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<username>/local-business-lead-gen-ai").call(run_input={
"campaignPreset": "web-agency-no-website",
"sourceMode": "googleMaps",
"location": "Chennai, India",
"maxQualifiedLeads": 25,
})
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
print(lead["name"], lead["contactQuality"], lead["bestEmail"], lead["outreachOpener"])

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<username>/local-business-lead-gen-ai').call({
campaignPreset: 'booking-saas',
sourceMode: 'googleMaps',
location: 'Austin, TX',
maxQualifiedLeads: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Use ?view=outreach&format=csv (or audit, contacts) on the dataset items endpoint to download a view directly.

Who is it for?

  • Web, ads, SEO and reputation agencies — the audit is the pitch; the decision-maker and direct email are who to send it to.
  • Local SaaS vendors — booking, POS, reputation, payroll, insurance, messaging: target the exact gap your product fills with targetFlags.
  • Sales teams and SDRs — a clean, ranked sheet with openers instead of scraper output.
  • Agencies selling lead generation as a service — a weekly schedule pushing to a client's Google Sheet, or a webhook into a warmed sending tool, is a productised offer: audited leads with direct contacts, subject lines and openers, deduplicated month over month.

How the AI works

  • Grounded, not generative. The model sees one structured business record at a time — Google Maps data, the audit, the people and reviews found — and must return a typed assessment: score, label, up to 4 reasons tied to specific fields, up to 3 pain points, up to 3 recurring complaints, a decision-maker only if the record names one, a summary, a subject line, an opener and a next step. Names the record does not contain are discarded even if the model produces them.
  • Your ICP, your offer. The score measures fit with your icpDescription and how likely the business needs your serviceOffered — not a generic "lead quality" number.
  • Tokens where they matter. Only the most contactable candidates get the AI pass (aiCandidateMultiplier × maxQualifiedLeads).
  • No keys required. Default is Claude Haiku 4.5 through Apify's built-in model access. Set llmProvider: "byok" to use your own OpenAI, Anthropic, Gemini or Groq key, or put any OpenRouter model slug in llmModel.
  • Graceful fallback. If the model cannot be reached, the run continues with the rule-based audit and scoring, and those leads are charged at the basic price.

Data, compliance and limitations

  • Only publicly available business information is processed: Google Maps listings, the business's own public website pages, and public Google reviews (stars, text, date and whether the owner replied — reviewer names and profiles are never kept).
  • The crawler respects robots.txt by default, fetches at most a handful of pages per site at normal speed, and does nothing to circumvent access controls.
  • No LinkedIn or personal-profile scraping. Decision-maker names come only from what the business publishes about itself (about / team pages, schema.org founder / employee data). Many small-business sites name nobody; then decisionMakerName is null.
  • Email verification is MX-level by default, not SMTP (which gets cloud IPs blocked). For mailbox-level results, plug in your MillionVerifier or NeverBounce key.
  • The speed grade is a crawl-time heuristic (homepage response time, HTML weight, external script count), not a Lighthouse score. A grade D/F site is slow on any device; run PageSpeed Insights on the ones you pitch.
  • Built for B2B prospecting, not spam: free-provider addresses are labelled so you can exclude them, the suppressionList keeps opt-outs and customers out of every run, and every record carries enrichedAt. Follow the outreach laws that apply to you (CAN-SPAM, GDPR/PECR, India's DPDP Act…).
  • Keys you supply (llmApiKey, emailVerifierApiKey) are stored encrypted by Apify and never logged.

FAQ

Which Google Maps scraper does it use? By default the most-used one on Apify Store (compass/crawler-google-places), started on your account with contacts and images switched off to keep it cheap. Reviews are fetched only when maxReviewsPerPlace > 0. Change discoveryActorId to use another.

Can I use it without Google Maps? Yes — list mode audits and enriches any businesses you paste in; dataset mode enriches any previous scraper run. Reviews in a pasted list (reviews: [{ "stars": 2, "text": "…" }]) are used too.

How does the free tier work? The first 50 qualified leads delivered to your Apify account are pushed with chargedEvent: "free-tier" and cost nothing on this Actor. The counter lives in a key-value store on your account (local-business-lead-gen-ai-account); RUN_SUMMARY shows what is left. AI tokens for those leads are still billed by Apify as usual.

What is a "direct" email? A named mailbox on the business's own domain — anjali@brightsmile.com, not info@brightsmile.com and not brightsmile@gmail.com. contactQuality tells you which kind each lead has; minEmailQuality: "direct" delivers only leads that have one.

Do I need an OpenAI or Anthropic account? No. By default the AI runs through Apify's built-in model access and the tokens appear on your Apify usage. Switch llmProvider to byok and add llmApiKey if you would rather use your own account.

Which model? Default is Claude Haiku 4.5. Any OpenRouter slug works in llmModel, e.g. openai/gpt-4.1-mini, google/gemini-3.6-flash, anthropic/claude-sonnet-4.5 — bigger models cost more tokens, nothing else changes.

Will the AI make things up? It only sees the record it is given and must ground every reason in a specific field; decision-maker names it produces are checked against the crawled text and dropped if absent; cold leads get an empty opener rather than an invented pitch. Treat the opener as a strong first draft that already knows the business — read it before you send it.

Why did I get fewer leads than maxQualifiedLeads? Fewer passed your filters and score. Loosen targetFlags, minLeadScore, minEmailQuality or minReviews, or raise maxPlacesPerSearch.

How does dedupe work across runs? Every lead you were charged for (or received free) is remembered in a key-value store on your account (dedupeStoreName, default local-leads-seen). Use a different store name per campaign. Leads that were filtered out are not remembered, so they can qualify later when, say, their review count grows.

Can I cap what a run can cost? Four ways: maxQualifiedLeads (max events), maxLeadsToProcess (max sites crawled), maxDiscoveryChargeUsd (max Google Maps scraper spend) and Apify's own Max total charge on the run.

Support

Found a bug, or want a new audit check, preset or data source? Open an issue on the Issues tab of this Actor — requests from real campaigns drive the roadmap.

Changelog

  • 0.2 — Digital health audit (speed grade, named tracking tools, maturity score A–F, written findings, hiring and growth signals); direct vs generic email with contactQuality; decision-maker extraction from about pages and structured data, AI-confirmed; optional MillionVerifier / NeverBounce mailbox verification; Google-review reputation audit with recurring-complaint summary; 7 campaign presets; targetFlags filter and score boost; minEmailQuality; do-not-contact suppressionList; WhatsApp detection and outreach channel; email subject lines; webhook headers and batching; Outreach and Audit dataset views; free tier (first 50 leads) and lower prices ($0.01 basic / $0.04 AI).
  • 0.1 — Initial release: 3 source modes, website enrichment, MX verification, opportunity flags, AI qualification with openers (no API keys needed), cross-run dedupe, webhook, pay-per-qualified-lead pricing.