*Source: Marketplace Ad Pros — canonical version at https://marketplaceadpros.com/guides/amazon-ppc-wasted-ad-spend-audit/*

# How to find wasted ad spend in an Amazon ad account: a 5-check audit

*Last updated: September 2, 2026*

*Verified as of 2026-09-02.*

Three different complaints get filed under "wasted ad spend," and only one of them is waste.

**"My ACoS is high."** An efficiency question. A 45% ACoS is a disaster on a 20% margin product and a
bargain on an 80% margin one. Nothing is being wasted; the return is lower than you wanted. The fix is
bids, placements and targeting mix — tuning, not auditing.

**"I'm losing money."** A margin question, and usually not answerable inside the Ads Console at all,
because it doesn't know your landed cost, FBA fees, returns rate or promotions. Plenty of accounts with
respectable ACoS lose money on ads, and plenty with alarming ACoS don't.

**"I'm paying for clicks that can never convert."** That's waste, and the only one of the three an audit
finds. Money spent where there was no path to an order: a query about a product you don't sell, a token
matching a hundred irrelevant searches, a placement multiplier buying expensive clicks that convert worse
than average, an ad running hard on a SKU that's out of stock in nine days.

The first two can't be fixed by finding things to switch off. This page covers only the third, and it's
**five checks, not six** — the sixth candidate we looked at couldn't be grounded in anything we'd defend.
Every threshold below is one we use, and where a number comes from our own operating experience rather
than Amazon documentation, it says so.

## Before you start

**Reports lag 1–3 days.** End every window three days short of today. The most recent days are partial,
which makes brand-new search terms look far worse than they are.

**Attribution is 14 days.** A click today can produce an order twelve days from now — the main reason not
to negate on one day's data. A term showing zero `purchases14d` this morning may be mid-window. On
borderline cases, re-run before you act.

**Never combine marketplaces.** One at a time. Search behaviour, competitor density, language and price
points differ, so a term that's obviously junk in the US can be a top converter in the UK. Inventory is
held per marketplace, so days-of-supply only means something within one. Costs arrive in each
marketplace's own currency, so a blended sum isn't a number. We enforce this independently in three
separate internal analyses.

**Calibration.** A waste total needs a denominator. From running this across customer accounts: under
**2% of spend** is a healthy account, **3–4% is typical**, and **above 5%** there's real money on the
table. That's our own benchmark, not an Amazon-published figure — a sanity check, not a law.

## Check 1 — the budget-cap trap

Lead with this one, because it's the check most likely to reverse a decision you were about to make.

**A campaign sitting at roughly 100% time-in-budget never actually ran out of budget.** It isn't
constrained by money; it's constrained by bids or targeting. It isn't winning enough auctions to spend
what it already has. **Raising the daily budget does nothing at all** — and it's an easy mistake, because
it's the fix that looks obvious from a dashboard.

A genuinely capped campaign behaves differently: it spends its full daily budget and then stops
delivering partway through the day. That one does want more money. Both surface under Amazon's own
**Out-of-Budget filter** — a good place to start the list and a bad place to end it. Pull the flagged
campaigns, then split them by whether spend actually reached the daily budget:

- **Reached the cap, stopped delivering** → real constraint. Consider more budget, but confirm the
  product can carry the traffic first: incremental spend buys the *next* click, which usually costs more
  than your average.
- **Near 100% time-in-budget but never spent the budget** → bid or targeting ceiling. Leave the budget
  alone; work on bids, match types and targeting.

Pair this with the allocation rule we use: **the top 20% of campaigns should never cap out.** If your
best campaigns cap while the bottom 80% run free, that's not waste in the strict sense — but it's money
in the wrong place, and worth more than most of the negatives you'll find today. Re-allocate from the
bottom 80%, monthly.

> One honest gap: we keep a separate internal checklist of readiness gates to run before funding a
> genuinely capped campaign. Its specific numbers aren't published here because we couldn't verify them
> at the time of writing, and we'd rather leave a gap than invent a gate.

## Check 2 — zero-order clicks

From the Sponsored Products search term report, aggregate at **customer search term level** — summing
cost, clicks, impressions, `sales14d` and `purchases14d` across every campaign, keyword and match type
that matched it. Per-campaign granularity understates the damage, because the same bad query is usually
being bought three times over.

Then apply two thresholds. They come from two different places and answer two different questions:

| Threshold | Meaning | Action |
|---|---|---|
| **≥5 clicks, 0 `purchases14d`** | Real engagement, not a one-click fluke. Worth a human look. | Review |
| **≥20 clicks, 0 orders** | Past arguing about. | Negative exact |

Presenting both is more honest than picking one. The 5-click line is a *noise floor* — the term has
enough data to be worth an opinion. The 20-click line is a *decision rule* — it's had a fair trial and
lost. Between them you're judging the query, the product and the price.

Two things to look at while you're in there. **Your own brand and product names with zero conversions:**
a query that is literally your product name taking 38 clicks and no orders isn't a keyword problem, it's
a listing, price, review or stock problem on that ASIN, and negating it treats the symptom. **How
concentrated the waste is:** if your worst 30 terms are under half the total, the bleed is diffuse and
individual negatives won't move much. That's check 3's problem.

**Where you apply the negative matters.** Negatives exist at two scopes — ad group and campaign. A term
wrong for one ad group but right for another belongs at ad-group scope; a term wrong for the whole
product line belongs at campaign scope. Getting this backwards is how people negate their best converter.

## Check 3 — shared-token bleed

This check exists precisely because of the previous one's floor.

The 5-click minimum **excludes every term with 1–4 clicks.** That's correct for judging one term and
badly wrong for judging an account. A token bleeding two clicks at a time across fifty query variations
spends real money and is invisible to check 2 by construction — no single row clears the bar, and the
total never appears anywhere.

**The method:** tokenize every search term into 1-, 2- and 3-word n-grams, pivot by token summing clicks,
cost, `sales14d` and `purchases14d` across every term containing it, and judge the *token*, not the term.
A word appearing in ninety queries with sixty clicks and no orders is a confident decision, even though
not one of those queries would have cleared a 5-click floor.

**The fix is one negative, not fifty.** Negate the shared token rather than each term it appeared in.
This is also why healthy accounts carry **3–5× more negatives than positives** — that ratio is a
byproduct of doing this regularly, not a target to hit by bulk-uploading a list you haven't read.

Before trusting a token, hold it to a noise floor: **≥100 impressions and ≥3 clicks** (smaller accounts,
≥30 and ≥2). Below that you're reading randomness. The full mechanics — tokenization formulas, pivot
layout, the SP-versus-SB column differences — are their own procedure:
[how to run an n-gram analysis on your Amazon search term report](/guides/amazon-search-term-report-n-gram-analysis/).

## Check 4 — ads running on ASINs about to stock out

Here's the honest statement of the problem, and the reason this check gets skipped almost everywhere:
**Amazon provides no native join between ad spend and inventory health.** Ad performance lives in one
console, FBA inventory in another, and the only key they share is ASIN or SKU. There is no report, no
filter and no view that puts spend next to days-of-supply. You build that join yourself, every time.

**The threshold we use:** flag any item where **days of supply is below (lead time + safety stock)** and
**ad spend is above $50/week**. Both conditions matter — low stock on something you aren't advertising is
a replenishment problem, and heavy spend on something well stocked is fine.

**The join is the fragile part.** XLOOKUP from advertised ASIN or SKU against the inventory export, and
expect it to break where the catalog is messy: **variations** (the parent gets the attention, the
children hold the stock), **multi-packs** (one ad, several units consumed per order), and **bundles**
(availability depends on components with their own stock levels). Each turns a one-to-one lookup into a
one-to-many, and a lookup that silently returns the first match under-reports risk. Check your unmatched
rows before trusting the output — they're usually the interesting ones.

This is money you don't get back. Spend on a SKU that stocks out doesn't just fail to convert, it
surrenders the rank you paid to build, and you re-buy that rank at a higher price when stock returns.

## Check 5 — top-of-search placement economics

**There's no threshold for this one, and anyone who gives you one is making it up.** It's a comparison
you compute, not a rule you apply.

In the campaign placement report each row is one campaign, one placement, one day.
`placementClassification` takes values including `Top of Search on-Amazon`, `Detail Page on-Amazon`,
`Other on-Amazon`, `Rest of Search`, `Rest of Browse` and `Off Amazon`. Group by the column rather than
filtering to a list you typed out — a campaign can show any subset, and a hard-coded list silently drops
spend.

**What you compute:** per campaign, return on ad spend at Top of Search against the campaign's blended
return across all placements.

- **Top-of-search ROAS materially *above* blended** → the placement earns its multiplier. Possibly it
  should be higher.
- **Top-of-search ROAS materially *below* blended** → the multiplier is buying the most expensive
  inventory in the auction and converting it worse than average. That gap, times top-of-search spend, is
  your waste figure for this check.

"Materially" is doing work there, deliberately. The right gap depends on margin, launch stage and intent
— a campaign taking top-of-search to establish rank on a hero keyword is *choosing* a worse ROAS, and
that's strategy, not waste.

**One export gotcha:** `topOfSearchImpressionShare` is **not on the search term report.** It lives on the
keyword report (and the Sponsored Brands keyword and campaign reports), which is why this audit needs a
keyword export as well as a search-term one. It's a percentage from 0 to 100, not a 0–1 ratio, and
rolling it up across keywords must be impression-weighted — a plain average of impression shares is not
an impression share.

## Doing it by hand

Four exports, one join Amazon won't give you, four pivots, then apply and verify.

**A note on navigation.** We're confident about report names, column names and thresholds — we work with
them daily. We're deliberately *not* publishing a click path through the Ads Console, because Amazon
renames and re-nests those menus without notice, and a page that's confidently wrong about a menu label
is worse than one that doesn't guess. Navigate by report name.

### 1. Pull the four exports (20–30 min)

| Export | From | Why |
|---|---|---|
| Sponsored Products search term report | Ads Console | Checks 2 and 3 |
| Sponsored Products keyword report | Ads Console | Check 5 — carries `topOfSearchImpressionShare` |
| Campaign placement report | Ads Console | Check 5 — `placementClassification` |
| FBA inventory | **Seller Central — a different console** | Check 4 |

Window: last 30 days, ending three days ago. One marketplace. If the window exceeds the console's
per-export cap you'll stitch several pulls — dedupe on the natural key before aggregating, or you'll
double-count the overlap.

### 2. Run check 1 from campaign data (10 min)

No export needed. Pull the Out-of-Budget list and split it by whether spend actually reached the daily
budget. Two piles: *fund it* and *leave the budget alone*.

### 3. Build the pivots (30–45 min)

- Search term report → pivot by `searchTerm` summing clicks, cost, `purchases14d`, `sales14d`; filter to
  `purchases14d = 0`, sort by cost descending, apply both thresholds. That's check 2.
- Same source → tokenize into n-grams in helper columns, pivot by token. That's check 3.
- Placement report → pivot by campaign with placement as columns; compute ROAS per placement and blended.
  That's check 5.

### 4. Build the inventory join by hand (20–40 min, the fiddly one)

XLOOKUP the FBA inventory export against advertised ASIN or SKU. Compute days of supply, compare against
lead time plus safety stock, filter to items above $50/week in ad spend. **Inspect your `#N/A` rows** —
that's where the variants, multi-packs and bundles hide, and they're disproportionately likely to be the
ones at risk.

### 5. Apply the fixes (20–40 min)

Negatives at the correct scope, placement multipliers adjusted, bids pulled or ads paused on
stock-constrained ASINs, budget re-allocated from the bottom 80%. Work from the pivots, not from memory.

### 6. Re-download and confirm it took (10 min)

This step gets skipped and shouldn't. Pull the affected reports again and verify each change landed. A
change that silently failed looks exactly like a change that didn't work.

**Honest estimate: 2–4 hours for a first pass**, most of it building the spreadsheet and fighting the
inventory join; **45–90 minutes per marketplace on repeat.** Weekly for checks 1–3, monthly for all five.

## What breaks at scale

One brand, one marketplace is entirely doable — and worth doing by hand at least twice before you
automate it. Then it multiplies, and not linearly. **Per marketplace:** because you can't combine them, four
marketplaces is four full audits, so four exports becomes sixteen. **Per brand:** twenty profiles across
four report types is eighty exports before any analysis begins. **The inventory join doesn't amortize:**
the pivots copy forward, but the ASIN/SKU join breaks differently every time the catalog changes.

The cadence is the killer. Checks 1–3 want to be weekly, because waste compounds daily and a term left
running a month has already spent the money you were trying to save. A weekly job across four
marketplaces isn't an audit any more, it's a standing part-time role — which is why, in our experience,
this stops happening around month two. Not because it wasn't valuable; the first pass usually pays for
itself. Because it never gets to the top of the list again on a Tuesday.

## Doing it with AI

Every check above is mechanical. Thresholds, joins, pivots and comparisons: no judgement in the
tokenizing or the XLOOKUP, only in what you do with the result. That's the shape of work worth handing to
a model. An assistant can run this audit if three things are true — a test you can apply to any tool,
including ours:

1. **It can reach the row-level data** — not screenshots of dashboards, but actual report rows with
   `cost`, `clicks`, `purchases14d`, `sales14d`, `searchTerm`, `placementClassification`,
   `topOfSearchImpressionShare` and inventory quantities queryable together. Most integrations expose
   summaries, and summaries can't do check 3, because the tokens live in the rows.
2. **It has history.** A 14-day attribution window makes today's data provisional. A tool that only reads
   the current report can't tell a term that failed from one that hasn't landed yet.
3. **It can cross the console boundary.** Check 4 needs advertising and inventory in the same query. If
   those live in two systems the assistant reads separately, you're building the join by hand again with
   extra steps.

Given those, the five checks become a handful of plain-language questions — "which search terms have 5 or
more clicks and no purchases in the last 30 days, aggregated at search term level" — and the model does
the aggregation and applies the thresholds. The weekly cadence improves most, because running it again
costs no more than asking. What doesn't change is the judgement: whether a top-of-search gap is waste or
a deliberate rank play, whether a zero-converting brand term is really a listing problem.

**Marketplace Ad Pros** connects Amazon Ads and Seller Central data to an MCP server, so Claude or
ChatGPT can query the underlying report rows directly — including the ads-plus-inventory question that
has no native join. The [wasted ad spend dashboard](/skills/wasted-ad-spend-dashboard/) runs check 2 as a
single request. If you'd rather build this yourself against the Amazon Ads API, that's a reasonable
choice, and this page has what you'd need to specify it.

## FAQ

### How many clicks before adding a negative keyword on Amazon?

Two numbers, from two different places in our own operating guidance, and they answer two different questions. At 5 or more clicks with zero purchases14d, a search term is worth reviewing - that is the noise floor we use before a term is considered real engagement rather than a one-click fluke. At 20 or more clicks with zero orders, it becomes a negative exact without further debate. Between 5 and 20 clicks you are making a judgement call about the term, the product and the price. Below 5 clicks a single term tells you nothing on its own, which is exactly why an n-gram pass exists as a separate check.

### What is a healthy ratio of negative to positive keywords on Amazon?

Accounts with healthy ACoS typically carry 3 to 5 times more negatives than positives. That ratio is a symptom rather than a target - it is what an account looks like after someone has been blocking fresh waste every week for a year. If your account has fewer negatives than positives, the fastest read is that nobody has been running the search term report, not that your targeting is unusually precise. The ratio is a rough diagnostic, not something to game by bulk-adding negatives you have not looked at.

### My Amazon campaign says out of budget but raising the budget does nothing. Why?

Because it was probably never actually capped. A campaign sitting at roughly 100% time-in-budget did not run out of money - it never spent the money in the first place, which is a bid or targeting ceiling, not a budget one. The campaign is not winning enough auctions to exhaust its budget, so adding budget gives it more room it will not use. A genuinely capped campaign spends its full daily budget and then stops delivering partway through the day; the fix there is more budget. The diagnostic that separates them is whether spend actually reached the daily budget, not what Amazon's Out-of-Budget filter shows. Raising budgets on the first group is the single most common way an audit makes an account worse rather than better.

### Can Amazon show ad spend next to inventory risk?

No. Amazon provides no native join between advertising spend and inventory health. Ad reporting lives in the Ads Console, FBA inventory lives in Seller Central, and the only key they share is ASIN or SKU. You build the join yourself - typically an XLOOKUP from advertised ASIN or SKU in the ads export against the inventory export - and it is fragile exactly where catalogs are messy: variations, multi-packs and bundles, where one ASIN maps to several SKUs or to none. This is the check most audits skip, and it is the one where the money is least recoverable, because spend on a product that stocks out is not just unconverted, it also costs you the ranking you paid to build.

### How often should you audit an Amazon ad account for wasted spend?

Weekly for the search term and budget checks, because waste compounds daily and a term left running for a month has already spent the money you are trying to save. The full five-check pass, including the inventory join and placement economics, is realistic monthly for most accounts. Expect 2 to 4 hours for a first pass while you are building the spreadsheet, and 45 to 90 minutes per marketplace on repeat once the structure exists. Always end the window three days short of today - Amazon Ads reporting lags real spend by 1 to 3 days, and the most recent days are incomplete in a way that makes recent terms look worse than they are.

### Should I combine US and UK data in one Amazon ads audit?

No. Run the audit one marketplace at a time. Search behaviour, competitor density, language and pricing all differ per marketplace, so a negative keyword that is obviously right in the US may be a top converter in the UK, and blending the two hides both. Inventory cannot be combined either - it is held per marketplace, so a days-of-supply figure only means something within one. There is also a currency problem: cost columns come back in each marketplace's own currency, so a naive sum is not a number at all. This per-marketplace rule is the main reason a five-check audit that is comfortable for one marketplace becomes a standing weekly job at four.

## Related guides

- [How to run an n-gram analysis on your Amazon search term report](/guides/amazon-search-term-report-n-gram-analysis/)
- [Amazon PPC agency audit](/amazon-ppc-agency-audit/)
- [Amazon inventory and advertising intelligence](/amazon-inventory-advertising-intelligence/)
- [Amazon keyword automation](/amazon-keyword-automation/)
- [Best Amazon inventory and restock tools in 2026](/guides/best-amazon-inventory-restock-tools-2026/)
- [Best Amazon ads management tools in 2026](/guides/best-amazon-ads-management-tools-2026/)

---

The first pass through this audit almost always pays for itself. The second one is the problem: it's a
Tuesday, there are four marketplaces, and the XLOOKUP broke again because someone added a bundle.

If you'd rather ask the question than rebuild the spreadsheet,
[connect your accounts](https://app.marketplaceadpros.com/signup) and run the five checks against your
own data.
