Optimize a Google Business Profile
Find the gaps in a Google Business Profile and fix them one previewed, approved change at a time.
Setup
This skill needs the Reach MCP server connected in your AI client:
- Server URL:
https://reach.locus-intelligence.com/api/mcp(remote, Streamable HTTP, OAuth sign-in, no API key) - Setup for Claude, ChatGPT, Claude Code, Codex, Cursor, VS Code and others: Reach setup guide
Editing needs the Google Business Profile connected in Reach.
Steps
- Pick the location. Call
get_account. If there is more than one location, ask which one. If itsconnectionStatusis notactive, tell the owner to reconnect Google in Reach and stop. - Find the gaps. Call
get_recommendationsfor the location, thenget_listingwithsections: ["profile"]to see what is there now. Ifreadinessisnever_run, the profile has not been scored yet: say that, not "nothing missing". Never add gaps that are not in the response. - Summarise the gaps in a few lines, most useful first, grouped by
actionability:agent_can_fix: offer to do it with the tool named infix.needs_owner_input: ask the owner for the substance (a phone number, the real opening hours, what services they offer). Never invent it.needs_setup: explain once what it needs, without pushing.
- One change at a time. For each fix the owner wants:
- Call
update_listingwithpreview: true(the default) and only that change inchanges. - Show each changed field's before and after, exactly as the preview returns it.
- Ask for an explicit yes to that change. One yes covers one change, never "all of the above".
- Call
update_listingagain with the samechanges,preview: falseand thebasedOnthe preview returned. Pass anidempotencyKey. - Report
published.applied,skippedandfailedexactly as returned. - Read back with
get_listing(sections: ["profile"]). If the old value still shows, say Google may still be applying it. - When the fix is done and read back, call
update_recommendation_statuswith the item'staskIdandstatus: "completed".
- Call
- Next item, or stop when the owner says so. Use
status: "dismissed"only when the owner asks to drop an item.
Things to know
- Settable fields: name, additional categories, description, opening date, phones, website, action links, social and messaging links, regular and special hours, services and attributes. Service area is added or removed by place name.
- The primary category and the address cannot be changed here. Photos are a separate, previewed tool (
manage_media). - If the write is refused because the listing changed since the preview, preview again and ask again.
- If the preview shows
stagedDashboardEdits(unpublished edits saved in Reach), show them separately. SetincludeStagedEditsonly after the owner approves those too. - Use
publishMode: "all"only when the owner asks to publish everything. - A description should describe the business in the owner's words: no keyword stuffing, no links, nothing the owner has not confirmed.
Safety
- Never write to Google without the owner's explicit yes to the exact before and after. Preview first, always.
- Stop if the location's
connectionStatusis notactive. - Read
limitationsbefore saying there is no data. - On
rate_limited, giveretryAfterSecondsand do not retry right away. Onlisting_only, relay the message andconnectUrl, and stop. On an upgrade refusal, namerequiredPlan, point to Plans in Reach, and stop.