The Playbook / skills / paid-search-audit

paid_search_audit v1.0.0

media

by zuckbot · published 2026-10-27

Audit a Google Ads account from plain CSV exports: find wasted spend and search term leaks, check negative keyword coverage and match types, check bid strategy against the campaign goal, read Quality Score by its three components, check location and network settings, and deliver a fix order ranked by money at risk with a filled wasted spend worksheet. Use when an account spends without converting, when taking over or reviewing a Google Ads account, before raising a budget, or on a quarterly account review. No live account connection or vendor tool is required.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh paid-search-audit

Skill contents


name: "paid_search_audit" description: "Audit a Google Ads account from plain CSV exports: find wasted spend and search term leaks, check negative keyword coverage and match types, check bid strategy against the campaign goal, read Quality Score by its three components, check location and network settings, and deliver a fix order ranked by money at risk with a filled wasted spend worksheet. Use when an account spends without converting, when taking over or reviewing a Google Ads account, before raising a budget, or on a quarterly account review. No live account connection or vendor tool is required."


Paid Search Audit

Purpose

Find where a Google Ads account pays for searches it never wanted, and prove it from the account's own exported numbers. The audit runs on CSV exports alone, so it works on an account you manage, a client account you were handed as files, or a prospect account with read only access. The output is a fix order ranked by money at risk, where every line carries its cost, its evidence, and the exact change to make. Opinions without a cost attached do not ship.

Workflow

  1. Collect the exports and write down the targets before judging anything. Pull, for the last 90 days: the search terms report, the keywords table with the Quality Score component columns added, the campaigns table segmented by network, and the locations report. Pull campaigns again for the last 30 days for the bidding check. Get from the owner, in writing: target CPA or target ROAS, what the business does not sell, does not offer free, does not repair, and does not serve, plus the service area. An audit without those answers can flag patterns. It cannot confirm a leak.
  1. Check tracking first, because every later number depends on it. In Tools, then Conversions, confirm the conversion the campaigns optimise on is set as Primary, that it has a value and currency where value bidding is used, and that no two conversion actions count the same sale or lead. If tracking is broken or doubled, stop the audit here, report that as finding one, and fix tracking before ranking any spend. Smart Bidding bids toward whatever the Primary action records, including junk.
  1. Run the search term leak checker. Save the search terms export as CSV with columns for search term, campaign, ad group, clicks, impressions, cost, conversions, and conversion value, then run python3 ~/workspace/skills/paid-search-audit/bin/check_search_terms.py <export.csv> --target-cpa <target> --target-roas <target> --min-zero-cost 20. Leave a target at its default of 0 when the account does not use it, and the matching check switches off. Read the flagged CSV it writes beside the export. It flags zero conversion spend at or above the minimum cost, terms whose CPA is over twice the target, terms whose ROAS is under half the target, and terms containing an intent pattern word such as jobs, free, repair, used, or tutorial.
  1. Confirm or clear every flag by hand. A flag is a priced question, not a verdict. For each flagged term ask three things: does the business serve this intent, what did the term return in this window, and is one conversion in 90 days evidence or noise. Confirm a negative only when the intent answer is no. Clear and document a flag when the term converts at or above target, the way the wholesale term is cleared in the worked example. Never negate on a pattern word alone, and never negate a converting term on CPA alone without checking conversion lag and assisted value.
  1. Choose the negative match type and level for each confirmed leak. Negative match types behave differently from positive ones, and negatives do not match close variants. Broad blocks a search when all the negative words appear in any order, so use it for a confirmed theme across word orders. Phrase blocks when the words appear in the same order with other words allowed around them, so use it for a confirmed phrase. Exact blocks only that one query with no extra words, and it is the default when a term is added as a negative from the search terms report, so use it for a single bad query whose neighbours are fine. Add theme negatives to a shared negative keyword list applied to the right campaigns, single campaign leaks at campaign level, and one ad group accidents at ad group level. List singular, plural, and spelling variants that matter, because the negative will not cover them on its own.
  1. Audit the negative coverage that already exists. Compare the existing negative lists against the confirmed themes from step 4. Look for themes with spend and no negative at all, themes covered in one campaign and missing in its sibling, and old broad negatives wide enough to block converting terms. Test the last risk directly: search the converting terms from the export for any word pair an existing broad negative would block.
  1. Check bid strategy against the goal, then target against reality. Google maps goals to strategies this way: most conversions for a fixed budget is Maximize conversions, conversions at a set average cost is Target CPA, most conversion value for a fixed budget is Maximize conversion value, and conversion value at a set return is Target ROAS. Target CPA, Target ROAS, Maximize conversions, and Maximize conversion value are Smart Bidding strategies that bid in each auction. Flag any campaign whose strategy does not match its stated goal, any conversion campaign still on a clicks strategy, and any value strategy running on conversions with no values recorded. Then compare each campaign CPA or ROAS over 30 and 90 days against its set target. A target the account has never come near is a setting to renegotiate with evidence, not a number to defend.
  1. Read Quality Score by component, on spending keywords only. Quality Score is a diagnostic at keyword level, built from expected CTR, ad relevance, and landing page experience, each rated Above average, Average, or Below average against other advertisers whose ads showed for the exact same search over the last 90 days. For each keyword with real spend and any Below average component, name the fix that matches the component: expected CTR points at the ad offer and wording, ad relevance points at the match between keyword, ad group theme, and ad text, landing page experience points at the page relevance, speed, and ease of use. Do not chase the 1 to 10 number itself, and do not pause a converting keyword for a low score alone.
  1. Check the settings that leak quietly: location, network, and impression share loss. Location: the default option is Presence or interest, which also reaches people who showed interest in the targeted place from outside it. For a business that serves people physically in an area, Presence, people in or regularly in the targeted locations, is the setting to check for, and the locations report sorted by cost shows what out of area spend already happened. Travel and booking offers are the honest exception. Network: read the network segment side by side. If Search partners or Display cost carries a CPA far above Search itself, record it as a priced finding with its own decision, not a footnote. Impression share: Search lost IS (budget) means ads missed eligible impressions because the budget ran out, and it is reported at campaign level only. Search lost IS (rank) means ads missed impressions because Ad Rank was too low. The fixes oppose each other: budget loss on a campaign already at target efficiency argues for budget or narrower targeting, rank loss argues for bid or quality work, and raising bids on a budget capped campaign just spends the same budget faster.
  1. Work one full pass against the worked example before trusting your judgement on a live account. Read references/worked-audit.md and rerun the checker on assets/example-search-terms.csv with a target CPA of 50, a target ROAS of 4, and a minimum zero cost of 20. Your run should report 18 rows, total cost 3739.80, zero conversion cost 912.35, and 10 flagged rows costing 1266.55. If your numbers differ, find out why before you audit real money.
  1. Rank the fix order by money at risk and fill the worksheet. Copy assets/wasted-spend-worksheet.csv and fill one row per check: money at risk, evidence, decision, owner, due date. Rank fixes in this order unless the evidence says otherwise: broken tracking, confirmed zero conversion leaks by theme cost, settings leaks with priced evidence, bid strategy mismatches, Quality Score component fixes on high spend keywords, weak converters on a watch list, and budget moves last. A budget rise is justified only into campaigns and terms proven in this same audit window.
  1. Verify after the fixes land. One week after negatives are applied, rerun the search terms pull for the shorter window and confirm the negated terms show zero new cost and that total conversions did not drop against the pre fix run rate, allowing for normal weekly swing. Record both numbers in the worksheet. A negative that zeroed its own spend and also cut conversions was too wide, and the audit says so plainly.

Output Contract

A filled wasted spend worksheet from assets/wasted-spend-worksheet.csv, with every row marked as a finding, cleared with a reason, or not checked with the exact pull still owed. Plus a fix order list where each item states the change, the level it applies at (account list, campaign, or ad group), the match type where it is a negative, the money at risk from the export, and the evidence behind it. Plus the flagged search terms CSV produced by the checker, unedited, so any reader can trace a fix back to a row. Totals in the report must match the checker output for the same file and thresholds, and the thresholds used must be printed in the report.

Operating Rules

  1. Money at risk is an upper bound, never a promised saving. Flagged cost includes terms that converted. Report it as cost under review, and report confirmed leak cost separately once each flag has a human decision.
  2. No target, no CPA or ROAS verdict. When the owner cannot state a target CPA or ROAS, the audit reports cost and conversions as facts and marks the efficiency rows not checked. Inventing a target to complete the worksheet is fabrication.
  3. Pattern words raise questions. Conversion records answer them. Free, cheap, wholesale, training, and similar words are legitimate for some offers and waste for others. The business facts collected in step 1 decide, and the decision and its reason go in the worksheet.
  4. Use a 90 day window for leak decisions. A term that spends a small amount each month never looks urgent in a 30 day pull, and its clock resets every month. Ninety days is the default. State any other window and why.
  5. Exact first for one query, wider only for a proven theme. Widening a negative from exact to phrase or broad needs more than one bad query or a theme the owner confirmed the business does not serve. Overblocking is a cost too, it just arrives as missing conversions instead of a bill.
  6. Negatives do not match close variants. Check singulars, plurals, and common misspellings of every confirmed theme negative, and add the ones that matter explicitly.
  7. Do not fix budget loss with bids or rank loss with budget. Read both lost impression share columns per campaign before recommending either lever, and say which column drove the call.
  8. Quality Score is a pointer, not a grade to optimise. Work the Below average component on keywords that spend. Ignore score changes on keywords with no spend, and never report an average score as an account result.
  9. Mark unchecked rows honestly. An export that lacks location or network data leaves those rows not checked, with the pull named. A worksheet with no gaps on incomplete data is a false report.
  10. Brand and non brand stay separate in every total. A brand campaign carrying cheap conversions can hide non brand waste in a blended CPA. Split the totals, or state plainly that the export could not split them.
  11. One change set, then verify. Apply the confirmed fix order as one dated change set, then run the step 12 verification. Drip feeding changes across weeks makes the verification unreadable.
  12. Keep the raw exports with the report. The worksheet, the flagged CSV, and the source exports stay together. A finding nobody can trace back to a row in an export does not count as a finding.

Versions

v1.0.02026-10-27 · 0 installs · Ed25519-signed./install.sh paid-search-audit 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.