# Google Maps Unclaimed & Flawed Profiles Scraper (`automation_studio/gmaps-unclaimed-leads-scraper`) Actor

Extract local businesses on Google Maps with unclaimed profiles, missing websites, or low ratings with zero review replies for cold agency prospecting.

- **URL**: https://apify.com/automation_studio/gmaps-unclaimed-leads-scraper.md
- **Developed by:** [Automation Studio](https://apify.com/automation_studio) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 qualified flawed 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Maps Unclaimed & Flawed Profiles Scraper

Extract local businesses on Google Maps with unclaimed profiles, missing websites, or low ratings with zero review replies for cold agency prospecting.

Cold pitching local businesses with generic sales emails yields poor response rates. Agency outreach converts drastically higher when pitching a business that has an immediate, verifiable vulnerability: an unclaimed Google Business Profile that any competitor could hijack, a listing missing a website link, or a rating below 4.0 stars with no owner review replies.

This scraper filters Google Maps local business data specifically for these high-conversion agency sales triggers.

***

### Agency Sales Triggers Identified

1. **Unclaimed Business Profiles (`Claim this business`)**:
   Businesses where Google Displays the "Own this business? Claim it now" link. Unclaimed profiles lack verification badges, lose local 3-pack rankings, and are vulnerable to malicious edits.
2. **Missing Independent Website**:
   Listings that have no website link whatsoever or use a generic social profile, missing out on local organic search intent.
3. **Reputation Vulnerabilities**:
   Listings with star ratings below 4.2 stars where the owner has failed to reply to customer reviews, indicating an immediate need for review management or reputation repair services.

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQuery` | String | `plumbers` | Business niche or keyword (e.g. `roofers`, `dentists`, `auto repair`, `chiropractors`). |
| `location` | String | `Dallas, TX` | Target city, metro area, or state. |
| `auditTrigger` | String | `ANY_FLAW` | Filter by `ANY_FLAW`, `UNCLAIMED_PROFILE`, `MISSING_WEBSITE`, or `LOW_REVIEWS_NO_REPLIES`. |
| `maxResults` | Integer | `100` | Target number of qualified prospect records to extract. |
| `requirePhone` | Boolean | `true` | Ensures every prospect record includes a direct phone number for cold calling. |
| `extractOwnerEmails` | Boolean | `true` | Enriches prospect records with verified email addresses when available. |

***

### Output Data Structure

```json
{
  "businessName": "Lone Star Emergency Plumbing",
  "category": "plumbers",
  "phone": "(214) 555-0182",
  "email": "contact@lonestarplumbingdallas.com",
  "website": null,
  "googleMapsUrl": "https://maps.google.com/?cid=108294819284910283",
  "isUnclaimed": true,
  "hasNoWebsite": true,
  "starRating": 3.8,
  "reviewCount": 14,
  "ownerResponseRate": "0%",
  "streetAddress": "3412 Elm St",
  "city": "Dallas",
  "state": "TX",
  "recommendedAgencyPitch": "Pitch GBP Verification & Starter Website: Profile is completely unclaimed and lacks any website link.",
  "leadQualityScore": 100
}
```

***

### Why Agency Pitches Convert With This Data

#### 1. Ready-Made Sales Angles

Every record includes a generated `recommendedAgencyPitch` articulating the exact vulnerability. Your sales reps can reference specific details on cold calls:

> *"Hi, I noticed your Google Maps listing on Elm St still shows the 'Claim this business' button. That means your profile isn't verified with Google, and your competitors are outranking you in the local 3-pack."*

#### 2. Eliminates Dead Prospecting Hours

Instead of manually clicking through hundreds of Google Maps pins looking for listings with broken links or unclaimed badges, the scraper compiles a clean list of qualified opportunities in seconds.

***

### Frequently Asked Questions

##### How is "Unclaimed" detected?

The scraper inspects Google Maps metadata for the presence of the `Claim this business` action button and unverified listing flags.

##### Can I target multiple cities?

Yes. You can trigger separate runs across multiple cities or run a batch task through the Apify API.

##### What formats can I export?

Results export natively to CSV, Excel, JSON, and XML, ready for import into your cold email software or dialer.

# Actor input Schema

## `searchQuery` (type: `string`):

The local business niche or keyword to target (e.g. roofers, dentists, auto repair, plumbers, accounting).

## `location` (type: `string`):

Geographic area for Google Maps local business prospecting (e.g. Dallas, TX or Miami, FL).

## `auditTrigger` (type: `string`):

Select the primary agency sales trigger to target.

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

The maximum number of qualified business prospects to extract into your dataset.

## `requirePhone` (type: `boolean`):

Ensures every prospect record includes a verified local business phone number for cold outreach.

## `extractOwnerEmails` (type: `boolean`):

Enriches prospects with verified direct business and domain inboxes when available.

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

Recommended for high-volume local map queries.

## Actor input object example

```json
{
  "searchQuery": "plumbers",
  "location": "Dallas, TX",
  "auditTrigger": "ANY_FLAW",
  "maxResults": 100,
  "requirePhone": true,
  "extractOwnerEmails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing verified flawed Google Maps prospects.

# 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("automation_studio/gmaps-unclaimed-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/gmaps-unclaimed-leads-scraper").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 automation_studio/gmaps-unclaimed-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_studio/gmaps-unclaimed-leads-scraper"
        }
    }
}
```

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/zNiQaQQOJMV5whlDF/builds/dcirvPfvJRte9mmFn/openapi.json
