Google Business Profile Audit
Pricing
Pay per usage
Go to Apify Store

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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
warningsandmissingFieldsinstead of failing hard. - Best deterministic results come from
fixtureModeor supplyingrawFixture/fixtureBusinessProfilesinput.
Input
The Apify input schema avoids unsupported constructs like oneOf, so inputs are intentionally permissive.
Common fields:
fixtureMode: booleanmaxCompetitors: integer, default3businessRows: array of rows with any of:businessNamelocationbusinessWebsitemapUrlgbpUrlrawFixture
mapUrls: array of Google Maps URLsgbpUrls: array of public GBP/Maps listing URLswebsiteRows: array of rows withbusinessWebsiteand optionalbusinessName/locationfixtureBusinessProfiles: 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:
businessIdentitysourceprofilecompetitorSummarymissingFieldsmarkdownAuditcsvRowwarnings
Local usage
Install dependencies:
$npm install
Run with Crawlee/Apify local storage:
mkdir -p ./apify_storage/key_value_stores/defaultcp examples/sample-input.json ./apify_storage/key_value_stores/default/INPUT.jsonCRAWLEE_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.