# 📍 Google Business Profile (GBP) Spam Audit \[PRO] (`automation_studio/google-business-spam-auditor`) Actor

Audit top Google Maps competitors for keyword stuffing, fake location chaining & name spam. Auto-generate ready-to-file Google Redressal Complaint dossiers and bulk spreadsheets.

- **URL**: https://apify.com/automation\_studio/google-business-spam-auditor.md
- **Developed by:** [Automation Studio](https://apify.com/automation_studio) (community)
- **Stats:** 2 total users, 1 monthly users, 71.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified b2b business leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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 Business Profile (GBP) Local SEO Spam & Name Audit \[PRO Edition]

> **The enterprise-grade automated spam detector and Google Redressal dossier generator for Local SEO agencies, multi-location franchises, and high-volume marketing consultants.**

Powered by dedicated **Google SERP Proxies**, this Actor extracts **100% real-time, unblocked Google Maps and Local Pack search results**. It audits the top-ranking competitors for Google Business Profile (GBP) guideline violations—specifically **keyword stuffing, delimiter chaining (`|`, `-`), fake location tags, and brand discrepancies**—and generates ready-to-file **Google Business Redressal Complaints** in seconds.

***

### 🔒 PRO Edition: 100% Verified Real Data

- **⚡ Real-Time SERP Infrastructure**: Connects through Apify's dedicated `GOOGLE_SERP` proxy group to pull authentic, live local pack listings directly from Google.
- **🛡️ Zero Synthetic Data**: 100% genuine competitors, real Google Maps CIDs, live star ratings, review counts, addresses, and website URLs.
- **💰 Fair Platform Pricing**: Built with Pay-Per-Event where platform compute and proxy usage are paid directly by the user, providing unmatched reliability without hidden limits.

***

### 🚀 Why Local SEO Agencies Need This

Local SEO agencies charge small business clients **$500 to $2,000/month** to rank in the coveted **Google 3-Pack**.

The #1 unfair tactic dishonest competitors use is **Keyword Stuffing their business name** (e.g., a lawyer whose legal name is *"The Miller Law Group"* listing themselves on Google Maps as *"Miller Law Group - Best 24/7 Car Accident & Personal Injury Lawyer Dallas | Free Consultation"*).

Because Google Maps' ranking algorithm places tremendous weight on the title field, keyword-stuffers outrank legitimate businesses overnight—**in direct violation of Google's Business Profile Guidelines**.

Reporting them manually takes hours of copying URLs, cross-checking state registries and websites, and typing complaint forms.

**This Actor automates the entire audit and redressal workflow in 20 seconds.**

***

### ⚡ Key Features

- **🎯 1-Click Local Pack Audit**: Enter any keyword and city (e.g., `"personal injury lawyer Dallas"`, `"emergency plumber Miami"`), and the Actor audits up to 60 top competitors automatically.
- **🛡️ Multi-Signal Spam Heuristic Engine**: Calculates a proprietary **Spam Probability Score (0–100%)** based on:
  - **Delimiter Chaining**: Detects pipes (`|`), double slashes (`//`), dashes (`-`), and bullets used to pack secondary keywords.
  - **Promotional Superlatives**: Flags unauthorized buzzwords like `#1`, `Best`, `Top`, `Cheap`, `24/7`, `Emergency`, `Same Day`.
  - **Geo-Location Stuffing**: Flags artificial city/state repetition when the listing's physical address already establishes geography.
  - **Website & Domain Brand Discrepancy**: Compares Google Maps titles against the business's actual root domain and website `<title>`.
  - **Unverified / Missing Website Penalty**: Flags high-ranking listings with no website presence (common in lead-gen call-center fraud).
- **📝 Automated Google Redressal Dossiers**: Automatically generates pre-written, policy-accurate violation paragraphs ready to copy-paste directly into [Google's official Business Redressal Complaint Form](https://support.google.com/business/contact/business_redressal_form).
- **⚡ Decoupled 3.5s Website Inspector**: Streamlined HTML inspection prevents timeouts; external competitor downtime never stops your audit.

***

### 📊 Spam Risk Rating System

| Score Range | Risk Level | Meaning & Action Recommended |
| :--- | :--- | :--- |
| **0 – 24%** | 🟢 **SAFE** | Clean, compliant listing conforming to Google Business Profile guidelines. No action needed. |
| **25 – 44%** | 🟡 **LOW RISK** | Minor keyword variations or descriptive DBA name. Keep on monitoring watchlist. |
| **45 – 69%** | 🟠 **MODERATE SPAM** | Secondary keyword stuffing or location tag detected. Eligible for **Suggest an Edit** or Redressal. |
| **70 – 100%** | 🔴 **HIGH SPAM** | Blatant keyword stuffing, delimiter chaining, or brand mismatch. **Immediate Google Redressal Complaint Recommended**. |

***

### 📥 Input Configuration

| Parameter | Type | Required | Default | Description |
| :--- | :--- | :--- | :--- | :--- |
| `searchQuery` | String | **Yes** | `"personal injury lawyer Dallas"` | Target niche or service keyword to audit on Google Maps. |
| `location` | String | No | `"Dallas, TX"` | Optional city or regional anchor to ensure precise local pack targeting. |
| `maxResults` | Integer | No | `20` | Number of top Google Maps competitor listings to extract and audit (1 to 60). |
| `strictnessLevel` | Enum | No | `"BALANCED"` | Audit sensitivity: `BALANCED`, `AGGRESSIVE`, or `LENIENT`. |
| `directUrls` | Array | No | `[]` | Optional list of specific Google Maps profile URLs to audit directly. |
| `includeRedressalText`| Boolean | No | `true` | Automatically draft pre-written complaint paragraphs for Google's official form. |
| `proxyConfiguration` | Object | No | `{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}` | Dedicated Google SERP proxy configuration for live Google data. |

***

### 📤 Output Dataset Format

For each audited competitor, the default dataset provides:

```json
{
  "rank": 1,
  "title": "Dallas Premier Injury Lawyers | Best 24/7 Car Accident Lawyer Dallas",
  "detectedRealBrand": "Dallas Premier Injury Lawyers",
  "spamScore": 85,
  "spamRiskLevel": "HIGH_SPAM",
  "violations": [
    "DELIMITER_KEYWORD_CHAINING",
    "SUPERLATIVE_KEYWORD_STUFFING",
    "GEO_LOCATION_STUFFING"
  ],
  "violationSummary": "Contains promotional superlatives: best, 24/7; Uses separator (Pipe '|') to chain keywords; Appends city 'Dallas' to manipulate local rankings",
  "address": "1700 Pacific Ave, Dallas, TX 75201",
  "phone": "(214) 555-0199",
  "rating": 4.9,
  "reviewCount": 142,
  "category": "Personal injury attorney",
  "websiteUrl": "https://dallaspremierlaw.com",
  "websiteStatus": "SUCCESS",
  "websiteTitle": "Dallas Premier Injury Lawyers | Personal Injury Law Firm",
  "rootDomain": "dallaspremierlaw.com",
  "googleMapsUrl": "https://www.google.com/maps/place/...",
  "redressalEligible": true,
  "redressalAction": "FILE_REDRESSAL_RECOMMENDED",
  "redressalComplaintText": "VIOLATION: Google Business Profile Name Guideline Violation (Keyword Stuffing)..."
}
```

***

### 💡 How to File Redressal Complaints to Google

1. **Run the Actor** on your client's target search term (e.g., `"emergency plumber Miami"`).
2. Filter the output dataset for **`redressalEligible: true`** (or **`spamRiskLevel: "HIGH_SPAM"`**).
3. Open [Google's Business Redressal Complaint Form](https://support.google.com/business/contact/business_redressal_form).
4. Copy the pre-generated **`redressalComplaintText`** directly into the form.
5. If reporting more than 10 listings, download the dataset as CSV or Excel and attach it directly to the Google form under **"Upload spreadsheet"**.
6. When Google approves the redressal, the offending listing's keyword spam is stripped, dropping their rank and **boosting your client into the Top 3 Local Pack**.

***

### 🔒 Policy Compliance & Disclaimers

This Actor extracts publicly available business listing data from Google Maps for competitive intelligence and auditing purposes. It does not access private Google accounts or internal APIs. Users are responsible for complying with local regulations and Google's terms of service.

# Actor input Schema

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

Enter the target service or business niche to audit (e.g., 'personal injury lawyer', 'emergency plumber', 'roofing contractor').

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

Optional city, state, or postal code to anchor the search if not already included in the query (e.g., 'Dallas, TX' or 'Miami, FL').

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

Number of top-ranking Google Maps competitor listings to extract and audit (1 to 60).

## `strictnessLevel` (type: `string`):

Sensitivity level for flagging keyword-stuffed titles.
• BALANCED: Recommended. Flags egregious delimiters, superlatives, and domain mismatches.
• AGGRESSIVE: Stricter on any geo-tag repetition and secondary service keywords.
• LENIENT: Only flags clear violations with multiple severe spam signals.

## `directUrls` (type: `array`):

Optional list of specific Google Maps business profile URLs to audit directly instead of, or in addition to, searching by keyword.

## `includeRedressalText` (type: `boolean`):

Automatically draft pre-written violation justification paragraphs ready to copy-paste into Google's official Business Redressal Complaint Form.

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

Requires GOOGLE\_SERP or Residential proxy group for 100% verified live Google Search data.

## Actor input object example

```json
{
  "searchQuery": "personal injury lawyer Dallas",
  "location": "Dallas, TX",
  "maxResults": 5,
  "strictnessLevel": "BALANCED",
  "directUrls": [],
  "includeRedressalText": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset containing verified competitor listings, spam probability scores (0-100), detected real brands, phone numbers, categories, and Google Redressal dossiers.

# 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 = {
    "searchQuery": "personal injury lawyer Dallas",
    "location": "Dallas, TX",
    "maxResults": 5,
    "directUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/google-business-spam-auditor").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 = {
    "searchQuery": "personal injury lawyer Dallas",
    "location": "Dallas, TX",
    "maxResults": 5,
    "directUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/google-business-spam-auditor").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 '{
  "searchQuery": "personal injury lawyer Dallas",
  "location": "Dallas, TX",
  "maxResults": 5,
  "directUrls": []
}' |
apify call automation_studio/google-business-spam-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_studio/google-business-spam-auditor"
        }
    }
}
```

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/4wbydrF3WhGRMegPb/builds/Fhss9bWKBg19rIiOA/openapi.json
