Google Maps Email Extractor MCP
Pricing
Pay per usage
Google Maps Email Extractor MCP
Extract business emails from Google Maps searches — find businesses by location/category, scrape their websites, and extract contact emails. Built as MCP standby actor.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
AutomateLab
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
11 hours ago
Last modified
Categories
Share
Extract business email addresses from Google Maps searches — find businesses by location and category, visit their websites, and pull out contact emails. Built as an Apify MCP (Model Context Protocol) standby actor for AI agents and LLM integrations.
What does this actor do?
Two-step pipeline: first search Google Maps for businesses by query and location, then scrape each business website for contact email addresses. Returns structured JSON with business info and any emails found.
The actor runs as an MCP standby actor — it stays idle until called via the MCP JSON-RPC protocol, then returns results directly. It's also usable as a standard batch Apify actor with JSON input.
Why use this actor?
- B2B lead generation — Build prospect lists with verified contact emails by category and territory
- Sales outreach — Find decision-maker emails for businesses in a target market
- Market research — Map competitor presence and extract contact infrastructure
- Business discovery — Find all businesses of a type in a neighborhood and get their contact info
- Due diligence — Identify contact patterns and email infrastructure for counterparty research
Tools
| Tool | Price | Description |
|---|---|---|
search_businesses | $0.03 | Search Google Maps by query, returns name/address/placeId |
get_business_website | $0.05 | Get website URL for a specific Google Maps place ID |
extract_emails_from_website | $0.05 | Scrape a website and extract all contact emails |
search_and_extract_emails | $0.10 | Full pipeline: search → find website → scrape emails |
How to use
MCP Protocol (AI agents)
Send a JSON-RPC POST to /mcp with:
{"method": "tools/call","params": {"name": "search_and_extract_emails","arguments": {"search_query": "restaurants in Manhattan","max_results": 10}}}
Apify Batch Mode
apify call red.cars/google-maps-email-mcp \--input '{"tool": "search_and_extract_emails", "params": {"search_query": "manufacturers in Shenzhen", "max_results": 5}}'
JavaScript / TypeScript
const { handleRequest } = await import('./dist/main.js');const result = await handleRequest({toolName: 'search_and_extract_emails',arguments: { search_query: 'plumbers in Brooklyn', max_results: 10 }});console.log(JSON.parse(result.content[0].text));
Input
| Field | Type | Required | Description |
|---|---|---|---|
tool | string | Yes | One of: search_businesses, get_business_website, extract_emails_from_website, search_and_extract_emails |
search_query | string | For search tools | Google Maps search query (e.g., "restaurants in NYC") |
place_id | string | For details tool | Google Maps place ID from a search result |
website_url | string | For email extraction | Business website URL to scrape |
max_results | integer | No | Max results to return (1-50, default 10) |
max_pages | integer | No | Max sub-pages to crawl per website (1-10, default 3) |
Output
search_businesses
{"query": "restaurants in Manhattan","count": 5,"businesses": [{"name": "Joe's Pizza","address": "123 Smith St, New York, NY","website": null,"placeId": "ChIJ8fz2XcJZwok...","emails": [],"source": "google_maps_search"}]}
search_and_extract_emails
{"query": "restaurants in Manhattan","count": 3,"businesses": [{"name": "Joe's Pizza","address": "123 Smith St, New York, NY","website": "https://joespizza.com","placeId": "ChIJ8fz2XcJZwok...","emails": ["contact@joespizza.com", "info@joespizza.com"],"source": "google_maps_search"}]}
extract_emails_from_website
{"website": "https://example.com","pages_crawled": 3,"emails": ["contact@example.com", "jobs@example.com"],"by_page": [{ "page": "https://example.com", "emails": ["contact@example.com"] },{ "page": "https://example.com/contact", "emails": ["contact@example.com", "jobs@example.com"] }]}
Cost estimation
Pricing is per tool call, not per result:
| Tool | Price | Notes |
|---|---|---|
search_businesses | $0.03 | Google Maps search only, no email extraction |
get_business_website | $0.05 | Per placeId — extract website URL only |
extract_emails_from_website | $0.05 | Website scrape, multi-page crawl |
search_and_extract_emails | $0.10 | Full pipeline, one price |
Cost tip: Use search_businesses ($0.03) first to see which businesses have websites, then selectively call extract_emails_from_website ($0.05) for the ones you need.
Tips
search_and_extract_emailsmax_results=20 is the practical maximum per call — each business requires sequential website visits- Contact pages yield the most emails — the scraper prioritizes /contact, /about, /team pages
- No Google API key needed — uses headless browser to scrape Google Maps directly
- Sequential processing — websites are processed one at a time to avoid timeouts; partial results are returned on timeout
FAQ
Is this legal? Scrapes publicly available business contact information from Google Maps and business websites. Ensure your use case complies with Google's Terms of Service and applicable laws. Do not use for spam or unsolicited marketing.
Why do some businesses have no emails? Not all businesses list contact emails on their website. Some use contact forms instead. The scraper only extracts visible email addresses — it cannot submit forms.
What happens if a website blocks the scraper? The actor will skip that website and continue with the next. Use Apify proxy rotation for higher volume.
Does this need a Google API key? No. The actor uses a headless browser to scrape Google Maps directly, no API key required.
Support
For issues or feature requests: Apify Console