Google Maps Scraper — Emails, Phones & B2B Leads avatar

Google Maps Scraper — Emails, Phones & B2B Leads

Pricing

from $4.00 / 1,000 place scrapeds

Go to Apify Store
Google Maps Scraper — Emails, Phones & B2B Leads

Google Maps Scraper — Emails, Phones & B2B Leads

Extract Google Maps business leads with emails, phones, ratings, reviews, social links, opening hours, and lead scoring. Base $0.004/place; email enrichment is charged separately. MCP/API-ready.

Pricing

from $4.00 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

83

Total users

32

Monthly active users

13 days ago

Last modified

Share

Local Business Lead Generator — Google Maps

This Apify Actor is for marketers, sales teams, agencies, and researchers who want one record per local business from Google Maps. It accepts a business category or keyword, a location, or public Google Maps URLs, then returns a single lead record for each business with name, category, address, phone, website, email when found, rating, review count, lead score, contactability, source URL, and scrape time. The result is a structured, CRM-ready dataset that you can use directly in Apify, via Apify API, or through Apify MCP.

Best fit and connected workflows

This Actor fits bounded local prospecting work where the starting point is a Google Maps search such as a service category in a city, region, or country. It is well matched to territory planning, local market research, agency lead-list creation, and reviewable outreach prep.

A common workflow is:

  • start with a category plus location, such as "roofing contractors" in "Austin, TX"
  • extract public Google Maps business listings
  • enrich the business website for public email and social links when enabled
  • review contactability, lead priority, and opportunity signals
  • export qualified leads to a CRM or follow-up queue

Use For company lists that are already known and need website contact extraction, Bulk Website Contact Extractor is a natural downstream step. For lead discovery beyond Google Maps coverage, Universal Lead Finder connects to a broader web-search workflow.

Practical scenario

Maya, a local SEO consultant, starts with "dentists" and "Manchester, UK" because she wants a territory-specific prospect list. She enables email enrichment, keeps the minimum lead score at 70, and asks for five records first.

The returned rows include fields such as business_name, phone, website, email, rating, review_count, lead_score, lead_priority, contactability, and opportunity_signals. Maya uses those fields to decide which businesses have enough public contact detail for outreach, then sends the qualified rows to her CRM and keeps the rest for later research.

Input

FieldTypePurpose
searchQuerystringBusiness category or keyword to search on Google Maps, such as dentists or roofing contractors
locationstringCity, region, or country that narrows the search, such as Austin, TX
startUrlsarrayPublic Google Maps search or place URLs to process directly
maxResultsintegerMaximum number of qualified leads to return, from 1 to 5000
enrichEmailsbooleanVisits business websites and contact pages to find public email and social links
requireEmailbooleanKeeps only leads with a public email found during enrichment
requireWebsitebooleanKeeps only leads with a website listed on Google Maps
minLeadScoreintegerMinimum contactability score from 0 to 100
maxReviewsintegerRecent Google reviews to include for each business, from 0 to 100
languagestringGoogle Maps interface language, such as en, es, de, or fr
minRatingnumberMinimum Google Maps rating from 0 to 5

Focused JSON example

{
"searchQuery": "roofing contractors",
"location": "Austin, TX",
"maxResults": 25,
"enrichEmails": true,
"requireEmail": true,
"requireWebsite": true,
"minLeadScore": 70,
"maxReviews": 5,
"language": "en",
"minRating": 4.2
}

Output

Each dataset item represents one Google Maps business record.

FieldTypePurpose
business_namestringpublic business name from Google Maps
categorystringPrimary Google Maps category
full_addressstringComplete street address
phonestring or nullPublic business phone number
websitestring or nullWebsite listed on Google Maps
emailstring or nullPublic email found on the business website
ratingnumber or nullGoogle rating on the listing
review_countintegerTotal number of Google reviews
reviewsarrayRecent review objects when requested with maxReviews
lead_scoreintegerContactability score from 0 to 100
lead_prioritystringhigh, medium, or low based on the score
contactabilitystringsuitable public contact route found
opportunity_signalsarrayTransparent public-signal notes for follow-up workflows
enrichment_statusstringWebsite enrichment outcome
data_sourcestringPublic discovery source, google_maps
latitudenumberBusiness latitude
longitudenumberBusiness longitude
google_maps_urlstringDirect Google Maps link for the business
place_idstringGoogle Place ID
opening_hoursobject or nullBusiness opening hours by day
facebookstring or nullFacebook URL found on the business website
instagramstring or nullInstagram URL found on the business website
linkedinstring or nullLinkedIn URL found on the business website
twitterstring or nullTwitter/X URL found on the business website
scraped_atstringISO 8601 extraction timestamp
source_urlstringGoogle Maps URL used to produce the record

Illustrative output record

{
"business_name": "Example Roofing Co.",
"category": "Roofing contractor",
"full_address": "123 Main Street, Austin, TX 78701, USA",
"phone": "+1 512 555 0100",
"website": "https://example-roofing.com",
"email": "info@example-roofing.com",
"rating": 4.6,
"review_count": 84,
"reviews": [
{
"author": "A. Smith",
"rating": 5,
"text": "Quick estimate and clear communication.",
"date": "2 weeks ago",
"response_from_owner": null
}
],
"lead_score": 90,
"lead_priority": "high",
"contactability": "email",
"opportunity_signals": [
"no_social_profile_detected"
],
"enrichment_status": "completed",
"data_source": "google_maps",
"latitude": 30.2672,
"longitude": -97.7431,
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ...",
"place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"opening_hours": {
"Monday": "9:00 AM - 5:00 PM",
"Tuesday": "9:00 AM - 5:00 PM",
"Saturday": "Closed"
},
"facebook": null,
"instagram": null,
"linkedin": null,
"twitter": null,
"scraped_at": "2026-03-31T10:00:00.000Z",
"source_url": "https://www.google.com/maps/search/roofing+contractors+in+Austin"
}

How it works

The Actor uses Google Maps as the public discovery source and can also process supplied Google Maps search or place URLs directly. It extracts business listing data, then optionally visits the listed website and likely contact pages to look for public email addresses and social profile links.

Qualification happens after the lead record is assembled. The dataset includes transparent fields for contactability, lead priority, opportunity signals, enrichment status, and source metadata. The actor writes validated dataset rows and publishes run outcome records in the default key-value store.

Pricing

This Actor uses Pay per event pricing with Apify platform usage added on top of the event model. The primary billed event is Place Scraped, and a separate Email Enriched event is charged only when a public email is found on a business website. The Actor Start event is also billed according to the live contract.

A simple example: if you run a campaign that returns one hundred business leads, then the place-scraped event is billed one hundred times, and any public emails found during website enrichment are billed separately. For the current event pricing and platform usage details, use the live Pricing tab.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a hosted Actor tool for local-business lead discovery and qualification. The exact Actor identity is khadinakbar/google-maps-leads-scraper.

It is useful when an agent needs to turn a category and location into structured business leads, then interpret public contact routes and qualification fields from the dataset.

Find 25 roofing contractors in Austin, TX. Use public Google Maps records, include email enrichment when available, and return business name, phone, website, email, lead score, lead priority, contactability, opportunity signals, source URL, and scrape time.

Output interpretation:

  • business_name, full_address, and google_maps_url identify the record
  • phone, website, and email show the public contact route found
  • lead_score and lead_priority summarize contactability
  • opportunity_signals provide visible public-signal context for human review
  • scraped_at and source_url show when and from where the record was collected

Provenance and scope:

  • the public source is Google Maps, recorded as data_source: google_maps
  • website enrichment is based on the business website and likely contact pages
  • the actor returns one dataset record per business lead
  • startUrls, when provided, are processed as Google Maps search or place URLs alongside category discovery

Pagination and cost guidance:

  • maxResults sets the maximum number of returned lead records
  • each returned business lead is billed as a Place Scraped event
  • Email Enriched is billed only when a public email is found
  • for a smaller test run, start with a low maxResults value before expanding a territory campaign

API example

const { ApifyClient } = require('apify-client');
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
async function main() {
const run = await client.actor('khadinakbar/google-maps-leads-scraper').call({
searchQuery: 'dentists',
location: 'Austin, TX',
maxResults: 5,
enrichEmails: true,
minLeadScore: 70
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});

Best results and outcome guidance

Use a specific business category together with a precise place name so the Maps search stays focused. Increase maxResults only after the input pattern matches your workflow and the returned fields look right for your CRM or outreach process.

When enrichEmails is enabled, public email and social links come from the business website and its contact pages. requireEmail, requireWebsite, minLeadScore, and minRating work as post-extraction filters, so they help you shape the final lead list after the full record is assembled.

Continue the workflow

Design note

I found that review_count is always returned as a required dataset field, while reviews is optional and only populated when maxReviews is greater than zero. That makes the output compact by default while still allowing review detail when needed.

FAQ

Can I start from a keyword and a location?

Yes. The Actor accepts a plain-language search category in searchQuery together with a location such as a city, region, or country.

Yes. startUrls accepts public Google Maps search or place URLs, and the Actor can process those directly.

How is a lead scored?

lead_score is computed from public signals such as email, website, phone, rating abovea bounded number of review count above 10, and social media presence. lead_priority maps that score to high, medium, or low.

Which workflow should use this Actor?

Use this Actor for Google Maps-based local business discovery and qualification. For a list you already have, a website contact extraction workflow is a better follow-up. For broader lead discovery beyond local Maps coverage, route to a wider web-search lead finder.

What appears in the dataset when email enrichment is off?

You still get the Google Maps record, including business identity, contact details listed on Maps, rating, review count, contactability fields, and source metadata. The email field remains null unless a public email is found during enrichment.

Responsible use

Use public business information in a way that respects applicable privacy, outreach, and anti-spam rules. Public contact signals describe what the business chose to publish, and they are suitable for review, qualification, and workflow routing. Apply your own compliance review before any outreach or data transfer.