Google Business Profile Auditor — GMB Audit Tool avatar

Google Business Profile Auditor — GMB Audit Tool

Pricing

from $0.175 / actor start

Go to Apify Store
Google Business Profile Auditor — GMB Audit Tool

Google Business Profile Auditor — GMB Audit Tool

Audit any Google Business Profile (GMB) in seconds. Get a 0–90 score, letter grade, severity-ranked issues, prioritized fixes, and a nearby-competitor comparison. Built for local SEO agencies, freelancers, and small business owners.

Pricing

from $0.175 / actor start

Rating

0.0

(0)

Developer

Ace

Ace

Maintained by Community

Actor stats

2

Bookmarked

77

Total users

16

Monthly active users

0.65 hours

Issues response

5 days ago

Last modified

Share

Google Business Profile Auditor

Audit any Google Business Profile in seconds. Input a business name and city — get back a scored report with severity-ranked issues, specific recommendations, and a competitor comparison, all in structured JSON.

Built for marketing agencies, freelancers, and anyone who needs to audit local business listings at scale without doing it manually.


What It Does

  1. Searches Google Maps for the target business
  2. Extracts profile data using Apify's maintained compass/crawler-google-places actor
  3. Scores 8 auto-detectable profile factors (max 90 points)
  4. Flags manual-check items that cannot be auto-detected
  5. Compares the business against nearby competitors
  6. Returns a complete audit JSON to your dataset

Input

FieldTypeRequiredDescription
businessNamestringYesBusiness name (exact or approximate)
citystringYesCity where the business is located
statestringNoUS state abbreviation — narrows results
maxCompetitorsintegerNoCompetitors to include (1–5, default: 3)

Example input:

{
"businessName": "Joe's Pizza",
"city": "Austin",
"state": "TX",
"maxCompetitors": 3
}

Output

All results are saved to the default dataset. One item per run.

Top-level fields

FieldTypeDescription
businessNamestringMatched business name from Google Maps
searchedAsstringThe name you passed as input
citystringCity from the listing
statestringState from the listing
auditDatestringISO timestamp of the audit
mapsUrlstringDirect Google Maps URL for the business
placeIdstringGoogle Place ID
scorenumberAuto-detected score (0–90)
maxAutoScorenumberAlways 90 — max from auto-detectable fields
gradestringA / B / C / D
summarystringOne-line human-readable summary
profileobjectRaw profile data (see below)
issuesarrayRanked issues found
manualChecksarrayFields requiring manual verification
recommendationsarraySpecific, actionable fixes — one per issue
competitiveInsightsarrayHead-to-head comparisons against the competitors found
competitorsarrayNearby competitor summaries, ordered by search rank
poweredBystringAlways GBP Auditor on Apify Store
dataSourcestringAlways compass/crawler-google-places

profile object

FieldTypeNotes
ratingnumber | nullAverage star rating (e.g. 4.3)
reviewCountnumberTotal number of reviews
reviewsDistributionnullAlways null — the run requests maxReviews: 0, so Google Maps returns no star breakdown. Kept for schema stability.
hasWebsitebooleanWhether a website is linked
websitestring | nullWebsite URL if present
phonestring | nullPhone number if present
addressstring | nullFull address string
imageCountnumberTotal photos on the listing
categoriesarrayBusiness category tags
permanentlyClosedbooleanTrue if marked permanently closed
temporarilyClosedbooleanTrue if marked temporarily closed

issues array items

FieldTypeValues
severitystringcritical / high / medium / low
fieldstringWhich profile field has the issue
messagestringHuman-readable description of the problem

Every point you lose is explained. If the score is below 90, issues names each factor that cost points and recommendations carries a matching fix. A profile that scores full marks on a factor produces no issue for it, so a 90/90 profile returns issues: [] — that empty array means "nothing to fix", not "nothing detected".

Severity is about ranking impact, not about how many points were lost:

SeverityMeaning
criticalActively suppresses the listing — e.g. marked permanently closed, or a rating below 3.0
highA missing fundamental — no phone, no website, too few reviews to enter the Local Pack
mediumPresent but underbuilt — partial address, thin photo set, no categories
lowAlready competitive, short of best practice — e.g. a 4.1 rating or 50-99 reviews

The summary field counts critical and high together as "high-priority".

manualChecks array items

Fields that cannot be auto-detected (business description, recent posts, services listed, Q&A section). Each item has:

FieldTypeDescription
fieldstringField name
messagestringWhat to check manually
whystringWhy it matters for ranking

competitiveInsights array items

Always present when at least one competitor was found (empty array if none were). These compare the target against the competitor set rather than against a fixed benchmark, so they fire even on a high-scoring profile that has no issues left.

FieldTypeDescription
typestringreview_gap / review_lead / photo_gap / photo_lead / rating_gap / rating_lead / website_advantage
messagestringThe comparison, with the competitor named and the gap quantified
actionstringWhat to do about it

competitors array items

FieldTypeDescription
namestringCompetitor business name
ratingnumber | nullTheir average rating
reviewCountnumberTheir total reviews
hasWebsitebooleanWhether they have a website linked
imageCountnumberTheir photo count
ranknumber | nullTheir position in the search results
mapsUrlstring | nullTheir Google Maps URL

Competitors are returned in ascending rank order (any unranked result sorts last), and other locations of the same business are excluded — a shared domain, a matching name, or a subsidiary that carries the parent brand in its title will not be returned as a rival. Google re-ranks local results per search, so the specific competitors returned for the same business can differ between runs.


Scoring Breakdown

FactorMax PointsNotes
Phone number10Present or not
Website linked15Present or not
Star rating15Scaled: 4.5+ = full, 4.0+ = 10, 3.5+ = 5, <3.5 = 0
Review count20Scaled: 100+ = full, 50+ = 15, 20+ = 10, 5+ = 5, <5 = 0
Photo count15Scaled: 20+ = full, 10+ = 10, 3+ = 5, <3 = 0
Category set5Present or not
Address complete10Full address = 10, partial = 5, missing = 0
Total90

Grade thresholds: A ≥ 75, B ≥ 55, C ≥ 35, D < 35.

Partial credit on a scaled factor still produces an issue and a recommendation — a listing with 50 reviews scores 15/20 and gets a low severity entry naming the 100-review threshold it fell short of.

Fields not auto-scored (require manual verification):

  • Business description text
  • Recent Google Business posts
  • Services / menu items listed
  • Q&A section populated

Example Output

Generated by running the scorer on a sample profile — the field set, ordering, and summary wording are exactly what a run writes to the dataset.

{
"businessName": "Joe's Pizza",
"searchedAs": "Joe's Pizza",
"city": "Austin",
"state": "TX",
"auditDate": "2026-08-26T14:23:00.000Z",
"mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJexampleJoesPizza",
"placeId": "ChIJexampleJoesPizza",
"score": 45,
"maxAutoScore": 90,
"grade": "C",
"summary": "\"Joe's Pizza\" scored 45/90 (C). 4 issues found (2 high-priority). 3 competitive insights generated. 4 fields require manual verification.",
"profile": {
"rating": 4.1,
"reviewCount": 18,
"reviewsDistribution": null,
"hasWebsite": false,
"website": null,
"phone": "(512) 555-0100",
"address": "1234 S Congress Ave, Austin, TX 78704",
"imageCount": 7,
"categories": [
"Pizza restaurant",
"Italian restaurant"
],
"permanentlyClosed": false,
"temporarilyClosed": false
},
"issues": [
{
"severity": "high",
"field": "website",
"message": "No website linked to this listing."
},
{
"severity": "low",
"field": "rating",
"message": "Rating is 4.1 — solid, but profiles at 4.5+ earn full marks and win more clicks from the Local Pack."
},
{
"severity": "high",
"field": "reviewCount",
"message": "Only 18 reviews. Businesses in the Google Local Pack typically have 20+."
},
{
"severity": "medium",
"field": "images",
"message": "Only 7 photos. Listings with 10+ photos get significantly more views."
}
],
"manualChecks": [
{
"field": "businessDescription",
"message": "Manually verify: does your profile have a 400–750 character business description?",
"why": "Description is not returned by the Google Maps scraper. Log in to GBP to check."
},
{
"field": "recentPosts",
"message": "Manually verify: have you posted a Google Business update in the last 7 days?",
"why": "Recent posts signal activity to Google and appear directly in your listing."
},
{
"field": "servicesOrMenu",
"message": "Manually verify: are your services, products, or menu items listed in GBP?",
"why": "Listed services help Google match your business to more relevant queries."
},
{
"field": "questionsAndAnswers",
"message": "Manually verify: have you pre-populated the Q&A section with common questions?",
"why": "Pre-answered Q&As appear in your listing and reduce friction for new customers."
}
],
"recommendations": [
"Link your website in Google Business Profile → Info. A missing website significantly hurts local search ranking.",
"You are close to the 4.5 threshold. Ask recent happy customers for a review — at this rating a handful of 5-star reviews moves the average quickly.",
"Set up an automated review request: send a follow-up text or email 24 hours after every transaction with a direct link to your Google review page.",
"Add photos of: exterior (for navigation), interior, staff, and your top products/dishes. Use real photos — stock images are flagged by Google."
],
"competitiveInsights": [
{
"type": "review_gap",
"message": "Your top competitor (Tony's Pizzeria) has 312 reviews vs your 18 — a gap of 294.",
"action": "Set up an automated post-visit review request (SMS or email) to close this gap systematically."
},
{
"type": "photo_gap",
"message": "Tony's Pizzeria has 47 photos vs your 7 — a gap of 40.",
"action": "Upload photos of your exterior, interior, staff, and top products. Aim to exceed the competitor count."
},
{
"type": "rating_gap",
"message": "Tony's Pizzeria has a higher rating (4.6) than you (4.1).",
"action": "Review your 1-star and 2-star feedback for recurring themes — one fixable issue often drives most negative reviews."
}
],
"competitors": [
{
"name": "Tony's Pizzeria",
"rating": 4.6,
"reviewCount": 312,
"hasWebsite": true,
"imageCount": 47,
"rank": 1,
"mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJexampleTonys"
}
],
"poweredBy": "GBP Auditor on Apify Store",
"dataSource": "compass/crawler-google-places"
}

Pricing

$1.00 per audit — or $0.35 if you are on an Apify Business plan. One run = one complete audit. No separate subscription to this Actor.

Your price depends on your Apify plan

This Actor offers the Apify Store pricing discount. It is applied automatically at run time based on the plan your account is already on — there is nothing to claim or enter.

Your Apify planPer audit100 audits500 audits
Free$1.00$100.00$500.00
Starter$0.70$70.00$350.00
Scale$0.50$50.00$250.00
Business or above$0.35$35.00$175.00

If you audit profiles in bulk — agency prospecting, client reporting, a monthly re-audit across a book of business — the Business-plan rate is where this Actor is designed to be used.

How the charge is calculated

This Actor is billed pay per event. The charge is Apify's built-in Actor start event, priced per GB of allocated memory. This Actor runs at 2 GB, so one audit bills 2 events: 2 x $0.50 = $1.00 at the Free rate, down to 2 x $0.175 = $0.35 at the Business rate. A further $0.001 covers the single result record written to the dataset.

Costs billed separately by Apify

Two things are not included in the price above:

  1. Apify platform usage (compute). This Actor is a lightweight orchestrator — it peaks at roughly 55 MB of real memory and finishes in about 20-70 seconds — so platform usage is typically a fraction of a cent per run, charged at your plan's rates.
  2. The sub-actor call. This Actor calls compass/crawler-google-places to fetch Google Maps data. That Actor bills its own pay-per-event charges (a place-scraped event) to your account. See its listing for current rates.

Reliability, and what happens if a run fails

No failed or timed-out runs over the last 30 days — see the run statistics on this listing, which Apify publishes automatically and the developer cannot edit. (Runs a user cancels mid-flight are counted separately by Apify as aborted.)

Be aware that Actor start is charged when a run begins, so a run that fails is still billed. There is no automatic refund. If a run fails or returns nothing useful, open an issue on this Actor and I will make it right.


Notes

  • One audit per run. The input takes a single businessName + city. To audit a book of business, start one run per profile from the Apify API, a scheduled task, or your own script — each run writes its own dataset item, so results can be merged downstream
  • Results reflect publicly visible Google Maps data at the time of the run
  • Business matching uses name + city — add state if results are ambiguous
  • The compass/crawler-google-places sub-actor is maintained by Apify and handles proxy rotation and anti-blocking automatically
  • Google Maps data structure may change; the sub-actor is updated by Apify when this happens

Support

Questions or issues? Open a GitHub issue or contact via the Apify Store listing page.