This checklist scores a Google Business Profile using data retrieved from the DataForSEO My Business Info API. It measures profile completeness on the maps PLATFORM, not on-page signals (seo-local handles on-page).
Each field: Present + Optimized = 2pts, Present = 1pt, Missing = 0pts
Total possible: 50 points. Normalize to 0-100 scale: (score / 50) * 100
| # | Field | Points | Optimized Criteria |
|---|---|---|---|
| 1 | Primary category | 2 | Most specific subtype for industry (e.g., "Cosmetic Dentist" not "Dentist") |
| 2 | Additional categories | 2 | 3-5 relevant categories (optimal: 4 additional per BrightLocal) |
| 3 | Business name | 2 | Matches real-world name exactly (no keyword stuffing) |
| 4 | Physical address | 2 | Complete, matches website NAP |
| 5 | Phone number | 2 | Local number (not toll-free), matches website |
| 6 | Website URL | 2 | Points to correct page (not strongest page -- Diversity Update risk) |
| 7 | Business hours | 2 | Complete with special/holiday hours. Open-at-search-time = factor #5 |
| 8 | Verified status | 2 | Google Verified badge active |
Subtotal: 16 points (8 fields)
| # | Field | Points | Optimized Criteria |
|---|---|---|---|
| 9 | Business description | 2 | 250-750 chars, includes primary service + location keywords naturally |
| 10 | Services list | 2 | All core services listed with descriptions |
| 11 | Products | 2 | Key products/services with prices (if applicable) |
| 12 | Photos | 2 | 10+ photos across types: logo, cover, interior, exterior, team, products |
| 13 | Photo recency | 2 | Photos uploaded within last 30 days |
| 14 | Attributes | 2 | Relevant attributes set (accessibility, payments, amenities, identity) |
| 15 | Service areas | 2 | Defined for SABs, up to 20 areas (cities or zip codes) |
| 16 | Menu/services link | 2 | Menu URL (restaurants) or services URL (others) |
Subtotal: 16 points (8 fields)
| # | Field | Points | Optimized Criteria |
|---|---|---|---|
| 17 | Google Posts | 2 | Active posting (1+/week). Types: update, offer, event, product |
| 18 | Post recency | 2 | Post within last 7 days |
| 19 | Booking link | 2 | Appointment/reservation URL configured |
| 20 | Social profiles | 2 | Linked via sameAs or GBP social links |
| 21 | Logo | 2 | High-quality square logo uploaded |
| 22 | Cover photo | 2 | On-brand, high-resolution cover image |
| 23 | Videos | 2 | At least 1 video uploaded |
| 24 | Owner responses | 2 | Responding to reviews (target: 80%+ response rate) |
| 25 | Q&A engagement | 2 | GBP Q&A active where available; website FAQ content supports coverage |
Subtotal: 18 points (9 fields)
When scoring, apply multipliers to fields that matter more for specific industries:
After applying industry multipliers, re-normalize so the total remains 0-100:
final_score = (weighted_raw_score / max_possible_weighted_score) * 100
This ensures consistent scoring regardless of which industry multipliers are active.
| Score | Rating | Action |
|---|---|---|
| 90-100 | Excellent | Maintain posting cadence and photo freshness |
| 75-89 | Good | Fill remaining gaps in supplementary fields |
| 50-74 | Needs Work | Missing important fields, address Critical + Important gaps |
| 25-49 | Poor | Major profile gaps hurting visibility. Prioritize Critical fields |
| 0-24 | Critical | Profile barely exists or unclaimed. Start with verification + Critical fields |
| Checklist Field | DataForSEO My Business Info Field |
|---|---|
| Primary category | category |
| Additional categories | additional_categories |
| Business name | title |
| Address | address_info |
| Phone | contact_info (type: phone) |
| Website | domain, url |
| Hours | work_hours |
| Description | description |
| Services | (separate API or attributes) |
| Photos | photos_count, main_image |
| Attributes | attributes (grouped by type) |
| Popular times | popular_times |
| Posts | My Business Updates API |
| Verified status | Not directly exposed — infer from profile completeness + Maps SERP presence, or flag as "Unknown (manual check required)" |