Google Maps Business Lead Finder with Email & Social Links
Search Google Maps by business type and location and get back listing details enriched with email addresses and social profiles pulled from each business's own website.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Choose how to find businesses. Search Google Maps by phrase, enrich a list of websites you already have, or look up specific Google Maps places. |
searchQueries | array | optional | Natural-language searches such as 'coffee shops in Austin TX' or 'plumbers near Chicago'. Include the place in the phrase, or use the location field below. Each phrase is searched separately. |
locationQuery | string | optional | Adds a shared location to every search phrase, for example 'Austin, TX, USA'. Leave empty when your phrases already contain the place. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | optional | Choose how to find businesses. Search Google Maps by phrase, enrich a list of websites you already have, or look up specific Google Maps places. |
searchQueries | array | optional | Natural-language searches such as 'coffee shops in Austin TX' or 'plumbers near Chicago'. Include the place in the phrase, or use the location field below. Each phrase is searched separately. |
locationQuery | string | optional | Adds a shared location to every search phrase, for example 'Austin, TX, USA'. Leave empty when your phrases already contain the place. |
websites | array | optional | Websites to extract contacts from, one per line. Bare domains such as 'example.com' are accepted. |
placeUrls | array | optional | Google Maps place links, copied from the address bar or from a previous export. |
placeIds | array | optional | Canonical Google Place IDs starting with 'ChIJ'. |
maxPlacesPerSearch | integer | optional | Maximum businesses to keep for each search phrase. Google returns a ranked window of roughly 160-220 places per phrase; asking for more simply returns what the source has. |
language | string | optional | Language of the Google Maps interface and listing text. |
extractEmailsFromWebsite | boolean | optional | Visit each business website to collect contact details. Disable for a faster run with Google Maps data only. |
maxEmailsPerWebsite | integer | optional | Maximum email addresses to keep for one business website. |
maxContactPagesPerWebsite | integer | optional | How many pages to read on each website: the homepage plus contact, about, legal, privacy or careers pages. More pages find more contacts but take longer. |
onlySaveResults | string | optional | Save every business, only businesses where an email was found, or only businesses with any contact detail (email, website phone or social profile). |
placeMinimumStars | string | optional | Keep only businesses rated at least this high. Places without a rating are left out when a minimum is set. |
categoryFilter | array | optional | Keep places whose Google Maps category contains all words of at least one entry, for example 'coffee' or 'italian restaur'. Leave empty for no category filter. |
websiteFilter | string | optional | Keep all places, only places with a website, or only places without one. |
skipClosedPlaces | boolean | optional | Check each place's public status and leave out businesses marked closed. This adds one small request per place. |
Download the published input schema
View complete JSON
{
"properties": {
"categoryFilter": {
"description": "Keep places whose Google Maps category contains all words of at least one entry, for example 'coffee' or 'italian restaur'. Leave empty for no category filter.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Category filter words",
"type": "array"
},
"extractEmailsFromWebsite": {
"default": true,
"description": "Visit each business website to collect contact details. Disable for a faster run with Google Maps data only.",
"prefill": true,
"sectionCaption": "Contact extraction",
"title": "Find emails, phones and social profiles on the business website",
"type": "boolean"
},
"language": {
"default": "en",
"description": "Language of the Google Maps interface and listing text.",
"editor": "select",
"enum": [
"en",
"af",
"az",
"id",
"ms",
"bs",
"ca",
"cs",
"da",
"de",
"et",
"es",
"es-419",
"eu",
"fil",
"fr",
"gl",
"hr",
"zu",
"is",
"it",
"sw",
"lv",
"lt",
"hu",
"nl",
"no",
"uz",
"pl",
"pt-BR",
"pt-PT",
"ro",
"sq",
"sk",
"sl",
"fi",
"sv",
"vi",
"tr",
"el",
"bg",
"ky",
"kk",
"mk",
"mn",
"ru",
"sr",
"uk",
"ka",
"hy",
"iw",
"ur",
"ar",
"fa",
"am",
"ne",
"hi",
"mr",
"bn",
"pa",
"gu",
"ta",
"te",
"kn",
"ml",
"si",
"th",
"lo",
"my",
"km",
"ko",
"ja",
"zh-CN",
"zh-TW",
"zh",
"pt"
],
"enumTitles": [
"English",
"Afrikaans",
"azərbaycan",
"Bahasa Indonesia",
"Bahasa Melayu",
"bosanski",
"català",
"Čeština",
"Dansk",
"Deutsch",
"eesti",
"Español",
"Español (Latinoamérica)",
"euskara",
"Filipino",
"Français",
"galego",
"Hrvatski",
"isiZulu",
"íslenska",
"Italiano",
"Kiswahili",
"latviešu",
"lietuvių",
"magyar",
"Nederlands",
"norsk",
"oʻzbekcha",
"polski",
"Português (Brasil)",
"Português (Portugal)",
"română",
"shqip",
"Slovenčina",
"slovenščina",
"Suomi",
"Svenska",
"Tiếng Việt",
"Türkçe",
"Ελληνικά",
"български",
"кыргызча",
"қазақ тілі",
"македонски",
"монгол",
"Русский",
"српски",
"Українська",
"ქართული",
"հայերեն",
"עברית",
"اردو",
"العربية",
"فارسی",
"አማርኛ",
"नेपाली",
"हिन्दी",
"मराठी",
"বাংলা",
"ਪੰਜਾਬੀ",
"ગુજરાતી",
"தமிழ்",
"తెలుగు",
"ಕನ್ನಡ",
"മലയാളം",
"සිංහල",
"ไทย",
"ລາວ",
"ဗမာ",
"ខ្មែរ",
"한국어",
"日本語",
"简体中文",
"繁體中文",
"中文 (Chinese)",
"Português"
],
"prefill": "en",
"title": "Language",
"type": "string"
},
"locationQuery": {
"description": "Adds a shared location to every search phrase, for example 'Austin, TX, USA'. Leave empty when your phrases already contain the place.",
"editor": "textfield",
"prefill": "",
"title": "Location (optional)",
"type": "string"
},
"maxContactPagesPerWebsite": {
"default": 3,
"description": "How many pages to read on each website: the homepage plus contact, about, legal, privacy or careers pages. More pages find more contacts but take longer.",
"maximum": 10,
"minimum": 1,
"prefill": 2,
"title": "Pages checked per website",
"type": "integer"
},
"maxEmailsPerWebsite": {
"default": 5,
"description": "Maximum email addresses to keep for one business website.",
"maximum": 20,
"minimum": 1,
"prefill": 5,
"title": "Emails per website",
"type": "integer"
},
"maxPlacesPerSearch": {
"default": 20,
"description": "Maximum businesses to keep for each search phrase. Google returns a ranked window of roughly 160-220 places per phrase; asking for more simply returns what the source has.",
"maximum": 1000,
"minimum": 1,
"prefill": 3,
"sectionCaption": "Limits and language",
"title": "Businesses per search phrase",
"type": "integer"
},
"mode": {
"default": "searchPlaces",
"description": "Choose how to find businesses. Search Google Maps by phrase, enrich a list of websites you already have, or look up specific Google Maps places.",
"editor": "select",
"enum": [
"searchPlaces",
"enrichWebsites",
"specificPlaces"
],
"enumTitles": [
"Search Google Maps for businesses",
"Get contacts from a list of websites",
"Scrape specific Google Maps places"
],
"prefill": "searchPlaces",
"sectionCaption": "How to find businesses",
"title": "What do you want to do?",
"type": "string"
},
"onlySaveResults": {
"default": "allPlaces",
"description": "Save every business, only businesses where an email was found, or only businesses with any contact detail (email, website phone or social profile).",
"editor": "select",
"enum": [
"allPlaces",
"onlyWithEmails",
"onlyWithContacts"
],
"enumTitles": [
"All matching businesses",
"Only businesses with an email",
"Only businesses with any contact detail"
],
"prefill": "allPlaces",
"sectionCaption": "Filters and results",
"title": "Which places to save",
"type": "string"
},
"placeIds": {
"description": "Canonical Google Place IDs starting with 'ChIJ'.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"title": "Google Place IDs",
"type": "array"
},
"placeMinimumStars": {
"default": "",
"description": "Keep only businesses rated at least this high. Places without a rating are left out when a minimum is set.",
"editor": "select",
"enum": [
"",
"two",
"twoAndHalf",
"three",
"threeAndHalf",
"four",
"fourAndHalf"
],
"enumTitles": [
"Any rating",
"2+ stars",
"2.5+ stars",
"3+ stars",
"3.5+ stars",
"4+ stars",
"4.5+ stars"
],
"prefill": "",
"title": "Minimum rating",
"type": "string"
},
"placeUrls": {
"description": "Google Maps place links, copied from the address bar or from a previous export.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"sectionCaption": "Scrape specific places",
"sectionDescription": "Used when the selected mode is 'Scrape specific Google Maps places'. Provide place links, Place IDs, or both.",
"title": "Google Maps place URLs",
"type": "array"
},
"searchQueries": {
"description": "Natural-language searches such as 'coffee shops in Austin TX' or 'plumbers near Chicago'. Include the place in the phrase, or use the location field below. Each phrase is searched separately.",
"editor": "stringList",
"items": {
"type": "string"
},
"minItems": 1,
"prefill": [
"coffee shops in Austin TX"
],
"sectionCaption": "Search Google Maps",
"sectionDescription": "Used when the selected mode is 'Search Google Maps for businesses'.",
"title": "Search phrases",
"type": "array"
},
"skipClosedPlaces": {
"default": false,
"description": "Check each place's public status and leave out businesses marked closed. This adds one small request per place.",
"prefill": false,
"title": "Skip permanently or temporarily closed places",
"type": "boolean"
},
"websiteFilter": {
"default": "allPlaces",
"description": "Keep all places, only places with a website, or only places without one.",
"editor": "select",
"enum": [
"allPlaces",
"withWebsite",
"withoutWebsite"
],
"enumTitles": [
"All places",
"Only places with a website",
"Only places without a website"
],
"prefill": "allPlaces",
"title": "Website filter",
"type": "string"
},
"websites": {
"description": "Websites to extract contacts from, one per line. Bare domains such as 'example.com' are accepted.",
"editor": "stringList",
"items": {
"type": "string"
},
"prefill": [],
"sectionCaption": "Enrich a list of websites",
"sectionDescription": "Used when the selected mode is 'Get contacts from a list of websites'. No Google Maps lookup is made.",
"title": "Business websites",
"type": "array"
}
},
"required": [],
"schemaVersion": 1,
"title": "Google Maps Lead Finder Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
results | string | optional | Dataset with business leads including names, addresses, phones, emails, social links, ratings, and Google Maps metadata. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Google Maps business listings enriched with email addresses (including a DNS-checked subset), website phone numbers, social profiles, categories and place identifiers.",
"properties": {
"results": {
"description": "Dataset with business leads including names, addresses, phones, emails, social links, ratings, and Google Maps metadata.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Business Leads",
"type": "string"
}
},
"title": "Google Maps Business Lead Finder with Email & Social Links Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"detailed": {
"display": {
"component": "table",
"properties": {
"address": {
"format": "text",
"label": "Address"
},
"categories": {
"format": "text",
"label": "Categories"
},
"categoryName": {
"format": "text",
"label": "Category"
},
"contactPageUrl": {
"format": "link",
"label": "Contact page"
},
"emails": {
"format": "text",
"label": "Emails"
},
"emailsMxValid": {
"format": "text",
"label": "MX-valid emails"
},
"featureId": {
"format": "text",
"label": "Feature ID"
},
"kgmid": {
"format": "text",
"label": "Knowledge Graph ID"
},
"location.lat": {
"format": "number",
"label": "Latitude"
},
"location.lng": {
"format": "number",
"label": "Longitude"
},
"phone": {
"format": "text",
"label": "Phone"
},
"phonesOnWebsite": {
"format": "text",
"label": "Website phones"
},
"placeId": {
"format": "text",
"label": "Place ID"
},
"plusCode": {
"format": "text",
"label": "Plus Code"
},
"priceLevel": {
"format": "text",
"label": "Price"
},
"reviewsCount": {
"format": "number",
"label": "Reviews"
},
"scrapedAt": {
"format": "text",
"label": "Scraped At"
},
"searchQuery": {
"format": "text",
"label": "Search Query"
},
"socialLinks.facebook": {
"format": "link",
"label": "Facebook"
},
"socialLinks.instagram": {
"format": "link",
"label": "Instagram"
},
"socialLinks.linkedin": {
"format": "link",
"label": "LinkedIn"
},
"socialLinks.pinterest": {
"format": "link",
"label": "Pinterest"
},
"socialLinks.telegram": {
"format": "link",
"label": "Telegram"
},
"socialLinks.threads": {
"format": "link",
"label": "Threads"
},
"socialLinks.tiktok": {
"format": "link",
"label": "TikTok"
},
"socialLinks.twitter": {
"format": "link",
"label": "Twitter"
},
"socialLinks.whatsapp": {
"format": "link",
"label": "WhatsApp"
},
"socialLinks.youtube": {
"format": "link",
"label": "YouTube"
},
"title": {
"format": "text",
"label": "Business"
},
"totalScore": {
"format": "number",
"label": "Rating"
},
"url": {
"format": "link",
"label": "Maps URL"
},
"website": {
"format": "link",
"label": "Website"
}
}
},
"title": "Full Details",
"transformation": {
"fields": [
"recordType",
"searchQuery",
"title",
"categoryName",
"categories",
"address",
"phone",
"website",
"emails",
"emailsMxValid",
"phonesOnWebsite",
"contactPageUrl",
"totalScore",
"reviewsCount",
"placeId",
"featureId",
"kgmid",
"url",
"priceLevel",
"plusCode",
"location.lat",
"location.lng",
"socialLinks.facebook",
"socialLinks.instagram",
"socialLinks.linkedin",
"socialLinks.twitter",
"socialLinks.youtube",
"socialLinks.tiktok",
"socialLinks.pinterest",
"socialLinks.threads",
"socialLinks.telegram",
"socialLinks.whatsapp",
"sourceUrl",
"scrapedAt"
],
"flatten": [
"location",
"socialLinks"
]
}
},
"overview": {
"display": {
"component": "table",
"properties": {
"address": {
"format": "text",
"label": "Address"
},
"categoryName": {
"format": "text",
"label": "Category"
},
"emails": {
"format": "text",
"label": "Emails"
},
"emailsMxValid": {
"format": "text",
"label": "MX-valid emails"
},
"phone": {
"format": "text",
"label": "Phone"
},
"reviewsCount": {
"format": "number",
"label": "Reviews"
},
"searchQuery": {
"format": "text",
"label": "Search Query"
},
"title": {
"format": "text",
"label": "Business"
},
"totalScore": {
"format": "number",
"label": "Rating"
},
"website": {
"format": "link",
"label": "Website"
}
}
},
"title": "Business Leads",
"transformation": {
"fields": [
"recordType",
"searchQuery",
"title",
"categoryName",
"address",
"phone",
"website",
"emails",
"emailsMxValid",
"totalScore",
"reviewsCount",
"sourceUrl",
"scrapedAt"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Google Maps Business Lead Finder with Email & Social Links
Turn a local market into a contact-ready lead list. Search Google Maps by phrase ("roofers in Dallas TX", "dentists in Berlin"), then read each business's own website for the email addresses, phone numbers and social profiles it publishes. Two more modes let you enrich a list of websites you already own, or look up specific Google Maps places.
No Google account, cookies or API key is needed.
What this actor does
- Search Google Maps — runs each search phrase and keeps the businesses Google returns for it. Every place comes with its listing details and a link to its Google Maps page.
- Read the business website — visits the homepage and a small number of contact, about, legal, privacy or careers pages (including local names such as kontakt and impressum), and collects public emails, phone numbers and social profiles.
- Check email domains — reports which found addresses sit on a domain that actually accepts mail (an MX record), so you can prioritise them before outreach.
- Filter and de-duplicate — one row per business, matched by Place ID; optional rating, category, website and closed-place filters.
- Enrich websites directly — paste a list of domains when you already have the businesses and only need their contact details.
- Look up specific places — paste Google Maps place links or Place IDs and get the same lead rows without running a search.
The actor never guesses an email address from a name or a domain, and never invents fields. If a business does not publish a contact, the field is left out.
Output per lead
| Field | Type | Description |
|---|---|---|
recordType |
string | Always lead |
searchQuery |
string | The search phrase that found the business (search mode only) |
title |
string | Business name |
categoryName |
string | Primary Google Maps category |
categories |
string[] | All Google Maps categories for the place |
address |
string | Full address |
phone |
string | Phone number shown on Google Maps |
website |
string | The business's website |
emails |
string[] | Public email addresses found on the business's own website |
emailsMxValid |
string[] | The subset of emails whose domain published a mail server record at run time |
phonesOnWebsite |
string[] | Phone numbers found on the website (may differ from the Maps number) |
contactPageUrl |
string | The contact or legal page that supplied the first website email |
totalScore |
number | Google Maps rating (1–5) |
reviewsCount |
integer | Number of Google reviews |
placeId |
string | Canonical Google Place ID (starts with ChIJ) |
featureId |
string | Legacy Google feature token (0x…:0x…) |
kgmid |
string | Google Knowledge Graph identifier |
url |
string | Google Maps URL of the place |
sourceUrl |
string | Source URL (Maps place URL, or the website in website mode) |
location |
object | {lat, lng} place coordinates |
plusCode |
string | Plus Code computed from the place coordinates |
priceLevel |
string | Price range only when Google supplies one; often unavailable |
socialLinks |
object | Profile URLs for Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, Pinterest, Threads, Telegram and WhatsApp |
scrapedAt |
string | ISO 8601 timestamp shared by all rows of a run |
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
select | searchPlaces |
What to do: search Google Maps, enrich websites, or scrape specific places |
searchQueries |
string[] | – | Search phrases for Google Maps (search mode). Include the place in the phrase or use locationQuery |
locationQuery |
string | – | Adds a shared location to every search phrase, e.g. Austin, TX, USA |
websites |
string[] | – | Websites to enrich (website mode); bare domains are accepted |
placeUrls |
string[] | – | Google Maps place links (specific-places mode) |
placeIds |
string[] | – | Canonical Place IDs starting with ChIJ (specific-places mode) |
maxPlacesPerSearch |
integer | 20 |
Maximum businesses kept per search phrase (1–1000) |
language |
select | en |
Language of the Google Maps interface and listing text (74 options) |
extractEmailsFromWebsite |
boolean | true |
Visit business websites to collect contact details |
maxEmailsPerWebsite |
integer | 5 |
Maximum emails kept per website (1–20) |
maxContactPagesPerWebsite |
integer | 3 |
Pages read per website: homepage plus contact/about/legal/privacy/careers pages (1–10) |
onlySaveResults |
select | allPlaces |
Save all places, only places with an email, or only places with any contact detail |
placeMinimumStars |
select | Any rating (empty) | Keep only places rated at least the selected value |
categoryFilter |
string[] | – | Keep places whose category contains all words of at least one entry |
websiteFilter |
select | allPlaces |
All places, only places with a website, or only places without one |
skipClosedPlaces |
boolean | false |
Check public status and leave out permanently or temporarily closed places |
Example: search Google Maps
{
"mode": "searchPlaces",
"searchQueries": ["roofing contractors in Dallas TX", "coffee shops in Austin TX"],
"maxPlacesPerSearch": 50,
"extractEmailsFromWebsite": true,
"onlySaveResults": "onlyWithContacts"
}
Example: enrich websites you already have
{
"mode": "enrichWebsites",
"websites": ["example-bakery.com", "example-dentist.de"],
"maxContactPagesPerWebsite": 3
}
Example: specific places
{
"mode": "specificPlaces",
"placeUrls": ["https://www.google.com/maps/place/…"],
"placeIds": ["ChIJ…"],
"skipClosedPlaces": true
}
How complete is the email data?
Google Maps has no email field — the address lives on the business's own website, or nowhere. In a 399-business census across restaurants, contractors, dentists, salons, auto repair and shops in the US and Europe, 66% of businesses published an email within the homepage plus two contact pages, and 70% when up to nine contact pages were checked. Homepages supplied most of them; contact, about, legal, privacy and careers pages added the rest, and theme/store configuration files supplied a further slice. German, Austrian and Swiss businesses are often legally required to publish an Impressum page with a contact address, so those markets tend to score higher (86% in the London restaurant sample).
Of the rest, about 22% publish only a contact form or no address at all, and a small share of sites are unreachable (dead, archived or behind bot protection). Those rows keep their Google Maps details, but no website contacts. Nothing is fabricated to fill the gap.
Limitations
- Google Maps returns a ranked window of about 160–220 places per search phrase, not every business in a city. Use several related phrases to widen coverage.
- A business with no website, or one that publishes only a contact form, cannot yield a public email. Raising
maxContactPagesPerWebsitefinds addresses that only appear on deeper privacy or careers pages. emailsMxValidconfirms that the email domain publishes a mail-server (MX) record; it cannot detect a catch-all mailbox or an abandoned inbox. A domain that publishes only an A record (no MX) is not included.priceLevelis usually unavailable from public listing data and is omitted rather than guessed.plusCodeis computed from the place coordinates, so it carries the code but not Google's locality suffix next to it.- Closed-place checking reads Google's public status; a place whose status cannot be read is kept.
- Results depend on Google Maps' search relevance for your phrase.
FAQ
How many businesses can I get per search phrase? Up to what Google Maps exposes for that phrase — usually 160–220 unique places, and you can keep up to 1000. Use several related phrases to cover more of a market.
Does this actor need cookies, a login or an API key? No. It reads public Google Maps pages and public business websites.
Why does a row have no email?
Not every business has a website, and not every website publishes an email. Some use a contact form or a booking widget instead. Rows without contacts are kept unless you choose onlySaveResults.
What does emailsMxValid mean?
It is the part of emails whose domain published a mail-server (MX) record when the run executed. A domain that publishes only an A record is not included. It is a deliverability hint, not a guarantee that a person reads that inbox.
Can I search in languages other than English?
Yes. language offers 74 Google Maps languages, and contact-page discovery understands common local page names such as kontakt, impressum, contacto, contatti and contactez-nous.
Can I use the actor on a list of websites without Google Maps?
Yes. Choose enrichWebsites and paste the domains.
Are both email addresses and phone numbers included?
Yes. phone is the Google Maps number; phonesOnWebsite lists numbers found on the business's site.
Is this affiliated with Google? No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Google.
Please use this public data lawfully and in line with Google's terms.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build vbOJFIlsVgFGizez8. Documentation is regenerated from the default published build; private drafts are not included.