Lifecycle · Draft

Campaign Execution

Created 9 Jun 2026·Updated 11 Jun 2026

Latest change: Publish Dossier site and full doc pack to GitHub

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

Translate an approved media plan version into live (or scheduled) campaigns across enabled platforms — idempotently, auditably, and with rollback support.

Preconditions

  • plan.status = approved
  • Tracking health = green on GA4
  • Platform accounts provisioned and API-authenticated
  • Feed critical errors = 0 (if shopping/catalog)
  • Required human launch approval (if policy enabled)

Inputs

  • Approved MediaPlan payload
  • Creative asset IDs (from asset library)
  • Platform account map from onboarding

Outputs

  • Platform campaign IDs stored in execution_manifest
  • Event: campaign.live or campaign.scheduled
  • Audit log entries per mutation

Execution flow

Tenant RegistryMeta APIGoogle Ads APIExecutionServiceOrchestratorTenant RegistryMeta APIGoogle Ads APIExecutionServiceOrchestratorapply(plan_v3)resolve account IDsmutate campaignsmutate campaignsstore external IDscampaign.live

Platform order (execution)

Execute in parallel where possible; recommended dependency:

  1. Google Ads (often primary conversion path)
  2. Meta
  3. TikTok
  4. DV360 (IO structure may take longer)

URL tracking (every mutate)

Before campaign.live, per UTM & attribution spec:

Platform Action
Google Ads Auto-tagging on; no utm_*; CRM SKU → kcid/kpv custom params only
Meta / TikTok utm_* macros; system-inject if macro unavailable
QC Google: forbid utm_; Social: utm_campaign = platform ID
Manifest platform_campaign_id, tracking_mode on execution_manifest

Idempotency

  • Each operation keyed by (tenant_id, plan_version, platform, logical_campaign_key)
  • Re-run of same plan version does not duplicate campaigns
  • Updates apply diff against stored manifest

Naming convention

kobi_{tenant}_{platform}_{objective}_{plan_version}

Rollback

  • execution.rollback(plan_version) pauses or removes campaigns created under that version
  • Does not delete historical audit records

Human touchpoints

  • First launch per tenant (configurable)
  • Policy disapproval during build
  • Manual creative upload if asset missing

Error handling

Error Action
Partial platform failure Roll back successful platform if atomic launch required; or mark partial with alert
Budget rejected Check plan vs platform limits; if payer issue → PRE-* agency master (not per-client billing)
Tracking red Block launch

SLA

  • Execution after approval: < 4 hours automated
  • Partial failures escalated within 1 hour