# Google Maps Lead Intelligence & Business Email Extractor (`fire_dev/google-maps-lead-intelligence`) Actor

Extract B2B business leads from Google Maps with automated website enrichment: verified emails, phone numbers, social media links, technology stack detection, and lead quality scoring.

- **URL**: https://apify.com/fire\_dev/google-maps-lead-intelligence.md
- **Developed by:** [Fire Dev](https://apify.com/fire_dev) (community)
- **Categories:** E-commerce, Travel, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🗺️ Google Maps Lead Intelligence

A high-performance, production-grade Apify Actor designed to extract verified B2B and B2C leads from Google Maps with automated website enrichment: **direct business emails, phone numbers, contact pages, social media profiles, detected tech stacks, and deterministic Lead Quality Scores (0–100)**.

Unlike typical scrapers that charge expensive pay-per-event add-ons for every email and social profile, **Google Maps Lead Intelligence** provides full end-to-end lead extraction in a single, unified execution.

***

### ⚡ Key Features

- **🌐 Query × Location Matrix**: Search multiple keywords across multiple cities/states concurrently (e.g. `["dentist", "orthodontist"]` × `["Austin, TX", "Dallas, TX"]`).
- **🔎 Comprehensive Google Maps Extraction**:
  - Business Name, Category & Subcategories
  - Full Address, Street, City, State, ZIP, Country
  - Google Maps URL, Place ID, CID
  - Star Rating, Total Review Count, Price Level
  - Latitude & Longitude Coordinates
  - Closed Status (Open / Temporarily Closed / Permanently Closed)
- **✉️ Automated Website Lead Enrichment**:
  - **Verified Business Emails**: RFC-compliant discovery from home and contact pages with false-positive filtering.
  - **Phone Numbers**: Extracted from tel links and page text.
  - **Social Media Handles**: LinkedIn, Instagram, Facebook, Twitter/X, YouTube, TikTok.
  - **Public Tech Stack Detection**: WordPress, Shopify, Webflow, Wix, Squarespace, Google Analytics/GTM, Meta Pixel, TikTok Pixel, Calendly, Acuity, HubSpot, Crisp, Intercom.
- **🎯 Deterministic Lead Quality Score (0–100)**: Transparent algorithmic scoring factoring in digital presence, social proof, and website responsiveness.
- **🛡️ Global Multi-Pass Deduplication**: Automatically deduplicates across queries and locations by Place ID, CID, normalized name+address, and coordinates.

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQueries` *(required)* | Array | `["dentist"]` | List of search keywords or categories |
| `locations` | Array | `["Austin, TX"]` | List of target cities or geographical areas |
| `maxResults` | Integer | `50` | Maximum places to collect per search combination |
| `includeWebsiteData` | Boolean | `true` | Crawl official websites for emails, phones, and tech stack |
| `includeSocialProfiles` | Boolean | `true` | Extract social links (LinkedIn, Instagram, Facebook, etc.) |
| `includeTechStack` | Boolean | `true` | Detect CMS, Analytics, Ad Pixels, and Booking widgets |
| `maxWebsitePagesPerBusiness` | Integer | `3` | Max pages to crawl per business website |
| `onlyBusinessesWithWebsite` | Boolean | `false` | Filter: Only return places with an active website |
| `onlyBusinessesWithPhone` | Boolean | `false` | Filter: Only return places with a phone number |
| `onlyBusinessesWithEmail` | Boolean | `false` | Filter: Only return places where an email was found |
| `minimumRating` | Number | `0` | Filter: Minimum Google star rating (e.g. `4.0`) |
| `minimumReviewCount` | Integer | `0` | Filter: Minimum number of Google reviews (e.g. `10`) |
| `skipClosedPlaces` | Boolean | `true` | Filter: Exclude permanently or temporarily closed places |
| `maxConcurrency` | Integer | `5` | Maximum concurrent browser and scraper sessions |
| `proxyConfiguration` | Object | `{ "useApifyProxy": false }` | Apify Proxy or custom proxy settings |

***

### 📤 Sample Output

```json
{
  "name": "Austin Family Dental & Orthodontics",
  "category": "Dentist",
  "categories": ["Dentist", "Dental Clinic", "Cosmetic Dentist"],
  "address": "123 Main St, Suite 400, Austin, TX 78701, USA",
  "street": "123 Main St, Suite 400",
  "city": "Austin",
  "state": "TX",
  "postalCode": "78701",
  "country": "USA",
  "phone": "+1 512-555-0199",
  "website": "https://austinfamilydental.com",
  "googleMapsUrl": "https://www.google.com/maps/place/...",
  "placeId": "ChIJ1234567890abcdef",
  "cid": "0x1234567890abcdef",
  "rating": 4.8,
  "reviewCount": 142,
  "priceLevel": "$$",
  "latitude": 30.2672,
  "longitude": -97.7431,
  "isOpen": true,
  "isTemporarilyClosed": false,
  "isPermanentlyClosed": false,
  "emails": ["info@austinfamilydental.com", "appointments@austinfamilydental.com"],
  "phoneNumbers": ["(512) 555-0199"],
  "contactPages": ["https://austinfamilydental.com/contact-us"],
  "socialProfiles": {
    "linkedin": "https://www.linkedin.com/company/austin-family-dental",
    "instagram": "https://instagram.com/austinfamilydental",
    "facebook": "https://facebook.com/austinfamilydental"
  },
  "technologies": [
    { "name": "WordPress", "category": "cms" },
    { "name": "Google Analytics", "category": "analytics" },
    { "name": "Meta Pixel", "category": "advertising" },
    { "name": "Calendly", "category": "booking" }
  ],
  "leadScore": 95,
  "leadScoreFactors": [
    "+20: Verified website exists",
    "+15: Active phone number available",
    "+25: Discovered direct business email (info@austinfamilydental.com)",
    "+10: Active social media channels (3 found)",
    "+10: Strong customer rating (4.8★)",
    "+10: Established review base (142+ reviews)",
    "+5: Modern web tech detected (WordPress, Google Analytics, Meta Pixel, Calendly)"
  ],
  "hasWebsite": true,
  "hasPhone": true,
  "hasEmail": true,
  "hasSocialProfiles": true,
  "searchQuery": "dentist",
  "searchLocation": "Austin, TX, USA",
  "scrapedAt": "2026-08-15T18:20:00.000Z"
}
```

***

### 🚀 How to Run

#### Via Apify Console

1. Open the Actor on Apify.
2. Enter your `searchQueries` (e.g. `dentist`, `real estate`) and `locations` (e.g. `Miami, FL`).
3. Hit **Start** and export results in JSON, CSV, or Excel.

#### Via Apify API (Node.js)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('YOUR_USERNAME/google-maps-lead-intelligence').call({
    searchQueries: ['dentist'],
    locations: ['Austin, TX'],
    maxResults: 50,
    includeWebsiteData: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

***

### ⚖️ Legal & Responsible Scraping

This Actor extracts publicly accessible business listings and information published on Google Maps and public business websites. Users are responsible for complying with applicable privacy laws (e.g., GDPR, CCPA, CAN-SPAM) and terms regarding email marketing and commercial communications.

# Actor input Schema

## `searchQueries` (type: `array`):

List of keywords or business categories to search (e.g. 'dentist', 'real estate agency', 'plumber', 'software company').

## `locations` (type: `array`):

List of target cities or geographical regions (e.g. 'Austin, Texas', 'London, UK', 'Mumbai, India').

## `maxResults` (type: `integer`):

Maximum number of places to extract per search query & location pair.

## `language` (type: `string`):

Language code for Google Maps results (e.g. 'en', 'es', 'de', 'fr', 'hi').

## `includeWebsiteData` (type: `boolean`):

Crawl official business websites to find direct emails, phone numbers, contact pages, and technology stacks.

## `includeSocialProfiles` (type: `boolean`):

Extract links to LinkedIn, Instagram, Facebook, Twitter/X, YouTube, and TikTok from the business website.

## `includeTechStack` (type: `boolean`):

Identify CMS (WordPress, Shopify, Webflow, Wix), Google Analytics/GTM, Meta/TikTok ad pixels, and booking widgets.

## `maxWebsitePagesPerBusiness` (type: `integer`):

Maximum subpages (Homepage, /contact, /about) to crawl per business website.

## `onlyBusinessesWithWebsite` (type: `boolean`):

Only export businesses that have an active website URL.

## `onlyBusinessesWithPhone` (type: `boolean`):

Only export businesses that have a phone number.

## `onlyBusinessesWithEmail` (type: `boolean`):

Only export businesses where at least one verified email was found during website enrichment.

## `minimumRating` (type: `number`):

Filter out businesses with rating below this threshold (e.g. 4.0).

## `minimumReviewCount` (type: `integer`):

Filter out businesses with fewer reviews than this number (e.g. 10).

## `skipClosedPlaces` (type: `boolean`):

Skip places marked as permanently or temporarily closed.

## `maxConcurrency` (type: `integer`):

Maximum concurrent browser tabs and website scrapers.

## `proxyConfiguration` (type: `object`):

Apify Proxy or custom proxies to avoid rate limits and geographical blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "dentist",
    "dental clinic"
  ],
  "locations": [
    "Austin, TX, USA"
  ],
  "maxResults": 50,
  "language": "en",
  "includeWebsiteData": true,
  "includeSocialProfiles": true,
  "includeTechStack": true,
  "maxWebsitePagesPerBusiness": 3,
  "onlyBusinessesWithWebsite": false,
  "onlyBusinessesWithPhone": false,
  "onlyBusinessesWithEmail": false,
  "minimumRating": 0,
  "minimumReviewCount": 0,
  "skipClosedPlaces": true,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Complete dataset containing scraped Google Maps places, verified contact emails, phone numbers, social profiles, detected technologies, and lead quality scores.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "dentist",
        "dental clinic"
    ],
    "locations": [
        "Austin, TX, USA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fire_dev/google-maps-lead-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "dentist",
        "dental clinic",
    ],
    "locations": ["Austin, TX, USA"],
}

# Run the Actor and wait for it to finish
run = client.actor("fire_dev/google-maps-lead-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "dentist",
    "dental clinic"
  ],
  "locations": [
    "Austin, TX, USA"
  ]
}' |
apify call fire_dev/google-maps-lead-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fire_dev/google-maps-lead-intelligence"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/smgKsRVPgdgTHC9oO/builds/zwTCg2npcDyRrvm9a/openapi.json
