Install
openclaw skills install google-maps-email-extractor-apifyUse this skill when the user needs public business email leads from Google Maps through an Apify actor, including emails, email details, websites, phones, social profiles, ratings, addresses, coordinates, Google Place IDs, CIDs, and Google Maps URLs from keywords, locations, Google Maps URLs, Place IDs, categories, or map areas.
openclaw skills install google-maps-email-extractor-apifyThis skill helps an AI agent run the Apify Google Maps Email Extractor actor for public business email lead generation from Google Maps.
Default actor:
f3dlnXVnBc6v8JMNKx_guru/google-maps-email-extractorhttps://apify.com/x_guru/google-maps-email-extractorhttps://console.apify.com/actors/f3dlnXVnBc6v8JMNK/sourceUse this skill when a user asks to:
emailsOnly outputmaxTotalChargeUsdsearchStringsArray, locationQuery, maxCrawledPlacesPerSearch, contactResultMode: "emailsOnly", website: "withWebsite", and language.startUrls or placeIds when the user already has exact Google Maps sources.contactPagesLimit only when a niche hides emails on team, staff, legal, imprint, or contact pages.maxTotalChargeUsd when spend matters.scripts/google_maps_email_extractor_actor.py or call the Apify API directly.RUN_SUMMARY for diagnostics when counts are lower than requested.searchStringsArray, locationQuery, maxCrawledPlacesPerSearch, and language.contactResultMode: "emailsOnly".website: "withWebsite" for email extraction because public emails usually come from business websites.maxCrawledPlacesPerSearch is the requested saved lead target. The actor may scan more Google Maps candidates internally to find enough email leads.contactPagesLimit defaults to 2; use 3-5 for deeper email discovery.includePersonalData=false keeps mostly generic company contacts such as info@, sales@, hello@, and contact@.startUrls must be array objects: [{"url": "https://www.google.com/maps/..."}].placeIds accepts raw Google Place IDs and compatible place_id: values.contactResultMode must be emailsOnly, contactsOnly, or allPlaces.categoryFilterWords, placeCategories, customPlaceCategories, searchMatching, placeMinimumStars, website, and skipClosedPlaces.locationQuery, countryCode, city, state, county, postalCode, customGeolocation, locationBounds, or strictLocationBounds.maxReviews here. Use the Google Maps Reviews Scraper skill for reviews.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.
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
{
"searchStringsArray": ["wedding photographer"],
"locationQuery": "Austin, Texas, USA",
"maxCrawledPlacesPerSearch": 100,
"contactResultMode": "emailsOnly",
"contactPagesLimit": 2,
"includePersonalData": true,
"website": "withWebsite",
"skipClosedPlaces": true,
"language": "en"
}
{
"searchStringsArray": ["commercial electrician"],
"locationQuery": "Denver, Colorado, USA",
"maxCrawledPlacesPerSearch": 100,
"contactResultMode": "emailsOnly",
"includePersonalData": false,
"website": "withWebsite"
}
{
"startUrls": [
{
"url": "https://www.google.com/maps/search/marketing+agency+near+Chicago,+IL"
}
],
"maxCrawledPlacesPerSearch": 50,
"contactResultMode": "emailsOnly",
"website": "withWebsite"
}
The runner returns JSON:
okactorIdfetchedAtinputUseditemCountrows[]Rows are actor dataset items. Important groups:
title, categoryName, categories, rank, searchStringemails, emailDetails.email, emailDetails.type, emailDetails.sourceUrl, emailDetails.domainMatchwebsite, phone, phoneUnformatted, additionalPhones, social profile arraysaddress, street, city, state, postalCode, countryCode, location, plusCodetotalScore, reviewsCount, reviewsDistribution, closed flagsplaceId, fid, cid, kgmid, url, searchPageUrlcontactSignals, contactStatus, additionalInfo.companyContacts, scrapedAtFor the full contract, read references/input-output-contract.md.
RUN_SUMMARY.emails is empty in contactsOnly or allPlaces, explain that the row was saved due to other contact data.maxTotalChargeUsd for any user concerned about spend.references/input-output-contract.mdreferences/sample_input.jsonreferences/troubleshooting.md