Google Maps Leads Extractor avatar

Google Maps Leads Extractor

Pricing

from $2.10 / 1,000 lead extracteds

Go to Apify Store
Google Maps Leads Extractor

Google Maps Leads Extractor

Turn any Google Maps search into B2B leads with emails, social profiles, review velocity, and website tech and ad-pixel detection. Run it weekly to flag new businesses and review growth. Brazil bonus: CNPJ, CNAE, and WhatsApp.

Pricing

from $2.10 / 1,000 lead extracteds

Rating

0.0

(0)

Developer

Gerson Cesar

Gerson Cesar

Maintained by Community

Actor stats

0

Bookmarked

30

Total users

3

Monthly active users

12 days ago

Last modified

Share

Turn any Google Maps search into a B2B lead list where every business comes with emails, social profiles, review velocity, and the tech and ad pixels on its website. Schedule it weekly and it flags the businesses that just appeared on the map, before anyone else has called them. Built for sales teams, agencies, and SDRs in any country. 🇧🇷 Brazil bonus: CNPJ, CNAE classification, and WhatsApp detection.

What does Google Maps Leads Extractor do?

This Actor scrapes Google Maps search results and, optionally, turns each result into a full sales dossier. It analyzes each business's recent Google reviews (review velocity, owner-response rate, latest review date, top keywords) and visits its website to detect the platform (Shopify/WordPress/Wix…), online store, chat widgets, and advertising pixels (Meta/Google/TikTok) — plus emails and social links. With change tracking on, each run is compared with the previous runs of the same search, so you can see which businesses are new and which are gaining reviews. For Brazilian businesses, it also enriches the CNPJ with razão social, CNAE classification, and capital social via BrasilAPI, and detects published WhatsApp links.

Try it directly on the Apify platform — no Google API key, no login, no manual exports required.

Why use Google Maps Leads Extractor?

  • Review intelligence — Know if a business is active before you reach out: review velocity (last 30/90 days), latest review date, whether the owner replies, and the keywords customers actually mention
  • Website intelligence — Detect the site platform, online store, chat widgets, and advertising pixels (Meta/Google/TikTok). "Has a site but no pixel" is the perfect filter for marketing agencies
  • Find business emails + social profiles at scale — Visits each business's website (homepage + contact paths) and extracts emails and social links
  • New businesses every week — Turn on trackChanges, schedule a weekly run, and every lead says whether it is new since last run and how many reviews it gained
  • Standard Google Maps fields — Name, address, phone, website, rating, reviews, opening hours, coordinates, Plus Code
  • Outbound-ready output — JSON, CSV, or Excel; or pipe to Google Sheets, HubSpot, Pipedrive via Apify integrations
  • 🇧🇷 Brazil bonus — CNPJ detection from website footers, BrasilAPI enrichment (razão social, CNAE, capital social), and WhatsApp link detection

Website & review intelligence

Two enrichments turn a plain listing into a qualified, actionable lead:

  • Review intelligence (includeReviews) — Extracts recent Google reviews and computes: recentReviewCount, reviewVelocity30d / reviewVelocity90d (how fresh the activity is), latestReviewDate, ownerResponseRate (does the owner engage?), and topKeywords (what customers praise or complain about). Control depth with maxReviews (1–50).
  • Website intelligence (includeWebsiteIntelligence) — Detects platform (Shopify, WooCommerce, WordPress, Wix, VTEX…), hasOnlineStore, chatWidgets (Intercom, Crisp, JivoChat, WhatsApp…), advertisingPixels (Meta Pixel, Google Ads/GA, TikTok, LinkedIn), and hasContactForm. Reuses the same page fetch as the email step, so it adds no extra requests.

Find new businesses on Google Maps every week

A plain scraper hands you the same list every week. With trackChanges: true, this Actor remembers what it saw for each search (search term + location) and adds a leadChange object to every lead:

  • isNew: true the first time a business shows up in this search. A business that just opened has no agency, no supplier, and nobody calling it yet.
  • reviewsDelta: reviews gained since the last run. A business gaining reviews is gaining customers.
  • daysSinceFirstSeen and ratingDelta for context.

How to set it up: save your search as a Task, turn on trackChanges, and schedule it weekly. The first run marks everything as new and builds the baseline; from the second run on, filter the dataset by leadChange.isNew = true to get only the fresh leads. History is stored in a named key-value store in your own Apify account, one per search, and businesses not seen for 180 days are dropped.

How to use Google Maps Leads Extractor

  1. Open the Actor on Apify and click Try for free
  2. Enter your search term — e.g. "restaurantes italianos", "clínicas odontológicas"
  3. Enter a location — city, region, or neighborhood
  4. Pick a language for Google Maps UI (en, pt, es, fr, de, it)
  5. Enable the enrichments you need:
    • ✅ "Reviews intelligence" — review velocity, owner-response rate, latest review, top keywords
    • ✅ "Website intelligence" — platform, online store, chat widgets, ad pixels
    • ✅ "Extract emails and social profiles" — visits business websites for emails + social links
    • ✅ "Track changes between runs" — flags new businesses and review growth on repeat runs
    • ✅ "Detect WhatsApp link on website" — whether the site advertises a WhatsApp contact
    • 🇧🇷 "Extract CNPJ" / "Enrich CNPJ with BrasilAPI" — Brazil-specific
  6. Click Run and download results as JSON, CSV, or Excel

Input

FieldRequiredDefaultDescription
searchTerm✅—What to search (e.g. "restaurantes italianos")
location✅—Where to search (e.g. "Pinheiros, São Paulo")
maxResults❌50Number of leads to extract (1–500)
language❌enUI language: en, pt, es, fr, de, it
includeHours❌trueExtract opening hours
includeReviews❌falseAnalyze recent Google reviews (velocity, owner-response, keywords)
maxReviews❌5Reviews to analyze per business (1–50)
includeWebsiteIntelligence❌falseDetect platform, online store, chat widgets, ad pixels
includeEmails❌falseVisit websites for emails + social links (up to ~8s per lead with a website)
includeCnpj❌false🇧🇷 Scan website for CNPJ
enrichCnpj❌false🇧🇷 Call BrasilAPI for full CNPJ details
checkWhatsapp❌falseDetect a WhatsApp link published on the website
trackChanges❌falseCompare with previous runs of the same search: flags new businesses and review growth
proxyConfiguration❌offRoute Google Maps traffic through Apify Proxy (for large or frequent runs)

Example input (global lead qualification):

{
"searchTerm": "dentists",
"location": "Austin, TX",
"maxResults": 100,
"language": "en",
"includeReviews": true,
"maxReviews": 10,
"includeWebsiteIntelligence": true,
"includeEmails": true
}

Example input (🇧🇷 Brazilian B2B prospecting):

{
"searchTerm": "clínicas odontológicas",
"location": "São Paulo, Brasil",
"maxResults": 100,
"language": "pt",
"includeReviews": true,
"includeWebsiteIntelligence": true,
"includeEmails": true,
"includeCnpj": true,
"enrichCnpj": true,
"checkWhatsapp": true
}

Output

Each business is saved as a structured JSON item in the Apify Dataset. Download in JSON, CSV, HTML, or Excel from the Apify Console.

Example output item (full enrichment):

{
"name": "Aguzzo Cucina Italiana - Pinheiros",
"address": "R. Simão Álvares, 325 - Pinheiros, São Paulo - SP, 05417-030",
"phone": "1130837363",
"website": "https://aguzzo.com.br/",
"category": "Restaurante italiano",
"rating": 4.5,
"reviewsCount": 2138,
"priceLevel": null,
"latitude": -23.5648215,
"longitude": -46.6882484,
"googleMapsUrl": "https://www.google.com/maps/place/Aguzzo+Cucina+Italiana+-+Pinheiros/...",
"plusCode": "C8P6+3P Pinheiros, São Paulo - SP",
"openingHours": [
"segunda-feira: 12:00–15:00, 19:00–23:00",
"terça-feira: 12:00–15:00, 19:00–23:00"
],
"reviewsIntelligence": {
"recentReviewCount": 10,
"reviewVelocity30d": 4,
"reviewVelocity90d": 8,
"latestReviewDate": "2026-07-12",
"ownerResponseRate": 0.7,
"topKeywords": ["atendimento", "massa", "ambiente", "vinho", "excelente"],
"recentReviews": [
{ "rating": 5, "text": "Atendimento impecável, melhor massa da região", "relativeDate": "uma semana atrás", "hasOwnerResponse": true }
]
},
"websiteIntelligence": {
"platform": "WordPress",
"hasOnlineStore": false,
"chatWidgets": ["WhatsApp widget"],
"advertisingPixels": ["Meta Pixel", "Google Ads/GA"],
"hasContactForm": true
},
"emails": ["contato@aguzzo.com.br", "reservas@aguzzo.com.br"],
"socialLinks": {
"facebook": "https://facebook.com/aguzzopinheiros",
"instagram": "https://instagram.com/aguzzocucinaitaliana",
"whatsapp": "https://wa.me/5511999998888"
},
"cnpj": "12.345.678/0001-99",
"cnpjData": {
"cnpj": "12.345.678/0001-99",
"razao_social": "AGUZZO CUCINA ITALIANA LTDA",
"nome_fantasia": "Aguzzo Pinheiros",
"cnae_fiscal_descricao": "Restaurantes e similares",
"cnae_fiscal": 5611201,
"porte": "ME",
"capital_social": 50000,
"natureza_juridica": "Sociedade Empresária Limitada",
"data_inicio_atividade": "2018-03-15",
"municipio": "SAO PAULO",
"uf": "SP",
"enrichedFrom": "brasilapi"
},
"whatsappBusiness": true,
"leadChange": {
"isNew": false,
"daysSinceFirstSeen": 14,
"reviewsDelta": 9,
"ratingDelta": 0
},
"searchQuery": "restaurantes italianos | Pinheiros, São Paulo, Brasil",
"scrapedAt": "2026-05-27T16:08:12.432Z"
}

Data table

FieldTypeDescription
namestringBusiness name
addressstring | nullFull street address
phonestring | nullPhone digits with optional + prefix
websitestring | nullBusiness website URL
categorystring | nullGoogle's category
ratingnumber | nullAverage rating 0–5
reviewsCountnumber | nullTotal Google reviews
priceLevelstring | null$, $$, $$$, $$$$
latitudenumber | nullDecimal degrees
longitudenumber | nullDecimal degrees
googleMapsUrlstringCanonical Place URL
plusCodestring | nullGoogle Plus Code
openingHoursstring[] | nullDay-formatted hours
reviewsIntelligenceobject | nullReview metrics: recentReviewCount, reviewVelocity30d/90d, latestReviewDate, ownerResponseRate, topKeywords, recentReviews (when includeReviews is true)
websiteIntelligenceobject | nullSite signals: platform, hasOnlineStore, chatWidgets, advertisingPixels, hasContactForm (when includeWebsiteIntelligence is true)
emailsstring[] | nullEmails extracted from website (when includeEmails is true)
socialLinksobject | nullFacebook, Instagram, LinkedIn, etc. URLs found on website
cnpjstring | nullCNPJ formatted "XX.XXX.XXX/XXXX-XX" (when includeCnpj is true)
cnpjDataobject | nullBrasilAPI enrichment: razão social, CNAE, capital social, etc.
whatsappBusinessboolean | nulltrue if the website publishes a WhatsApp link, false if the site has none, null if there is no website (when checkWhatsapp is true)
leadChangeobject | nullisNew, daysSinceFirstSeen, reviewsDelta, ratingDelta compared with previous runs of the same search (when trackChanges is true)
searchQuerystringOriginal search (audit field)
scrapedAtstringISO 8601 timestamp

Pricing — how much does it cost to scrape Google Maps leads?

This Actor uses Pay Per Event (PPE) pricing. Every lead pays the base rate; each enrichment adds a fee only when it actually delivered data for that lead:

EventWhen it is chargedPrice
Lead extractedEach business saved to the dataset (name, phone, address, hours, rating, coordinates)$2.10 / 1,000 leads
Enrichment deliveredOnly when at least one email, social link, or CNPJ (incl. BrasilAPI data) was found$5.40 / 1,000 leads
Website analyzedOnly when a platform, store, contact form, chat widget, or ad pixel was detected$0.50 / 1,000 leads
ReviewsOnly when at least one recent review was extracted$1.00 / 1,000 leads
Result (platform fee)Each item saved to the dataset$0.01 / 1,000 items
Actor startOnce per run, per GB of memory$0.00005

What that means per 1,000 leads:

You turn onYou pay at most
Nothing (Google Maps fields only)$2.11
Emails + social links$7.51
Emails + website intelligence + reviews$9.01
Everything, incl. 🇧🇷 CNPJ and WhatsApp$9.01 (CNPJ is covered by the same enrichment fee)
  • No data, no enrichment fee. No website, no email, no reviews, no CNPJ: you pay only the base lead rate for that business.
  • Example: 100 fully enriched leads cost at most $0.91.
  • Agency workflow: 5,000 leads a week with emails and social links cost at most about $37.55 a week.
  • Free tier: New Apify accounts get $5 credit, enough for about 550 fully enriched leads.

Tips and advanced options

  • Start small: Run with maxResults: 5 first to verify the enrichment flags do what you expect
  • Match the language to the location: Use language: "pt" for Brazilian cities — categories, opening hours, and addresses come back localized
  • Disable enrichments for speed: Each enrichment flag adds time. For just contact data, leave enrichCnpj and checkWhatsapp off
  • Refine location for better hits: "Vila Mariana, São Paulo" beats just "São Paulo" — more relevant, fewer dupes
  • Schedule weekly with trackChanges: Use Apify's scheduler to refresh prospect lists and keep only leads with leadChange.isNew = true; pipe them to your CRM via integrations
  • WhatsApp detection reads the website: whatsappBusiness is true when the site publishes a wa.me or api.whatsapp.com link. A business can use WhatsApp without linking it on its site, so false means "not advertised", not "not on WhatsApp"

FAQ, disclaimers, and support

Is this legal? Google Maps and Brazilian commercial websites are publicly accessible. CNPJ is public information by Brazilian law. This Actor extracts only what's visible to any human visitor.

Why are some cnpj fields null? Not every business has a website, and not every website displays the CNPJ visibly. The Actor returns null gracefully; no run is killed by a missing CNPJ.

Why is whatsappBusiness sometimes null? It is null when the business has no website (or the option is off). The value comes from links published on the website, so without a site there is nothing to check.

My BrasilAPI lookups occasionally return null. BrasilAPI is rate-limited and can return 404 for CNPJs that exist but are not in its index. The Actor handles this gracefully — the rest of the lead is still saved.

Need a custom solution? Open an issue in the Issues tab or contact us.