Google Maps Business Leads Scraper (Emails, Phones & Socials) avatar

Google Maps Business Leads Scraper (Emails, Phones & Socials)

Pricing

from $17.00 / 1,000 results

Go to Apify Store
Google Maps Business Leads Scraper (Emails, Phones & Socials)

Google Maps Business Leads Scraper (Emails, Phones & Socials)

Turn Google Maps searches into contact-enriched business leads. Get name, category, address, phone, website, rating and review count, plus emails, social profiles and extra phones pulled from each business website. Export to JSON, CSV or Excel.

Pricing

from $17.00 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Google Maps Business Leads Scraper (Emails, Phones & Socials)

Google Maps Business Leads Scraper (Emails, Phones & Socials)

Here is one real result, with every field the actor returns:

{
"businessName": "Icon Dental",
"category": "Dentist",
"imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWmBjdvxLNYNK-pCSwRhPMe4VSkEh5fPeEo37bJ_7b5FHtl1olfXM1lF9tHfOhLyPML8TxpmgT0Fi-XEXJ5ZH2FTXqBmZ4UWn2c4bE5oQVPBf4eRsGBY4EgvRfvO_8As8gA6Y3M=w86-h122-k-no",
"rating": 4.6,
"reviewCount": 46,
"hoursStatus": "Closed · Opens 8 AM",
"todayHours": "8 AM–4 PM",
"openNow": false,
"permanentlyClosed": false,
"phone": "(720) 645-2153",
"phoneInternational": "+17206452153",
"website": "https://icondentaldenver.com/?utm_source=google&utm_medium=organic&utm_campaign=gbp-listing",
"domain": "icondentaldenver.com",
"email": "info@icondentaldenver.com",
"emails": ["info@icondentaldenver.com"],
"websitePhone": "7206452153",
"facebook": "https://www.facebook.com/IconDentalDenver",
"instagram": "https://www.instagram.com/icon_dental_denver",
"linkedin": null,
"twitter": null,
"youtube": null,
"contactPage": "https://icondentaldenver.com/contact-us/",
"enrichedFromWebsite": true,
"fullAddress": "Icon Dental, 1425 Market St Ste. 100, Denver, CO 80202",
"street": "1425 Market St Ste. 100",
"neighborhood": "Central",
"city": "Denver",
"state": "Colorado",
"postalCode": "80202",
"countryCode": "US",
"latitude": 39.748563399999995,
"longitude": -105.0004756,
"placeId": "ChIJDYsdqcV4bIcRd3HhDPOgrpM",
"cid": "10641619935276659063",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJDYsdqcV4bIcRd3HhDPOgrpM",
"searchQuery": "dentist Denver, CO",
"aiProfileSummary": "Icon Dental is a dental practice located in Denver, Colorado, offering a range of dental services to meet the needs of its patients. With a strong focus on patient care, they aim to provide a comfortable and professional environment for dental health.",
"aiLeadScore": 75,
"aiLeadTier": "warm",
"source": "Google Maps",
"observedAt": "2026-08-14T08:02:41.433Z",
"error": null
}

The most complete Google Maps business leads scraper available. It returns every field a Maps listing exposes (name, category, rating, hours, phone, coordinates), then enriches each lead from the business website with emails, extra phones and social profiles, plus optional AI add-ons for a profile summary and a 0 to 100 lead score, so you get outreach-ready contacts, not just map pins.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor runs each search query against Google Maps in the region and language you choose, paginates through the results, and writes one normalized record per business to the run's dataset. For every business with a website, it fetches the site and pulls public emails, a validated phone from tel: links, and Facebook, Instagram, LinkedIn, Twitter and YouTube profiles, so each lead is contact-ready. Missing source values are returned as null, never invented.

Two optional AI add-ons run only on paid Apify plans and only charge when they produce output: aiProfileSummary writes a short business description, and aiLeadScore scores the business 0 to 100 with a hot, warm or cold tier for B2B outreach.

Quickstart

Open the actor, paste this into the input, and press Run. It returns dentist leads in Denver with website enrichment and both AI add-ons.

{
"searchQueries": ["dentist"],
"location": "Denver, CO",
"maxLeads": 2,
"region": "us",
"language": "en",
"withAiProfileSummary": true,
"withAiLeadScore": true
}

You can also paste Google Maps search URLs into searchQueries to run them directly. Every field except a query is optional; the AI add-ons are off by default and require a paid plan.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["dentist"]One or more things to find, for example plumber, coffee shop, law firm. Each is combined with location. You can also paste Google Maps search URLs to run them directly.
locationstringnoAustin, TXCity, area or region to search in, for example Miami FL. Appended to each query.
maxLeadsintegerno10Maximum leads to collect across all searches. Google returns roughly 100 to 120 results per search.
languageenumnoenInterface language for results. One of en, es, pt, fr, de, it, nl.
regionenumnousCountry context and in-country connection. One of us, gb, ca, au, mx, br, ar, co, cl, es, fr, de.
enrichContactsbooleannofalsePaid add-on. For each result without an email, try to find a public business contact email and a contact name. Charged per attempt, plus extra only when an email is found.
enrichContactsMaxintegerno50Cap how many results the contact add-on tries to enrich. Free Apify accounts are capped at 3.
withAiProfileSummarybooleannofalsePaid add-on. Adds an AI-written 1 to 2 sentence business profile. Charged per business only when a summary is produced.
withAiLeadScorebooleannofalsePaid add-on. Scores each business 0 to 100 as a B2B lead with a hot, warm or cold tier. Charged per business only when a score is produced.

Output reference

One dataset item per business. Types: string, number, boolean, string[], or null when the source value is absent.

FieldTypeDescription
businessNamestringBusiness name as shown on Google Maps.
categorystringPrimary Google Maps category, for example Dentist.
imageUrlstringRepresentative storefront or logo photo from the Maps card.
ratingnumberAverage star rating, or null if unrated.
reviewCountnumberNumber of Google reviews.
hoursStatusstringCurrent open or closed status text, for example Closed.
todayHoursstringToday's opening hours.
openNowbooleantrue when open now, false when closed, null if unknown.
permanentlyClosedbooleantrue when the listing is permanently closed.
phonestringBusiness phone in national format.
phoneInternationalstringPhone in E.164 international format.
websitestringBusiness website URL from the listing.
domainstringBare domain of the website.
emailstringFirst public email found on the website, or null.
emailsstring[]All public emails found on the website (up to 10), or null.
websitePhonestringPhone parsed from a tel: link on the website, or null.
facebookstringFacebook profile URL from the website, or null.
instagramstringInstagram profile URL from the website, or null.
linkedinstringLinkedIn company or profile URL, or null.
twitterstringTwitter or X profile URL, or null.
youtubestringYouTube channel URL, or null.
contactPagestringContact or about page URL on the business site, or null.
enrichedFromWebsitebooleantrue when the website was reachable and parsed.
fullAddressstringFull address as displayed on Maps.
streetstringStreet line of the address.
neighborhoodstringNeighborhood, or null.
citystringCity.
statestringState or region.
postalCodestringPostal code.
countryCodestringTwo-letter country code.
latitudenumberLatitude of the business.
longitudenumberLongitude of the business.
placeIdstringGoogle Place ID.
cidstringGoogle customer ID (CID) for the place.
googleMapsUrlstringDirect Google Maps link to the place.
searchQuerystringThe resolved query that produced this lead.
aiProfileSummarystringAI-written business profile (add-on), else null.
aiLeadScorenumberAI B2B lead score 0 to 100 (add-on), else null.
aiLeadTierstringAI lead tier hot, warm or cold (add-on), else null.
sourcestringAlways Google Maps.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"searchQueries":["dentist"],"location":"Denver, CO","maxLeads":2,"withAiProfileSummary":true,"withAiLeadScore":true}):

{
"businessName": "Icon Dental",
"category": "Dentist",
"rating": 4.6,
"reviewCount": 46,
"hoursStatus": "Closed · Opens 8 AM",
"todayHours": "8 AM–4 PM",
"openNow": false,
"phone": "(720) 645-2153",
"phoneInternational": "+17206452153",
"website": "https://icondentaldenver.com/?utm_source=google&utm_medium=organic&utm_campaign=gbp-listing",
"domain": "icondentaldenver.com",
"email": "info@icondentaldenver.com",
"emails": ["info@icondentaldenver.com"],
"websitePhone": "7206452153",
"facebook": "https://www.facebook.com/IconDentalDenver",
"instagram": "https://www.instagram.com/icon_dental_denver",
"contactPage": "https://icondentaldenver.com/contact-us/",
"enrichedFromWebsite": true,
"fullAddress": "Icon Dental, 1425 Market St Ste. 100, Denver, CO 80202",
"city": "Denver",
"state": "Colorado",
"postalCode": "80202",
"countryCode": "US",
"latitude": 39.748563399999995,
"longitude": -105.0004756,
"placeId": "ChIJDYsdqcV4bIcRd3HhDPOgrpM",
"cid": "10641619935276659063",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJDYsdqcV4bIcRd3HhDPOgrpM",
"searchQuery": "dentist Denver, CO",
"aiProfileSummary": "Icon Dental is a dental practice located in Denver, Colorado, offering a range of dental services to meet the needs of its patients.",
"aiLeadScore": 75,
"aiLeadTier": "warm",
"source": "Google Maps",
"observedAt": "2026-08-14T08:02:41.433Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-business-leads-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["dentist"],"location":"Denver, CO","maxLeads":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-business-leads-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["coffee shop","law firm"],"location":"Miami, FL","maxLeads":200,"region":"us"}'

Apify CLI:

apify call scrapers_lat/google-maps-business-leads-scraper \
--input '{"searchQueries":["plumber"],"location":"Austin, TX","maxLeads":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per business returned (result event). See the pricing tab for the current per-result price.
  • Paid add-ons. The contact search, AI profile summary and AI lead score are opt-in and priced separately. Each charges only when it produces output; the contact add-on charges per attempt plus extra only when an email is found.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 results per run, and the contact add-on to 3 enrichments. Upgrade for higher maxLeads.

FAQ and troubleshooting

A run returned 0 records. Why? The query and location matched nothing, or Google returned no map results. Broaden the query or location. Zero-result runs are not charged.

Why is email null for some leads? The business had no website, the site was unreachable, or it published no public email. Website enrichment only reports what is actually on the page; missing values stay null.

Can I search a specific area precisely? Yes. Paste a Google Maps search URL into searchQueries and it is used as-is, so you control the exact map viewport and query.

Why did the AI fields come back null? The AI add-ons require a paid Apify plan and are off by default. Enable withAiProfileSummary or withAiLeadScore on a paid plan. They charge only when output is produced.

How many results can I get per search? Google practically caps a single text query near 120 to 260 results. For more, use several narrower queries or locations.

Is this an official Google tool? No. This actor is independent and not affiliated with Google. It reads only publicly visible Google Maps results and public business websites.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Google. Accesses only publicly available Google Maps results and public business websites.