# Google Maps Scraper & Local Business Intelligence Agent (`quanmatrix/google-maps-business-intelligence-agent`) Actor

Scrape Google Maps businesses, enrich public contacts, rank commercial opportunities, compare snapshots, and produce agent-ready local market intelligence.

- **URL**: https://apify.com/quanmatrix/google-maps-business-intelligence-agent.md
- **Developed by:** [Rafael Barreto Haddad](https://apify.com/quanmatrix) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Scraper & Local Business Intelligence Agent

Turn Google Maps searches into decision-ready local business intelligence. This Actor extracts businesses from Google Maps, optionally enriches public website contacts, ranks commercial opportunities with a transparent deterministic score, compares current results with a prior snapshot, and emits compact fields that AI agents can act on directly.

### Why use this Actor?

A conventional Google Maps scraper gives you rows. This Actor gives you rows **plus a commercial decision layer**: contactability, digital-opportunity score, reputation score, lead score, explainable evidence, recommended agent action, and exact field-level changes from a previous snapshot.

### Key features

- Up to 100 Google Maps results per search query using a lightweight HTTP-first path.
- Multiple independent search queries in one run.
- Business name, stable Place ID, Maps URL, address, coordinates, categories, rating, review count, phone, and website.
- Optional website enrichment for public emails and social profiles.
- Optional DNS MX verification for discovered email domains.
- Deterministic lead scoring. No paid LLM is required to rank results.
- `agentAction` and `agentReason` fields designed for MCP/API/agent workflows.
- `previousSnapshot` comparison for changed phone, site, address, rating, reviews, categories, and name.
- Aggregate market summary and top leads stored in `MARKET_SUMMARY`.
- Current normalized rows stored in `SNAPSHOT` for the next monitoring run.

### Example input

```json
{
  "queries": ["dentists in Austin TX", "orthodontists in Austin TX"],
  "maxResultsPerQuery": 50,
  "enrichContacts": true,
  "verifyEmailDomains": true,
  "minRating": 3.5,
  "minReviews": 10,
  "leadObjective": "website redesign and local SEO outreach"
}
```

### Output

Each dataset row contains raw business evidence and decision-ready fields such as `leadScore`, `leadScoreExplanation`, `agentAction`, `agentReason`, `changes`, and `sourceConfidence`. This keeps agent consumption compact while preserving the underlying evidence.

### Change monitoring

Pass a previous `SNAPSHOT` array back as `previousSnapshot`. The Actor produces exact before/after changes and a bounded `changeScore`. This makes scheduled competitive monitoring possible without pretending that a normal one-shot scrape is historical intelligence.

### Pricing

Pay per delivered business result. Platform compute is included in the Actor price. The initial price is intentionally positioned below the dominant full-featured Google Maps scraper while preserving room for contact enrichment and monitoring logic.

### AI and automation readiness

The Actor is built for Limited Permissions, Pay-per-event pricing, API/OpenAPI access, scheduled runs, Tasks, datasets, and Apify's agentic discovery path. Compact decision fields reduce token waste for downstream agents.

### Responsible use

Only public business information is collected. Website enrichment is limited to public pages. Users are responsible for lawful processing, outreach rules, privacy obligations, and applicable website terms.

### Limitations

- Google Maps is an external surface and may change without notice.
- One query is currently capped at 100 returned businesses. Use multiple geographically specific queries for broader coverage.
- MX verification confirms that a domain can receive mail; it does not prove that a specific mailbox accepts mail.
- Lead scoring is an explainable prioritization heuristic, not a guarantee of conversion.
- Historical change intelligence requires a prior snapshot supplied by the user or a scheduled workflow that stores and reuses it.

### Typical use cases

Local SEO prospecting, agency lead generation, competitive location monitoring, franchise research, reputation opportunity discovery, sales territory research, market mapping, and AI-agent business discovery.

### Gen2 decision intelligence

This Actor preserves its original analysis and adds a decision layer with baseline awareness, regression detection, confidence, GO/WARN/BLOCK executive output, and an optional economic-impact estimate. Economic estimates are produced only when the user supplies `valuePerImpactUnitUsd`; the result states the calculation basis instead of inventing monetary value.

# Actor input Schema

## `queries` (type: `array`):

Google Maps searches such as dentists in Austin TX. Multiple queries can be combined in one run.

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

Maximum Google Maps businesses returned for each query.

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

Google Maps result language code, for example en, pt, es, or de.

## `countryCode` (type: `string`):

Two-letter Google localization country code.

## `enrichContacts` (type: `boolean`):

Visit public business websites and contact/about pages to discover emails and social profiles.

## `verifyEmailDomains` (type: `boolean`):

Check MX records for discovered public email domains.

## `minRating` (type: `number`):

Discard businesses below this Google rating.

## `minReviews` (type: `integer`):

Discard businesses below this Google review-count threshold.

## `requireWebsite` (type: `boolean`):

When enabled, keep only businesses with a website listed on Google Maps.

## `previousSnapshot` (type: `array`):

Optional prior output rows. When provided, exact field-level changes are calculated by Place ID.

## `leadObjective` (type: `string`):

Commercial objective used by the deterministic explainable scoring engine.

## `valuePerImpactUnitUsd` (type: `number`):

Optional user-supplied USD value per detected impact unit. Used only for transparent economic impact estimates.

## `monthlyRuns` (type: `integer`):

Optional number of comparable monthly runs used with value per impact unit for the economic estimate.

## `previousAnalysis` (type: `object`):

Optional previous Gen2 output used to compare decision metrics and detect regression between analyses.

## Actor input object example

```json
{
  "queries": [
    "dentists in Austin TX"
  ],
  "maxResultsPerQuery": 20,
  "language": "en",
  "countryCode": "us",
  "enrichContacts": true,
  "verifyEmailDomains": true,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "previousSnapshot": [],
  "leadObjective": "local marketing outreach",
  "monthlyRuns": 1,
  "previousAnalysis": {}
}
```

# Actor output Schema

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

Google Maps business rows with contact enrichment, lead scoring, agent actions and change intelligence.

## `marketSummary` (type: `string`):

Aggregate local-market intelligence and top ranked leads.

## `snapshot` (type: `string`):

Normalized business rows that can be passed back as previousSnapshot on a later run.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("quanmatrix/google-maps-business-intelligence-agent").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("quanmatrix/google-maps-business-intelligence-agent").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 '{}' |
apify call quanmatrix/google-maps-business-intelligence-agent --silent --output-dataset

```

## MCP server setup

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

```

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/4dZhmOtO74vTEaHOZ/builds/V8T7a0udYqyX6xwJa/openapi.json
