Set a Target ACoS Across a Whole Portfolio

Jacob

Jacob

Last updated on Aug 27, 2026

One ACoS target across a whole portfolio is the most common bad idea in Amazon advertising. Products have different margins, different lifecycles and different jobs, and a single number holds all of them to the standard of the average one.

This is how to set targets that mean something — and then let rules hold them without you.

Time: half a day to set up, then it maintains itself.

Prefer to watch? Eighty-six seconds on grouping by job, and letting the formula size the correction.

Step 1 — Work out your break-even, once

Before any target, you need the ceiling:

Break-even ACoS = your contribution margin before advertising

If a product sells for $30 with $19 of product, fee and shipping cost, you have $11 — roughly 37%. At 37% ACoS that product makes nothing. Above it you are buying revenue with your own money.

Everything else in this playbook is expressed as a position relative to that number, per product. Do this per product family, not per SKU, unless your margins genuinely differ by variant.

Step 2 — Group by the job, not the product

Automations → Rule Groups.

Rule groups, with the campaign count on each

A portfolio target only works if the portfolio is divided by what you want each part to do. Four groups cover most accounts:

Group Job Target, relative to break-even
Defend branded terms, hold what is yours far below — these convert cheaply
Harvest proven exact terms, make money comfortably below
Grow generic terms, win new customers at or slightly below
Launch new products, buy rank and reviews above — deliberately

Launch above break-even is not a mistake. You are buying velocity and reviews for a period you have decided in advance, and you should decide the end date at the same time as the target.

Gateway products belong in their own group too, with a deliberately looser target — you are buying a customer, not a transaction. See Protect the Products That Bring You New Customers.

The campaign count on each rule group is your blast radius. Check it before attaching a rule.

Step 3 — Set the target where the rules can read it

Automations → the rule → Cadence & Guardrails.

Target ACOS, the change cap and bid bounds

Target ACOS is a field on the rule, and the Set bid to hit Target ACOS action reads it:

new bid = current bid × (Target ACOS ÷ actual ACOS)

This is why goal-seeking beats a fixed percentage nudge across a portfolio. A target at 100% ACoS against a 50% goal halves; one at 55% barely moves. The size of the correction matches the size of the problem, which is exactly what you want when one rule is managing hundreds of targets at once.

The panel's own guidance is worth heeding: stay under your pre-ad margin for profit; go above it only while launching.

Step 4 — Bound what the rule may do

Same panel, Bounds & Change Cap:

Max change per run — 10–15% for a daily rule. The formula can want a large correction; this stops it taking one in a single step.

Min bid and Max bid — absolute floors and ceilings. These are the backstop against a bad calculation on thin data. A target with two clicks and a freak conversion will produce an enormous suggested bid, and the cap is what stops it being applied.

Look-back 14 days, ignore the freshest day. Fourteen days holds two complete weekly cycles; ignoring the newest day keeps the rule from reacting to sales Amazon has not attributed yet. See Look-back Windows and Adjustment Frequency.

Step 5 — Build the rule as a branch list

One rule per group, and the branch order does the work. A shape that holds up:

# When Then
IF 1 Clicks > 50 and Orders = 0 Pause targeting
ELSE IF 2 Spend ≥ $50 and Orders = 0 Pause targeting
ELSE IF 3 Orders > 1 Set bid to hit Target ACoS
ELSE IF 4 Clicks < 50 or Orders ≤ 1 Increase bid by 15%

Read it as a decision list: kill what has proved it does not work, steer what has proved it does, and give everything else room because it has not been tested yet.

Branch order is the logic — branches are walked in order and only the first match fires. The catch-all belongs last, or it swallows the entities the specific branches were meant to catch. See Building a Rule from Scratch.

Step 6 — Dry-run every group before enabling

Dry-run preview computes every change and applies none, and it shows which branch claimed each target.

Two things to check per group:

Is the changed count plausible? Half of everything, every day, means the thresholds are too loose. Zero means the rule is decoration.

Is the branch distribution what you expected? If every row says branch 4, branches 1–3 are unreachable and the order is wrong.

See Dry-Run Preview.

Step 7 — Review monthly, not daily

Once running, the review is short:

Changed count per rule. A rule changing nothing is not protecting you.

Actual ACoS per group against its target. Consistently above means the target is unreachable at your conversion rate, not that the rule is failing.

Launch groups against their end date. A launch target that nobody switched off is just an expensive group.

What not to do

Do not set one target for everything. That is the problem this playbook exists to fix.

Do not set a target above break-even outside a launch, and write the end date down when you set it.

Do not run daily on a 30-day window with a large cap. Every run re-reacts to the same month and the changes compound on evidence that has not moved.

Do not let a pause rule touch gateway products or launches. Put them in groups your pause rules do not run on.

Do not change target and cadence in the same week. Move one, watch, then the other.

Related