# Google Maps Lead Scraper + AI (Local Business Leads) (`lizzyyy2/gmaps-lead-signals-ai`) Actor

Feasibility spike: verify datacenter proxy renders the Google Maps results feed and we can extract business listings.

- **URL**: https://apify.com/lizzyyy2/gmaps-lead-signals-ai.md
- **Developed by:** [Lizzy](https://apify.com/lizzyyy2) (community)
- **Categories:** AI, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 business leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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 Scraper + AI — Local Business Leads with Contact Details

Search **Google Maps** for any kind of local business and get back a clean list of **sales leads** — name, category, full address, rating, review count, **phone and website** — then let built-in **AI** score each lead, read its buying signal, and write a **personalized outreach opener**.

Give it a search like `dentists in Miami FL`, `coffee shops in Austin TX`, or `plumbers near Denver CO`. You get one tidy row per business, ready for outreach.

Built-in AI. **No OpenAI / OpenRouter API key required.**

***

### Why this beats a raw Maps dump

Most Google Maps scrapers just dump pins. This one is built for **outreach**:

| | Raw Maps scrapers | **Google Maps Lead Scraper + AI** |
|---|:---:|:---:|
| Business name, address, rating | ✅ | ✅ |
| **Phone & website** (for contact) | sometimes | ✅ |
| Deduped clean lead rows | ❌ | ✅ |
| AI fit score (0–100) for *your* offer | ❌ | ✅ |
| Buying-intent signal + sales angle | ❌ | ✅ |
| Personalized outreach opener per business | ❌ | ✅ |
| Best contact channel suggestion | ❌ | ✅ |
| Works with **no API key** | — | ✅ |

A category, a review count and a missing website tell you a lot: a busy clinic with no booking link, an independent cafe with weak web presence, a contractor with hundreds of reviews but a one-page site. The AI ties each of those to **what you sell**.

***

### Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | array (required) | Natural Google Maps searches, e.g. `coffee shops in Austin TX`, `dentists in Miami FL`. Each becomes a list of leads. |
| `maxResultsPerQuery` | integer | How many businesses to collect per query. Default `20`. |
| `maxLeads` | integer | Hard cap on total unique leads across all queries. Default `100`. |
| `includeContactDetails` | boolean | Open each business to pull **phone + website**. Off = faster/cheaper, but name/category/address/rating only. Default `true`. |
| `aiSignals` | boolean | Built-in AI fit score, buying signal, sales angle, opener and best contact channel. Default `true`. |
| `offerDescription` | string | What you sell — the AI ties each business to your offer and writes a tailored opener. |
| `aiLanguage` | string | Language for AI text. Default `English`. |
| `proxyConfiguration` | object | Apify Proxy rotates IPs to keep Maps requests flowing. Keep the default. |

#### Example input

```json
{
  "searchQueries": ["coffee shops in Austin TX", "dentists in Miami FL"],
  "maxResultsPerQuery": 20,
  "maxLeads": 100,
  "includeContactDetails": true,
  "aiSignals": true,
  "offerDescription": "We sell a website + online-booking platform for local service businesses.",
  "aiLanguage": "English"
}
```

***

### Output

One row per **unique business**:

```json
{
  "query": "dentists in Miami FL",
  "name": "Brickell Dental Care",
  "category": "Dental clinic",
  "address": "1450 Brickell Ave, Miami, FL 33131",
  "phone": "+1 305-555-0142",
  "website": "https://brickelldentalcare.com",
  "rating": 4.8,
  "reviewCount": 612,
  "lat": 25.762,
  "lng": -80.193,
  "plusCode": "76QX+2C Miami, Florida",
  "placeUrl": "https://www.google.com/maps/place/...",
  "businessType": "Modern dental clinic",
  "fitScore": 82,
  "intentSignal": "High review volume but a basic site with no visible online booking — strong fit for a booking platform.",
  "salesAngle": "Lead with reduced no-shows and 24/7 self-booking for a high-demand clinic.",
  "personalizedOpener": "With 600+ reviews, Brickell Dental Care clearly stays busy — I help clinics like yours capture after-hours bookings automatically.",
  "bestContactChannel": "phone",
  "aiAnalyzed": true
}
```

***

### How it works

1. Searches **Google Maps** for each query and scrolls the results feed to collect businesses.
2. Optionally opens each business to extract **phone and website** (the fields that make a lead actionable).
3. **Dedupes** so each business appears once.
4. Runs **one AI call per lead** to score fit (0–100), summarize the buying signal, suggest a sales angle, pick the best contact channel, and write a personalized opener tied to that specific business.
5. Saves one clean lead row per business.

IPs are rotated via Apify Proxy to keep requests flowing.

***

### Tips

- Add an `offerDescription` to get openers and a fit score tailored to *your* product.
- Run several cities/niches in one go: `["med spas in Scottsdale AZ", "med spas in Dallas TX"]`.
- Turn off `includeContactDetails` for a quick, cheap census (name/category/address/rating only); turn off `aiSignals` for raw leads.
- Higher `maxResultsPerQuery` digs deeper into each search.

***

### FAQ

**Do I need a Google or AI API key?**
No. It reads public Google Maps and uses Apify's built-in AI model — nothing to manage.

**Is phone/website always present?**
Only when the business has published them on Google Maps. Most established businesses have at least one. You also get address and a Maps link to reach the rest.

**Why dedupe to one row per business?**
Because your lead is the business — one clean row keeps your outreach list tidy.

**Can I turn AI or contact enrichment off?**
Yes. Turn off `aiSignals` for raw leads, or `includeContactDetails` for a faster/cheaper census — both lower cost.

***

### Related Actors — build a full pipeline

- Feed the **websites** from these leads into an **AI Lead Enricher** to pull emails and a cold-email opener.
- Cross-reference with review-intelligence or hiring-signal actors to prioritize the businesses most likely to buy.

> Workflow: **Google Maps Lead Scraper (find local businesses)** → **AI Lead Enricher (emails + opener)** → your CRM / sequencer.

# Actor input Schema

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

What to search on Google Maps. Use natural local-business searches, e.g. "coffee shops in Austin TX", "dentists in Miami FL", "plumbers near Denver CO". Each query becomes a list of business leads.

## `maxResultsPerQuery` (type: `integer`):

How many businesses to collect from each search query (Google typically shows up to ~120 per search).

## `maxLeads` (type: `integer`):

Hard cap on the total number of unique business leads returned across all queries.

## `includeContactDetails` (type: `boolean`):

Open each business to extract phone number and website (the strongest contact fields for outreach). Turning this off is faster/cheaper but returns only name, category, address and rating.

## `aiSignals` (type: `boolean`):

Use built-in AI (no API key) to add a fit score (0-100), a buying-intent signal, a sales angle, a personalized outreach opener and the best contact channel for each business.

## `offerDescription` (type: `string`):

Describe your product/service. The AI ties each business to your offer and writes a tailored opener and fit score. Leave empty for a generic angle.

## `aiLanguage` (type: `string`):

Language for the AI-written fields (e.g. English, Spanish, Turkish, German).

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

Apify Proxy rotates IPs to keep Google Maps requests flowing. Keep the default (automatic datacenter).

## Actor input object example

```json
{
  "searchQueries": [
    "coffee shops in Austin TX",
    "dentists in Miami FL"
  ],
  "maxResultsPerQuery": 20,
  "maxLeads": 100,
  "includeContactDetails": true,
  "aiSignals": true,
  "offerDescription": "We sell a website + online-booking platform for local service businesses.",
  "aiLanguage": "English",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `leads` (type: `string`):

Unique local-business leads with contact details and AI sales intelligence in the default dataset.

# 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": [
        "coffee shops in Austin TX"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lizzyyy2/gmaps-lead-signals-ai").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": ["coffee shops in Austin TX"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("lizzyyy2/gmaps-lead-signals-ai").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "coffee shops in Austin TX"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call lizzyyy2/gmaps-lead-signals-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lizzyyy2/gmaps-lead-signals-ai",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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