# Google Maps enriched leads scraper (`burtonzach/google-maps-leads-scraper`) Actor

Find qualified local B2B leads on Google Maps: phone, website, ratings, hours, and optional email/tech enrichment. Lead scores, sales presets, and 4 pricing tiers from fast mode to enterprise.

- **URL**: https://apify.com/burtonzach/google-maps-leads-scraper.md
- **Developed by:** [Zach Burton](https://apify.com/burtonzach) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 standards

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does Google Maps Leads Scraper do?

**Google Maps Leads Scraper** extracts **local business leads** from [Google Maps](https://www.google.com/maps) — business names, categories, ratings, phone numbers, websites, emails, and sales-ready enrichment data. It is built for **B2B prospecting**, **cold calling**, **email outbound**, and **agency lead generation** without manual research.

Pick one of **four pricing tiers** (Basic → Standard → Premium → Enterprise). Each tier controls scrape depth: search results only, full Maps profiles, website enrichment, or residential proxies for scale. You pay for the depth you need; lower tiers skip expensive steps automatically.

---

### Why scrape Google Maps for leads?

Google Maps is one of the largest public directories of local businesses. Sales teams, agencies, and growth operators use it to:

- Build **cold call lists** with verified phone numbers and addresses
- Run **email outbound** campaigns with emails scraped from business websites
- Find **sales opportunities** (no website, no SSL, no booking system, missing email)
- Size **territories** and count competitors by city and category
- Export leads to **CSV, Excel, or JSON** for HubSpot, Salesforce, Pipedrive, and Zapier

**Apify platform benefits:** run on a schedule, trigger via API, integrate with Make/Zapier, rotate proxies automatically, and monitor runs from the Console.

---

### What data can Google Maps Leads Scraper extract?

| Data | Basic | Standard | Premium / Enterprise |
|------|:-----:|:--------:|:--------------------:|
| Business name, category, city, state | ✅ | ✅ | ✅ |
| Google rating & review count | ✅ | ✅ | ✅ |
| Google Maps URL & Place ID | ✅ | ✅ | ✅ |
| Phone, website, full address, hours | — | ✅ | ✅ |
| Lead score & quality badges | — | ✅ | ✅ |
| Email(s) from website | — | — | ✅ |
| Social profiles & website technology | — | — | ✅ |
| Sales opportunities (pitch angles) | — | — | ✅ |
| SSL, booking, contact form, mobile signals | — | — | ✅ |

See [Output field reference](#output-field-reference) for the full list of fields per tier.

---

### Google Maps Leads Scraper pricing tiers

| Tier | What you get | Best for | PPE event |
|------|----------------|----------|-----------|
| **Basic** | Business name, category, city, Google rating & reviews | Territory mapping, TAM sizing, cheap list building | `lead-basic` |
| **Standard** | Basic + phone, website, address, hours, lead score | Cold calling, CRM imports, direct outreach | `lead-standard` |
| **Premium** | Standard + emails, social, tech stack, website scores, sales opportunities | Email outbound, agency pitches, web/SEO sales | `lead-premium` |
| **Enterprise** | Premium + residential proxies | High-volume runs, hard-to-scrape regions, enterprise ops | `lead-enterprise` |

Each saved lead triggers one pay-per-event charge for the tier you selected.

**Recommended memory:** 2 GB for Basic and Standard. Use **4 GB+** for Premium and Enterprise (browser + website enrichment).

#### Basic — market intelligence & list building

The actor reads Google Maps **search results only** (fast mode). It does not open individual business pages or visit websites.

**Use cases:** territory heat maps, TAM sizing, cheap prospect names for manual research. **Not included:** phone, email, or website data — upgrade to Standard or Premium for contact info.

#### Standard — cold call & CRM workflows

Full Google Maps scrape: phone, website, address, and hours from each listing. Lead scores from Maps data (no website visit).

**Use cases:** SDR dial lists, CRM import, **Missing Website** preset for web-agency pitches. **Not included:** emails from websites or sales-opportunity flags — upgrade to Premium.

#### Premium — outbound email & consultative selling

Everything in Standard, plus website visits for emails, social links, technology signals (WordPress, Shopify, etc.), lead scores, and **sales opportunities** (no SSL, no booking, no email, outdated site).

**Use cases:** email sequences, agency/web-dev pitches, SaaS vertical campaigns, high-intent filtering with `minLeadScore`.

#### Enterprise — scale & reliability

Same output as Premium with **residential Apify proxies** for large batch runs and rate-limited regions.

---

### How to scrape Google Maps leads

1. Open this actor in [Apify Console](https://console.apify.com/).
2. Enter **Search queries** (e.g. `dentist`, `plumber`, `HVAC contractor`) and **Location** (e.g. `Austin, TX`). Optionally set **Search radius** and choose **km** or **miles** to cover nearby towns and suburbs (e.g. `12` mi or `20` km). The same business is only saved once per run, even if it appears under multiple queries or grid points.
3. Select your **Pricing tier** — this controls both data depth and which filters apply.
4. Open only the **filter sections that match your tier** (see [Filters only work on the right tier](#filters-only-work-on-the-right-tier)).
5. Click **Start**, then open **Storage → Dataset** to review or export results.

**Dataset views in Console:**

- **Basic tier** — slim table for Basic runs
- **Standard tier** — contact-focused columns
- **Premium & Enterprise** — enrichment and opportunity columns
- **Full export** — all fields for download

See the **Input** tab for every configuration option (search queries, filters, language, proxy country, and more).

---

### How much does it cost to scrape Google Maps leads?

This actor uses **pay-per-event (PPE)** pricing — you are charged once per lead saved, based on the tier you select:

| Tier | Event name | Typical use |
|------|------------|-------------|
| Basic | `lead-basic` | Cheapest — Maps search results only |
| Standard | `lead-standard` | Phone + website + address |
| Premium | `lead-premium` | + email, tech stack, sales opportunities |
| Enterprise | `lead-enterprise` | Premium + residential proxies |

**Cost tips:** Start with **Basic** for territory research, then re-run hot segments on **Standard** or **Premium** when you need contact data. Use `maxResults` to cap leads per search query (max 150). A **search radius** runs multiple grid searches per keyword — larger radius = more coverage and higher cost. Higher tiers use more memory and compute — use 4 GB+ for Premium/Enterprise.

---

### Filters only work on the right tier

**You must select the correct Pricing tier for your filters to apply.** The tier controls both what data is collected and which filters the actor honors.

| If you want to use… | You need tier |
|---------------------|---------------|
| Rating, reviews, categories, ownership presets | **Basic** or higher |
| Require phone, require website, Missing Website preset | **Standard** or higher |
| Email filters, lead scores, badges, sales opportunities, technology filters | **Premium** or **Enterprise** |
| High Quality Leads, Missing Email, Missing Social, Ecommerce presets | **Premium** or **Enterprise** |

**What happens on the wrong tier:** Filters above your tier are **removed before the run starts**. The actor logs a warning (e.g. `Filters ignored — they require a higher pricing tier`). You are still charged for the tier you selected, but those filters have no effect.

**Examples:**

- `requirePhone: true` on **Basic** → ignored. Select **Standard** (or higher).
- `minLeadScore: 70` on **Standard** → ignored. Select **Premium** (or higher).
- `leadPreset: missing_email` on **Basic** → reset to none. Select **Premium** (or higher).

**Apify form note:** All filter sections may appear in the input form regardless of tier (Apify platform limitation). **Only your tier selection determines what runs.** Check the table above before you click Start.

#### Filter sections by tier

| Filter section | Basic | Standard | Premium | Enterprise |
|----------------|:-----:|:--------:|:-------:|:------------:|
| Rating, reviews, categories, ownership | ✅ | ✅ | ✅ | ✅ |
| Require phone / website | — | ✅ | ✅ | ✅ |
| Lead score, badges, opportunities, email filters | — | — | ✅ | ✅ |
| Technology filters | — | — | ✅ | ✅ |

#### Lead presets by tier

| Preset | Minimum tier |
|--------|----------------|
| Low Reviews, High Ratings, Local Service, Independent, Franchises | Basic |
| Missing Website | Standard |
| High Quality Leads, Missing Email, Missing Social, Ecommerce | Premium |

---

### Google Maps leads output (Dataset tab)

After a run, go to **Storage → Dataset** in the Apify Console. Use the **view dropdown** to switch layouts. Each view matches the pricing tier you ran — one row per business.

Values are pre-formatted for readability (e.g. `4.6 stars (128 reviews)`, `68/100 — Good`, `Has Website · Has Phone`).

#### Basic tier view

| Business | Pricing tier | Category | City | State | Google rating | Reviews | Summary | Maps URL | Search query | Scraped at |
|----------|--------------|----------|------|-------|---------------|---------|---------|----------|--------------|------------|
| Sunrise Dental Care | Basic | Dentist | Austin | TX | 4.6 stars (128 reviews) | 128 | Dentist in Austin — highly rated on Google. | [Open in Maps](https://www.google.com/maps/place/?q=place_id:ChIJexample) | dentist | Jun 30, 2026, 2:15 PM |

**Sales use:** Sort by **Reviews** or **Google rating** for territory planning. No phone or email columns at this tier.

#### Standard tier view

| Business | Pricing tier | Category | Address | Phone | Website | Google rating | Lead score | Highlights | Maps URL |
|----------|--------------|----------|---------|-------|---------|---------------|------------|------------|----------|
| Sunrise Dental Care | Standard | Dentist | 123 Congress Ave, Austin, TX 78701 | +1 512-555-0142 | [sunrisedentalaustin.com](https://sunrisedentalaustin.com) | 4.6 stars (128 reviews) | 68/100 — Good | Has Website · Has Phone · High Rating · Established Reviews | [Open in Maps](https://www.google.com/maps/place/?q=place_id:ChIJexample) |

**Sales use:** Export to CRM and call **Phone** same day. Use **Lead score** and **Highlights** to prioritize callbacks.

#### Premium & Enterprise view

| Business | Pricing tier | Phone | Email | Website | Lead score | Sales opportunities | Highlights | Technology |
|----------|--------------|-------|-------|---------|------------|---------------------|------------|------------|
| Sunrise Dental Care | Premium | +1 512-555-0142 | hello@sunrisedentalaustin.com | [sunrisedentalaustin.com](https://sunrisedentalaustin.com) | 82/100 — Excellent | No online booking · No SSL certificate | Has Website · Has Phone · Has Email · Mobile Friendly | WordPress |

**Sales use:** Load **Email** into your sequencer; open with **Sales opportunities** (“I noticed you don't have online booking yet…”). Filter exports by **Technology** for vertical campaigns.

---

### Export Google Maps leads (JSON, CSV, Excel)

From **Storage → Dataset → Export** in the Apify Console, download results in any of these formats:

- **JSON** (`.json`)
- **JSONL** (`.jsonl`)
- **CSV** (`.csv`)
- **Excel** (`.xlsx`)
- **XML** (`.xml`)
- **HTML** (`.html`)
- **RSS** (`.rss`)

Fields included depend on your **pricing tier** (12 fields on Basic, 21 on Standard, 35 on Premium / Enterprise). Tabular formats use field names as column headers.

---

### Output field reference

#### All tiers

| Field | Description |
|-------|-------------|
| `businessName` | Official business name |
| `qualityTier` | Pricing tier used for this run (Basic, Standard, Premium, Enterprise) |
| `category` | Primary Google Maps category |
| `city` / `state` | Parsed location |
| `googleRating` | Formatted stars + review count |
| `reviewCount` | Raw review count |
| `leadSummary` | One-line human-readable summary |
| `googleMapsUrl` | Link to Google Maps listing |
| `placeId` | Google Place ID |
| `searchQuery` | Which search query found this lead |
| `scrapedAt` | When the lead was collected |

#### Standard tier and above

| Field | Description |
|-------|-------------|
| `fullAddress` | Complete street address |
| `phone` | Phone number from Maps |
| `website` | Website URL from Maps |
| `openingHours` | Formatted weekly hours |
| `leadScore` | 0–100 composite score |
| `leadQuality` | Excellent / Good / Fair / Needs attention |
| `leadScoreSummary` | Score + label |
| `badges` | Highlight tags (Has Phone, High Rating, etc.) |
| `businessType` | Independent, Franchise, or Unknown |

#### Premium / Enterprise only

| Field | Description |
|-------|-------------|
| `email` | Primary email from website |
| `allEmails` | All emails found |
| `contactCompleteness` | Profile completeness score |
| `websiteQuality` | Website technical quality score |
| `salesOpportunities` | Pitchable gaps (no SSL, no booking, etc.) |
| `websiteTechnology` | Detected CMS / stack |
| `hasSsl`, `hasBooking`, `hasContactForm`, `hasSocialMedia`, `hasEcommerce`, `mobileFriendly` | Yes/No flags |
| `socialProfiles` | Social networks found |

---

### Sales team playbooks

#### Basic

| Goal | Suggested settings |
|------|-------------------|
| How many targets exist in this city? | `tier: basic`, `maxResults: 150`, category filters |
| Territory planning before hiring reps | `tier: basic`, `leadPreset: local_service_businesses`, sort by review count |
| Cheap list building for manual research | `tier: basic`, `maxResults: 50–150`, `minRating: 4` |

#### Standard

| Goal | Suggested settings |
|------|-------------------|
| Give SDRs dialable phones today | `tier: standard`, `requirePhone: true`, `maxResults: 25–50` |
| CRM import with address + website | `tier: standard`, `requireWebsite: true`, `businessOwnership: independent` |
| Sell websites to businesses without one | `tier: standard`, `leadPreset: missing_website` |
| Cold-call independent local businesses | `tier: standard`, `requirePhone: true`, `businessOwnership: independent` |

#### Premium

| Goal | Suggested settings |
|------|-------------------|
| Email campaign with personalization | `tier: premium`, `leadPreset: missing_email`, `minLeadScore: 60` |
| Pitch SEO / web fixes with proof | `tier: premium`, `onlyOpportunities: ["no_ssl", "outdated_website"]` |
| Target businesses missing online booking | `tier: premium`, `onlyOpportunities: ["no_booking"]` |
| High-intent leads only | `tier: premium`, `minLeadScore: 70` or `leadPreset: high_quality_leads` |
| Vertical SaaS (e.g. WordPress shops) | `tier: premium`, `technologyIncludes: ["WordPress"]` |

#### Enterprise

| Goal | Suggested settings |
|------|-------------------|
| 10k+ leads/month across metros | `tier: enterprise`, multiple scheduled tasks, `maxResults: 150` |
| Large runs in rate-limited regions | `tier: enterprise`, `proxyCountryCode: "US"` (or target country) |
| Maximum enrichment success at scale | `tier: enterprise`, same filters as Premium, higher memory (4 GB+) |

---

### FAQ

#### How do I scrape leads from Google Maps?

Open this actor in Apify Console, enter your search keywords and location, choose a pricing tier, and click **Start**. Results appear in **Storage → Dataset** and can be exported to CSV or Excel.

#### Can I get phone numbers and emails from Google Maps?

**Phone numbers and websites** are available on **Standard** tier and above (from Google Maps listings). **Emails** are extracted from business websites on **Premium** and **Enterprise** tiers.

#### What is the difference between Basic, Standard, Premium, and Enterprise?

**Basic** = fast Maps search results (name, category, rating). **Standard** = full Maps profiles with phone and address. **Premium** = website enrichment with emails, tech stack, and sales opportunities. **Enterprise** = Premium with residential proxies for scale.

#### Can I export Google Maps leads to CSV or Excel?

Yes. From the Dataset tab, use **Export** to download JSON, CSV, Excel, JSONL, XML, HTML, or RSS.

#### Does this work for any city or country?

Yes. Enter any location string (city, region, or address) and optional **Proxy country** code. Set **Search radius** with **km** or **miles** to pull listings from the surrounding area — the actor geocodes your location and runs Maps searches on a grid inside that radius. Results depend on what Google Maps returns for each search point.

#### Can I filter by Google rating or review count?

Yes, on all tiers. Set **Minimum rating**, **Minimum reviews**, or **Maximum reviews** in the Lead filters section. Premium+ adds lead score, email, and sales-opportunity filters.

#### Can I run this on a schedule or via API?

Yes. Use Apify **Schedules**, the **API** tab in Console, or integrations like Zapier and Make to trigger runs automatically.

#### Why were my filters ignored?

Filters above your selected tier are stripped at runtime. For example, email filters require **Premium** or **Enterprise**. See [Filters only work on the right tier](#filters-only-work-on-the-right-tier).

#### How do I avoid duplicate leads across scheduled runs?

Enable **Skip leads from previous runs** in the **Cross-run deduplication** section. The actor stores Google Place IDs in a named **Key-Value Store** on your Apify account (`google-maps-leads-dedup` by default). Each future run skips businesses you already saved. Use **Reset deduplication history** to start fresh. Teammates can share the same **Deduplication store name** to use one skip list.

---

### Limitations

- Max **150 results per search query** per run
- Duplicate businesses across multiple search queries in the same run are deduplicated automatically (by Google Place ID when available)
- Enable **Skip leads from previous runs** to deduplicate across scheduled or repeat runs (stored in your Apify Key-Value Store)
- Google Maps layout changes may require actor updates
- Website enrichment depends on sites being reachable; some emails are not public
- Filter sections in the Apify form are always visible (platform limitation); **filters only apply when your selected tier supports them**
- Respect Google Maps terms of service and applicable outreach laws (CAN-SPAM, GDPR, etc.)

---

### Legal disclaimer

Our Actors are ethical and do not extract any private user data beyond what businesses have chosen to share publicly on Google Maps and their websites. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. Comply with CAN-SPAM, GDPR, and other regulations when using leads for outreach.

---

### Support

For issues with a specific run, include your **tier**, **search queries**, **location**, and the run ID from Apify Console. Use the **Issues** tab on this actor's Store page for bugs and feature requests. For programmatic access, see the **API** tab in Console.

# Actor input Schema

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

Business types or keywords (e.g. dentist, plumber, HVAC).
## `location` (type: `string`):

City, region, or address to center the search.
## `searchRadius` (type: `number`):

Search the surrounding area from your location center. Leave at 0 to search only the center point. Max 100 km or 62 mi.
## `searchRadiusInMiles` (type: `boolean`):

Radius unit toggle — off = kilometers, on = miles.
## `maxResults` (type: `integer`):

How many businesses to collect per search query (max 150 per search).
## `tier` (type: `string`):

Basic = rating & category. Standard = + phone, website, address. Premium = + email, tech & scores. Enterprise = Premium + residential proxies.
## `language` (type: `string`):

Google Maps interface language for search results.
## `proxyCountryCode` (type: `string`):

Optional two-letter country code for Apify proxy geolocation (e.g. US, GB).
## `deduplicateAcrossRuns` (type: `boolean`):

Remember businesses you already saved and skip them on future runs. History is stored in your Apify account Key-Value Store (not shared with other users).
## `deduplicationStoreName` (type: `string`):

Named Key-Value Store for your deduplication history. Use the same name on every run. Share this name with teammates who should use the same skip list.
## `resetDeduplicationStore` (type: `boolean`):

Clear saved business IDs before this run starts. Leads saved in this run are still added to the store for the next run.
## `leadPreset` (type: `string`):

Quick filter bundles. Presets marked Premium/Standard in the label require that tier or higher.
## `minRating` (type: `integer`):

Lowest Google star rating to include. Use 0 for no minimum.
## `minReviews` (type: `integer`):

Minimum number of Google reviews required.
## `maxReviews` (type: `integer`):

Maximum number of reviews. Useful for finding newer businesses.
## `categoryIncludes` (type: `array`):

Only keep businesses whose category matches any of these terms.
## `categoryExcludes` (type: `array`):

Remove businesses whose category matches any of these terms.
## `businessOwnership` (type: `string`):

Filter by independent businesses vs franchise chains.
## `requirePhone` (type: `boolean`):

Only businesses with a phone number on Google Maps.
## `requireWebsite` (type: `boolean`):

Only businesses with a website listed on Google Maps.
## `minLeadScore` (type: `integer`):

Composite lead quality score from website enrichment.
## `minContactCompletenessScore` (type: `integer`):

How complete the business contact profile is.
## `minWebsiteQualityScore` (type: `integer`):

Website technical and UX quality score.
## `requiredBadges` (type: `array`):

Business must have all selected badges.
## `onlyOpportunities` (type: `array`):

Only include leads with these sales opportunities.
## `requireEmail` (type: `boolean`):

Business must have an email found on their website.
## `requireContactForm` (type: `boolean`):

Website must have a contact form.
## `requireSocialProfiles` (type: `boolean`):

Business must have social media links on their website.
## `requireSsl` (type: `boolean`):

Website must use HTTPS.
## `requireMobileFriendly` (type: `boolean`):

Website must show mobile-friendly signals.
## `requireBooking` (type: `boolean`):

Website must have online booking.
## `requireEcommerce` (type: `boolean`):

Website must show ecommerce capability.
## `technologyIncludes` (type: `array`):

Only include businesses whose website uses any of these technologies (e.g. Shopify, WordPress).

## Actor input object example

```json
{
  "searchQueries": [
    "dentist"
  ],
  "location": "Austin, TX",
  "searchRadius": 0,
  "searchRadiusInMiles": false,
  "maxResults": 25,
  "tier": "basic",
  "language": "en",
  "proxyCountryCode": "US",
  "deduplicateAcrossRuns": false,
  "deduplicationStoreName": "google-maps-leads-dedup",
  "resetDeduplicationStore": false,
  "leadPreset": "none",
  "minRating": 0,
  "minReviews": 0,
  "categoryIncludes": [],
  "categoryExcludes": [],
  "businessOwnership": "any",
  "requirePhone": false,
  "requireWebsite": false,
  "minLeadScore": 0,
  "minContactCompletenessScore": 0,
  "minWebsiteQualityScore": 0,
  "requiredBadges": [],
  "onlyOpportunities": [],
  "requireEmail": false,
  "requireContactForm": false,
  "requireSocialProfiles": false,
  "requireSsl": false,
  "requireMobileFriendly": false,
  "requireBooking": false,
  "requireEcommerce": false,
  "technologyIncludes": []
}
````

# Actor output Schema

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

No description

# 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"
    ],
    "location": "Austin, TX",
    "proxyCountryCode": "US",
    "deduplicationStoreName": "google-maps-leads-dedup",
    "categoryIncludes": [],
    "categoryExcludes": [],
    "requiredBadges": [],
    "onlyOpportunities": [],
    "technologyIncludes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("burtonzach/google-maps-leads-scraper").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"],
    "location": "Austin, TX",
    "proxyCountryCode": "US",
    "deduplicationStoreName": "google-maps-leads-dedup",
    "categoryIncludes": [],
    "categoryExcludes": [],
    "requiredBadges": [],
    "onlyOpportunities": [],
    "technologyIncludes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("burtonzach/google-maps-leads-scraper").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": [
    "dentist"
  ],
  "location": "Austin, TX",
  "proxyCountryCode": "US",
  "deduplicationStoreName": "google-maps-leads-dedup",
  "categoryIncludes": [],
  "categoryExcludes": [],
  "requiredBadges": [],
  "onlyOpportunities": [],
  "technologyIncludes": []
}' |
apify call burtonzach/google-maps-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=burtonzach/google-maps-leads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps enriched leads scraper",
        "description": "Find qualified local B2B leads on Google Maps: phone, website, ratings, hours, and optional email/tech enrichment. Lead scores, sales presets, and 4 pricing tiers from fast mode to enterprise.",
        "version": "1.0",
        "x-build-id": "AcmNGbHjFaZYjhGak"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/burtonzach~google-maps-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-burtonzach-google-maps-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/burtonzach~google-maps-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-burtonzach-google-maps-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/burtonzach~google-maps-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-burtonzach-google-maps-leads-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchQueries",
                    "location"
                ],
                "properties": {
                    "searchQueries": {
                        "title": "Search queries",
                        "minItems": 1,
                        "type": "array",
                        "description": "Business types or keywords (e.g. dentist, plumber, HVAC).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, or address to center the search."
                    },
                    "searchRadius": {
                        "title": "Search radius",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "number",
                        "description": "Search the surrounding area from your location center. Leave at 0 to search only the center point. Max 100 km or 62 mi.",
                        "default": 0
                    },
                    "searchRadiusInMiles": {
                        "title": "mi",
                        "type": "boolean",
                        "description": "Radius unit toggle — off = kilometers, on = miles.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 150,
                        "type": "integer",
                        "description": "How many businesses to collect per search query (max 150 per search).",
                        "default": 25
                    },
                    "tier": {
                        "title": "Pricing tier",
                        "enum": [
                            "basic",
                            "standard",
                            "premium",
                            "enterprise"
                        ],
                        "type": "string",
                        "description": "Basic = rating & category. Standard = + phone, website, address. Premium = + email, tech & scores. Enterprise = Premium + residential proxies.",
                        "default": "basic"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "pt",
                            "it",
                            "nl",
                            "pl",
                            "ja",
                            "ko",
                            "zh-CN"
                        ],
                        "type": "string",
                        "description": "Google Maps interface language for search results.",
                        "default": "en"
                    },
                    "proxyCountryCode": {
                        "title": "Proxy country",
                        "type": "string",
                        "description": "Optional two-letter country code for Apify proxy geolocation (e.g. US, GB)."
                    },
                    "deduplicateAcrossRuns": {
                        "title": "Skip leads from previous runs",
                        "type": "boolean",
                        "description": "Remember businesses you already saved and skip them on future runs. History is stored in your Apify account Key-Value Store (not shared with other users).",
                        "default": false
                    },
                    "deduplicationStoreName": {
                        "title": "Deduplication store name",
                        "type": "string",
                        "description": "Named Key-Value Store for your deduplication history. Use the same name on every run. Share this name with teammates who should use the same skip list."
                    },
                    "resetDeduplicationStore": {
                        "title": "Reset deduplication history",
                        "type": "boolean",
                        "description": "Clear saved business IDs before this run starts. Leads saved in this run are still added to the store for the next run.",
                        "default": false
                    },
                    "leadPreset": {
                        "title": "Lead preset",
                        "enum": [
                            "none",
                            "low_reviews",
                            "high_ratings",
                            "local_service_businesses",
                            "independent_businesses",
                            "franchises",
                            "missing_website",
                            "high_quality_leads",
                            "missing_email",
                            "missing_social_media",
                            "ecommerce_businesses"
                        ],
                        "type": "string",
                        "description": "Quick filter bundles. Presets marked Premium/Standard in the label require that tier or higher.",
                        "default": "none"
                    },
                    "minRating": {
                        "title": "Minimum rating (1-5)",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Lowest Google star rating to include. Use 0 for no minimum.",
                        "default": 0
                    },
                    "minReviews": {
                        "title": "Minimum reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of Google reviews required.",
                        "default": 0
                    },
                    "maxReviews": {
                        "title": "Maximum reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews. Useful for finding newer businesses."
                    },
                    "categoryIncludes": {
                        "title": "Include categories",
                        "type": "array",
                        "description": "Only keep businesses whose category matches any of these terms.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categoryExcludes": {
                        "title": "Exclude categories",
                        "type": "array",
                        "description": "Remove businesses whose category matches any of these terms.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "businessOwnership": {
                        "title": "Business ownership",
                        "enum": [
                            "any",
                            "independent",
                            "franchise"
                        ],
                        "type": "string",
                        "description": "Filter by independent businesses vs franchise chains.",
                        "default": "any"
                    },
                    "requirePhone": {
                        "title": "Require phone",
                        "type": "boolean",
                        "description": "Only businesses with a phone number on Google Maps.",
                        "default": false
                    },
                    "requireWebsite": {
                        "title": "Require website",
                        "type": "boolean",
                        "description": "Only businesses with a website listed on Google Maps.",
                        "default": false
                    },
                    "minLeadScore": {
                        "title": "Minimum lead score (0-100)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Composite lead quality score from website enrichment.",
                        "default": 0
                    },
                    "minContactCompletenessScore": {
                        "title": "Minimum contact completeness (0-100)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How complete the business contact profile is.",
                        "default": 0
                    },
                    "minWebsiteQualityScore": {
                        "title": "Minimum website quality (0-100)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Website technical and UX quality score.",
                        "default": 0
                    },
                    "requiredBadges": {
                        "title": "Required badges",
                        "type": "array",
                        "description": "Business must have all selected badges.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Has Email",
                                "Contact Form",
                                "Social Media",
                                "Ecommerce",
                                "SSL",
                                "Booking System",
                                "Live Chat",
                                "Mobile Friendly"
                            ]
                        }
                    },
                    "onlyOpportunities": {
                        "title": "Sales opportunities",
                        "type": "array",
                        "description": "Only include leads with these sales opportunities.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "no_website",
                                "outdated_website",
                                "no_ssl",
                                "no_booking",
                                "no_social",
                                "no_email"
                            ],
                            "enumTitles": [
                                "No website",
                                "Outdated website",
                                "No SSL",
                                "No booking system",
                                "No social media",
                                "No email"
                            ]
                        }
                    },
                    "requireEmail": {
                        "title": "Require email",
                        "type": "boolean",
                        "description": "Business must have an email found on their website.",
                        "default": false
                    },
                    "requireContactForm": {
                        "title": "Require contact form",
                        "type": "boolean",
                        "description": "Website must have a contact form.",
                        "default": false
                    },
                    "requireSocialProfiles": {
                        "title": "Require social profiles",
                        "type": "boolean",
                        "description": "Business must have social media links on their website.",
                        "default": false
                    },
                    "requireSsl": {
                        "title": "Require SSL (HTTPS)",
                        "type": "boolean",
                        "description": "Website must use HTTPS.",
                        "default": false
                    },
                    "requireMobileFriendly": {
                        "title": "Require mobile-friendly signals",
                        "type": "boolean",
                        "description": "Website must show mobile-friendly signals.",
                        "default": false
                    },
                    "requireBooking": {
                        "title": "Require booking system",
                        "type": "boolean",
                        "description": "Website must have online booking.",
                        "default": false
                    },
                    "requireEcommerce": {
                        "title": "Require ecommerce signals",
                        "type": "boolean",
                        "description": "Website must show ecommerce capability.",
                        "default": false
                    },
                    "technologyIncludes": {
                        "title": "Website technologies",
                        "type": "array",
                        "description": "Only include businesses whose website uses any of these technologies (e.g. Shopify, WordPress).",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
