← Blog
· Updated ·

Auditing your own ad account: what to actually look at

The order I check ad accounts in, starting with the spend that produced nothing and the conversion number that usually lies.

Open the search terms report first. Not the dashboard, not the impressions graph. In a client account we went through recently, 92% of the spend had gone to search queries that brought in zero leads. Everything else we found in that account was small change next to that one line.

A self-audit works when you run it in the same order every time, and when that order starts with money. Below is the sequence I use across Meta Ads, Google Ads and Yandex Direct, plus the traps each platform sets in its own way. It takes about ninety minutes the first time.

Money first: find the spend that produced nothing

Pull a report for the last 30 to 90 days at the level where money actually leaves the account. In Direct that's the search queries report. In Meta it's the breakdown by ad and placement. In Google Ads it's search terms, assuming Google Ads is even an option for you: it has not worked in Russia since 2022, so for a lot of readers in the region the real choice is Direct plus Meta.

Sort by cost, descending. Read down the conversion column and mark every row that shows a zero. Add up what those rows cost you.

That's the entire first pass. No attribution philosophy, no creative debate. You are measuring the share of budget that bought nothing, and you get a number you can act on the same afternoon. In the account above that number was 92%. I have yet to meet an advertiser who guessed their own figure correctly before pulling it.

Your conversion count is probably counting something else

Second pass: verify what the word "conversion" means in your report before you trust a single cost-per-lead figure built on it.

A case from our practice. The report showed 697 conversions. Of those, 652 were a technical anti-spam goal firing by itself. Real requests: 45. Cost per lead was around 8 BYN, not the 2 BYN everyone in the chat had been congratulating each other about.

Yandex Direct causes this by default. It folds every Metrica goal into the conversion column, technical ones included, unless you name the goals you care about. So name them. Direct also caps you at 10 goals per report, which is usually more than enough once you stop counting scroll depth as a sale.

Meta has the same disease in different clothing: standard events firing on pages where nothing was purchased or requested. If you cannot say out loud what each goal in your conversion column represents, that column is decoration.

Structure: the boring checks that still find money

Only now, structure. These are cheap to check and they keep showing up:

  • Second headlines. In that same account, 27 of 27 active ads had none. Free space in the auction result, left blank.
  • Archived campaigns quietly inflating the picture. Direct's API hands back archived campaigns by default: with an empty filter we got 32 campaigns out of 52 that nobody was running.
  • Budgets that look unset but aren't. In those 52 campaigns only 2 had an explicit daily budget. The other 50 were capped by a weekly strategy limit. Read the daily budget column alone and you'd swear nobody had set anything.
  • Two status fields. Direct exposes both State and Status, and State is the one that decides whether a campaign actually runs. Sorting by the wrong one gives you a clean, wrong report.
  • Money in micro-units. Direct returns costs multiplied by a million. An unconverted number in a homemade dashboard looks like a catastrophe or a triumph, depending on which way you were hoping.

One more for anyone wiring this up themselves: the same OAuth token opens both Direct and Metrica, so you do not need a second authorization to check goals. Yandex Webmaster is a separate story. And Metrica wants the token in an OAuth authorization header, not Bearer, which costs people an hour every time.

What each platform lets you do once you've found the problem

Finding waste and stopping it are different jobs, and the platforms are not equal here.

Meta gives you automated rules natively, free, inside Ads Manager. Set a condition, set an action, done. Yandex Direct does not have if-then rules at all. Everything the market calls "auto rules for Direct" is a third-party service sitting on top of the API and polling on a schedule. Worth knowing before you plan a workflow around a feature that isn't there.

Same asymmetry with competitor creatives. A creative spy works against Meta Ad Library and nowhere else. There is no equivalent for Direct or TikTok, and any tool promising you one is showing you something else.

Give the account a score so next month means something

The last step is the one most people skip. Write down a number.

A fixed checklist, run identically every month, turns an audit from an opinion into a measurement. Ours runs 131 checks across Meta and Google Ads and produces a score out of 100. That live client account, the one with the 92% and the anti-spam goal, scored 79.82 on the same kind of fixed list. The value of that number is not its precision. It's that next month's run uses the same questions, so movement means something.

Do it yourself with a spreadsheet if you like. Twenty checks you always run, in the same order, money first. The discipline matters more than the tooling.

Block ninety minutes this week. Search terms report, zero-conversion rows, total the waste. Then open your goal settings and count how many of your conversions are real. Then the ad text and campaign states. If the manual version turns into a monthly chore you resent, we have this checklist automated for Meta and Google Ads, including access from Claude, ChatGPT, Codex or Cursor over MCP. Read-only: any change to the account is still made by a person. But the first pass costs you nothing except the afternoon, and it's the pass that finds the money.