Lifecycle · Draft

Onboarding

Created 9 Jun 2026·Updated 12 Jun 2026

Latest change: ADR 0004: S4–S9 scope — per-tenant limits, no organic posting, data boundary, onboarding business type

Draft document — deep-dive spec incomplete; content will be updated before and during build. Do not treat as signed-off implementation detail. Pack overview

Objective

Move a signed client from intake to ready for media planningad platform accounts and tracking assets provisioned via API where possible, client consents captured, implementation guides delivered.

Client portal UX (what they see, provide, and what remains): Onboarding client portal.

Phase 1 scope (current)

In scope now Deferred (later phase)
Create ad accounts + sub-assets programmatically (API) Publish tags in GTM (we ship guides only)
Meta + TikTok pixels, catalogs, CAPI endpoints Full automated domain verification
Meta + Instagram Connect (client consent) DV360 (unless SKU + contract)
Merchant Center — full API create + client feed URL only Search Console
GA4 → Ads link via API when client grants Admin (optional) Kobi-operated GA4 property create
Plan-based spend limits, implementation guide

GA4 remains long-term source of truth (ga4-source-of-truth.md). ADR 0002 (accepted): v1 uses soft gate — client invites Kobi as GA4 Admin on an existing property or skips; we only link Ads↔GA4 when Admin is granted. OAuth auto-provision is Phase 3+ consideration only.

Inputs

  • Client contract / SKU (vertical, budget tier, channels)
  • Business type (onboarding intake — drives Special Ad Category eligibility; default campaign flag remains NONE per ADR 0004)
  • Brand assets (logo, URLs, social pages)
  • Website URL (for pixel + domain verification instructions)
  • Ecommerce: product feed URL (client pastes in portal — Shopify, CMS, static URL)
  • CRM tenant ID
  • Billing terms — monthly invoicing to client; no client payment method on ad platforms
  • ToS and data-sharing consent
  • Optional: client grants Kobi GA4 Admin on their property (portal invite or Google account link)

Not required Phase 1: GTM container access.

Outputs

  • onboarding_record with platform account ID map
  • Pixels (Meta, TikTok if SKU) + CAPI relay
  • Merchant Center sub-account + data source (ecommerce) — if feed URL provided
  • Ads ↔ GA4 link — if client granted GA4 Admin
  • tracking_implementation_guide (manual + GTM templates)
  • Event: client.onboarding.completed

Process steps (Phase 1)

YesNoIntake + plan_idToS + data consenttenant_registryGoogle Ads APIMerchant Center ifecommerce + feed URLClient granted GA4Admin?API link Ads + GA4Skip GA4 this onboardingMeta APIConnect Meta + IGTikTok if SKUImplementation guideCRM webhookVerification sweeponboarding.completed

Programmatic account creation — yes, via API

Platform Create via API? Client provides (not billing)
Google Ads
Merchant Center Full auto Feed URL (+ country/currency if needed)
Meta Page/IG consent (OAuth) — required for 2-Tier child BM (ADR 0003)
TikTok ✅ (if SKU)
GA4 link If Admin granted Admin access on existing property
CRM

Client never: payment details, manual ad account creation in Google/Meta/TikTok UIs.

If the client grants Kobi Administrator on their GA4 property (invite Kobi service account or automation user):

Step API Auto
Accept / confirm access Client invite in GA4 UI or Google Admin Client one-time
Link GA4 property ↔ Ads customer GA4 Admin properties.googleAdsLinks.create and/or Ads ProductLinkService (GOOGLE_ANALYTICS)
Import GA4 conversions to Ads Enabled by link + conversion action config
Read metrics (SoT) Analytics Data API
Client GA4 → BigQuery Out of scope (client’s GCP)

We do not need to create GA4 or Search Console to link Ads — only Admin on existing property + API calls both sides.

If client declines GA4 Admin: skip link; onboarding still completes; reporting uses platform data + CRM until GA4 connected later.

Merchant Center — fully automated (client feed URL only)

There is no fundamental blocker to API-creating Merchant Center for ecommerce. Client pastes feed URL; connector does the rest.

Step Who API
1. Kobi agency MCA exists Ops once (like MCC) Pre-launch
2. Create sub-account per tenant Agent Accounts.create
3. Client submits feed URL in portal Client
4. Create data source (scheduled fetch) Agent DataSources.create
5. Link sub-account ↔ Google Ads customer Agent Accounts.link + Ads ProductLinkService
6. Poll feed / policy status Agent Accountstatuses / Productstatuses

What does not block account creation:

  • Client feed URL — that is the input we want
  • Client payment — never asked; MCA uses Kobi agency billing

What can delay shopping launch (not account create):

  • Google product policy review after first fetch (async hours/days)
  • Website claim on Merchant Center (store URL) — may need meta-tag/DNS; include in implementation guide
  • Disapproved products — QC + human fix feed

So: onboarding creates MCA + feed + Ads link in one API flow; launch approval waits on Google policy crawl, same as any agency.

Tracking — pixels yes, GTM publish later

Step Phase 1
Create Meta / TikTok pixels + CAPI ✅ API
Google conversion actions ✅ API
Implementation guide (manual + GTM template)
Publish GTM on client site ⏸ Later
Kobi Relay (CNAME + one script, server-side fan-out) ⏸ Phase 2+ — first-party tag relay

Business verification (Kobi entity — not client)

Platform business verification uses the Kobi legal entity on MCC / Business Portfolio / Business Center — not client incorporation documents. New shell accounts inherit the verified agency master.

Platform How Per-client warning?
Google Ads MCC Verification Hub (bulk across managed accounts); poll status via API where available No — PRE-7
Meta Kobi BM business verification (one-time) No — PRE-8
TikTok Kobi BC business verification (one-time) No — PRE-9

If submit is UI-only, MCC bulk is the acceptable default for Google. Connectors never ask clients for tax IDs or business licenses for platform verification.

Domain verification (client website — separate)

Proves client website ownership to Meta/Google/TikTok (DNS TXT or meta tag) — not GA4, not Search Console, not Kobi entity docs. Phase 1: steps in implementation guide; optional DNS delegate.

TikTok

One-time Kobi developer app approval before TikTok SKU. After that, API provisioning like other platforms — not a per-client issue.

Platform order (Phase 1)

  1. Google Ads
  2. Merchant Center (ecommerce + feed URL from client)
  3. GA4 ↔ Ads link (if client granted Admin)
  4. Meta (+ Connect Page/IG)
  5. TikTok (if SKU)
  6. CRM webhook + implementation guide

Onboarding automation matrix (Phase 1)

Three buckets: what the agent runs via API, what needs client portal approval / OAuth / paste, and what cannot be fully automated (ops pre-launch, human, or platform async).

✅ Fully automated (Onboarding Agent / connector)

No client action during the run — assumes contract signed, plan_id set, PRE agency masters exist.

Area What runs automatically
Internal tenant_registry, plan entitlements (monthly_media_cap, credit_sub_limit), onboarding_record, ToS/consent capture (after client clicks in portal), client.onboarding.completed event
Google Ads create_customer_client, naming, currency, timezone, MCC link, API user access, auto-tagging, conversion actions + goals, Enhanced Conversions config, Merchant link, offline import setup, inherit agency billing, internal spend guardrails
Merchant Center Sub-account create, data source from feed URL, Ads link, feed/policy poll (after client pasted URL)
Meta Ad account create, spend_cap from plan, system user + token, pixel, CAPI endpoint config, catalog + offline event set (ecommerce SKU), inherit agency billing
TikTok Advertiser create (if SKU + app Live), pixel, Events API config, internal guardrails, inherit BC billing
CRM Webhook register, schema mapping, test event stub
Tracking assets Pixels + conversion actions created in platforms; implementation guide generated (PDF/HTML + GTM import template)
GA4 ↔ Ads If client already granted Admin — link APIs both sides, conversion import config
Verification sweep Poll account health, token scopes, registry limits

Client never automates: platform billing, business verification with client entity docs, raw ad account creation in Google/Meta/TikTok UIs.

👤 Client approval, OAuth, or portal input

Client acts in Kobi portal or platform OAuth UI — agent waits, then continues.

Step Client action Agent after
Kobi ToS Accept in portal Continue intake
Data sharing / subprocessors Accept (GDPR/KVKK) Unlock tracking + CAPI
Contract / SKU Signed before onboarding starts plan_id drives limits
Ecommerce feed URL Paste URL (+ country/currency if needed) MC DataSources.create + poll
Connect Meta + Instagram Portal → Meta OAuth → pick Page + IG Link assets to ad account, promote_pages
GA4 Admin (optional) Invite Kobi user/SA in GA4 or accept portal invite Ads ↔ GA4 link via API
Website / brand inputs URL, logo, social links at intake Used in naming, guides, domain-verify steps
DNS / domain verify (optional) Add TXT / meta-tag or delegate DNS to Kobi Unlocks some optimization events — not account create
Install tracking on site Follow implementation guide (snippet / GTM import) Health probe turns green
Consent banner (Relay Phase 2+) Approve copy; use CMP or Kobi banner Relay fan-out gated

Partial automate: Meta partner invite — API sends; client must accept if OAuth Connect fails (HITL A4).

❌ Cannot fully automate (per tenant)

Class Examples Who Blocks onboarding.completed?
🔧 PRE — agency one-time MCC invoicing, Meta credit, TikTok BC funding, MCA, TikTok app Live, DV360 contract, Kobi-entity business verify Kobi finance/ops/legal No — must exist before first client; not ONB per tenant
🚩 ONB — per-tenant failure Page/IG consent timeout, Meta ad account limit, missing plan limits on registry, bad token scope, MC policy without feed/catalog HITL / ops Yes for affected SKU channel
Platform async Google product policy crawl, MC website claim review, account suspension flags Wait + poll May block shopping go-live, not always account create
Human / no API GTM publish on client site (v1 deferred) Client IT from guide No — onboarding can complete; tracking not green until installed
Deferred SKU DV360 without GMP contract, TikTok without Live app Sales / engineering Exclude channel from plan
Phase 2+ Kobi Relay CNAME + loader, full automated domain verify Client DNS / dev No in v1

Minimum client checklist (Phase 1 happy path)

  1. Sign contract + accept ToS + data sharing in portal
  2. Meta: Connect Page + IG (OAuth) — required for social SKU
  3. Ecommerce: paste feed URL
  4. Optional: grant GA4 Admin
  5. After onboarding: install tracking from guide (not a blocker for onboarding.completed if policy allows incomplete tracking)

Everything else — ad accounts, pixels, CAPI, billing inherit, plan caps, catalogs — agent.

Agent vs human (Phase 1)

Step Agent (API) Human
Ad accounts + MC + feed URL Client pastes feed URL only
GA4 ↔ Ads link ✅ if Admin Client grants GA4 Admin (optional)
Pixels, catalogs, CAPI Client installs from guide
Meta + IG Connect ✅ after Client OAuth
Platform billing (inherit) ✅ auto on create 🔧 PRE one-time only — no per-client warning
Business verification (Kobi entity) ✅ inherit / ⚠️ status poll 🔧 PRE-7…PRE-9 — never client entity
Plan budgets (post-approval) ✅ API from plan_version
GTM publish Deferred