Google Maps Scraper — Emails, Phones & B2B Leads avatar

Google Maps Scraper — Emails, Phones & B2B Leads

Pricing

from $3.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 a lead score. Email enrichment is optional and charged per email found.

Pricing

from $3.00 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

200

Total users

19

Monthly active users

13 hours ago

Last modified

Features

Limited permissions

Share

This Apify Actor is a Google Maps scraper for B2B leads. Give it a business category and a place (or many of each) and it returns one lead record per business: name, category, address, phone, website, rating, review count, lead score, contactability and, when the website shows one, a public email with a free mail-server check. You pay for an email only when one is found. Use it for agency prospecting, territory planning, local market research and CRM list building, from the Apify Console, API or an AI agent through Apify MCP.

You getDetail
Business factsname, category, full address, phone, website, rating, review total, hours, map pin, place ID
Lead datapublic email, email_status (mail server check), email_is_role_address, social profile links, lead score, priority, contactability, opportunity signals
Scaleup to about 200 businesses per search; many categories and places per run (categories x places, up to 300 searches); up to 5,000 leads per run
Speedroughly 100 leads in about a minute, no browser for normal searches
Output for agentsagentSummary sentence in OUTPUT, honest COMPLETE / PARTIAL / VALID_EMPTY outcomes

What's new (November 2026)

  • Faster and lighter: normal searches no longer open a browser page per business.
  • Several categories and several places in one run (searchQueries, locations).
  • Refresh saved leads by place ID (placeIds).
  • Free email check: email_status and email_is_role_address.
  • agentSummary in the run output for AI agents.
  • Default memory lowered to 1024 MB (same speed, lower platform usage).

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
locationsarrayMore cities, neighbourhoods or ZIP codes; every category is searched in every place
searchQueriesarrayMore business categories; combined with searchQuery
placeIdsarrayPlace IDs (0x...:0x..., as returned in place_id) to refresh known leads
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
email_statusstring or nullmx_valid, no_mail_server or not_checked: free check that the email domain accepts mail
email_is_role_addressboolean or nullTrue for shared mailboxes such as info@ or sales@
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",
"email_status": "mx_valid",
"email_is_role_address": true,
"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/Example+Roofing+Co./data=!1sChIJN1t_tDeuEmsRUsoyG83frY4",
"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

Pay per event, with Apify platform usage added on top. A normal 100-lead run uses roughly $0.03 of platform usage (measured). The events are:

EventWhat is billed
Place Scraped (place-scraped)each business lead returned
Email Enriched (email-enriched)each public email found; nothing when none is found
Actor Starta small fixed start fee

Volume discounts apply on higher Apify plans. The Pricing tab always shows the live prices.

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

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 of at least 4, a 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.

How do I get more than about 200 businesses for one city?

Google Maps shows about 200 businesses per search. Put neighbourhoods or ZIP codes in locations and the Actor searches each one, then removes duplicates.

Which Actor should I use for which job?

This Actor starts from Google Maps. B2B Lead Finder with Enrichment adds deeper company enrichment, Universal Lead Finder finds leads from web search beyond Maps, and Bulk Website Contact Extractor pulls contacts from a list of websites you already have.

Is the email check a guarantee the mailbox exists?

No. email_status only tells you whether the domain can receive mail. Deliverability of a single mailbox is not tested.

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.

Runtime limits and recovery

The Console prefill asks for five roofing contractors in Austin, TX with email enrichment on, so the first run shows leads with emails; API calls that omit a result limit also default to five. maxItems and limit remain supported aliases; when several limits are supplied, the smallest valid limit applies. searchQueries accepts multiple categories and lang supplies the interface language when language is absent.

Use at least 1024 MB for browser runs. The default is 1024 MB, which is enough for normal searches. Runs that ask for reviews or supply place or search URLs open a browser page and finish faster with 2048 MB; you can choose that in the run options. Smaller selections stop with CONFIG_ERROR and an explanation before starting the browser; the Actor never silently increases your memory allocation. This minimum is a resource requirement, not a guarantee that every upstream page will load.

Each Maps navigation has at most one retry. Browser images, fonts and media are skipped. Work stops before the caller's time limit, with at most 210 seconds for crawling and a separate allowance for shutdown and confirmed diagnostics. Large campaigns can return PARTIAL before reaching the requested cap. Website enrichment reads at most three pages, 1 MiB per page and 2 MiB per business, within 15 seconds and the remaining run budget. Private network destinations are rejected. website_unavailable means the website could not be checked; no_public_email means a reachable page was checked without finding a public email within those bounds. An email address is extracted from public HTML and is not an inbox-deliverability verification.

OUTPUT and RUN_SUMMARY contain the same confirmed terminal record. Useful incomplete results are PARTIAL; functioning no-match or qualification exclusions are VALID_EMPTY; invalid targets are INVALID_INPUT. Exhausted required routes with no useful data are UPSTREAM_FAILED and fail the run. An uncertain delivery or fee acknowledgment also fails rather than reporting a confirmed zero. Unknown counts are null. A restarted run inspects its existing delivery checkpoint and stops without replaying paid work. If initialization, storage, or shutdown itself fails, the platform run fails; a new paired report cannot be promised when storage cannot be confirmed. Preserve any saved results and inspect the run before starting a replacement.

⌂ 换网址