# Bad Reviews Lead Finder (`lonely_m/bad-reviews-lead-finder`) Actor

Find local businesses with low Google ratings and enough review volume for reputation management, review response, and local SEO outreach.

- **URL**: https://apify.com/lonely\_m/bad-reviews-lead-finder.md
- **Developed by:** [Lonely](https://apify.com/lonely_m) (community)
- **Categories:** Lead generation, Marketing, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

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

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

## What's an Apify Actor?

Actors are 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

## Bad Reviews Lead Finder

Find local businesses with **low Google ratings, enough review volume, and clear reputation management opportunities**.

This Actor searches Google Maps for a business category in a location, extracts rating and review volume, scores each business for reputation opportunity, and exports leads that may need review response workflows, reputation repair, customer experience improvements, or local SEO support.

### What problem does it solve?

A weak Google rating can directly reduce calls, bookings, and walk-ins. If you sell reputation management, review response, local SEO, or customer-experience services, you need prospects where the pain is visible.

This Actor finds businesses with signals like:

- Rating at or below your target threshold, e.g. `4.2`
- Enough review volume to make reputation work meaningful
- Very high review volume where small rating gains can affect conversion
- Phone or website available for outreach context
- No website listed, which can be bundled with reputation and local SEO services

### Best for

- Reputation management agencies
- Local SEO consultants
- Review automation tools
- Web design and local marketing agencies
- Customer experience consultants
- Cold email / outbound lead generation teams

### Why this is different from a generic Google Maps scraper

| Generic business scraper | Bad Reviews Lead Finder |
|---|---|
| Exports all businesses | Filters for reputation buying signals |
| Shows rating/reviews | Adds `reputationScore` and `leadPriority` |
| Requires manual analysis | Explains why the business is a reputation lead |
| No pitch context | Includes suggested outreach angle |

### Example input

```json
{
  "location": "Miami, FL",
  "businessCategory": "restaurant",
  "maxResults": 25,
  "maxRating": 4.2,
  "minReviewCount": 20,
  "includeModerateRatings": true,
  "minReputationScore": 40,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

### Input fields

| Field | Description |
|---|---|
| `location` | City, region, or local market to search |
| `businessCategory` | Business type. Example: `restaurant`, `dentist`, `med spa`, `auto repair` |
| `maxResults` | Maximum Google Maps listings to analyze |
| `maxRating` | Export businesses at or below this rating when review volume is sufficient |
| `minReviewCount` | Minimum Google review count to consider |
| `includeModerateRatings` | Include 4.3–4.5 businesses with high review volume |
| `minReputationScore` | Only export leads at or above this score. Use `0` to export everything |
| `proxyConfiguration` | Optional Apify proxy configuration |

### Output

Each dataset item contains business metadata, reputation score, reasons, and a suggested pitch.

```json
{
  "searchQuery": "restaurant in Miami, FL",
  "businessName": "Example Restaurant",
  "googleMapsUrl": "https://www.google.com/maps/place/...",
  "website": "https://example.com/",
  "phone": "+1 555-555-5555",
  "address": "Miami, FL",
  "rating": 3.9,
  "reviewCount": 148,
  "reputationScore": 95,
  "leadPriority": "A",
  "reputationOpportunityType": "low_rating",
  "reputationReasons": [
    "Has 148 Google reviews, enough volume to justify reputation work",
    "Rating is 3.9, at or below the target threshold of 4.2",
    "Rating below 4.0 suggests urgent reputation or service recovery opportunity",
    "Phone number is available for outreach"
  ],
  "suggestedPitch": "Lead with a reputation audit, review response workflow, and customer experience improvement plan."
}
```

### Reputation scoring

| Signal | Impact |
|---|---:|
| Rating at or below threshold | High |
| Rating below 4.0 | Very high |
| Review count above minimum | Medium |
| 100+ reviews | Medium |
| 500+ reviews | Medium/high |
| Phone available | Low |
| No website listed | Low, useful for bundle offers |

| Score | Priority |
|---:|---|
| 80–100 | A |
| 60–79 | B |
| 40–59 | C |
| 0–39 | D |

### Recommended searches

Good categories for reputation opportunities:

- `restaurant` in `Miami, FL`
- `dentist` in `Houston, TX`
- `med spa` in `Dallas, TX`
- `auto repair` in `Phoenix, AZ`
- `plumber` in `Chicago, IL`
- `roofing contractor` in `Atlanta, GA`
- `moving company` in `Los Angeles, CA`
- `hotel` in `Orlando, FL`

### Practical workflow

1. Start with `maxResults: 10–25`, `maxRating: 4.2`, and `minReviewCount: 20`.
2. Review A/B leads first.
3. Use `reputationReasons` to personalize a cold email or audit offer.
4. Test multiple categories because reputation opportunities vary heavily by vertical.

### Notes and limitations

- Google Maps layout and anti-automation behavior can change.
- The Actor uses rating and review count visible on Google Maps; it does not yet analyze individual review text.
- Google may mask phone digits in some environments.
- This Actor does not contact leads automatically.
- Make sure your use complies with applicable laws, privacy rules, and platform terms.

# Actor input Schema

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

City, state, country, or local area to search in.

## `businessCategory` (type: `string`):

Type of business to find.

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

Maximum number of Google Maps listings to analyze.

## `maxRating` (type: `number`):

Export businesses at or below this Google rating when review volume is sufficient.

## `minReviewCount` (type: `integer`):

Only consider businesses with at least this many Google reviews.

## `includeModerateRatings` (type: `boolean`):

If true, include businesses with 4.3–4.5 ratings when they have high review volume, because small rating improvements can still be valuable.

## `minReputationScore` (type: `integer`):

Only output leads with this score or higher. Use 0 to export everything.

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

Optional Apify proxy configuration for Google Maps.

## Actor input object example

```json
{
  "location": "Austin, TX",
  "businessCategory": "dentist",
  "maxResults": 50,
  "maxRating": 4.2,
  "minReviewCount": 20,
  "includeModerateRatings": true,
  "minReputationScore": 40,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "location": "Austin, TX",
    "businessCategory": "dentist"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lonely_m/bad-reviews-lead-finder").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 = {
    "location": "Austin, TX",
    "businessCategory": "dentist",
}

# Run the Actor and wait for it to finish
run = client.actor("lonely_m/bad-reviews-lead-finder").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 '{
  "location": "Austin, TX",
  "businessCategory": "dentist"
}' |
apify call lonely_m/bad-reviews-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lonely_m/bad-reviews-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bad Reviews Lead Finder",
        "description": "Find local businesses with low Google ratings and enough review volume for reputation management, review response, and local SEO outreach.",
        "version": "0.1",
        "x-build-id": "FvnqBeIp3uIdWPrQN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lonely_m~bad-reviews-lead-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lonely_m-bad-reviews-lead-finder",
                "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/lonely_m~bad-reviews-lead-finder/runs": {
            "post": {
                "operationId": "runs-sync-lonely_m-bad-reviews-lead-finder",
                "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/lonely_m~bad-reviews-lead-finder/run-sync": {
            "post": {
                "operationId": "run-sync-lonely_m-bad-reviews-lead-finder",
                "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": [
                    "location",
                    "businessCategory"
                ],
                "properties": {
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, state, country, or local area to search in."
                    },
                    "businessCategory": {
                        "title": "Business category",
                        "type": "string",
                        "description": "Type of business to find."
                    },
                    "maxResults": {
                        "title": "Maximum businesses",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of Google Maps listings to analyze.",
                        "default": 50
                    },
                    "maxRating": {
                        "title": "Maximum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "number",
                        "description": "Export businesses at or below this Google rating when review volume is sufficient.",
                        "default": 4.2
                    },
                    "minReviewCount": {
                        "title": "Minimum review count",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Only consider businesses with at least this many Google reviews.",
                        "default": 20
                    },
                    "includeModerateRatings": {
                        "title": "Include moderate ratings with high volume",
                        "type": "boolean",
                        "description": "If true, include businesses with 4.3–4.5 ratings when they have high review volume, because small rating improvements can still be valuable.",
                        "default": true
                    },
                    "minReputationScore": {
                        "title": "Minimum reputation opportunity score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only output leads with this score or higher. Use 0 to export everything.",
                        "default": 40
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy configuration for Google Maps.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
