Imported campaigns bidding

Most VibeAds users have existing Google Ads campaigns when they sign up. Those campaigns can be at any rung of the bidding ladder, set up correctly or incorrectly, mature or fresh. The agent picks up where you left off.

The problem

VibeAds-published campaigns always start at Stage 1 (Manual CPC) and climb. The promotion rules assume that history. Imported campaigns can arrive at:

  • Stage 1 (Manual CPC) with 6 months of data
  • Stage 2 (Max Conversions) that you set up last week
  • Stage 3a (Max Conversion Value) that has been running for 2 years
  • Stage 3b (Target ROAS 4.0) you set up but never tuned
  • Off-ladder Portfolio bidding

Naively firing the ladder rules on these would either skip unlocks (because data looks "new" from VibeAds' perspective) or auto-promote into a misconfigured state. We had to detect, audit, and approve before management starts.

Stage detection

At import time, VibeAds pulls campaign.bidding_strategy_type, campaign.target_roas.target_roas, and campaign.start_date from Google Ads via GAQL. A pure classifier maps the strategy + target to one of 6 stages:

  • stage_0_unknown
  • stage_1_manual
  • stage_2_volume
  • stage_3a_value
  • stage_3b_target_roas
  • stage_offladder

The detected stage is written to campaigns.agent_managed_stage and an initial row goes into campaign_stage_history withtrigger='imported'.

Configuration audit

After classification, the agent runs a per-stage health check against the campaign's actual data:

  • correctly_configured. Stage matches the data. Stage 2 with steady conversions, Stage 3b with stable observed ROAS, etc. Agent is ready to manage.
  • data_starved. Stage is too aggressive for current volume. Stage 3a with under 20 paid invoices/30d. Stage 3b that has not had conversions in 21 days. Suggest watching, do not change.
  • misconfigured. Stage is wrong for the data. Stage 3b without a Revenue conversion action (Target ROAS cannot optimize value with no value signal). Surfaces fix recommendations.
  • unsupported. Off-ladder strategy. Agent acknowledges, stops.

Audit signals include: 30-day conversion count, paid invoice count, days at current stage, days at top of ladder, primary action count, whether revenue action exists, observed ROAS (Stage 3 only), CPA vs category benchmark.

Days at current stage uses the EARLIEST of agent_managed_since, google_ads_started_at, bidding_strategy_changed_at, and created_at. For imported campaigns this means a 6-month-old Stage 1 campaign is immediately recognized as mature instead of being treated as "new" for 14 days post-import.

Approval gates

On Free and Pro, the audit produces a recommendation card. You click Approve to mark the campaign as agent-managed. Ladder rules stay disabled until then.

On Max with hands-free on, the audit auto-approves immediately when health is correctly_configured, data_starved, or unsupported. misconfigured still requires manual approval because the agent thinks the campaign is set up wrong, and you should see the explanation before changes start firing.

Auto-approval is observable: a notification fires ("Agent is now managing this campaign at Stage X") and the change appears on the Bidding Lifecycle panel of the campaign detail page.

External change cooldown

If you change a campaign's bidding strategy directly in Google Ads UI, VibeAds detects the change within 6 hours via the metrics-sync cron. The change is logged in campaign_stage_history with trigger='external_change'.

A 7-day cooldown kicks in. During the cooldown, no ladder rules fire on this campaign even if it qualifies. The rationale: you just made a deliberate choice, and the agent should not second-guess you immediately. After 7 days, the agent resumes managing from the new stage.

Lifecycle timeline

Every campaign detail page has a Bidding Lifecycle panel that shows:

  • Current stage with color-coded badge
  • Audit health pill (correctly_configured / data_starved / misconfigured / unsupported)
  • Agent managed since timestamp (or "Awaiting approval")
  • External change cooldown banner if active (shows when it expires)
  • Audit issues list with severity icons + fix hints
  • Recent transitions timeline (last 10 events)
  • Last audited timestamp