Lead Finder for Google Maps
Pricing
from $3.50 / 1,000 leads
Lead Finder for Google Maps
Find local businesses on Google Maps and get CRM-ready leads: phone, website, verified company emails, socials, a 0-100 lead score and optional AI enrichment. Personal data off by default. $0.005 per lead plus platform usage. Not affiliated with, endorsed by or sponsored by Google.
Pricing
from $3.50 / 1,000 leads
Rating
0.0
(0)
Developer
AIDevs
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Turn a Google Maps search into CRM-ready B2B leads: phone, website, verified company emails, social profiles and a 0-100 lead score for every business. Built for lead-generation and local-SEO agencies, B2B sales teams and anyone who prospects local businesses.
Not affiliated with, endorsed by or sponsored by Google.
Quick start
- Enter what to search for and where, e.g.
dentistinMalmö, Sweden(or paste Google Maps search or place URLs). - Set Max places to how many businesses you want (start with 20-50).
- Click Start, then export the leads as CSV, Excel or JSON, or send them to your CRM.
{ "searchTerms": ["dentist"], "locationQuery": "Malmö, Sweden", "maxPlaces": 50 }
Sample output
One row per business (synthetic example, shortened):
{"business": {"name": "Example Dental Clinic","categoryName": "Dentist","address": "Storgatan 1, 211 34 Malmö, Sweden","phone": "+46 70 000 00 00","website": "https://example.com/","rating": 4.7,"reviewsCount": 132},"contacts": {"primaryEmail": "info@example.com","emails": [{ "email": "info@example.com", "type": "generic", "sameDomain": true, "verification": { "status": "ok" } }],"contactForms": ["https://example.com/contact"],"socials": { "facebook": ["https://www.facebook.com/exampledental"] }},"contactStats": { "roleBasedEmails": 1, "personalEmails": 2, "namedPeople": 1, "personalDataIncluded": false },"scoring": { "leadQualityScore": 78, "leadQualityBand": "A", "contactabilityScore": 84 },"source": { "searchTerm": "dentist", "mapsUrl": "https://www.google.com/maps/place/..." }}
The Overview table in the Output tab shows business, category, address, phone, website, best email, rating, reviews and lead score. Run totals (places found, duplicates, filtered places, emails withheld, pages and websites skipped, why the run stopped) are saved as RUN_SUMMARY in the key-value store and are not billed.
Cost
You pay per lead (one business saved to the dataset), plus Apify platform usage: the compute your run uses, billed by Apify to your account at your plan's rates. Fewer pages per website (Max website pages) and fewer places keep that part small.
| Apify plan | Price per lead | 100 leads | 1,000 leads |
|---|---|---|---|
| Free | $0.005 | $0.50 | $5.00 |
| Bronze | $0.0045 | $0.45 | $4.50 |
| Silver | $0.004 | $0.40 | $4.00 |
| Gold and above | $0.0035 | $0.35 | $3.50 |
Website crawling, email discovery and verification, scoring and the built-in (rule-based) enrichment are included. You are never charged for duplicates, places your filters remove, pages that robots.txt disallows, errors or the run summary. The run stops as soon as your maximum total charge for the run is reached. AI enrichment with your own OpenAI, Anthropic or OpenRouter key costs nothing extra here (your provider bills you).
AI enrichment through the Apify AI gateway isn't available yet: choosing the gateway uses the free built-in rules instead of an AI model, and the run says so. AI enrichment with your own key works as described above. See AI and your data for model usage that Apify may bill separately.
FAQ
Is it legal? The Actor collects public data only and never logs in. It returns business contact data from Google Maps and from the businesses' own websites: business phone numbers, company emails, websites, addresses and ratings. Named people's details (personal-looking emails, names from team and imprint pages, personal LinkedIn profiles) are off by default. Phone numbers and other details on business websites can still belong to individuals, such as sole traders, so you are the data controller and need a lawful basis (for example legitimate interest) to process them; respect opt-outs, objections and outreach rules such as GDPR, ePrivacy or CAN-SPAM. Google's Terms of Service and the Google Maps Additional Terms of Service apply and restrict copying and bulk downloading of Maps content, so you are responsible for how you use the data; each business website's own terms apply too. The Actor follows robots.txt (see below), declines Google's cookie consent, and stops at CAPTCHAs and block pages instead of getting around them. Not affiliated with, endorsed by or sponsored by Google. This is not legal advice.
How does it treat robots.txt? Before the browser opens any Google Maps page (search, place or start URL), the URL is checked against Google's robots.txt, read once per run. Pages it disallows are skipped; if it can't be read (rate limit, server error, timeout), the Google Maps search doesn't start and nothing is charged. Each business website's robots.txt is followed by default (respectRobotsTxt): the rules for AIDevsBot apply if the site has them, otherwise those for all crawlers. A robots.txt that answers 401/403, or can't be read, counts as "disallow everything" for that site in this run; the lead's Google Maps details are still delivered (website.crawlStatus is robots-txt). Requests identify as AIDevsBot; site owners can opt out with User-agent: AIDevsBot / Disallow: / in robots.txt. (The browser that opens Google Maps keeps its own User-Agent.)
Which start URLs can I use? Only Google Maps search and place URLs: https://www.google.<tld>/maps/search/... or https://www.google.<tld>/maps/place/.... Other URLs are ignored, and the final status message says how many.
Why do I see personalEmails: 2 but only one email? Personal-looking addresses (e.g. firstname.lastname@ or initials) and names from team or imprint pages are withheld unless you switch on includePersonalData. The counts show what was found.
What if Google blocks the search? If Google shows an "unusual traffic" (CAPTCHA) page or a consent page without a "Reject all" option, the Maps search stops with a clear status message. Places found before that are still processed and charged as normal; nothing is charged for missing results. Try again later or with a smaller search.
Do I need proxies? The default Apify Proxy setting is recommended. The Actor never switches to residential proxies or rotates IPs to get around a block.
How are emails verified? Syntax, disposable-domain and DNS MX checks. ok means the domain accepts mail, not that a specific mailbox exists.
Can I use my own AI key? Yes: set enableAiEnrichment, choose OpenAI, Anthropic or OpenRouter and add aiApiKey. Every AI result is labelled; see AI and your data.
Wrong charge? Report it in the Issues tab; we reply within 14 days.
What happens to my data? AIDevs processes your input and results only to run the Actor. Nothing is kept or shared beyond your own Apify storages and the AI service you switch on.
AI and your data
- AI is off by default. When on, text goes either to Apify's AI gateway (Apify's OpenRouter Actor, then OpenRouter, then the model provider) or, with your own key, straight to that provider. With "Built-in heuristics" no text leaves the run.
- Apify AI gateway: Apify may bill the AI model's usage to your Apify account separately through its OpenRouter Actor, at OpenRouter's rates; free-plan accounts pay more and may be blocked. That model usage isn't part of the prices above. Only
openai/...andanthropic/...models are used there (no:freeor stealth variants; anything else falls back toopenai/gpt-4o-mini), and requests ask OpenRouter for providers that don't collect prompts. - If you choose a model, you also accept that model provider's terms and acceptable-use policy.
- Own OpenAI key: Use a dedicated OpenAI project key with a spending limit. It's used only inside your run, sent only to OpenAI, and never stored or logged. You're responsible for following OpenAI's terms.
- Own Anthropic key: use an Anthropic Console API key (not a Claude.ai login).
- While personal data is off, email addresses and phone numbers are masked before any text is sent to an AI model.
- EU AI Act: AIDevs is the provider of this AI feature; you're the deployer. AI fields are marked with
aiGenerated,aiModel,aiGeneratedAt,aiDigitalSourceTypeandaiNotice. Keep the label if you publish AI text. (aiNoticereads "AI-generated; may contain errors. Check facts before relying on them.";aiDigitalSourceTypeis the IPTC valuetrainedAlgorithmicMedia.)
Limitations
- Google Maps changes its pages from time to time; extraction coverage can vary until selectors are updated.
- One Google Maps search returns at most about 120 places; use several search terms or locations for bigger areas.
- Google Maps pages that Google's robots.txt disallows are skipped, and the search doesn't start when that file can't be read.
- Websites that answer with a CAPTCHA, login wall or block page, or disallow crawling in robots.txt, are skipped (their Google Maps details are still delivered). Because requests identify honestly as
AIDevsBot, some sites may refuse them. - Email classification (company vs personal) is heuristic.
- Opening hours are not extracted.
- Uses Apify's standard datacenter proxies only; residential and custom proxies aren't supported.
Works with AI agents through Apify's MCP server.
More tools from AIDevs
- AI Document Reader
- AI Web Page Reader
- Website to Markdown Crawler
- Nordic Jobs Scraper
- LinkedIn Jobs Scraper Pro
- AI Competitive Brief Generator
- SaaS Competitor Battlecards
- Price Pulse AI
How it works
- Searches Google Maps by keyword + location (or Google Maps search or place URLs) and reads each place: name, category, address, phone, website, rating, review count, coordinates and open/closed status. Every Google Maps URL is checked against Google's robots.txt first. Images, fonts and map tiles are not downloaded, which keeps runs fast and cheap.
- Removes duplicates found by several search terms (place ID first, then website, phone, name + address).
- Visits each business website over plain HTTP (no browser) as
AIDevsBot, following its robots.txt: homepage plus the most contact-relevant pages (contact, about, imprint). Extracts emails (mailto:, visible, obfuscated, JSON-LD), phones, contact forms, booking/chat signals and social profiles. - Verifies emails (
ok,invalid,disposable,catch_all,unknown,error). - Optional enrichment: niche, website quality, digital maturity, opportunity tags, pain points and a personalization hook, from the free built-in rules or an AI model.
- Scores every lead 0-100 with an A/B/C/D band (contactability, commercial fit, digital gap, reputation, legitimacy).
- Saves leads to the dataset,
RUN_SUMMARYto the key-value store, and optionally POSTs the summary to your webhook.
Input reference
See the Input tab for every option. Highlights:
| Field | Purpose |
|---|---|
searchTerms + locationQuery | Search terms and the area to search (recommended) |
startUrls | Google Maps search or place URLs |
maxPlaces | Maximum places to open in this run (cost control) |
minRating, minReviews, skipClosed, categoryFilters, excludeCategories | Google Maps filters |
crawlWebsite, maxWebsitePages, contactPagePriority, respectRobotsTxt | Website visit policy (default 4 pages per site, robots.txt respected) |
discoverEmails, verifyEmails, extractSocialLinks, extractContactForms | What to collect |
includePersonalData | Also return named people's details (off by default, see FAQ) |
enableAiEnrichment, aiProvider, aiModel, aiApiKey, aiPromptProfile, maxAiEnrichments | Enrichment |
requireWebsite, requireEmailOrForm, minLeadQualityScore, excludeDomains | Only keep leads you can use |
webhookUrl, batchId, includeRawHtml | Automation and debugging (webhookUrl is stored encrypted) |
Use it in n8n, Make & Zapier (no code)
In n8n, add the Apify node (or an HTTP Request node) and call entranced_gelato/google-maps-lead-engine with {"searchTerms": ["dentist"], "locationQuery": "Austin, TX", "maxPlaces": 50}. Every result is a scored lead record.
- Fresh leads into your CRM: a schedule runs the Actor for your niche and city, a Filter node keeps band A/B leads with a verified email, and a HubSpot or Pipedrive node creates the companies.
- Weekly outreach queue: a Code node dedupes new leads against your CRM by website domain, Google Sheets stores them, and your email tool drafts messages from
personalizationHook. - Hot-lead alerts: after each run, A-band leads with a verified email and phone are posted to Slack.
No Apify node? POST the input JSON to https://api.apify.com/v2/acts/entranced_gelato~google-maps-lead-engine/run-sync-get-dataset-items from any HTTP node, with your Apify token in an Authorization: Bearer header.
Product names in this README (Google, Google Maps, Google Sheets, OpenAI, Anthropic, Claude.ai, OpenRouter, Excel, n8n, Make, Zapier, HubSpot, Pipedrive, Slack, Facebook, LinkedIn) belong to their owners and are mentioned only to describe compatibility. Not affiliated with, endorsed by or sponsored by any of them.