gbp-manager

👤 Nick

gbp-manager

Edit

Manage and optimize Google Business Profile for local service businesses. Covers profile completeness, posts, review management, and GBP API. Drives Local Pack (map) rankings.

marketing

Skill Instructions

---
name: gbp-manager
slug: gbp-manager
version: 1.0.0
description: Manage and optimize Google Business Profile (GBP) for local service businesses. Covers profile completeness, category selection, service area, posts, photo strategy, review management, Q&A, and the My Business API. GBP is the most important local SEO asset — it drives the Local Pack (map results) which captures 30–50% of local search clicks. All profile changes require Nick approval before publishing.
---

# GBP Manager

Google Business Profile is the single highest-leverage local marketing asset. It controls whether Ironwood appears in the map pack for "tree service near me" — those 3 listings that get 30–50% of clicks before anyone scrolls.

## When to Use

- Auditing or completing a GBP profile
- Adding or updating services, photos, posts
- Responding to reviews
- Fixing a suspended or penalized profile
- Setting up GBP API access for automated management
- Monitoring competitor GBP profiles

## API Access

- **OAuth credentials**: `~/.openclaw/credentials/mary-oauth-client.json` + `mary-oauth-token.json`
- **API**: My Business Business Information API + My Business Account Management API
- **Scope**: `https://www.googleapis.com/auth/business.manage`
- **Account**: nkdurrett@gmail.com (manager access to Ironwood's profile)

```python
from google.oauth2.credentials import Credentials
import json, requests

with open("/Users/dr.zoidberg/.openclaw/credentials/mary-oauth-token.json") as f:
    token_data = json.load(f)

creds = Credentials(
    token=token_data.get("token"),
    refresh_token=token_data.get("refresh_token"),
    client_id=token_data.get("client_id"),
    client_secret=token_data.get("client_secret"),
    token_uri="https://oauth2.googleapis.com/token"
)
# Use creds with google-auth-httplib2 or requests-oauthlib
```

**⚠️ All profile changes require Nick approval.** Create a staged TaskFlow task. Never publish changes without approval.

## Profile Completeness Checklist

GBP ranks profiles by completeness and engagement. Target 100% on all fields:

**Core Info**
- [ ] Business name (exact legal name — no keyword stuffing)
- [ ] Primary category: "Tree Service" (most specific available)
- [ ] Additional categories: "Arborist", "Landscaper" (if applicable)
- [ ] Phone number (local area code, not 800)
- [ ] Website URL (homepage or local landing page)
- [ ] Address (if physical location) OR service area (if mobile)
- [ ] Service area: list all cities/ZIP codes served

**Hours**
- [ ] Regular hours current and accurate
- [ ] Holiday hours set for major holidays
- [ ] "By appointment" set if applicable

**Services**
- [ ] All primary services listed with descriptions
- [ ] Prices added where applicable (shows up in profile)
- [ ] Service descriptions use natural language, include city name

**Photos (major ranking factor)**
- [ ] Cover photo: crew or equipment, professional quality
- [ ] Logo: clean, square format
- [ ] At minimum 10 photos total
- [ ] Mix: crew shots, before/after work, equipment, completed jobs
- [ ] Add 1–2 new photos per week (freshness signal)

**Content**
- [ ] Business description: 750 chars, lead with what you do and where, no keyword stuffing
- [ ] Products/services section complete
- [ ] Q&A section: seed with common questions and answer them yourself

## GBP Posts

Posts appear directly in the Google search result for your business. Use them weekly:

**Post Types**
- **What's New**: General updates, seasonal tips, company news
- **Offer**: Discounts or promotions (requires start/end date)
- **Event**: Seasonal events, community involvement

**Post Cadence for Home Services**
- 1 post per week minimum
- Seasonal hooks: storm season, spring cleanup, fall prep
- Respond to local weather events within 24 hours ("Storm damage? We're taking calls now.")
- Always include a CTA button: "Call Now", "Get a Quote", "Learn More"

**Post Formula**
```
[Pain point or seasonal hook — 1 sentence]
[What we do about it — 1-2 sentences]
[Social proof — optional, 1 line]
[CTA]
```

Example:
```
Spring storms can stress even healthy trees.
Ironwood Tree Co is scheduling free tree health assessments through May —
we'll check for storm damage, disease, and hazard limbs before they become a problem.
Tulsa homeowners: [Get a Free Assessment →]
```

## Review Management

Reviews are the #1 ranking factor for Local Pack. Manage them aggressively.

**Response Rules**
- Respond to EVERY review within 48 hours
- Positive reviews: Thank them, mention the specific job, invite them back
- Negative reviews: Acknowledge, apologize for the experience, offer to make it right, take it offline ("Please call us at...")
- Never argue in a review response — it's public

**Response templates (adapt, don't copy verbatim)**

Positive:
```
Thank you, [name]! We're so glad the [tree removal / trimming] went smoothly.
It was a pleasure working on your property in [neighborhood if mentioned].
We look forward to helping you again!
— The Ironwood Team
```

Negative:
```
[Name], we're sorry to hear your experience didn't meet expectations.
This isn't the standard we hold ourselves to, and we'd like to make it right.
Please give us a call at [phone] so we can discuss this directly.
— [Owner name], Ironwood Tree Co
```

**Generating more reviews**
- Drive review requests through GHL automation (see lead-gen-automation skill)
- Direct link: `https://g.page/r/<place_id>/review`
- Target: 2–4 new reviews per week to maintain freshness and volume

## Audit Workflow

1. **Pull profile data** — completeness %, categories, services, photos count, review score
2. **Pull review data** — volume, score, recency, unanswered reviews
3. **Check post history** — last post date, frequency
4. **Check Q&A** — seeded questions present?
5. **Check competitor profiles** — what are top 3 competitors doing better?
6. **Write audit report** — save to `~/.openclaw/workspace-mary/reports/TASK-<num>-<slug>.md`
7. **Create staged tasks** — one per fix category (photos, posts, services, reviews)

## GBP API Quick Reference

```bash
# List accounts
curl -s "https://mybusinessaccountmanagement.googleapis.com/v1/accounts" \
  -H "Authorization: Bearer <access_token>"

# List locations for account
curl -s "https://mybusinessbusinessinformation.googleapis.com/v1/accounts/<account_id>/locations" \
  -H "Authorization: Bearer <access_token>"

# Get location details
curl -s "https://mybusinessbusinessinformation.googleapis.com/v1/<location_name>" \
  -H "Authorization: Bearer <access_token>"

# Create a post
curl -X POST "https://mybusiness.googleapis.com/v4/<location_name>/localPosts" \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"languageCode": "en", "summary": "Post text here", "callToAction": {"actionType": "CALL", "url": "tel:+19185551234"}, "topicType": "STANDARD"}'
```

## Local Pack Ranking Factors

| Factor | Weight | What to Do |
|--------|--------|-----------|
| Review count & score | Very High | Drive review requests; respond to all |
| Profile completeness | High | Fill every field |
| Category relevance | High | Primary: "Tree Service"; be specific |
| Proximity to searcher | High | Can't control, but service area must be accurate |
| Post frequency | Medium | Weekly minimum |
| Photo freshness | Medium | Add 1–2/week |
| Website authority | Medium | Coordinate with Jenny for local SEO |

## Related Skills
- `local-services-ads` — LSA pulls from GBP; reviews count for both
- `google-ads-manager` — GBP location extensions improve PPC ad performance
- `storybrand-copywriter` — GBP description and post copy follows SB7 principles
- `lead-gen-automation` — GHL automation drives the review request flow
Back to Skills