# Citation Vendor Auditor: NAP Check for Yelp, BBB, Bing, Apple (`growth-installations/citation-vendor-auditor`) Actor

Audit a business's citations against its Google Business Profile: wrong NAP, duplicates, missing listings and directory gaps vs the top 3 competitors.

- **URL**: https://apify.com/growth-installations/citation-vendor-auditor.md
- **Developed by:** [Growth Installations](https://apify.com/growth-installations) (community)
- **Categories:** SEO tools, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2,000.00 / 1,000 location audits

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

## Citation Audit $2/Location: Yelp, BBB, YP, Bing, Apple, Manta NAP Check

**$2 per audited location.** Includes the competitor directory gap report and the fix-before-payment vendor email draft.

Your citation vendor says the job is done. This checks every listing against the Google Business Profile before you pay the invoice, then writes the email telling them exactly what to fix.

### What does it do?

Audit a business's citations against its Google Business Profile: wrong NAP, duplicates, missing listings and directory gaps vs the top 3 competitors.

### Who is it for?

Local SEO agencies, citation-building resellers, GBP managers and AI agencies selling local marketing to home-service, legal, medical and other local businesses.

### How it works

1. Pulls the client's Google Business Profile (name, address, phone, website, hours, categories) as the source of truth, plus the top 3 competitors for your keyword.
2. Searches Google for the client's listings on Yelp, BBB, YellowPages, Bing Places, Apple Maps, Foursquare, Manta, MapQuest, Nextdoor, Facebook, Superpages, Chamber of Commerce and industry directories (Angi, HomeAdvisor, Houzz, Thumbtack, Porch, BuildZoom, Avvo, Healthgrades and more).
3. Reads each listing's name, phone and address and flags wrong phone, wrong name, wrong address, duplicates and missing listings.
4. Runs the same search for the top 3 competitors and lists every directory they are on that your client is not.
5. Writes a white-label agency report (Markdown, HTML ready to print to PDF, JSON, CSV) and a fix-before-payment email DRAFT for the citation vendor. Nothing is ever sent.

### How much does it cost?

| Event | Price | What you get |
|---|---|---|
| Location audit | $2.00 | One business location fully audited: citations, NAP check, duplicates, missing listings, competitor gaps and vendor email draft. |

Google Maps + Google Search scrapes run on your Apify account (about $0.03 + $0.10 per location). Every sub-run has a hard spend cap (`maxUpstreamSpendUsd`). You can also set a maximum charge per run in the Apify Console.

### Input example

```json
{
  "clients": [
    "Chase Inc. Heating, Air, and Plumbing"
  ],
  "location": "Richmond, VA",
  "keyword": "plumber",
  "competitors": 3,
  "agencyName": "Rank Local",
  "vendorName": "Acme Citations",
  "invoiceRef": "INV-1042"
}
```

### Output

One dataset row per directory checked with: `business`, `directory`, `status`, `issue`, `fix`, `listingUrls`, `foundName`, `foundPhone`, `foundAddress`, `gbpName`, `gbpPhone`, `gbpAddress`, `competitorsListed`, `checkUrl`, `claimUrl`.
Key-value store: `REPORT_MD`, `REPORT_HTML`, `REPORT_JSON`, `VENDOR_EMAIL_DRAFTS`.

### Sample output (live run, Nov 3, 2026)

Live run on Chase Inc. Heating, Air, and Plumbing (100 Oak Glen St, Richmond, VA 23225), keyword 'plumber', top 3 competitors: 7 citations found, 2 NAP issues, 11 missing listings, 5 competitor directory gaps.

| directory | status | issue | competitorsListed |
|---|---|---|---|
| Yelp | mismatch | Phone shown as (804) 396-2063; GBP phone is (804) 745-3864. | Any Time Emergency Plumbing, Advanced Plumbing, LLC |
| BuildZoom | mismatch | Listed under a different name: 'Chase Roofing & Sheet Metal / VA / Read Reviews + Get a... | Advanced Plumbing, LLC |
| BBB | missing | No BBB listing found for this business. | Advanced Plumbing, LLC |
| Houzz | missing | No Houzz listing found for this business. | M.A. Williams Drain Cleaning & Plumbing |
| Porch | missing | No Porch listing found for this business. | M.A. Williams Drain Cleaning & Plumbing |
| Facebook | found-unverified | Listing found by name; phone/address not visible in the search snippet. | Any Time Emergency Plumbing, Advanced Plumbing, LLC, M.A. Williams Drain Cleaning & Plu... |
| MapQuest | found-unverified | Listing found by name; phone/address not visible in the search snippet. | Advanced Plumbing, LLC, M.A. Williams Drain Cleaning & Plumbing |

### Use it from n8n, Make, GoHighLevel, Claude or Cursor

- MCP: add `https://mcp.apify.com/?actors=growth-installations/citation-vendor-auditor` to Claude, Cursor or any MCP client.
- n8n or Make: add an HTTP Request step that POSTs your input JSON to the API endpoint below and returns the dataset items.
- API: `POST https://api.apify.com/v2/acts/growth-installations~citation-vendor-auditor/run-sync-get-dataset-items` with header `Authorization: Bearer <your Apify API token>`

### FAQ

**Can I use my own scraped data?** Yes. Pass items into the bring-your-own dataset inputs and the Actor skips those scrapes.

**Is anything sent automatically?** No. The vendor email is a draft for you to review.

**Does it work outside the US?** Directory coverage is US-first; the GBP comparison works anywhere Google Maps does.

# Actor input Schema

## `clients` (type: `array`):

One or more business names, websites or Google Maps URLs. One location-audit is charged per business found.

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

e.g. 'Richmond, VA'.

## `keyword` (type: `string`):

Main search term (e.g. 'plumber'). The top Map Pack results become the competitors for the gap report.

## `competitors` (type: `integer`):

How many of the top Map Pack results for your keyword to use as competitors (0-5) in the directory gap report. 0 skips the gap report.

## `verifyPages` (type: `boolean`):

Fetch each found listing page to read phone and address when the search snippet does not show them.

## `agencyName` (type: `string`):

Your agency name, shown on the white-label report and in the vendor email sign-off.

## `brandName` (type: `string`):

Optional tagline or brand line printed under the report title, e.g. 'Local SEO by Rank Local'. Leave empty to skip.

## `vendorName` (type: `string`):

Name of the citation-building vendor you paid. Used to address the fix-before-payment email draft (nothing is sent).

## `invoiceRef` (type: `string`):

Optional invoice or order number from the vendor, quoted in the email draft so they know which job to fix.

## `maxUpstreamSpendUsd` (type: `number`):

Hard spending cap across the Google Maps and Google Search sub-runs on your Apify account. About $0.13 covers one location.

## `placesDataset` (type: `array`):

Optional: compass/crawler-google-places items. Skips the Maps scrape.

## `serpDataset` (type: `array`):

Optional: apify/google-search-scraper items for the audit queries. Skips the search scrape.

## Actor input object example

```json
{
  "clients": [
    "Chase Inc. Heating, Air, and Plumbing"
  ],
  "location": "Richmond, VA",
  "keyword": "plumber",
  "competitors": 3,
  "verifyPages": false,
  "agencyName": "Rank Local",
  "vendorName": "Acme Citations",
  "invoiceRef": "INV-1042",
  "maxUpstreamSpendUsd": 1
}
```

# Actor output Schema

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

No description

## `report_md` (type: `string`):

No description

## `report_html` (type: `string`):

No description

## `report_json` (type: `string`):

No description

## `vendor_email_drafts` (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 = {
    "clients": [
        "Chase Inc. Heating, Air, and Plumbing"
    ],
    "location": "Richmond, VA",
    "keyword": "plumber",
    "competitors": 3,
    "agencyName": "Rank Local",
    "vendorName": "Acme Citations",
    "invoiceRef": "INV-1042"
};

// Run the Actor and wait for it to finish
const run = await client.actor("growth-installations/citation-vendor-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 = {
    "clients": ["Chase Inc. Heating, Air, and Plumbing"],
    "location": "Richmond, VA",
    "keyword": "plumber",
    "competitors": 3,
    "agencyName": "Rank Local",
    "vendorName": "Acme Citations",
    "invoiceRef": "INV-1042",
}

# Run the Actor and wait for it to finish
run = client.actor("growth-installations/citation-vendor-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 '{
  "clients": [
    "Chase Inc. Heating, Air, and Plumbing"
  ],
  "location": "Richmond, VA",
  "keyword": "plumber",
  "competitors": 3,
  "agencyName": "Rank Local",
  "vendorName": "Acme Citations",
  "invoiceRef": "INV-1042"
}' |
apify call growth-installations/citation-vendor-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,growth-installations/citation-vendor-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/upbc5S7sXKFKkxQam/builds/nrbgmxV8O82seBBTv/openapi.json
