{
  "data": {
    "id": "vbOJFIlsVgFGizez8",
    "actId": "gMWbkCIRuVIl0guxm",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-19T20:50:51.932Z",
    "finishedAt": "2026-10-19T20:51:08.964Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 16939,
      "runTimeSecs": 16.939,
      "computeUnits": 0.01882111111111111,
      "imageSizeBytes": 358749696
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Google Maps Lead Finder Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"required\": [],\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What do you want to do?\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"searchPlaces\",\n        \"enrichWebsites\",\n        \"specificPlaces\"\n      ],\n      \"enumTitles\": [\n        \"Search Google Maps for businesses\",\n        \"Get contacts from a list of websites\",\n        \"Scrape specific Google Maps places\"\n      ],\n      \"default\": \"searchPlaces\",\n      \"prefill\": \"searchPlaces\",\n      \"sectionCaption\": \"How to find businesses\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search phrases\",\n      \"type\": \"array\",\n      \"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.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1,\n      \"prefill\": [\n        \"coffee shops in Austin TX\"\n      ],\n      \"sectionCaption\": \"Search Google Maps\",\n      \"sectionDescription\": \"Used when the selected mode is 'Search Google Maps for businesses'.\"\n    },\n    \"locationQuery\": {\n      \"title\": \"Location (optional)\",\n      \"type\": \"string\",\n      \"description\": \"Adds a shared location to every search phrase, for example 'Austin, TX, USA'. Leave empty when your phrases already contain the place.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"websites\": {\n      \"title\": \"Business websites\",\n      \"type\": \"array\",\n      \"description\": \"Websites to extract contacts from, one per line. Bare domains such as 'example.com' are accepted.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [],\n      \"sectionCaption\": \"Enrich a list of websites\",\n      \"sectionDescription\": \"Used when the selected mode is 'Get contacts from a list of websites'. No Google Maps lookup is made.\"\n    },\n    \"placeUrls\": {\n      \"title\": \"Google Maps place URLs\",\n      \"type\": \"array\",\n      \"description\": \"Google Maps place links, copied from the address bar or from a previous export.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [],\n      \"sectionCaption\": \"Scrape specific places\",\n      \"sectionDescription\": \"Used when the selected mode is 'Scrape specific Google Maps places'. Provide place links, Place IDs, or both.\"\n    },\n    \"placeIds\": {\n      \"title\": \"Google Place IDs\",\n      \"type\": \"array\",\n      \"description\": \"Canonical Google Place IDs starting with 'ChIJ'.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": []\n    },\n    \"maxPlacesPerSearch\": {\n      \"title\": \"Businesses per search phrase\",\n      \"type\": \"integer\",\n      \"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.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 20,\n      \"prefill\": 3,\n      \"sectionCaption\": \"Limits and language\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Language of the Google Maps interface and listing text.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"af\",\n        \"az\",\n        \"id\",\n        \"ms\",\n        \"bs\",\n        \"ca\",\n        \"cs\",\n        \"da\",\n        \"de\",\n        \"et\",\n        \"es\",\n        \"es-419\",\n        \"eu\",\n        \"fil\",\n        \"fr\",\n        \"gl\",\n        \"hr\",\n        \"zu\",\n        \"is\",\n        \"it\",\n        \"sw\",\n        \"lv\",\n        \"lt\",\n        \"hu\",\n        \"nl\",\n        \"no\",\n        \"uz\",\n        \"pl\",\n        \"pt-BR\",\n        \"pt-PT\",\n        \"ro\",\n        \"sq\",\n        \"sk\",\n        \"sl\",\n        \"fi\",\n        \"sv\",\n        \"vi\",\n        \"tr\",\n        \"el\",\n        \"bg\",\n        \"ky\",\n        \"kk\",\n        \"mk\",\n        \"mn\",\n        \"ru\",\n        \"sr\",\n        \"uk\",\n        \"ka\",\n        \"hy\",\n        \"iw\",\n        \"ur\",\n        \"ar\",\n        \"fa\",\n        \"am\",\n        \"ne\",\n        \"hi\",\n        \"mr\",\n        \"bn\",\n        \"pa\",\n        \"gu\",\n        \"ta\",\n        \"te\",\n        \"kn\",\n        \"ml\",\n        \"si\",\n        \"th\",\n        \"lo\",\n        \"my\",\n        \"km\",\n        \"ko\",\n        \"ja\",\n        \"zh-CN\",\n        \"zh-TW\",\n        \"zh\",\n        \"pt\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Afrikaans\",\n        \"azərbaycan\",\n        \"Bahasa Indonesia\",\n        \"Bahasa Melayu\",\n        \"bosanski\",\n        \"català\",\n        \"Čeština\",\n        \"Dansk\",\n        \"Deutsch\",\n        \"eesti\",\n        \"Español\",\n        \"Español (Latinoamérica)\",\n        \"euskara\",\n        \"Filipino\",\n        \"Français\",\n        \"galego\",\n        \"Hrvatski\",\n        \"isiZulu\",\n        \"íslenska\",\n        \"Italiano\",\n        \"Kiswahili\",\n        \"latviešu\",\n        \"lietuvių\",\n        \"magyar\",\n        \"Nederlands\",\n        \"norsk\",\n        \"oʻzbekcha\",\n        \"polski\",\n        \"Português (Brasil)\",\n        \"Português (Portugal)\",\n        \"română\",\n        \"shqip\",\n        \"Slovenčina\",\n        \"slovenščina\",\n        \"Suomi\",\n        \"Svenska\",\n        \"Tiếng Việt\",\n        \"Türkçe\",\n        \"Ελληνικά\",\n        \"български\",\n        \"кыргызча\",\n        \"қазақ тілі\",\n        \"македонски\",\n        \"монгол\",\n        \"Русский\",\n        \"српски\",\n        \"Українська\",\n        \"ქართული\",\n        \"հայերեն\",\n        \"עברית\",\n        \"اردو\",\n        \"العربية\",\n        \"فارسی\",\n        \"አማርኛ\",\n        \"नेपाली\",\n        \"हिन्दी\",\n        \"मराठी\",\n        \"বাংলা\",\n        \"ਪੰਜਾਬੀ\",\n        \"ગુજરાતી\",\n        \"தமிழ்\",\n        \"తెలుగు\",\n        \"ಕನ್ನಡ\",\n        \"മലയാളം\",\n        \"සිංහල\",\n        \"ไทย\",\n        \"ລາວ\",\n        \"ဗမာ\",\n        \"ខ្មែរ\",\n        \"한국어\",\n        \"日本語\",\n        \"简体中文\",\n        \"繁體中文\",\n        \"中文 (Chinese)\",\n        \"Português\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\"\n    },\n    \"extractEmailsFromWebsite\": {\n      \"title\": \"Find emails, phones and social profiles on the business website\",\n      \"type\": \"boolean\",\n      \"description\": \"Visit each business website to collect contact details. Disable for a faster run with Google Maps data only.\",\n      \"default\": true,\n      \"prefill\": true,\n      \"sectionCaption\": \"Contact extraction\"\n    },\n    \"maxEmailsPerWebsite\": {\n      \"title\": \"Emails per website\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum email addresses to keep for one business website.\",\n      \"minimum\": 1,\n      \"maximum\": 20,\n      \"default\": 5,\n      \"prefill\": 5\n    },\n    \"maxContactPagesPerWebsite\": {\n      \"title\": \"Pages checked per website\",\n      \"type\": \"integer\",\n      \"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.\",\n      \"minimum\": 1,\n      \"maximum\": 10,\n      \"default\": 3,\n      \"prefill\": 2\n    },\n    \"onlySaveResults\": {\n      \"title\": \"Which places to save\",\n      \"type\": \"string\",\n      \"description\": \"Save every business, only businesses where an email was found, or only businesses with any contact detail (email, website phone or social profile).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"allPlaces\",\n        \"onlyWithEmails\",\n        \"onlyWithContacts\"\n      ],\n      \"enumTitles\": [\n        \"All matching businesses\",\n        \"Only businesses with an email\",\n        \"Only businesses with any contact detail\"\n      ],\n      \"default\": \"allPlaces\",\n      \"prefill\": \"allPlaces\",\n      \"sectionCaption\": \"Filters and results\"\n    },\n    \"placeMinimumStars\": {\n      \"title\": \"Minimum rating\",\n      \"type\": \"string\",\n      \"description\": \"Keep only businesses rated at least this high. Places without a rating are left out when a minimum is set.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"two\",\n        \"twoAndHalf\",\n        \"three\",\n        \"threeAndHalf\",\n        \"four\",\n        \"fourAndHalf\"\n      ],\n      \"enumTitles\": [\n        \"Any rating\",\n        \"2+ stars\",\n        \"2.5+ stars\",\n        \"3+ stars\",\n        \"3.5+ stars\",\n        \"4+ stars\",\n        \"4.5+ stars\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"categoryFilter\": {\n      \"title\": \"Category filter words\",\n      \"type\": \"array\",\n      \"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.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": []\n    },\n    \"websiteFilter\": {\n      \"title\": \"Website filter\",\n      \"type\": \"string\",\n      \"description\": \"Keep all places, only places with a website, or only places without one.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"allPlaces\",\n        \"withWebsite\",\n        \"withoutWebsite\"\n      ],\n      \"enumTitles\": [\n        \"All places\",\n        \"Only places with a website\",\n        \"Only places without a website\"\n      ],\n      \"default\": \"allPlaces\",\n      \"prefill\": \"allPlaces\"\n    },\n    \"skipClosedPlaces\": {\n      \"title\": \"Skip permanently or temporarily closed places\",\n      \"type\": \"boolean\",\n      \"description\": \"Check each place's public status and leave out businesses marked closed. This adds one small request per place.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  }\n}",
    "readme": "# Google Maps Business Lead Finder with Email & Social Links\n\nTurn 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.\n\nNo Google account, cookies or API key is needed.\n\n## What this actor does\n\n- **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.\n- **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.\n- **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.\n- **Filter and de-duplicate** — one row per business, matched by Place ID; optional rating, category, website and closed-place filters.\n- **Enrich websites directly** — paste a list of domains when you already have the businesses and only need their contact details.\n- **Look up specific places** — paste Google Maps place links or Place IDs and get the same lead rows without running a search.\n\nThe 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.\n\n## Output per lead\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `recordType` | string | Always `lead` |\n| `searchQuery` | string | The search phrase that found the business (search mode only) |\n| `title` | string | Business name |\n| `categoryName` | string | Primary Google Maps category |\n| `categories` | string[] | All Google Maps categories for the place |\n| `address` | string | Full address |\n| `phone` | string | Phone number shown on Google Maps |\n| `website` | string | The business's website |\n| `emails` | string[] | Public email addresses found on the business's own website |\n| `emailsMxValid` | string[] | The subset of `emails` whose domain published a mail server record at run time |\n| `phonesOnWebsite` | string[] | Phone numbers found on the website (may differ from the Maps number) |\n| `contactPageUrl` | string | The contact or legal page that supplied the first website email |\n| `totalScore` | number | Google Maps rating (1–5) |\n| `reviewsCount` | integer | Number of Google reviews |\n| `placeId` | string | Canonical Google Place ID (starts with `ChIJ`) |\n| `featureId` | string | Legacy Google feature token (`0x…:0x…`) |\n| `kgmid` | string | Google Knowledge Graph identifier |\n| `url` | string | Google Maps URL of the place |\n| `sourceUrl` | string | Source URL (Maps place URL, or the website in website mode) |\n| `location` | object | `{lat, lng}` place coordinates |\n| `plusCode` | string | Plus Code computed from the place coordinates |\n| `priceLevel` | string | Price range only when Google supplies one; often unavailable |\n| `socialLinks` | object | Profile URLs for Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, Pinterest, Threads, Telegram and WhatsApp |\n| `scrapedAt` | string | ISO 8601 timestamp shared by all rows of a run |\n\n## Input\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `mode` | select | `searchPlaces` | What to do: search Google Maps, enrich websites, or scrape specific places |\n| `searchQueries` | string[] | – | Search phrases for Google Maps (search mode). Include the place in the phrase or use `locationQuery` |\n| `locationQuery` | string | – | Adds a shared location to every search phrase, e.g. `Austin, TX, USA` |\n| `websites` | string[] | – | Websites to enrich (website mode); bare domains are accepted |\n| `placeUrls` | string[] | – | Google Maps place links (specific-places mode) |\n| `placeIds` | string[] | – | Canonical Place IDs starting with `ChIJ` (specific-places mode) |\n| `maxPlacesPerSearch` | integer | `20` | Maximum businesses kept per search phrase (1–1000) |\n| `language` | select | `en` | Language of the Google Maps interface and listing text (74 options) |\n| `extractEmailsFromWebsite` | boolean | `true` | Visit business websites to collect contact details |\n| `maxEmailsPerWebsite` | integer | `5` | Maximum emails kept per website (1–20) |\n| `maxContactPagesPerWebsite` | integer | `3` | Pages read per website: homepage plus contact/about/legal/privacy/careers pages (1–10) |\n| `onlySaveResults` | select | `allPlaces` | Save all places, only places with an email, or only places with any contact detail |\n| `placeMinimumStars` | select | Any rating (empty) | Keep only places rated at least the selected value |\n| `categoryFilter` | string[] | – | Keep places whose category contains all words of at least one entry |\n| `websiteFilter` | select | `allPlaces` | All places, only places with a website, or only places without one |\n| `skipClosedPlaces` | boolean | `false` | Check public status and leave out permanently or temporarily closed places |\n\n### Example: search Google Maps\n\n```json\n{\n  \"mode\": \"searchPlaces\",\n  \"searchQueries\": [\"roofing contractors in Dallas TX\", \"coffee shops in Austin TX\"],\n  \"maxPlacesPerSearch\": 50,\n  \"extractEmailsFromWebsite\": true,\n  \"onlySaveResults\": \"onlyWithContacts\"\n}\n```\n\n### Example: enrich websites you already have\n\n```json\n{\n  \"mode\": \"enrichWebsites\",\n  \"websites\": [\"example-bakery.com\", \"example-dentist.de\"],\n  \"maxContactPagesPerWebsite\": 3\n}\n```\n\n### Example: specific places\n\n```json\n{\n  \"mode\": \"specificPlaces\",\n  \"placeUrls\": [\"https://www.google.com/maps/place/…\"],\n  \"placeIds\": [\"ChIJ…\"],\n  \"skipClosedPlaces\": true\n}\n```\n\n## How complete is the email data?\n\nGoogle 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).\n\nOf 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.\n\n## Limitations\n\n- 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.\n- A business with no website, or one that publishes only a contact form, cannot yield a public email. Raising `maxContactPagesPerWebsite` finds addresses that only appear on deeper privacy or careers pages.\n- `emailsMxValid` confirms 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.\n- `priceLevel` is usually unavailable from public listing data and is omitted rather than guessed.\n- `plusCode` is computed from the place coordinates, so it carries the code but not Google's locality suffix next to it.\n- Closed-place checking reads Google's public status; a place whose status cannot be read is kept.\n- Results depend on Google Maps' search relevance for your phrase.\n\n## FAQ\n\n**How many businesses can I get per search phrase?**\nUp 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.\n\n**Does this actor need cookies, a login or an API key?**\nNo. It reads public Google Maps pages and public business websites.\n\n**Why does a row have no email?**\nNot 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`.\n\n**What does `emailsMxValid` mean?**\nIt 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.\n\n**Can I search in languages other than English?**\nYes. `language` offers 74 Google Maps languages, and contact-page discovery understands common local page names such as kontakt, impressum, contacto, contatti and contactez-nous.\n\n**Can I use the actor on a list of websites without Google Maps?**\nYes. Choose `enrichWebsites` and paste the domains.\n\n**Are both email addresses and phone numbers included?**\nYes. `phone` is the Google Maps number; `phonesOnWebsite` lists numbers found on the business's site.\n\n**Is this affiliated with Google?**\nNo. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Google.\n\nPlease use this public data lawfully and in line with Google's terms.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "google-maps-business-lead-finder-with-email",
      "title": "Google Maps Business Lead Finder with Email & Social Links",
      "description": "Find local businesses on Google Maps and turn them into contact-ready leads: listing details plus emails, phone numbers and social profiles from each business's own website. Also enriches a website list or specific Maps places.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Google Maps Business Lead Finder with Email & Social Links\n\nTurn 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.\n\nNo Google account, cookies or API key is needed.\n\n## What this actor does\n\n- **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.\n- **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.\n- **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.\n- **Filter and de-duplicate** — one row per business, matched by Place ID; optional rating, category, website and closed-place filters.\n- **Enrich websites directly** — paste a list of domains when you already have the businesses and only need their contact details.\n- **Look up specific places** — paste Google Maps place links or Place IDs and get the same lead rows without running a search.\n\nThe 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.\n\n## Output per lead\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `recordType` | string | Always `lead` |\n| `searchQuery` | string | The search phrase that found the business (search mode only) |\n| `title` | string | Business name |\n| `categoryName` | string | Primary Google Maps category |\n| `categories` | string[] | All Google Maps categories for the place |\n| `address` | string | Full address |\n| `phone` | string | Phone number shown on Google Maps |\n| `website` | string | The business's website |\n| `emails` | string[] | Public email addresses found on the business's own website |\n| `emailsMxValid` | string[] | The subset of `emails` whose domain published a mail server record at run time |\n| `phonesOnWebsite` | string[] | Phone numbers found on the website (may differ from the Maps number) |\n| `contactPageUrl` | string | The contact or legal page that supplied the first website email |\n| `totalScore` | number | Google Maps rating (1–5) |\n| `reviewsCount` | integer | Number of Google reviews |\n| `placeId` | string | Canonical Google Place ID (starts with `ChIJ`) |\n| `featureId` | string | Legacy Google feature token (`0x…:0x…`) |\n| `kgmid` | string | Google Knowledge Graph identifier |\n| `url` | string | Google Maps URL of the place |\n| `sourceUrl` | string | Source URL (Maps place URL, or the website in website mode) |\n| `location` | object | `{lat, lng}` place coordinates |\n| `plusCode` | string | Plus Code computed from the place coordinates |\n| `priceLevel` | string | Price range only when Google supplies one; often unavailable |\n| `socialLinks` | object | Profile URLs for Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, Pinterest, Threads, Telegram and WhatsApp |\n| `scrapedAt` | string | ISO 8601 timestamp shared by all rows of a run |\n\n## Input\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `mode` | select | `searchPlaces` | What to do: search Google Maps, enrich websites, or scrape specific places |\n| `searchQueries` | string[] | – | Search phrases for Google Maps (search mode). Include the place in the phrase or use `locationQuery` |\n| `locationQuery` | string | – | Adds a shared location to every search phrase, e.g. `Austin, TX, USA` |\n| `websites` | string[] | – | Websites to enrich (website mode); bare domains are accepted |\n| `placeUrls` | string[] | – | Google Maps place links (specific-places mode) |\n| `placeIds` | string[] | – | Canonical Place IDs starting with `ChIJ` (specific-places mode) |\n| `maxPlacesPerSearch` | integer | `20` | Maximum businesses kept per search phrase (1–1000) |\n| `language` | select | `en` | Language of the Google Maps interface and listing text (74 options) |\n| `extractEmailsFromWebsite` | boolean | `true` | Visit business websites to collect contact details |\n| `maxEmailsPerWebsite` | integer | `5` | Maximum emails kept per website (1–20) |\n| `maxContactPagesPerWebsite` | integer | `3` | Pages read per website: homepage plus contact/about/legal/privacy/careers pages (1–10) |\n| `onlySaveResults` | select | `allPlaces` | Save all places, only places with an email, or only places with any contact detail |\n| `placeMinimumStars` | select | Any rating (empty) | Keep only places rated at least the selected value |\n| `categoryFilter` | string[] | – | Keep places whose category contains all words of at least one entry |\n| `websiteFilter` | select | `allPlaces` | All places, only places with a website, or only places without one |\n| `skipClosedPlaces` | boolean | `false` | Check public status and leave out permanently or temporarily closed places |\n\n### Example: search Google Maps\n\n```json\n{\n  \"mode\": \"searchPlaces\",\n  \"searchQueries\": [\"roofing contractors in Dallas TX\", \"coffee shops in Austin TX\"],\n  \"maxPlacesPerSearch\": 50,\n  \"extractEmailsFromWebsite\": true,\n  \"onlySaveResults\": \"onlyWithContacts\"\n}\n```\n\n### Example: enrich websites you already have\n\n```json\n{\n  \"mode\": \"enrichWebsites\",\n  \"websites\": [\"example-bakery.com\", \"example-dentist.de\"],\n  \"maxContactPagesPerWebsite\": 3\n}\n```\n\n### Example: specific places\n\n```json\n{\n  \"mode\": \"specificPlaces\",\n  \"placeUrls\": [\"https://www.google.com/maps/place/…\"],\n  \"placeIds\": [\"ChIJ…\"],\n  \"skipClosedPlaces\": true\n}\n```\n\n## How complete is the email data?\n\nGoogle 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).\n\nOf 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.\n\n## Limitations\n\n- 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.\n- A business with no website, or one that publishes only a contact form, cannot yield a public email. Raising `maxContactPagesPerWebsite` finds addresses that only appear on deeper privacy or careers pages.\n- `emailsMxValid` confirms 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.\n- `priceLevel` is usually unavailable from public listing data and is omitted rather than guessed.\n- `plusCode` is computed from the place coordinates, so it carries the code but not Google's locality suffix next to it.\n- Closed-place checking reads Google's public status; a place whose status cannot be read is kept.\n- Results depend on Google Maps' search relevance for your phrase.\n\n## FAQ\n\n**How many businesses can I get per search phrase?**\nUp 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.\n\n**Does this actor need cookies, a login or an API key?**\nNo. It reads public Google Maps pages and public business websites.\n\n**Why does a row have no email?**\nNot 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`.\n\n**What does `emailsMxValid` mean?**\nIt 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.\n\n**Can I search in languages other than English?**\nYes. `language` offers 74 Google Maps languages, and contact-page discovery understands common local page names such as kontakt, impressum, contacto, contatti and contactez-nous.\n\n**Can I use the actor on a list of websites without Google Maps?**\nYes. Choose `enrichWebsites` and paste the domains.\n\n**Are both email addresses and phone numbers included?**\nYes. `phone` is the Google Maps number; `phonesOnWebsite` lists numbers found on the business's site.\n\n**Is this affiliated with Google?**\nNo. This is an independent tool and is not affiliated with, endorsed by, or sponsored by Google.\n\nPlease use this public data lawfully and in line with Google's terms.\n",
      "minMemoryMbytes": 1024,
      "maxMemoryMbytes": 1024,
      "input": {
        "title": "Google Maps Lead Finder Input",
        "type": "object",
        "schemaVersion": 1,
        "required": [],
        "properties": {
          "mode": {
            "title": "What do you want to do?",
            "type": "string",
            "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"
            ],
            "default": "searchPlaces",
            "prefill": "searchPlaces",
            "sectionCaption": "How to find businesses"
          },
          "searchQueries": {
            "title": "Search phrases",
            "type": "array",
            "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'."
          },
          "locationQuery": {
            "title": "Location (optional)",
            "type": "string",
            "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": ""
          },
          "websites": {
            "title": "Business websites",
            "type": "array",
            "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."
          },
          "placeUrls": {
            "title": "Google Maps place URLs",
            "type": "array",
            "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."
          },
          "placeIds": {
            "title": "Google Place IDs",
            "type": "array",
            "description": "Canonical Google Place IDs starting with 'ChIJ'.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": []
          },
          "maxPlacesPerSearch": {
            "title": "Businesses per search phrase",
            "type": "integer",
            "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.",
            "minimum": 1,
            "maximum": 1000,
            "default": 20,
            "prefill": 3,
            "sectionCaption": "Limits and language"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "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"
            ],
            "default": "en",
            "prefill": "en"
          },
          "extractEmailsFromWebsite": {
            "title": "Find emails, phones and social profiles on the business website",
            "type": "boolean",
            "description": "Visit each business website to collect contact details. Disable for a faster run with Google Maps data only.",
            "default": true,
            "prefill": true,
            "sectionCaption": "Contact extraction"
          },
          "maxEmailsPerWebsite": {
            "title": "Emails per website",
            "type": "integer",
            "description": "Maximum email addresses to keep for one business website.",
            "minimum": 1,
            "maximum": 20,
            "default": 5,
            "prefill": 5
          },
          "maxContactPagesPerWebsite": {
            "title": "Pages checked per website",
            "type": "integer",
            "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.",
            "minimum": 1,
            "maximum": 10,
            "default": 3,
            "prefill": 2
          },
          "onlySaveResults": {
            "title": "Which places to save",
            "type": "string",
            "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"
            ],
            "default": "allPlaces",
            "prefill": "allPlaces",
            "sectionCaption": "Filters and results"
          },
          "placeMinimumStars": {
            "title": "Minimum rating",
            "type": "string",
            "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"
            ],
            "default": "",
            "prefill": ""
          },
          "categoryFilter": {
            "title": "Category filter words",
            "type": "array",
            "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": []
          },
          "websiteFilter": {
            "title": "Website filter",
            "type": "string",
            "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"
            ],
            "default": "allPlaces",
            "prefill": "allPlaces"
          },
          "skipClosedPlaces": {
            "title": "Skip permanently or temporarily closed places",
            "type": "boolean",
            "description": "Check each place's public status and leave out businesses marked closed. This adds one small request per place.",
            "default": false,
            "prefill": false
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Google Maps Business Lead Finder with Email & Social Links Output",
        "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": {
            "type": "string",
            "title": "Business Leads",
            "description": "Dataset with business leads including names, addresses, phones, emails, social links, ratings, and Google Maps metadata.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Business Leads",
              "transformation": {
                "fields": [
                  "recordType",
                  "searchQuery",
                  "title",
                  "categoryName",
                  "address",
                  "phone",
                  "website",
                  "emails",
                  "emailsMxValid",
                  "totalScore",
                  "reviewsCount",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "searchQuery": {
                    "label": "Search Query",
                    "format": "text"
                  },
                  "title": {
                    "label": "Business",
                    "format": "text"
                  },
                  "categoryName": {
                    "label": "Category",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "website": {
                    "label": "Website",
                    "format": "link"
                  },
                  "emails": {
                    "label": "Emails",
                    "format": "text"
                  },
                  "totalScore": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "emailsMxValid": {
                    "label": "MX-valid emails",
                    "format": "text"
                  },
                  "reviewsCount": {
                    "label": "Reviews",
                    "format": "number"
                  }
                }
              }
            },
            "detailed": {
              "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"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "searchQuery": {
                    "label": "Search Query",
                    "format": "text"
                  },
                  "title": {
                    "label": "Business",
                    "format": "text"
                  },
                  "categoryName": {
                    "label": "Category",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "phone": {
                    "label": "Phone",
                    "format": "text"
                  },
                  "website": {
                    "label": "Website",
                    "format": "link"
                  },
                  "emails": {
                    "label": "Emails",
                    "format": "text"
                  },
                  "totalScore": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "reviewsCount": {
                    "label": "Reviews",
                    "format": "number"
                  },
                  "placeId": {
                    "label": "Place ID",
                    "format": "text"
                  },
                  "featureId": {
                    "label": "Feature ID",
                    "format": "text"
                  },
                  "url": {
                    "label": "Maps URL",
                    "format": "link"
                  },
                  "priceLevel": {
                    "label": "Price",
                    "format": "text"
                  },
                  "plusCode": {
                    "label": "Plus Code",
                    "format": "text"
                  },
                  "location.lat": {
                    "label": "Latitude",
                    "format": "number"
                  },
                  "location.lng": {
                    "label": "Longitude",
                    "format": "number"
                  },
                  "socialLinks.facebook": {
                    "label": "Facebook",
                    "format": "link"
                  },
                  "socialLinks.instagram": {
                    "label": "Instagram",
                    "format": "link"
                  },
                  "socialLinks.linkedin": {
                    "label": "LinkedIn",
                    "format": "link"
                  },
                  "socialLinks.twitter": {
                    "label": "Twitter",
                    "format": "link"
                  },
                  "socialLinks.youtube": {
                    "label": "YouTube",
                    "format": "link"
                  },
                  "socialLinks.tiktok": {
                    "label": "TikTok",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  },
                  "categories": {
                    "label": "Categories",
                    "format": "text"
                  },
                  "emailsMxValid": {
                    "label": "MX-valid emails",
                    "format": "text"
                  },
                  "phonesOnWebsite": {
                    "label": "Website phones",
                    "format": "text"
                  },
                  "contactPageUrl": {
                    "label": "Contact page",
                    "format": "link"
                  },
                  "kgmid": {
                    "label": "Knowledge Graph ID",
                    "format": "text"
                  },
                  "socialLinks.pinterest": {
                    "label": "Pinterest",
                    "format": "link"
                  },
                  "socialLinks.threads": {
                    "label": "Threads",
                    "format": "link"
                  },
                  "socialLinks.telegram": {
                    "label": "Telegram",
                    "format": "link"
                  },
                  "socialLinks.whatsapp": {
                    "label": "WhatsApp",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "019525cf914a24b4fed67f790e7cca4db41ad99daa727462c5c16cc6b68eb988",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01882111111111111
    }
  }
}