Edit Skill
👤 Nick
Edit Skill: gbp-manager
Name
Category
Description
Manage and optimize Google Business Profile for local service businesses. Covers profile completeness, posts, review management, and GBP API. Drives Local Pack (map) rankings.
Skill Instructions
saved to SKILL.md
--- 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
Cancel