Google Business Profile Audit avatar

Google Business Profile Audit

Pricing

Pay per usage

Go to Apify Store
Google Business Profile Audit

Google Business Profile Audit

Audits Google Business Profile coverage using public data paths and deterministic fixture mode.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Brian Keefe

Brian Keefe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Google Business Profile Audit Actor

Production-ready narrow Apify Actor that audits a business's Google Business Profile coverage using public data paths only.

What it does

  • Accepts business rows, Maps/GBP URLs, or website-oriented rows.
  • Uses deterministic fixture mode for smoke tests and offline runs.
  • Attempts lightweight public-page enrichment in live mode and degrades gracefully when Google blocks, omits, or changes public fields.
  • Produces structured audit records including identity, profile completeness, competitor comparisons, markdown summary, and CSV output.

Public-data limitations

  • The actor does not use login flows, private APIs, or browser automation against authenticated Google surfaces.
  • Live mode is opportunistic. Public Google Maps/search pages often change markup, localize content, or suppress data. When that happens, the actor preserves the input identity and returns partial output with warnings and missingFields instead of failing hard.
  • Best deterministic results come from fixtureMode or supplying rawFixture / fixtureBusinessProfiles input.

Input

The Apify input schema avoids unsupported constructs like oneOf, so inputs are intentionally permissive.

Common fields:

  • fixtureMode: boolean
  • maxCompetitors: integer, default 3
  • businessRows: array of rows with any of:
    • businessName
    • location
    • businessWebsite
    • mapUrl
    • gbpUrl
    • rawFixture
  • mapUrls: array of Google Maps URLs
  • gbpUrls: array of public GBP/Maps listing URLs
  • websiteRows: array of rows with businessWebsite and optional businessName / location
  • fixtureBusinessProfiles: array of deterministic fixture profiles

Example input:

{
"fixtureMode": true,
"maxCompetitors": 2,
"businessRows": [
{
"businessName": "Northwind Dental",
"location": "Austin, TX",
"businessWebsite": "https://northwinddental.example",
"rawFixture": {
"profile": {
"name": "Northwind Dental",
"location": "Austin, TX",
"website": "https://northwinddental.example",
"categories": ["Dentist", "Cosmetic dentist"],
"rating": 4.7,
"reviewCount": 128,
"phone": "+1 512-555-0100",
"hours": ["Mon-Fri 8:00-17:00"],
"lastReviewDate": "2026-06-14"
},
"competitors": []
}
}
]
}

Output

Each dataset item includes:

  • businessIdentity
  • source
  • profile
  • competitorSummary
  • missingFields
  • markdownAudit
  • csvRow
  • warnings

Local usage

Install dependencies:

$npm install

Run with Crawlee/Apify local storage:

mkdir -p ./apify_storage/key_value_stores/default
cp examples/sample-input.json ./apify_storage/key_value_stores/default/INPUT.json
CRAWLEE_STORAGE_DIR=./apify_storage ACTOR_DEFAULT_KEY_VALUE_STORE_ID=default ACTOR_INPUT_KEY=INPUT npm start

When run with apify run, the Apify CLI sets the storage environment for you.

Run the deterministic smoke test:

$npm test

Sample files

  • Input: examples/sample-input.json
  • Output: examples/sample-output.json

Implementation notes

  • Core logic lives in small modules under src/.
  • Fixture mode is the primary reliability path.
  • Live fetch mode uses lightweight public HTML retrieval only and returns partial audits when fields cannot be extracted.