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.

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 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


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 and run the five checks against your own data.