TACoS TargetℹSource: RE Campaigns TACoS Targets Google Sheet
—
Daily Budget Available
—
TACoS at Full Utilization
Yesterday's Actuals
—
Total Sales
—
Ad Sales
—
Ad Spend
—
TACoS
—
Budget Util.
Pending Suggestions
-
Pending
-
Critical (L1)
-
Growth (L2)
-
Bid changes
-
Budget changes
Loading suggestions...
Suggestions — Table
Showing 0 of 0 suggestions
View:
Suggestions — Table Compact
Showing 0 of 0 suggestions
Suggestions — Table Buckets
Showing 0 of 0 suggestions
Campaign Decisions
No run selected
Suggestions — Table Campaign
Showing 0 of 0
Suggestions — Spreadsheet
Showing 0 of 0
j/k move · a accept · c accept custom · r reject · x select · / search · Esc close drawer
No run selected
Click a run in the Runs tab to load its validation data here.
Agent Questions
Questions the agents wrote during their daily run. Answer one to teach the
agent — your answer is saved AND added to the knowledge base automatically.
Today's advertising events
Loading...
Add knowledge entry
📖 Category guide — what goes where?
Strategy
High-level direction and priorities
Q2 is our strongest season for dry fit — be more aggressive with bids May through June
We prioritize margin protection over volume growth
We're testing video ads on workout tops — don't touch those campaign budgets
Guardrail
Hard rules the agent must NEVER violate
Never increase bids on competitor brand terms
No single campaign should exceed $200/day budget without explicit approval
Never decrease bids on keywords that are in our top 5 organic ranking positions
Parameter
Specific numbers and thresholds
Target portfolio TACoS is 12%
ACOS ceiling for EXACT match keywords: 35%
Maximum bid change per suggestion: 20%
Playbook
How to think about situations — daily operational approaches
When a keyword has high ACOS but strong sales volume, check the search term report for irrelevant traffic before cutting the bid
Before increasing a campaign budget, check if there are low-performing keywords eating spend that should be paused instead
Always check if a keyword is a ranking keyword before suggesting a bid decrease — we sometimes pay a premium for organic rank
Keyword insight
Specific knowledge about individual keywords or themes
workout tops for women converts much better on mobile than desktop
The keyword 'shirts for women' is too generic — broad match picks up irrelevant traffic
v neck terms have higher CVR than crew neck terms in this portfolio
Market context
External factors the agent can't see in the data
Prime Day is July 15–16 — expect higher CPCs and budget accordingly
Competitor XYZ is running heavy promotions this week
New listing launched April 1 — data before that date is for the old listing
Lesson learned
Things discovered from past experience
We tried aggressive bidding on broad match generic shirt terms in Q1 — it bled $5K with no incremental sales
Lowering bids on auto campaigns below $0.30 kills discovery traffic
Budget increases over 25% at once trigger Amazon's learning period and waste spend for 2–3 days
Override the TACoS target per portfolio. When an override is active (no expiration OR expires_at ≥ today PT),
the agents (Strategist / Optimizer / Reviewer / Custom / Quick Analyst) use the override in place of the sheet
value when deriving target ACOS. Leave the Override column blank to use the system value. Leave
expiration blank for an indefinite override. To drop an override, clear the value and save.
Bulk assign:0 selected
Portfolio
Inventory
Rank SKU
Projection (yest)
Stance
System target
Override %
Expires (PT)
Effective
Note
Loading…
Override the per-portfolio ETA multiplier. The engine computes an
Initial ETA from TACoS target ÷ Ad-sales % L14, then
multiplies by this knob before applying match-type tolerance and
the campaign-level orders/day bonus. Set 1.00 for no change,
1.10 for +10% (more aggressive), 0.90 for −10%
(more conservative). Leave blank to clear the override.
Portfolio
Inventory
Rank SKU
Projection (yest)
Stance
TACoS Target
L14 Total Revenue
L14 Ad Sales
Ad Sales % (L14)
Initial ETA
Multiplier
Expires (PT)
Note
Effective ETA
Loading…
Read-only view: per-portfolio Effective ETA (after multiplier) broken out by match type.
Each cell = Effective ETA × match-type tolerance. The orders/day bonus is applied
per-campaign at run time on top of these values, so cells here represent the starting
ETA the engine uses for any keyword/target of that match type before the orders bonus.
Edit multipliers on the ETA Targets tab.
Portfolio
Effective ETA(initial × multiplier)
Autoeta × —
Broadeta × —
Phraseeta × —
Exacteta × —
Loading…
How the run modes differ. Each mode reads different signals and makes different kinds of moves. Pick the one that matches the question you're trying to answer:
"Are my campaigns running efficiently as a whole?" (Campaign Legacy) ·
"Are individual keywords priced right?" (Bids) ·
"Bids, but with an extra check?" (Bids + Review).
Quick Run – Campaign (Legacy)
quick_rules_campaignDefault
Looks at each campaign as a whole. Decides ONE bid direction and ONE budget direction per campaign,
then applies the bid decision to every keyword in the campaign with per-keyword safety guardrails.
Best for coordinated moves where bid and budget should respond together.
Best for: daily decisioning across portfolios. You want fast, coordinated moves on each campaign and you're OK with the bid being applied uniformly across all keywords (with guardrails).
Match type — sets the tolerance multiplier (auto 0.80 ··· exact 1.20)
Campaign orders/day (high-volume campaigns earn extra ACOS room)
Out-of-budget hours yesterday + first-OOB time
Yesterday's budget utilization
Last budget change date (cooldown gate)
Portfolio stance — derived from inventory + pace projection
Per-keyword last bid change date (cooldown gate)
IKWE / sacred-campaign protection
✗ Does NOT use directly
Per-keyword ACOS (decisions are at campaign grain — kw ACOS is rolled up but not read individually)
Inventory levels directly (only via stance)
Pace projections directly (only via stance)
Rank-SKU status
Per-keyword sweet-spot detection
Drift detection
Trend classifier sub-scenarios at the kw level
Guardrails
Anti-overcut guard — bid AND budget DECREASES are suppressed whenever ACOS L30 is at or below target ACOS × 1.10. The threshold is multiplicative, not additive — for a target of 28.8%, the cut-threshold is 28.8% × 1.10 = 31.68% (NOT 28.8% + 10pp = 38.8%). So a campaign with ACOS L30 anywhere up to 31.68% won't get cut, no matter what the trend looks like. Only campaigns running materially over target are eligible for cuts. Cutting at-or-below target risks starving a winner.
OOB gate (bid) — if the campaign capped out yesterday, bid increases get held regardless of whether the budget is also being raised. The reasoning: pushing bids and budgets up at the same moment puts too much pressure on a freshly-raised cap. Let the budget expansion play out first, then revisit bids next run.
Budget cooldown — universal 24h floor on any budget change. Same-direction cooldowns: 5/7/10 days for increases (light/moderate/strong), 3/5/7 days for decreases. Reversals (different direction) are allowed past the 24h floor.
DEFENSIVE caps — DEFENSIVE / CONSERVATIVE stance does NOT force any change. If the scenario is already deciding to move, the magnitude gets capped: max 5% bid increase, max 2.5% bid decrease, max 5% budget change (in either direction). Conservative means restrained, not aggressive backpedal — DEFENSIVE often just means inventory is uneven across variants, not that the portfolio is unsellable.
SCALE upgrade — SCALE stance promotes the bid step on sustained-good campaigns: instead of the default +5% bump, sustained-good in SCALE goes +10%.
Per-keyword same-day floor — never two bid changes on the same keyword in the same calendar day.
Per-keyword same-direction cooldown — if we cut a kw's bid 4 days ago and the campaign decision says cut again today, the cut is skipped on that kw. Reversals (different direction) are allowed.
IKWE protection — sacred Individual KW Exact campaigns get a max −5% bid decrease cap.
Bid clamps — every kw bid stays inside $0.02 – $3.00. Changes smaller than $0.02 are skipped.
Hold-band override transparency — when the trend classifier wanted to cut but the hold band blocked it, the suppressed scenario is recorded so you can see what would have happened.
Quick Run – Bids
quick_rulesStart Rules
Looks at each KEYWORD individually. Decides bid up / down / hold per kw based on its own ACOS history and trend.
No budget changes — that side is untouched. Best when you want fine-grained per-keyword tuning.
Best for: targeted bid optimization where each keyword's history matters more than the campaign average. Especially useful for portfolios with a mix of high- and low-performing keywords inside the same campaign.
How a decision flows
1. Read each keywordPer-kw ACOS L7/L14/L30, current bid, orders, clicks, days with data, last bid change.
Pace projections directly (only feeds urgency tier)
Rank-SKU status
Coordinated bid+budget logic (each kw is decided in isolation)
Guardrails
HOLD band — when ACOS L30 sits between kw target × 0.90 and kw target × 1.10 (multiplicative, not additive — for a 28.8% kw target the band runs 25.92% – 31.68%), decreases are suppressed. Cutting near target risks starving a winner.
Zero-sales-with-clicks — keywords with clicks but zero sales over L30 trigger an L1-urgent cut, bypassing the HOLD band (active money-loss).
Same-day floor — never two bid changes on the same kw in the same day.
Same-direction cooldown — light bands run ~3 days, moderate ~5, aggressive ~7. Lets the prior change settle before stacking.
Reversal allowed — different-direction prior change isn't blocked by cooldown (only by the 24h floor).
Sweet-spot revert — when a kw is being cut, the engine looks for a historically-profitable bid level and may revert toward the midpoint instead of cutting fresh.
Drift detection — kw drifted ≥ N% cumulative in either direction triggers special handling: pause-candidate for chronic decreases, pull-back for over-increased.
IKWE protection — IKWE keywords get max −5% bid decrease cap, and pause is forbidden.
OOB-yesterday gate (bid increases) — same logic as Campaign mode: bid+ blocked if budget isn't being raised, softened to +5% if it is.
Bid clamps — every bid stays inside $0.02 – $3.00. Changes smaller than $0.02 are skipped.
Quick Run – Bids + Review
quick_rules_reviewedStart Rules + Review
Same as Quick Run – Bids, but adds a Reviewer agent at the end. The Reviewer reads each suggestion, validates the math,
flags contradictions, and assigns final urgency / bucket / confidence before the dashboard sees it. Quality gate, not a redecide.
Best for: when you want every per-keyword suggestion second-checked for math errors, contradictions ("we're cutting and increasing the same kw on different days"), or stale signals before you start clicking Accept.
How it differs from Quick Run – Bids
1. Same as Bids modeAll five steps from the Bids mode run identically.
→
2. Reviewer agent reads each suggestionClaude managed agent loads the suggestion + its reasoning + the kw's recent history.
→
3. Math + contradiction checksVerifies the % change and direction match the cited ACOS. Spots contradictions with recent history.
→
4. Final urgency + confidenceL1–L4 urgency, bucket, confidence score. May downgrade urgency or flag for manual review.
→
5. Write to dashboardSuggestion lands with reviewer metadata attached.
What the Reviewer does
✓ Reviewer can
Validate the proposed bid math (does the % match the ACOS-vs-ETA delta?)
Flag contradictions ("we cut this kw 2 days ago and now we want to cut again — is that right?")
Downgrade urgency (L1 → L3 if the signal is weak)
Assign a final bucket (urgent_critical, urgent_growth, optimization, monitor)
Attach a confidence score (high / medium / low)
Add notes that show on the suggestion card
✗ Reviewer cannot
Change the proposed bid value (math comes from the rules engine)
Add new suggestions (only reviews ones the rules engine emitted)
Override engine guardrails (HOLD band, IKWE cap, cooldowns are final)
Reach the Amazon Ads API (read-only — Eddie still clicks Accept to push)
Trade-offs
Slower — adds the Reviewer pass on top of the rules pass. Expect roughly 2× the wall-clock time of plain Quick Run – Bids.
More expensive — Claude managed-agent calls cost real money per run.
Better quality — math errors and contradictions get caught before you act on them. Confidence scores let you triage which suggestions to read carefully vs which to bulk-approve.
Same guardrails — every safety net listed under Quick Run – Bids still applies. The Reviewer is additive, not replacing.
—
Loading…
Portfolios
⏳ Loading portfolios…
Three engines operate at the keyword/target level across each
selected portfolio (no Strategist, no per-campaign Optimizer).
Emits bid changes only (no budget changes). Singleton:
only one Complete or Quick* run can be in progress at a time.
Rules engine
Deterministic Python — no LLM. Fast iteration / testing / baseline. ~30–60 sec per portfolio.
Rules + Reviewer
Rules engine then Reviewer agent QA. Safety net for daily routine. ~3–8 min per portfolio.
Agent (Keyword/Target Analyst)
Full LLM pass + Reviewer. Deepest analysis with narrative reasoning. ~15–25 min per portfolio.
Decisions made on campaign-level performance, applied to all targets in
the campaign. Each campaign gets a coordinated bid + budget decision
(separable Accept). Both bids and budgets can move up, down, hold, or pause.
Slated for retirement (hence "Legacy") but planned to be the primary mode
for now.
First run — please review carefully. The engine is brand-new
(quick_rules_engine_campaign.py). Pick a small portfolio
for the first invocation. After it lands, inspect a campaign decision and
its child keyword suggestions before mass-accepting.
Full production pipeline (Strategist → Optimizer → Reviewer). By default,
runs across all active portfolios (those with spend in the last 7 days).
Uncheck any you want to skip in the portfolio list above.
Only ONE complete run can be in progress at a time. Typical duration: 45–90 min.
Runs the same data path that Quick + Complete use (rollup refresh,
Context Builder briefing, OOB enrichment) but skips every agent.
Writes one synthetic suggestion per keyword with
proposed_value = current_value so every dashboard view
lights up as if a real run happened. Accept/reject is a no-op.
What to use it for: spot-check the L7 / L14 / L30 numbers
against Seller Central before firing a real run.
Typical duration: 2–5 min for 1–3 portfolios.
Ask the Custom Analyst anything about your ads. The agent will restate
your question for confirmation before executing. Examples:
"show me targets with very poor ROAS" · "where should I cut bids to hit
20% TACoS next month" · "which portfolios peaked last month and haven't recovered".
Portfolio selection above is treated as an optional filter — leave it
empty to search across everything.
Recent Runs
⌛ Loading recent runs…
🔒 Enter PIN to push to Amazon
This unlocks pushes for the rest of your browser session (8 hours).