Skip to content

Google Business Profile

Brain Provisioning (New Client)

Platform
Google Business Profile
Owner
GBP Specialist
Assignee
Edward
Supports
SEO Specialist, Operations

Last updated: 2026-05-06 Owner: SEO Specialist (data) / GBP Specialist (Business Profile invite) / CSM (client-side coordination) Status: Active — used for every new client after onboarding form is submitted


Every new client’s data flows from three Google products into the Brain:

  • Google Search Console — organic search traffic
  • Google Analytics 4 — site behavior + conversions
  • Google Business Profile — categories, services, reviews, posts

For each one, the Brain service account (seo-brain@core-depth-472801-t2.iam.gserviceaccount.com) needs access. Some grants are automatable; some require a UI click. This SOP runs the full check and tickets whatever can’t be automated.

Trigger: new client added to clients.json (or seeded into Brain via populate_pilot.py).

Output: all three integrations populating data in Brain on the next nightly sync. Any blockers are TT tasks in the client’s project.


StepOwner
Run brain provision <slug>SEO Specialist or Claude session
GSC: add SA as Restricted user in Search ConsoleSEO Specialist
GA4: confirm property OR auto-create + grant SASEO Specialist (Brain auto-grants if SA has account-level admin)
GBP: have client invite Tekton as ManagerCSM coordinates with client; GBP Specialist confirms
Mark TT tasks completeWhoever did the manual step

Terminal window
cd ~/Projects/tekton-brain
brain provision <slug>

Output:

  • ✓ green = wired and working
  • · cyan = waiting on a property ID
  • ! yellow = needs a human action (TT task created in the client’s TT project)
  • ✗ red = error worth investigating

The TT tasks have full step-by-step instructions in the body. Each task is dedup’d on (slug, kind) — re-running provision won’t create duplicates.

For each Search Console property the client owns:

  1. Open Search Console → switch to the client’s property.
  2. Settings (gear) → Users and PermissionsAdd User.
  3. Email: seo-brain@core-depth-472801-t2.iam.gserviceaccount.com
  4. Permission: Restricted (read-only is enough).
  5. Add.

Then record the exact property URL in Brain:

Terminal window
# Edit clients/<slug>/identity/identity_map.json — set "gscProperty" to the
# exact string GSC shows (e.g., "sc-domain:client.com" OR "https://client.com/").

Or paste the URL in chat and ask Claude to write it + close the TT task.

3. GA4: confirm property exists or auto-create

Section titled “3. GA4: confirm property exists or auto-create”

The Brain SA has admin on Tekton’s parent GA4 account 326886214. If a property already exists for this client under that account, the Brain auto-finds it and auto-grants the SA Reader access — no manual step needed.

If no property exists yet, create one programmatically:

# Run via Claude — the Admin API supports this end-to-end
analyticsadmin.properties().create(body={
"parent": "accounts/326886214",
"displayName": "<Client Name>",
"industryCategory": "HOME_AND_GARDEN", # or appropriate
"timeZone": "<America/X>",
"currencyCode": "USD",
})
# Then create a web data stream pointing to the client's domain.

Then install the measurement ID on the client’s site:

  • If the site is on astro-site-generator: edit output/<slug>-site/site-config.json → set tracking.ga4Id → commit + push (auto-deploys via Cloudflare Pages).
  • If the site is on GHL or another platform: paste the gtag.js snippet via the platform’s tracking-code field.

Record the propertyId in Brain (identity_map.json#ga4PropertyId) and close the TT task.

This step is UI-only (the Search Console links endpoint isn’t in any current Admin API version). It makes GSC data show up inside GA4 reports.

From GA4 (recommended):

  1. Switch property to the client’s GA4 property.
  2. AdminProperty LinksSearch Console links.
  3. LinkChoose accounts → pick the GSC property.
  4. Pick the web stream → Submit.

Or from GSC:

  1. Switch to the client’s GSC property.
  2. SettingsAssociationsGoogle AnalyticsAssociate.
  3. Pick the matching GA4 property → confirm.

5. GBP: have client invite Tekton as Manager

Section titled “5. GBP: have client invite Tekton as Manager”

The Business Profile API doesn’t expose a self-invite endpoint, so the client has to invite Tekton from their side.

CSM email script (paste into TT comment to relay):

Hey [client], one quick admin task — can you add Tekton as a Manager on your Google Business Profile so we can update photos / posts / categories on your behalf?

  1. Open Google Maps app (or business.google.com).
  2. Find your business listing → menu → People and access.
  3. Add info@tektongrowth.com as a Manager (Owner is fine but not required).
  4. Save and let us know — we’ll confirm the invite landed.

When accepted, run brain provision <slug> again — gbp flips to ✓ and the TT task auto-dedups.

Terminal window
brain provision <slug> # all three should be ✓ (or · for not-yet-launched GA4)
brain sync gsc <slug> # pulls last month's data
brain sync ga4 <slug> # pulls last month's data
brain sync gbp <slug> # pulls categories + services
brain doctor <slug> # validate + freshness

Mark each TT task complete (either from TT directly OR via brain provision-complete <slug> <action_id>).


  • brain doctor <slug> returns green for identity / identity_map / services / gbp/state / website/pages / heatmap-latest / gsc-monthly / ga4-monthly.
  • clients/<slug>/human-actions/ has zero records with status pending or in_progress.
  • The matching TT tasks in the client’s TT project are closed.
  • A monthly sync run (next 1st-of-month cron) writes fresh data without errors.

  • Brain repo: ~/Projects/tekton-brain/
  • Provisioning code: src/brain/provision/{gsc,ga4,gbp}.py
  • Human-action lane: src/brain/human_actions.py
  • Companion SOP for analytics setup details: Analytics Setup
  • Companion SOP for the GBP manager-invite ask: see review in your team chat for the latest CSM script