Google Maps Email Extractor
Pricing
$150.00 / 1,000 business extracteds
Google Maps Email Extractor
Pricing
$150.00 / 1,000 business extracteds
Rating
0.0
(0)
Developer

ryan clinton
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Search Google Maps for any business type and location, then automatically scrape each business website for emails, phone numbers, and social media links. Get complete contact profiles for local businesses in a single run -- no manual research required.
Google Maps Email Extractor combines Google Maps search with deep website scraping. Enter a query like "plumbers in Chicago" and the actor finds matching businesses on Google Maps, visits each business website, crawls contact/about/team pages, and extracts every available email address, phone number, and social profile. You get one structured record per business with both Google Maps data and website contact data merged together.
What data can you extract?
| Data Point | Source | Example |
|---|---|---|
| Business name | Google Maps listing | Joe's Plumbing |
| Address | Google Maps listing | 123 Main St, Chicago, IL 60601 |
| Category | Google Maps listing | Plumber |
| Phone (Maps) | Google Maps listing | +1 (312) 555-0192 |
| Rating | Google Maps listing | 4.7 |
| Review count | Google Maps listing | 342 |
| Website URL | Google Maps listing | https://joesplumbing.com |
| Google Maps URL | Google Maps listing | https://www.google.com/maps/place/... |
| Email addresses | Business website scraping | info@joesplumbing.com |
| Website phone numbers | Business website scraping | +1 (312) 555-0234 |
| Social media links | Business website scraping | linkedin.com/company/joes-plumbing |
Why use Google Maps Email Extractor?
Finding contact information for local businesses is tedious. You search Google Maps, click through to each website, hunt for email addresses on contact pages, and manually copy everything into a spreadsheet. For 20 businesses, that takes hours. For 100, it takes days.
This actor automates the entire pipeline: search Google Maps, collect business listings, visit each website, extract contacts, and deliver structured data ready for outreach. One query, one run, complete contact profiles.
Built on the Apify platform, Google Maps Email Extractor gives you capabilities you won't get from a simple script:
- Scheduling -- run weekly to discover new businesses as they appear on Google Maps
- API access -- trigger runs programmatically from Python, JavaScript, or any HTTP client
- Proxy rotation -- scrape at scale without IP blocks using Apify's built-in proxy infrastructure
- Monitoring -- get notified when runs fail or produce unexpected results
- Integrations -- connect directly to Zapier, Make, Google Sheets, or webhooks
Features
- Google Maps search with configurable result limits (1-100 businesses per query) and language support
- Automatic website scraping that visits each business website's homepage, discovers contact/about/team pages, and extracts emails, phones, and social links
- Email extraction from mailto links, page body text, and anchor href attributes with automatic junk email filtering (removes noreply, test, admin, placeholder addresses)
- Phone number extraction from tel: links and formatted numbers in contact areas (footer, address blocks, elements with contact/phone classes) with validation
- Social media discovery for LinkedIn, Twitter/X, Facebook, Instagram, and YouTube with URL normalization
- Smart page discovery that follows links to contact, about, team, leadership, and company pages within the same domain
- Configurable crawl depth with per-site page limits (1-20 pages) to balance thoroughness against cost
- Pay-per-event pricing with automatic budget enforcement -- the actor stops when your spending limit is reached
- Merged output combining Google Maps listing data with website contact data in one record per business
Use cases for Google Maps email extraction
Local business outreach
Sales teams targeting local service businesses (plumbers, dentists, lawyers, restaurants) extract emails and phone numbers in bulk for cold outreach campaigns.
Marketing agency prospecting
Agencies search for businesses in a specific niche and location to build targeted prospect lists with verified contact details scraped directly from business websites.
Competitive analysis
Research all businesses in a category within a geographic area. Get their ratings, review counts, websites, and contact information for market mapping.
Franchise and territory research
Map out competitors or potential partners across multiple locations by running searches for the same business category in different cities.
Local SEO audits
SEO agencies pull Google Maps listings for a category to analyze which businesses have websites, social profiles, and contact pages as part of local SEO assessments.
Recruitment
Find and contact local businesses for partnership proposals, event sponsorships, or job placement services by extracting decision-maker contact details from company websites.
How to extract emails from Google Maps businesses
- Enter a search query -- Type a Google Maps search query like "dentists in San Francisco" or "restaurants near Times Square". Combine a business type with a location for best results.
- Set the result limit -- Choose how many businesses to extract (default is 20, maximum is 100). More results take longer but give you a bigger prospect list.
- Configure website scraping -- Leave "Scrape business websites" enabled (default) to get emails and social links. Disable it for faster results with Google Maps data only.
- Run the actor -- Click "Start" to begin. The actor searches Google Maps, collects business listings, then visits each website to extract contact information.
- Download your data -- Once finished, download results as JSON, CSV, or Excel from the Dataset tab. Each row contains one business with its complete contact profile.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | Yes | -- | Google Maps search query, e.g. "plumbers in Chicago" or "restaurants near Times Square". Combine a business type with a location for best results. |
maxResults | integer | No | 20 | Maximum number of businesses to extract from Google Maps (1-100). Higher values find more businesses but take longer and cost more. |
language | string | No | en | Language code for Google Maps results (e.g. "en", "es", "de", "fr"). |
scrapeWebsites | boolean | No | true | When enabled, visits each business website to extract emails, phone numbers, and social media links. Disable for faster results with Google Maps data only. |
maxPagesPerSite | integer | No | 5 | Maximum pages to scrape per business website (1-20). Includes homepage plus contact/about/team pages. Higher values find more contacts but take longer. |
Input examples
Search for businesses with defaults:
{"query": "plumbers in Chicago"}
Large batch with deep website crawl:
{"query": "dentists in Los Angeles","maxResults": 50,"maxPagesPerSite": 10}
Google Maps data only (no website scraping):
{"query": "restaurants in Austin TX","maxResults": 100,"scrapeWebsites": false}
Spanish language results:
{"query": "abogados en Madrid","maxResults": 30,"language": "es"}
Input tips
- Use specific queries -- "personal injury lawyers in Miami" works better than "lawyers". Include business type and location.
- Start with 20 results to test, then scale up. Each business with website scraping costs $0.15.
- Disable website scraping if you only need Google Maps listing data (name, address, phone, rating). This runs much faster.
- Set maxPagesPerSite to 3 for quick scans or 10-15 for thorough contact extraction from large business websites.
Output example
Each item in the output dataset represents one business:
{"businessName": "Joe's Plumbing & Heating","address": "123 Main St, Chicago, IL 60601","category": "Plumber","phone": "+1 312-555-0192","rating": 4.7,"reviewsCount": 342,"website": "https://joesplumbing.com","googleMapsUrl": "https://www.google.com/maps/place/Joe's+Plumbing/...","emails": ["info@joesplumbing.com","service@joesplumbing.com"],"websitePhones": ["+1 (312) 555-0234","+1 (312) 555-0235"],"socialLinks": {"facebook": "https://www.facebook.com/joesplumbing","instagram": "https://www.instagram.com/joesplumbingchi"},"pagesScraped": 3,"extractedAt": "2026-03-18T14:32:18.456Z"}
Output fields
| Field | Type | Description |
|---|---|---|
businessName | string | Business name from Google Maps listing |
address | string or null | Full street address from Google Maps |
category | string or null | Business category from Google Maps (e.g. "Plumber", "Restaurant") |
phone | string or null | Phone number listed on Google Maps |
rating | number or null | Average star rating on Google Maps (1.0-5.0) |
reviewsCount | number or null | Total number of Google Maps reviews |
website | string or null | Business website URL from Google Maps listing |
googleMapsUrl | string or null | Direct link to the Google Maps listing |
emails | string[] | Email addresses extracted from the business website, deduplicated and junk-filtered |
websitePhones | string[] | Phone numbers extracted from the business website (may differ from the Google Maps phone) |
socialLinks | object | Social media profile URLs keyed by platform: linkedin, twitter, facebook, instagram, youtube |
pagesScraped | number or null | Number of website pages crawled for this business (null if website scraping disabled) |
extractedAt | string | ISO 8601 timestamp of when the extraction completed |
How much does it cost to extract emails from Google Maps?
Google Maps Email Extractor uses pay-per-event pricing -- you pay $0.15 per business extracted. Platform usage costs are included in the price.
| Scenario | Businesses | Cost per business | Total cost |
|---|---|---|---|
| Quick test | 1 | $0.15 | $0.15 |
| Small batch | 10 | $0.15 | $1.50 |
| Medium batch | 50 | $0.15 | $7.50 |
| Large batch | 100 | $0.15 | $15.00 |
| Multi-query campaign | 500 | $0.15 | $75.00 |
You can set a maximum spending limit per run to control costs. The actor will stop delivering results once your budget is reached, so you never pay more than you expect.
Extract Google Maps emails using the API
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ryanclinton/google-maps-email-extractor").call(run_input={"query": "plumbers in Chicago","maxResults": 20,"scrapeWebsites": True,"maxPagesPerSite": 5,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item['businessName']}: {item['emails']}")print(f" Phone: {item['phone']} | Rating: {item['rating']} | Reviews: {item['reviewsCount']}")
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("ryanclinton/google-maps-email-extractor").call({query: "plumbers in Chicago",maxResults: 20,scrapeWebsites: true,maxPagesPerSite: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(`${item.businessName}: ${item.emails.join(", ")}`);}
cURL
# Start the actor runcurl -X POST "https://api.apify.com/v2/acts/ryanclinton~google-maps-email-extractor/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"query": "plumbers in Chicago","maxResults": 20,"scrapeWebsites": true,"maxPagesPerSite": 5}'# Fetch results (replace DATASET_ID from the run response)curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How the Google Maps Email Extractor works
The actor runs a three-step pipeline:
Step 1: Google Maps search
The actor sends your search query to a Google Maps scraper (Compass's Google Maps Scraper) which returns business listings including name, address, category, phone, rating, review count, website URL, and Google Maps link. Results are capped at your maxResults limit. Images and reviews are not fetched from Google Maps to keep the search fast.
Step 2: Website contact scraping
For each business that has a website URL, the actor normalizes the URL and crawls it using CheerioCrawler. The homepage is scraped first, then the actor discovers and follows links to contact, about, team, leadership, and company pages within the same domain (up to maxPagesPerSite). On each page, three extraction passes run:
- Emails: Collected from
mailto:links, regex matches in page body text, and regex matches in anchorhrefattributes. A junk filter removes noreply, test, admin, webmaster, postmaster, mailer-daemon, root addresses, emails ending in image/CSS/JS extensions, and addresses from placeholder domains. - Phones: Collected from
tel:links and regex patterns in contact-specific page areas (footer, address elements, elements with contact/phone classes). Numbers are validated for length (7-15 digits), format, and rejected if all-same-digit or sequential. - Social links: All anchor hrefs are scanned against platform-specific URL patterns for LinkedIn, Twitter/X, Facebook, Instagram, and YouTube. The first match per platform is kept.
All contact data is deduplicated and merged per domain. The crawler runs at up to 10 concurrent connections with a 120 requests/minute rate limit, 30-second timeout per page, and 2 automatic retries.
Step 3: Output assembly
Each Google Maps business is matched to its website contact data by domain. The actor produces one output record per business combining Google Maps listing data with website-extracted emails, phones, and social links. In pay-per-event mode, a charge event is fired per business, and the actor stops if the user's spending limit is reached.
Limitations
- Maximum 100 businesses per query -- Google Maps returns a limited number of results per search. For larger datasets, run multiple queries with different locations or business types.
- Website scraping is HTTP only -- uses CheerioCrawler (server-side HTML parsing), not a browser. Websites that load contact information via JavaScript (React, Angular, Vue SPAs) may return incomplete results.
- Same-domain only -- only follows links within the same domain as the business website. External contact pages are not discovered.
- No authentication -- only processes publicly accessible pages. Login-gated contact directories are not supported.
- Google Maps data freshness -- business information (address, phone, rating) comes from Google Maps and may be outdated if the listing hasn't been updated.
- First social link per platform -- if a website has multiple LinkedIn profiles (company + employee), only the first match is captured.
- Phone extraction limited to contact areas -- to minimize false positives, phone regex only runs against footer, address, and elements with contact/phone classes.
Integrations
- Zapier -- Trigger a Zap when new business contacts are extracted. Push leads directly to your CRM or email marketing platform.
- Make -- Build automated workflows that feed extracted contacts into HubSpot, Mailchimp, Salesforce, or any of Make's 1,500+ app integrations.
- Google Sheets -- Export results directly to Google Sheets for collaborative review and filtering.
- Apify API -- Call the actor programmatically. Start runs, poll for completion, and download results in JSON, CSV, XML, or Excel format.
- Webhooks -- Receive notifications when a run completes, then automatically process results in your backend.
Responsible use
- This actor only accesses publicly visible Google Maps listings and publicly accessible web pages.
- Respect website terms of service and
robots.txtdirectives. - Comply with GDPR, CAN-SPAM, and other applicable data protection laws when using scraped contact data for outreach.
- Do not use extracted contact information for spam, harassment, or unauthorized purposes.
- For guidance on web scraping legality, see Apify's guide.
FAQ
How many businesses can I extract in one run? Up to 100 businesses per search query. For larger datasets, run multiple queries targeting different locations (e.g., "plumbers in Chicago", "plumbers in Milwaukee") and merge the results.
How long does a typical run take? A search for 20 businesses with website scraping enabled takes approximately 5-10 minutes. Without website scraping, results are ready in 1-3 minutes. Larger batches (50-100 businesses) typically take 15-30 minutes.
What if a business doesn't have a website?
The business still appears in the output with Google Maps data (name, address, phone, rating, reviews). The emails, websitePhones, and socialLinks fields will be empty, and pagesScraped will be null.
Why are some email fields empty even though the business has a website? Some websites don't display email addresses publicly, use contact forms instead, or load emails via JavaScript (which requires browser rendering). The actor uses HTTP-based scraping for speed, so JavaScript-rendered content is not captured.
Can I search in languages other than English?
Yes. Set the language parameter to any supported Google Maps language code (e.g., "es" for Spanish, "de" for German, "fr" for French, "ja" for Japanese). Business names and categories will be returned in the specified language when available.
Is the Google Maps phone number different from the website phone numbers?
Yes. The phone field comes directly from the Google Maps listing. The websitePhones array contains phone numbers extracted from the business website. They may be different -- websites sometimes list additional phone lines, fax numbers, or department-specific numbers.
Can I use this to monitor new businesses appearing in an area? Yes. Schedule the actor to run weekly or monthly with the same query. Compare results across runs to identify new listings. Use Apify Schedules to automate this.
What social media platforms are detected? The actor extracts links for LinkedIn (company and personal profiles), Twitter/X, Facebook, Instagram, and YouTube (channels and user profiles).
Related actors
| Actor | How to combine |
|---|---|
| Website Contact Scraper | Already have a list of website URLs? Use Website Contact Scraper for deeper contact extraction including team member names and job titles |
| Email Pattern Finder | No emails on the website? Predict email addresses from names using the company's naming convention |
| B2B Lead Qualifier | Score and qualify extracted business leads based on company data and engagement signals |
| Bulk Email Verifier | Verify extracted emails before outreach to reduce bounce rates |
| HubSpot Lead Pusher | Push extracted business contacts directly into HubSpot CRM |
| Multi-Review Scraper | Check business reputation by scraping reviews from Trustpilot and BBB |
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom scraping solutions or enterprise integrations, reach out through the Apify platform.