Skip to content

PPC Agent (Profasee: Marko)

Adjusts bids daily using real margins, mines search terms, and kills wasted ad spend. Highest-value action agent after demand, and the data is already flowing.

Already built

  • scripts/pull_ad_spend.py pulls SP, SB, SD spend nightly into raw.ad_spend_daily.
  • agg.ad_spend_unified_daily and agg.ad_spend_unified_asin_daily give clean per-day, per-ASIN spend (API preferred over backfill sources; see Forecasting ยง2-3).
  • raw.search_query_performance (SQP) for search-term data.
  • agg.profit_daily for real per-day margin, so bids can be set against true contribution, not revenue.

Needs building

  • Read side (brief, do first): detect wasted spend (spend with no/low sales per ASIN or term over a trailing window), low-ACOS scaling opportunities, and search terms to harvest or negate. Pure analysis over existing tables.
  • Write side (action mode): Amazon Ads API bid/budget/keyword writes via lib_sticky.ads_api_request + get_ads_api_creds. This is real money movement, so it goes through guarded_action with spend caps and no-fly keyword lists.

Recommends (for the brief)

  • Kill waste: keyword/ASIN, spend with zero or negative-contribution sales over N days, dollars wasted.
  • Scale winners: terms/campaigns under target ACOS with headroom.
  • Harvest / negate: search terms from SQP to add as keywords or to negate.

Actions (action mode)

  • Adjust bids toward a target ACOS computed from real margin (agg.profit_daily).
  • Pause keywords/ASINs flagged as pure waste.
  • Pause ad spend on ASINs the Demand agent flags as stockout-risk (the headline cross-agent behavior).

Guardrails (critical, this one spends money)

  • Daily and per-action spend caps enforced in guarded_action.
  • Keyword/ASIN no-fly list (hero terms never touched without approval).
  • Before-state logged on every bid/budget change for rollback.
  • Starts observe, then approve-each, then autonomous within caps.