← TODAY OS AD OPS

APPROVAL INBOX

Inbox

22 PROPOSED · 0 APPROVED · EVERY CHANGE IS HUMAN-GATED BY THE AUTONOMY LADDER

Search — Lead Gen

Google Ads AUTONOMY: APPROVE 8 PROPOSED
HIGH RISK PAUSE RED FLAG gads-spend-zero-conversions

Pause "Home Warranty — Search — Phrase — TX/FL" — 21% of spend, zero conversions

"Home Warranty — Search — Phrase — TX/FL" spent $6,180 (21% of the account's $28,820) over 30 days with 0 conversions from 2,060 clicks. That is bleeding budget — pause and diagnose before it spends more.

TARGET  campaign · c-g2  · Stops ~$6,262.40/mo of unconverting spend

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-spend-zero-conversions",
  "target_external_id": "c-g2",
  "action": "pause_campaign",
  "spend_share": 0.214,
  "cost_cents_window": 618000,
  "waste_cents_monthly": 626240
}
MEDIUM RISK BUDGET CHANGE RED FLAG gads-budget-limited-converting

Raise budget on "Medicare Advantage — Search — Broad — US" — budget-limited while converting

"Medicare Advantage — Search — Broad — US" is flagged limited-by-budget while producing 402 conversions at $31.19 CPA over 30 days. A capped campaign that converts is leaving profitable volume unclaimed — raise the $250/daily budget or reallocate from an underperformer.

TARGET  campaign · c-g1  · Unlocks conversion volume at the current CPA

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-budget-limited-converting",
  "target_external_id": "c-g1",
  "action": "increase_budget",
  "current_budget_cents": 25000,
  "period": "daily",
  "observed_cpa_cents": 3119
}
MEDIUM RISK NEW CREATIVE RED FLAG gads-adgroup-single-ad

Only 1 active ad in "Home Warranty Quotes"

"Home Warranty Quotes" runs a single active ad — no A/B signal, nothing for the delivery system to rotate, and the ad group goes dark if that one ad is disapproved. Doctrine floor is 2–3+ actives.

TARGET  ad_group · ag-g2a

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-adgroup-single-ad",
  "target_external_id": "ag-g2a",
  "action": "add_creative_variants",
  "enabled_ad_count": 1
}
MEDIUM RISK STRUCTURE RED FLAG gads-low-quality-score-spend

Quality Score 2 on spending keyword "home warranty companies"

"home warranty companies" carries QS 2/10 while "Home Warranty — Search — Phrase — TX/FL" spent $6,180 this window — it overpays on every click and signals an ad/landing-page/ad-group mismatch. Fix the structure, not the bid.

TARGET  keyword · home warranty companies

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-low-quality-score-spend",
  "target_external_id": "home warranty companies",
  "action": "restructure_ad_group",
  "quality_score": 2,
  "match_type": "phrase"
}
MEDIUM RISK BID CHANGE RED FLAG gads-premature-smart-bidding

"Auto Insurance — Search — Exact — Brand+Generic" runs target_cpa on 8 conversions

"Auto Insurance — Search — Exact — Brand+Generic" is on target_cpa with only 8 conversions in 30 days — target-based bidding needs ~15–30/30d to stabilize. Below that it optimizes on noise and starves delivery. Step down to a volume-based strategy until it earns the target.

TARGET  campaign · c-g3

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-premature-smart-bidding",
  "target_external_id": "c-g3",
  "action": "change_bid_strategy",
  "from": "target_cpa",
  "observed_conversions": 8,
  "required_conversions": 15
}
MEDIUM RISK STRUCTURE LLM

Restructure Home Warranty Quotes ad group around the QS-2 keyword

Keyword 'home warranty companies' (QS=2) accumulated $2,140 in spend — doctrine states spending keywords at QS≤3 overpay on every click and signal an ad-group/landing-page mismatch that must be fixed structurally, not bid-adjusted.

TARGET  ad_group · ag-g2a  · Improves QS and lowers CPCs on reactivation

PROPOSED CHANGE (JSON)
{
  "action": "restructure_ad_group",
  "ad_group_external_id": "ag-g2a",
  "keyword": "home warranty companies"
}
MEDIUM RISK STRUCTURE LLM

Split brand and generic auto insurance terms into separate campaigns

c-g3 is explicitly named 'Brand+Generic' and mixes both in one ad group/campaign; doctrine mandates always separating brand from non-brand so cheap brand conversions don't flatter blended non-brand performance and margin visibility on generic terms is preserved.

TARGET  campaign · c-g3  · Clarifies true non-brand CPA/margin and prevents brand traffic from masking generic underperformance

PROPOSED CHANGE (JSON)
{
  "action": "split_campaign_by_brand_intent",
  "campaign_external_id": "c-g3"
}
LOW RISK PAUSE RED FLAG gads-zero-impression-keyword

Prune "best home warranty texas" — zero impressions in 30 days

Keyword "best home warranty texas" (exact) in "Home Warranty Quotes" served 0 impressions over 30 days. Dead keywords add management surface and mask the real query mix — prune or restructure.

TARGET  keyword · best home warranty texas

PROPOSED CHANGE (JSON)
{
  "rule_id": "gads-zero-impression-keyword",
  "target_external_id": "best home warranty texas",
  "action": "prune_keyword",
  "match_type": "exact"
}

Prospecting + Retargeting

Meta Ads AUTONOMY: AUTO 8 PROPOSED
HIGH RISK NEW CREATIVE RED FLAG meta-disapproved-ad

Disapproved ad in "Broad — Advantage+ Placements" — replace or appeal

Ad ad-m1a-4 ("Are YOU Overpaying For Home Repairs?") is policy-disapproved inside the enabled campaign "Prospecting — Home Services — Broad — US". Beyond the lost delivery, repeated policy flags in lead-gen verticals accumulate toward account-level penalties. Replace or appeal immediately.

TARGET  ad · ad-m1a-4

PROPOSED CHANGE (JSON)
{
  "rule_id": "meta-disapproved-ad",
  "target_external_id": "ad-m1a-4",
  "action": "replace_disapproved_ad",
  "policy_status": "disapproved"
}
HIGH RISK NEW CREATIVE RED FLAG meta-high-frequency

Frequency 6.8 on "Retargeting — Site Visitors 30d" — audience burn

"Retargeting — Site Visitors 30d" is averaging frequency 6.8 over 30 days (doctrine ceiling: 4). The audience is being burned — CTR sinks, CPM rises, negative feedback climbs. Rotate fresh concepts or widen the audience.

TARGET  campaign · c-m2

PROPOSED CHANGE (JSON)
{
  "rule_id": "meta-high-frequency",
  "target_external_id": "c-m2",
  "action": "refresh_creative",
  "frequency": 6.8
}
HIGH RISK PAUSE RED FLAG meta-spend-zero-conversions

Pause "Prospecting — Medicare — Interest Stack (legacy)" — 22% of spend, zero conversions

"Prospecting — Medicare — Interest Stack (legacy)" spent $6,400 (22% of the account's $29,420) over 30 days with 0 conversions from 5,300 clicks. That is bleeding budget — pause and diagnose before it spends more.

TARGET  campaign · c-m3  · Stops ~$6,485.33/mo of unconverting spend

PROPOSED CHANGE (JSON)
{
  "rule_id": "meta-spend-zero-conversions",
  "target_external_id": "c-m3",
  "action": "pause_campaign",
  "spend_share": 0.218,
  "cost_cents_window": 640000,
  "waste_cents_monthly": 648533
}
MEDIUM RISK NEW CREATIVE RED FLAG meta-stale-creative

Creative ad-m1a-2 is 95 days old — past the 60-day fatigue line

Ad ad-m1a-2 ("Homeowners: This Gutter Upgrade Pays For Itself") in "Broad — Advantage+ Placements" has been live 95 days while "Prospecting — Home Services — Broad — US" spent $18,900 this window. Doctrine presumes fatigue past 60 days on this channel — a successor should already be in flight.

TARGET  ad · ad-m1a-2

PROPOSED CHANGE (JSON)
{
  "rule_id": "meta-stale-creative",
  "target_external_id": "ad-m1a-2",
  "action": "refresh_creative",
  "age_days": 95,
  "threshold_days": 60
}
MEDIUM RISK NEW CREATIVE RED FLAG meta-low-ctr-high-impressions

CTR 0.66% on "Prospecting — Medicare — Interest Stack (legacy)" — below the 0.70% floor

"Prospecting — Medicare — Interest Stack (legacy)" is running 0.66% CTR on 800,000 impressions over 30 days — under the 0.70% doctrine floor for this channel. The creative is no longer earning attention; refresh before optimizing anything downstream of the click.

TARGET  campaign · c-m3

PROPOSED CHANGE (JSON)
{
  "rule_id": "meta-low-ctr-high-impressions",
  "target_external_id": "c-m3",
  "action": "refresh_creative",
  "ctr": 0.00662,
  "floor": 0.007,
  "impressions_window": 800000
}
MEDIUM RISK STRUCTURE LLM

Rebuild Medicare prospecting as broad + Advantage+ instead of interest stack

c-m3 targets 'Medicare + AARP + Retirement' interest stacks, contradicting the doctrine's modern default of broad targeting + Advantage+ placements where creative (not stacked interests) drives targeting; this likely explains its zero-conversion result versus c-m1's broad structure.

TARGET  campaign · c-m3  · Restores viable prospecting channel for Medicare vertical

PROPOSED CHANGE (JSON)
{
  "action": "rebuild_campaign_broad_advantage_plus",
  "notes": "Launch a new broad/Advantage+ prospecting campaign for Medicare vertical with fresh creative before reallocating budget"
}
MEDIUM RISK BUDGET CHANGE LLM

Reallocate freed budget from paused Medicare campaign into c-m1

c-m1 is converting well (610 conversions, healthy 2.1 frequency, 0.9% CTR) while c-m3's $120/day is being wasted; doctrine directs scaling converting campaigns ≤20%/day rather than leaving budget in a zero-conversion campaign.

TARGET  campaign · c-m1  · Redirects ~$120/day toward a proven converter

PROPOSED CHANGE (JSON)
{
  "action": "increase_budget",
  "amount_cents": 6000,
  "period": "daily",
  "max_daily_increase_pct": 20
}
LOW RISK NEW CREATIVE LLM

Expand retargeting creative pool to support high frequency

ag-m2a runs only 2 active ads at a 6.8 frequency; doctrine allows retargeting frequency of 6-8 only with a rotating creative pool and recommends 3-6 active ads per ad set for optimization signal.

TARGET  ad_group · ag-m2a  · Reduces fatigue risk on retargeting audience at elevated frequency

PROPOSED CHANGE (JSON)
{
  "action": "add_creative_variants",
  "target_count": 4
}

Spark Ads

TikTok Ads AUTONOMY: PROPOSE 6 PROPOSED
HIGH RISK PAUSE RED FLAG tt-spend-zero-conversions

Pause "Non-Spark — Insurance — Legacy Dark Ads" — 21% of spend, zero conversions

"Non-Spark — Insurance — Legacy Dark Ads" spent $3,600 (21% of the account's $17,250) over 30 days with 0 conversions from 6,600 clicks. That is bleeding budget — pause and diagnose before it spends more.

TARGET  campaign · c-k3  · Stops ~$3,648/mo of unconverting spend

PROPOSED CHANGE (JSON)
{
  "rule_id": "tt-spend-zero-conversions",
  "target_external_id": "c-k3",
  "action": "pause_campaign",
  "spend_share": 0.209,
  "cost_cents_window": 360000,
  "waste_cents_monthly": 364800
}
MEDIUM RISK NEW CREATIVE RED FLAG tt-stale-creative

Creative ad-k1a-2 is 48 days old — past the 30-day fatigue line

Ad ad-k1a-2 ("i asked 3 roofers the same question…") in "Spark — Creator Whitelist Pool" has been live 48 days while "Spark — Home Improvement Leads — Broad" spent $9,800 this window. Doctrine presumes fatigue past 30 days on this channel — a successor should already be in flight.

TARGET  ad · ad-k1a-2

PROPOSED CHANGE (JSON)
{
  "rule_id": "tt-stale-creative",
  "target_external_id": "ad-k1a-2",
  "action": "refresh_creative",
  "age_days": 48,
  "threshold_days": 30
}
MEDIUM RISK BID CHANGE RED FLAG tt-premature-cost-cap

"Spark — Solar Quiz — Cost Cap" runs cost_cap on 9 conversions

"Spark — Solar Quiz — Cost Cap" is on cost_cap with only 9 conversions in 30 days — target-based bidding needs ~15–30/30d to stabilize. Below that it optimizes on noise and starves delivery. Step down to a volume-based strategy until it earns the target.

TARGET  campaign · c-k2

PROPOSED CHANGE (JSON)
{
  "rule_id": "tt-premature-cost-cap",
  "target_external_id": "c-k2",
  "action": "change_bid_strategy",
  "from": "cost_cap",
  "observed_conversions": 9,
  "required_conversions": 15
}
MEDIUM RISK NEW CREATIVE RED FLAG tt-adgroup-single-ad

Only 1 active ad in "Dark Ads — Insurance"

"Dark Ads — Insurance" runs a single active ad — no A/B signal, nothing for the delivery system to rotate, and the ad group goes dark if that one ad is disapproved. Doctrine floor is 2–3+ actives.

TARGET  ad_group · ag-k3a

PROPOSED CHANGE (JSON)
{
  "rule_id": "tt-adgroup-single-ad",
  "target_external_id": "ag-k3a",
  "action": "add_creative_variants",
  "enabled_ad_count": 1
}
MEDIUM RISK STRUCTURE LLM

Retire the legacy dark-ads campaign into a Spark test cell

Non-Spark dark ads under-CTR whitelisted creator posts on this account (1.1% vs 0.41%). Fold the insurance vertical into the Spark pipeline as a new creator cell instead of maintaining a separate legacy structure.

TARGET  campaign · c-k3

PROPOSED CHANGE (JSON)
{
  "action": "migrate_to_spark",
  "campaign": "c-k3"
}
LOW RISK OTHER LLM

Contract 2 more whitelisted creators to sustain refresh velocity

The account ships ~2 new videos/week against a doctrine target of 3–5 per ad group. Fatigue is already visible (48-day-old asset still live). The bottleneck is creator supply, not media buying.

TARGET  account · tt-7218849302

PROPOSED CHANGE (JSON)
{
  "action": "expand_creator_whitelist",
  "target_creators": 5
}