Google Maps Email Extractor (Apify)
/install google-maps-email-extractor-apify
Google Maps Email Extractor Apify Skill
Overview
This skill helps an AI agent run the Apify Google Maps Email Extractor actor for public business email lead generation from Google Maps.
Default actor:
- Actor ID:
f3dlnXVnBc6v8JMNK - Actor name:
x_guru/google-maps-email-extractor - Store page:
https://apify.com/x_guru/google-maps-email-extractor - Console source:
https://console.apify.com/actors/f3dlnXVnBc6v8JMNK/source
Use this skill when a user asks to:
- build local business email lead lists from Google Maps
- find public emails for dentists, roofers, lawyers, photographers, gyms, clinics, restaurants, contractors, agencies, real estate offices, or other local niches
- enrich Google Maps places with websites, emails, phones, social links, ratings, reviews count, addresses, and coordinates
- run Google Maps searches by keyword and location with
emailsOnlyoutput - run exact Google Maps URLs or Google Place IDs and return email lead rows
- control Apify spend with
maxTotalChargeUsd - export rows for Sheets, Airtable, n8n, CRM, BI, CSV, JSON, or agent workflows
Quick Workflow
- Clarify the niche, location, desired saved email lead count, and whether person-like emails are allowed.
- Build a small payload first with
searchStringsArray,locationQuery,maxCrawledPlacesPerSearch,contactResultMode: "emailsOnly",website: "withWebsite", andlanguage. - Use
startUrlsorplaceIdswhen the user already has exact Google Maps sources. - Increase
contactPagesLimitonly when a niche hides emails on team, staff, legal, imprint, or contact pages. - Use category/rating/website filters when the search is broad or noisy.
- Set a budget guard with Apify
maxTotalChargeUsdwhen spend matters. - Run
scripts/google_maps_email_extractor_actor.pyor call the Apify API directly. - Return compact metrics and email lead rows. Check
RUN_SUMMARYfor diagnostics when counts are lower than requested.
Payload Rules
- Standard search uses
searchStringsArray,locationQuery,maxCrawledPlacesPerSearch, andlanguage. - Default saved-output mode is
contactResultMode: "emailsOnly". - Use
website: "withWebsite"for email extraction because public emails usually come from business websites. maxCrawledPlacesPerSearchis the requested saved lead target. The actor may scan more Google Maps candidates internally to find enough email leads.contactPagesLimitdefaults to2; use3-5for deeper email discovery.includePersonalData=falsekeeps mostly generic company contacts such asinfo@,sales@,hello@, andcontact@.startUrlsmust be array objects:[{"url": "https://www.google.com/maps/..."}].placeIdsaccepts raw Google Place IDs and compatibleplace_id:values.contactResultModemust beemailsOnly,contactsOnly, orallPlaces.- Paid filters include
categoryFilterWords,placeCategories,customPlaceCategories,searchMatching,placeMinimumStars,website, andskipClosedPlaces. - Search area can use
locationQuery,countryCode,city,state,county,postalCode,customGeolocation,locationBounds, orstrictLocationBounds. - Do not use review-row fields such as
maxReviewshere. Use the Google Maps Reviews Scraper skill for reviews.
Authentication
Use the Apify API token from the environment:
export APIFY_TOKEN='apify_api_xxx'
Never hardcode or print the full token in user-facing output.
Script Usage
The bundled script uses only Python standard library.
Run a quick email-lead search:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_email_extractor_actor.py quick-search \
--query "wedding photographer" \
--location "Austin, Texas, USA" \
--limit 25 \
--budget-usd 1
Run by Google Maps URL:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_email_extractor_actor.py quick-url \
--url "https://www.google.com/maps/search/roofing+contractor+Dallas,+TX" \
--limit 50 \
--budget-usd 1
Run by Place ID:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_email_extractor_actor.py quick-place-id \
--place-id "ChIJE2Flwy-1RIYRWqJr_ZiMGc" \
--budget-usd 1
Run custom JSON:
APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_email_extractor_actor.py run \
--input-file references/sample_input.json \
--budget-usd 1
Recommended Inputs
Local email leads
{
"searchStringsArray": ["wedding photographer"],
"locationQuery": "Austin, Texas, USA",
"maxCrawledPlacesPerSearch": 100,
"contactResultMode": "emailsOnly",
"contactPagesLimit": 2,
"includePersonalData": true,
"website": "withWebsite",
"skipClosedPlaces": true,
"language": "en"
}
Generic company emails only
{
"searchStringsArray": ["commercial electrician"],
"locationQuery": "Denver, Colorado, USA",
"maxCrawledPlacesPerSearch": 100,
"contactResultMode": "emailsOnly",
"includePersonalData": false,
"website": "withWebsite"
}
Exact sources
{
"startUrls": [
{
"url": "https://www.google.com/maps/search/marketing+agency+near+Chicago,+IL"
}
],
"maxCrawledPlacesPerSearch": 50,
"contactResultMode": "emailsOnly",
"website": "withWebsite"
}
Output Contract
The runner returns JSON:
okactorIdfetchedAtinputUseditemCountrows[]
Rows are actor dataset items. Important groups:
- Business:
title,categoryName,categories,rank,searchString - Emails:
emails,emailDetails.email,emailDetails.type,emailDetails.sourceUrl,emailDetails.domainMatch - Contacts:
website,phone,phoneUnformatted,additionalPhones, social profile arrays - Address:
address,street,city,state,postalCode,countryCode,location,plusCode - Google metrics:
totalScore,reviewsCount,reviewsDistribution, closed flags - Google IDs:
placeId,fid,cid,kgmid,url,searchPageUrl - Diagnostics:
contactSignals,contactStatus,additionalInfo.companyContacts,scrapedAt
For the full contract, read references/input-output-contract.md.
Agent Response Rules
- If rows are empty, say the run succeeded but no email leads were saved, then suggest checking
RUN_SUMMARY. - If fewer rows than requested are returned, explain that the niche/area had fewer public emails or the budget/filter stopped saving.
- If
emailsis empty incontactsOnlyorallPlaces, explain that the row was saved due to other contact data. - Explain public email extraction as best-effort because each business controls what its website publishes.
- Use
maxTotalChargeUsdfor any user concerned about spend. - Do not promise review text or full review datasets from this actor. Use the separate Google Maps Reviews Scraper for reviews.
References
references/input-output-contract.mdreferences/sample_input.jsonreferences/troubleshooting.md
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install google-maps-email-extractor-apify - 安装完成后,直接呼叫该 Skill 的名称或使用
/google-maps-email-extractor-apify触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Google Maps Email Extractor (Apify) 是什么?
Use this skill when the user needs public business email leads from Google Maps through an Apify actor, including emails, email details, websites, phones, so... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 33 次。
如何安装 Google Maps Email Extractor (Apify)?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install google-maps-email-extractor-apify」即可一键安装,无需额外配置。
Google Maps Email Extractor (Apify) 是免费的吗?
是的,Google Maps Email Extractor (Apify) 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Google Maps Email Extractor (Apify) 支持哪些平台?
Google Maps Email Extractor (Apify) 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Google Maps Email Extractor (Apify)?
由 hundevmode(@hundevmode)开发并维护,当前版本 v1.0.0。