Google Maps AI Leads | Score + Outreach
Pricing
from $3.00 / 1,000 scored leads
Google Maps AI Leads | Score + Outreach
Google Maps AI lead generator: scrape local businesses, score HOT/WARM/COLD by ICP, get Claude outreach. Multi-city. Phones, websites, ratings. AI off $3/1k · AI on $5/1k. Sales-ready B2B leads—not a raw Maps dump.
Pricing
from $3.00 / 1,000 scored leads
Rating
0.0
(0)
Developer
Rohit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Google Maps AI lead generator for sales teams and agencies: scrape Google Maps businesses, score local leads HOT/WARM/COLD by ICP, and write Claude Sonnet 5 outreach in one run.
Extract names, phones, websites, ratings, review counts, addresses, then get a lead score, tier, reason, and ready-to-send outreach — multi-city, not a raw field dump.
| AI off | Scored leads $3 / 1,000 |
| AI on | Score + Claude outreach $5 / 1,000 |
| AI model | Claude Sonnet 5 (Terra fallback) |
| Best for | B2B local leads, no-website agency lists, multi-city prospecting |
Search this Actor as: Google Maps AI leads, Google Maps lead extractor, scored local leads, Google Maps outreach.
What is Google Maps AI Leads?
This Google Maps scraper for lead generation finds businesses by keyword + city (e.g. dentists in Austin, plumbers Dallas), pulls public listing data, then ranks who to call first.
Unlike a classic Google Maps data extractor that only dumps places, this Actor is built for sales-ready B2B leads:
| Use case | How this helps |
|---|---|
| Any product outbound | Default ranking: phone + rating + reviews (website OK) |
| Web / digital agencies | ICP mode: no website = HOT; has website = COLD |
| Multi-city lead gen | Many queries × many locations in one run |
| AI outreach | Claude Sonnet 5 drafts research-backed messages |
| CRM / automation | Export JSON/CSV/Excel; API, Make, Zapier, Sheets |
It is not a full clone of mega Maps scrapers (every review photo, hotels, Q&A). Use those for raw dumps. Use this for who to contact and what to say.
✨ What you get per lead
Core Maps fields (always when found)
| Field | |
|---|---|
| 🔗 | Place name, category / categories, place ID, Maps URL |
| 📍 | Address, city, state, postal code, country, lat/lng |
| ☎️ | Phone number |
| 🌐 | Website (and hasWebsite boolean) |
| ⭐️ | Average rating + review count |
| 🧑🍳 | Opening hours (when available) |
| 🔒 | Business status (open / temporarily closed / permanently closed) |
| 🏷 | Claimed status (when available) |
| 🔎 | searchQuery + locationQuery that produced the row |
| 🕒 | scrapedAt timestamp |
Lead intelligence (default on)
| Field | |
|---|---|
| 🎯 | leadScore / icpFitScore 0–100 (fit for your sales mode) |
| 📊 | qualityScore — universal business quality (rating, reviews, phone) |
| 🔥 | leadTier — HOT / WARM / COLD |
| 🏷 | icpTags + icpPresetUsed |
| 🧠 | leadReason — why this lead ranks (Claude Sonnet 5 when AI on) |
| ✉️ | outreachMessage — research-backed outreach draft |
| 📈 | contactScore, aiConfidence, aiModel when AI ran |
Optional enrichment (off by default)
| Field | |
|---|---|
| 📧 | Public emails from the business website |
| 📱 | Public social links (Instagram, Facebook, LinkedIn, Twitter/X) when found on site |
| 📈 | End-of-run market report row (recordType: "market_report") |
🚀 Abilities that matter for lead gen
- Multi-query × multi-location in a single run — e.g.
["dentists", "orthodontists"]×["Austin, TX", "Dallas, TX"] - ICP ranking modes (two-layer score: quality + fit):
sales_general(default) — any product: phone + reputationagency_no_website— web agencies: no website = HOTfranchise_expansion— market density: high reviews + rating
- AI modes that map to price (powered by Claude Sonnet 5, Terra fallback — see Pricing):
off— rules score only → $3/1kall— AI outreach on every saved lead → $5/1khot— AI only on HOT leads → ~$3–5/1k (pay AI only when used)
- Extract modes for speed vs depth:
list(default) — search cards only; fastest for volumehybrid— list first; open detail only if phone/website/rating missingdetail— full place page every time; richest, slowest
- Hard caps —
maxPlacesPerLocation+maxPlacesTotalso runs stay predictable - Quality filters —
minRating,minReviews,mustHavePhone,websiteFilter,excludeClosed,onlyOutputMinScore - Proxy-ready — Apify Proxy on by default for platform runs
- Budget-safe PPE — charges per saved lead (and per AI outreach when written); respects max total charge
💰 Pricing — cheapest on Apify for AI quality leads
The best value among Apify Maps / lead Actors — especially if you want AI for quality leads, not a raw field dump.
Most competitors either:
- charge more per 1,000 places for basic scrape data, or
- stack base scrape + AI summary + AI score + enrichment into a much higher effective bill
We keep one clear story:
| Mode | Input | What you get | Face price |
|---|---|---|---|
| AI mode OFF | aiMode: "off" | Scored lead (fields + score + tier + tags) | $3 / 1,000 leads |
| AI mode ON | aiMode: "all" | Everything above + Claude Sonnet 5 reason + outreach | $5 / 1,000 leads |
That’s full AI quality leads (score + Claude Sonnet 5 reason + outreach) at $5/1k — typically the lowest all-in AI lead price you’ll find on the Store for this use case.
How events map (pay-per-event)
| Event name | Console title | Unit | When charged |
|---|---|---|---|
place-scraped | Scored lead | $0.003 | Every lead saved to the dataset |
lead-intelligence | AI outreach | $0.002 | Only when AI actually wrote outreachMessage for that lead |
Quick math
| Run | Approx face* |
|---|---|
| 1,000 leads · AI off | $3.00 |
| 1,000 leads · AI on (all) | $5.00 |
| 100 leads · AI on (all) | $0.50 |
| 1,000 leads · AI hot (~30% HOT get outreach) | ~$3.60 |
*Face list price before your Apify Store plan discount. Platform also applies a tiny synthetic start fee and compute units (CU) separately. Optional website enrichment / market report are not part of the two main prices (default off).
Publisher note: In Console Monetization, configure the same event names and prices. Prefer synthetic apify-actor-start. Do not also enable synthetic default-dataset-item billing if you charge place-scraped (that double-bills each row).
⬇️ Input
Provide at least one search query and one location. You can set this in the Actor UI or programmatically via API / apify-client.
Minimal example
{"searchQueries": ["dentists"],"locations": ["Austin, TX"]}
Recommended lead-gen example
{"searchQueries": ["dentists", "orthodontists"],"locations": ["Austin, TX", "Dallas, TX"],"maxPlacesPerLocation": 50,"maxPlacesTotal": 200,"extractMode": "list","enableLeadIntelligence": true,"aiMode": "hot","icpPreset": "sales_general","customIcpNotes": "We sell commercial cleaning to local service businesses.","onlyOutputMinScore": 60,"minRating": 4,"minReviews": 10,"mustHavePhone": true,"excludeClosed": true,"enableContactEnrichment": false,"enableMarketReport": false,"useApifyProxy": true,"maxConcurrency": 5}
Search queries
Use distinct terms that match how people search Maps.
| Good | Bad |
|---|---|
["restaurant", "bar", "cafe", "bakery"] | ["restaurant", "restaurants", "chinese restaurant"] (near-duplicates, slower, little extra coverage) |
["plumber", "emergency plumber", "drain cleaning"] | One mega-phrase only when you need breadth |
Slight category overlap is fine; long lists of synonyms usually only add runtime.
Locations
- City / metro:
"Austin, TX","Berlin, Germany" - Neighborhood or address-level strings work when Maps resolves them
- Multiple locations = one run (no orchestrator required for normal multi-city jobs)
Key input fields
| Field | Default | Purpose |
|---|---|---|
searchQueries | required | Keywords / categories to search |
locations | required | Areas to search |
maxPlacesPerLocation | 50 | Cap per city/area after dedup |
maxPlacesTotal | 100 | Cap for whole run |
extractMode | list | list · hybrid · detail |
enableLeadIntelligence | true | Score + optional AI |
aiMode | hot | off · hot · all (drives pricing) |
llmMinScore | 60 | Skip LLM below this score |
onlyOutputMinScore | 0 | Drop low-score rows from output |
icpPreset | agency_no_website | Scoring profile |
customIcpNotes | "" | Extra context for outreach (public business only) |
minRating / minReviews | 0 | Quality filters |
mustHavePhone | false | Require phone |
websiteFilter | any | any · has · missing |
excludeClosed | true | Drop permanently closed |
enableContactEnrichment | false | Crawl site for public email/social |
enableMarketReport | false | One market summary at end |
skipTileExpansion | true | Faster; set false to expand geo tiles when lists plateau |
maxConcurrency | 5 | Parallel browser pages (more = faster, more CU) |
useApifyProxy | true | Recommended on platform |
language | en | Maps UI language (hl) |
Speed tips
- Prefer
extractMode: "list"for large lead lists - Use
aiMode: "hot"so you only pay AI on top leads - Raise
maxConcurrencycarefully (memory / CU) - Keep
skipTileExpansion: trueunless you need deeper geographic coverage - Filter early (
onlyOutputMinScore,websiteFilter,minReviews) so you don’t store noise
⬆️ Output
Results land in the run Dataset (Output / Storage tab). Export as JSON, CSV, Excel, XML, or HTML. The Leads overview view highlights the columns sales teams care about first.
Sample lead row
{"placeId": "ChIJ…","name": "Example Dental","address": "123 Main St, Austin, TX 78701","city": "Austin","state": "Texas","postalCode": "78701","countryCode": "US","phone": "+15125550123","website": null,"hasWebsite": false,"category": "Dentist","categories": ["Dentist", "Dental clinic"],"rating": 4.8,"reviewCount": 142,"businessStatus": "OPEN","isClaimed": true,"latitude": 30.2672,"longitude": -97.7431,"mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ…","openingHours": ["Monday: 8 AM – 5 PM","Tuesday: 8 AM – 5 PM"],"searchQuery": "dentists","locationQuery": "Austin, TX","scrapedAt": "2026-04-08T12:00:00.000Z","leadScore": 88,"leadTier": "HOT","leadReason": "Strong ratings and review volume with no website — strong fit for agency outreach.","outreachMessage": "Hey — saw Example Dental has solid reviews on Maps but no site yet. curious if you ever thought about a simple page for bookings? happy to share what other dentists do if useful","icpTags": ["no_website", "high_rating", "agency_fit"],"contactScore": 72,"aiConfidence": 0.82,"aiModel": "claude-sonnet-5","recordType": "place"}
Dataset views
| View | Best for |
|---|---|
| Leads overview | Sorting by score / tier; calling list with phone + outreach |
| Full dataset / JSON | Automation, CRM import, custom fields |
Metrics
Each run also writes a METRICS object to the default key-value store (places found/output/filtered, intelligence success/fail, charges, early stop flags). Useful for debugging cost and coverage.
🤖 AI outreach — Claude Sonnet 5
This Actor uses Anthropic Claude Sonnet 5 (claude-sonnet-5) for lead intelligence when AI mode is on.
| Primary model | Claude Sonnet 5 — reasons + humanized outreach |
| API | Anthropic Messages · POST {base}/messages |
| Fallback | GPT‑5.6 Terra (gpt-5.6-terra) via OpenAI POST {base}/chat/completions — only if Claude fails after retries |
| On the row | aiModel is set to claude-sonnet-5 (or the fallback model if used) |
What Claude Sonnet 5 writes per lead
leadReason— 1–2 sentences on why the lead is HOT/WARM/COLD for your ICPoutreachMessage— short, humanized outreach (light natural grammar, not robotic) from public Maps signalsaiConfidence+icpTagswhen returned
How it works
- Rules engine scores every place (ICP weights, rating, reviews, website presence, etc.).
- Tier is assigned: HOT / WARM / COLD.
- If
aiModeishotoralland the lead clearsllmMinScore, the Actor calls Claude Sonnet 5 first (end users don’t paste API keys). - Claude returns
leadReason+outreachMessagegrounded in public listing signals — it does not invent private contacts. - If Claude is down, the run automatically retries on Terra, then continues.
- PPE event AI outreach is charged only when outreach was actually written.
If both providers fail, the Actor still returns rule-based scores and tiers (no fake outreach).
Owner LLM gateway (Actor publisher)
Set these as Actor environment variables (keys = Secret):
| Variable | Purpose |
|---|---|
LLM_GATEWAY_BASE_URL | Shared base, e.g. https://api.contactboxtools.me/v1 |
LLM_CLAUDE_API_KEY | Primary Claude Sonnet 5 key |
LLM_CLAUDE_MODEL | claude-sonnet-5 |
LLM_OPENAI_API_KEY | Fallback GPT key |
LLM_OPENAI_MODEL | gpt-5.6-terra |
End users of the Store Actor never paste their own keys for core scoring/outreach.
🔌 Integrate with other tools
Because this is a normal Apify Actor, you can:
- Schedule recurring multi-city lead pulls
- Send dataset rows to Google Sheets, Make, Zapier, webhooks, or your CRM
- Call it from Node or Python with
apify-client - Chain with other Actors (enrichment, email tools, Slack alerts) after a successful run
Use webhooks to notify your stack when a run succeeds or fails.
API sketch (Node)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('USERNAME/scored-local-leads-maps').call({searchQueries: ['dentists'],locations: ['Austin, TX'],maxPlacesTotal: 50,aiMode: 'hot',icpPreset: 'agency_no_website',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
❓ FAQ
How is this different from a classic Google Maps scraper?
Classic scrapers maximize fields per place (reviews, photos, amenities, hotels…). This Actor maximizes sales actionability: score, tier, reason, outreach, multi-city, simple AI on / AI off pricing.
Do I need categories lists with 100 synonyms?
No. Start with a few clear search queries and locations. Use filters (websiteFilter, minRating, onlyOutputMinScore) to shape the list. Over-specifying synonym categories is usually unnecessary here.
Why not more than ~120 results per area?
Google Maps UI search is finite per map view. Use multiple locations (or disable skipTileExpansion for neighbor tiles) and sensible query splits to cover larger metros. Always set maxPlacesPerLocation / maxPlacesTotal for cost control.
Can I extract full review text / reviewer profiles?
Not in the current product focus. You get rating + review count for scoring. For full review NLP, pair with a dedicated reviews Actor if needed.
Can I get emails from the business website?
Yes — turn on optional website contact enrichment to collect public emails and social links from the company site. Core AI outreach uses listing signals (rating, website presence, category, etc.) and does not invent private contacts.
Is this really cheaper than other Apify Maps Actors?
Yes for quality lead output. At $3/1k scored or $5/1k with AI outreach, you avoid the usual pattern of paying a higher base scrape rate plus separate AI / enrichment add-ons. For teams that care about who to call and what to say, this is the cheapest AI quality-leads option on Apify.
What happens if I hit my max charge limit?
Billable work already saved stays in the dataset. The crawl aborts cleanly when the PPE budget limit is reached so you don’t keep spending compute with no billing headroom.
List vs hybrid vs detail — which should I pick?
| Goal | Mode |
|---|---|
| Max leads / min time | list |
| Need phone/website when list card is thin | hybrid |
| Deepest place page fields every time | detail |
Is website enrichment free?
No — when enabled and successful it can charge the optional enrichment event. It is off by default and not part of the two main AI prices. Prefer filters + AI score first.
🛠 Local development (publishers / contributors)
npm installcp .env.example .env # LLM gateway secrets — never commitapify run -p # uses storage/key_value_stores/default/INPUT.jsonnpm testnpm run buildapify push # deploy build to Apify
Stack: TypeScript, Crawlee PlaywrightCrawler, Apify SDK · Docker image apify/actor-node-playwright-chrome with Playwright pinned for the image.
Hot-fix surface: Google changes DOM often — update src/config/selectors.json and re-test small runs after Maps UI shifts.
🗺 Why teams pick this over other Apify Maps Actors
| Typical Maps scraper on Apify | This Actor | |
|---|---|---|
| Primary output | Huge place JSON | Scored quality lead |
| Who to call first | DIY in sheets | leadScore / leadTier |
| What to say | Blank | outreachMessage via Claude Sonnet 5 |
| AI model | Often mini / generic | Claude Sonnet 5 (+ Terra fallback) |
| Pricing | Higher base + AI / enrich add-ons | Cheapest: $3/1k or $5/1k AI |
| Multi-city | Often many runs | First-class locations[] |
| Focus | Every field on the page | Sales-ready quality leads |
📣 Feedback
Found a Maps UI break, a scoring miss, or a pricing/docs gap? Open an issue on the Actor’s Issues tab with a short input sample and the run ID.
Google Maps AI Local Leads — multi-city Maps → score, tier, and Claude Sonnet 5 outreach.
AI model: Claude Sonnet 5 · Cheapest AI quality-leads on Apify: $3/1k · $5/1k with AI.