Google Maps Business Leads Scraper — Email, Phone & Socials avatar

Google Maps Business Leads Scraper — Email, Phone & Socials

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Google Maps Business Leads Scraper — Email, Phone & Socials

Google Maps Business Leads Scraper — Email, Phone & Socials

Scrape Google Maps businesses by search query and enrich into leads: name, phone, website, rating, address, category, coordinates + email and social profiles from each website. Local B2B lead-gen. Independent tool, not affiliated with or endorsed by Google.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 hours ago

Last modified

Features

Limited permissions

Share

📍 Google Maps Business Leads Scraper — Email, Phone & Socials

Apify Actor Maintenance Data Quality Output Formats Pagination Enrichment

Turn Google Maps searches into structured, outreach-ready B2B sales lead lists. Extract local business listings across any industry and geographic territory — capturing verified company names, primary categories, Google star ratings, total review counts, formatted physical addresses, GPS coordinates, local and international phone numbers, and website URLs.

When contact enrichment is enabled, the actor automatically navigates to each business's website and extracts direct email addresses (including mailto links and contact page crawling) alongside verified social media profiles across Facebook, Instagram, LinkedIn, Twitter/X, and YouTube.

Export directly to JSON, CSV, Excel, or API — or feed real-time prospect data directly into your CRM, cold outreach workflows, Google Sheets, Zapier, or Make.


⚡ At a glance

FeatureSpecification
Data SourceGoogle Maps Local Business Directory & Live Company Websites
Search SyntaxStandard search queries ("<category> in <city, state/country>")
Pagination ModelDeep pagination per query (20 places/page, set 0 for auto/unlimited)
Contact EnrichmentIn-depth website crawling for verified email addresses & social media profiles
Supported SocialsLinkedIn, Facebook, Instagram, Twitter / X, YouTube
Throughput Speed~40–60 enriched leads per minute (~15–30s on prefill runs)
DeduplicationAutomatic deduplication by Google Place ID (0% duplicates)
Export FormatsDataset (JSON, CSV, XML, Excel) & Key-Value Store OUTPUT mirror
Proxy RequirementApify Proxy Datacenter (enabled by default, fully supported)
Default Sample RunAutomatic dual-market sample (Miami & Seattle) when run with {}

🔎 Why scrape Google Maps for business leads?

Google Maps is the world's most expansive, continuously updated directory of local commerce. Every brick-and-mortar store, professional service firm, contractor, clinic, and independent agency maintains a verified presence with hours, phone numbers, and operational websites.

However, a standard Google Maps listing alone is insufficient for scalable B2B outbound campaigns:

  1. Missing Direct Email Contacts: Google Maps displays phone numbers and physical locations, but hides direct emails.
  2. Missing Social Media Profiles: Sales teams require LinkedIn company profiles and Instagram handles to multi-thread outreach across channels.
  3. Manual Data Entry Bottleneck: Visiting hundreds of individual websites, parsing footers, and copying contact info manually takes dozens of rep hours per campaign.

This scraper solves the entire lead generation pipeline in a single automated step: it queries Google Maps, extracts every business record, and visits each corresponding website in parallel to harvest verified emails and social channels.

Primary Use Cases:

  • High-Velocity Cold Email & Calling: Generate hyper-targeted lists of local contractors, dental clinics, accountants, or restaurants with validated phone numbers and email addresses.
  • Agency Client Acquisition: Discover local businesses with subpar review counts, missing social links, or incomplete websites to pitch web design, SEO, and reputation management services.
  • Territory Planning & Market Penetration: Map competitive density and service saturation across target cities or metropolitan areas.
  • CRM Enrichment & Hygiene: Cleanse and update existing client accounts with verified geographic coordinates, active domains, and refreshed phone numbers.
  • Local Marketplace Seeding: Populate vertical directories and local discovery platforms with structured, categorized business data.

✨ Key features

  • 🎯 Natural Language Query Flexibility: Search in any natural format ("plumbers in Austin TX", "coffee shops in Seattle", "law firms in London"). Run multiple queries concurrently in a single batch.
  • ⚡ Deep Multi-Page Pagination (1,000+ Results): Automatically paginates through consecutive 20-listing result sets without hitting arbitrary stopping limits.
  • 📧 Automated Multi-Source Email Extraction: Scrapes direct mailto: links, scans full homepage HTML, and intelligently crawls secondary /contact and /about subpages if the homepage lacks an email.
  • 📱 Multi-Platform Social Profile Harvesting: Detects and verifies profile links across LinkedIn (company & personal pages), Facebook, Instagram, Twitter/X, and YouTube.
  • 🧹 Robust Deduplication Engine: In-memory caching by Google Place ID prevents duplicate records even when executing overlapping geographic or category searches.
  • 🌍 Global Coverage: Operates across all international Google Maps locales, languages, and country domains.
  • 🚀 Parallel HTTP Architecture: Concurrently crawls up to 6 websites simultaneously, maintaining rapid execution speeds while adhering to proxy rotation standards.

📥 Input parameters

The actor features user-friendly, sensible defaults. All properties can be customized via the web console or JSON API payload.

ParameterTypeDefaultDescription
searchQueriesarray["dentists in Miami FL", "coffee shops in Seattle WA"]Search terms in <what> in <where> format. Each query is processed independently.
includeEmailsbooleantrueWhen true, crawls each business website to extract emails and social media profiles.
maxPagesPerQueryinteger0Maximum pages to paginate per query (20 businesses/page). Set 0 for auto/unlimited governed by maxItems.
maxItemsinteger0Total maximum businesses to scrape across all queries (0 = no limit; prefilled to 50 for fast validation).
proxyConfigurationobject{ "useApifyProxy": true }Proxy configuration. Apify Datacenter proxies are enabled by default.

📊 Data fields & output structure

Every record represents a unique local business enriched with both Google Maps directory metadata and website contact intelligence.

🏢 Core Directory Data (from Google Maps)

FieldTypeCoverageDescription
placeIdstring🟢 High (100%)Unique Google Place ID identifier
namestring🟢 High (100%)Official registered business name
categorystring🟢 High (>98%)Primary business classification category
categoriesstring🟢 High (>95%)Full array of secondary industry categories
ratingstring🟢 High (>90%)Google Maps average star rating (1.0–5.0)
reviewCountstring🟢 High (>90%)Total number of published customer reviews
phonestring🟢 High (>95%)Local formatted telephone number
phoneIntlstring🟢 High (>95%)International formatted telephone number with country code
websitestring🟢 High (>85%)Clean destination website URL
websiteDomainstring🟢 High (>85%)Extracted root domain name
addressstring🟢 High (100%)Complete street address, city, state, and postal code
latitudestring🟢 High (100%)WGS84 geographic latitude coordinate
longitudestring🟢 High (100%)WGS84 geographic longitude coordinate
googleMapsUrlstring🟢 High (100%)Direct permalink to Google Maps place page
querystring🟢 High (100%)Originating search query term
scrapedAtstring🟢 High (100%)ISO 8601 scrape timestamp

✉️ Contact & Social Media Intelligence (from Website Enrichment)

FieldTypeCoverageDescription
emailstring🟡 Conditional (~50–70%)Primary detected email address for outreach
emailsstring🟡 Conditional (~50–70%)Array of all verified unique email addresses discovered
facebookstring🟡 Conditional (~40–60%)Extracted Facebook company page handle or URL
instagramstring🟡 Conditional (~40–60%)Extracted Instagram business profile handle
linkedinstring🟡 Conditional (~30–50%)Extracted LinkedIn company page or professional profile
twitterstring🟡 Conditional (~20–40%)Extracted Twitter / X handle
youtubestring🟡 Conditional (~15–30%)Extracted YouTube channel link

💡 Example output record

{
"placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"name": "Biscayne Dental Center",
"category": "Dentist",
"categories": [
"Dentist",
"Cosmetic Dentist",
"Dental Clinic",
"Emergency Dental Service"
],
"rating": 4.9,
"reviewCount": 482,
"phone": "(305) 555-0142",
"phoneIntl": "+1 305-555-0142",
"website": "https://www.biscaynedentalcenter.com",
"websiteDomain": "biscaynedentalcenter.com",
"address": "14400 Biscayne Blvd, North Miami, FL 33181, United States",
"latitude": 25.9084,
"longitude": -80.1542,
"email": "info@biscaynedentalcenter.com",
"emails": [
"info@biscaynedentalcenter.com",
"appointments@biscaynedentalcenter.com"
],
"facebook": "biscaynedental",
"instagram": "biscaynedentalmiami",
"linkedin": "company/biscayne-dental-center",
"twitter": "biscaynedental",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJN1t_tDeuEmsRUsoyG83frY4",
"query": "dentists in Miami FL",
"scrapedAt": "2026-11-10T16:42:00.000Z"
}

🎯 Practical input recipes

Recipe 1: Local Contractor Outreach Campaign

Extract plumbers across multiple metropolitan areas with email enrichment:

{
"searchQueries": [
"plumbers in Dallas TX",
"plumbing contractors in Fort Worth TX",
"commercial plumbing in Arlington TX"
],
"includeEmails": true,
"maxItems": 300
}

Recipe 2: High-Speed Directory Extraction (Without Enrichment)

Extract high-volume directory listings at maximum speed without visiting websites:

{
"searchQueries": [
"coffee shops in Brooklyn NY",
"bakeries in Manhattan NY",
"cafes in Queens NY"
],
"includeEmails": false,
"maxPagesPerQuery": 0,
"maxItems": 1000
}

Audit law firms with direct partners and practice leads:

{
"searchQueries": [
"corporate law firms in Chicago IL",
"intellectual property attorneys in Chicago IL"
],
"includeEmails": true,
"maxItems": 150
}

Recipe 4: International Real Estate Agencies

Map real estate brokerages in major European capitals:

{
"searchQueries": [
"real estate agencies in London UK",
"immobilier in Paris France",
"agencias inmobiliarias in Madrid Spain"
],
"includeEmails": true,
"maxItems": 250
}

Recipe 5: High-Density Hospitality & Restaurants

Harvest restaurant leads across target neighborhoods:

{
"searchQueries": [
"italian restaurants in Brooklyn NY",
"french bistros in Manhattan NY"
],
"includeEmails": true,
"maxPagesPerQuery": 0,
"maxItems": 200
}

Recipe 6: Local Fitness & Wellness Studios

Generate prospects for gym and wellness equipment sales:

{
"searchQueries": [
"yoga studios in Los Angeles CA",
"crossfit gyms in San Diego CA"
],
"includeEmails": true,
"maxItems": 150
}

💡 Optimization & best practices

  • Query Structuring: Format queries as "<industry/trade> in <city, state/country>". For large metropolitan regions, break queries down by borough, neighborhood, or postal code to uncover long-tail listings.
  • Speed vs. Depth Trade-Off: If you only require business phone numbers, addresses, and ratings, set includeEmails: false. This boosts scraping throughput to several hundred listings per minute.
  • Managing High-Volume Leads: When targeting 1,000+ businesses across a state, pass 10–20 specific city queries and keep maxPagesPerQuery: 0 so the engine auto-exhausts each locality before moving to the next.
  • Filtering by Review Thresholds: Use post-processing filters in CSV or Python to isolate established businesses (e.g., rating >= 4.0 and reviewCount >= 50) or target struggling businesses for reputation management pitches (rating < 4.0).
  • Enrichment Coverage Expectations: Expect phone numbers and physical addresses on >95% of listings. Email and social coverage typically reaches 50–70% of listings with active domains, as some businesses do not publish public email addresses on their websites.

🚀 How to use & integrate

  1. Configure Search Scope: Input your desired search queries into the console.
  2. Toggle Enrichment: Keep includeEmails: true for full contact intelligence, or disable for raw directory records.
  3. Execute Run: Launch directly via Apify Console or trigger via API:
    curl --request POST \
    --url "https://api.apify.com/v2/acts/haketa~google-maps-contacts-scraper/runs?token=YOUR_API_TOKEN" \
    --header 'Content-Type: application/json' \
    --data '{"searchQueries": ["dentists in Miami FL"], "includeEmails": true, "maxItems": 50}'
  4. Export & Automate:
    • Sales Engagement: Import CSV directly into Apollo, Lemlist, Instantly, or HubSpot.
    • Spreadsheets: Automatically sync new leads to Google Sheets via Apify integration.
    • Webhooks: Trigger instant webhook notifications to your backend whenever a batch finishes.

❓ Frequently asked questions

Yes. The actor extracts publicly available commercial directory information and public website data displayed openly by businesses for discovery. Ensure your outreach complies with applicable communications regulations (such as CAN-SPAM, GDPR, and CASL).

Do I need a Google Cloud API key?

No. You do not need a Google Cloud account, billing setup, or Google Places API key. The actor operates completely independently.

How many leads can I extract in a single run?

You can extract hundreds to thousands of leads. By supplying multiple neighborhood or city queries, you can scale to 10,000+ records seamlessly.

Why do some businesses lack an email address?

Emails are extracted directly from the business's public website. If a business does not have a website, or uses a contact form exclusively without displaying a plain-text email or mailto: link, the email field remains blank while preserving all phone and address data.

How does deduplication work?

The scraper tracks Google Place IDs across all search queries in a run. If the same business appears under multiple related searches, it is stored only once in the dataset.

Can I target businesses in non-English speaking countries?

Yes. You can write search queries in any language (e.g., "restaurantes en Madrid", "coiffeur à Paris", "zahnarzt in Berlin"). Google Maps returns local listings matching the target language and geography.

How fast does website enrichment run?

Website crawling executes concurrently across 6 parallel threads. Enriching 50 businesses typically completes in approximately 20–45 seconds.

What phone number formats are returned?

The actor extracts both the standard local display format in phone (e.g. (305) 555-0142) and the international E.164 standardized telephone format in phoneIntl (e.g. +1 305-555-0142), allowing direct integration with VoIP dialers and SMS automation platforms.

How does the scraper avoid false-positive email addresses?

The email parser filters out image asset names (e.g., .png, .jpg), web font assets, tracking pixels, platform CDN addresses (such as wixpress.com, sentry.io), and generic placeholder addresses (example.com).

What happens if a target website is slow or down?

Each website fetch has a strict 15-second timeout and 2 retries. If a website fails to load or times out, the business listing is preserved intact with all directory fields populated, and the actor proceeds immediately to the next record without halting the run.

Can I schedule recurring lead generation runs?

Yes. You can use Apify's built-in Scheduler to automatically run fresh searches weekly or monthly, piping newly opened businesses directly into your CRM or Google Sheet.

What export formats are supported?

You can download your lead dataset in JSON, CSV, Excel (XLSX), XML, or HTML table format directly from the Apify Console. You can also query the dataset via the Apify REST API in real time.


🛠️ Step-by-step code integration examples

Python Integration with Apify Client

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
# Run Google Maps Leads Scraper
run = client.actor("haketa/google-maps-contacts-scraper").call(
run_input={
"searchQueries": ["dentists in Miami FL"],
"includeEmails": True,
"maxItems": 50,
}
)
# Fetch results from dataset
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
for item in dataset_items:
print(f"Business: {item.get('name')} | Phone: {item.get('phone')} | Email: {item.get('email')}")

Node.js / JavaScript Integration

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/google-maps-contacts-scraper').call({
searchQueries: ['dentists in Miami FL'],
includeEmails: true,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} enriched business leads.`);


📋 Changelog

v1.2 (2026-11)

  • Deep Pagination Unlocked: Fully unlocked continuous multi-page pagination for 1,000+ businesses; maxPagesPerQuery: 0 now executes as unlimited pagination governed by maxItems.
  • Fast Prefill Optimization: Adjusted prefill limits to 50 records for rapid sub-30s sample verification with full email enrichment.
  • Default Fallback Robustness: Added safe fallback defaults (Miami dentists, Seattle coffee) ensuring runs with empty input payloads execute reliably with ~50 sample leads.
  • Enhanced Contact Parsing: Upgraded regex patterns to improve email extraction from contact and about subpages while filtering tracking pixels and asset URLs.

v1.1 (2026-10)

  • Multi-Query Support: Added concurrent multi-query processing with unified dataset aggregation.
  • Place ID Deduplication: Introduced in-memory place ID indexing to eliminate duplicate business records across overlapping queries.

v1.0 (2026-09)

  • Initial release featuring Google Maps directory parsing and multi-channel email/social enrichment.
⌂ 换网址