Weekly wasted ad spend review board for Google Ads

See the Google Ads search terms burning money with no conversions, decide on each one as a team, and build your negative keyword list as you go.

App
Google AdsGoogle SheetsMarketingOperationsResearch & MonitoringAI Reports
PromptCreate

Build me a wasted ad spend review board for Google Ads that my team works out of every week, instead of exporting the search terms report to a spreadsheet. It uses two integrations: Google Ads for all reporting and for the pause actions, and Google Sheets for the shared negative keyword list and the decision log.

Main view, Search terms. Pull the search terms that actually triggered my ads using the Google Ads "Search (Paginated GAQL Query)" operation against search_term_view, selecting search_term_view.search_term, segments.search_term_match_type, campaign.id, campaign.name, ad_group.id, ad_group.name, metrics.cost_micros, metrics.clicks and metrics.conversions, scoped by segments.date for the selected window. A toggle at the top switches the window between 7, 14 and 30 days. Each row shows the term, match type, campaign, ad group, cost, clicks and conversions, sorted so the most expensive terms with zero or almost no conversions sit at the top. Filters for campaign, ad group and match type. The header carries a running wasted spend total for whatever is currently in view, so the team can watch it shrink as they work the list.

Important formatting and filtering rules for both report views. Google Ads returns money in micros, so divide metrics.cost_micros by 1,000,000 before displaying anything. Only surface terms above a configurable spend threshold in the window, defaulting to about $10, so the list stays reviewable rather than thousands of rows of pennies. Exclude terms that did convert, with a setting for what counts as converting so someone can choose to still review terms with a single weak conversion. And filter every row against the decision log, so anything the team already reviewed never comes back.

Second view, Keywords. Same idea one level up: query keyword_view with the same paginated GAQL search, selecting ad_group_criterion.criterion_id, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, campaign.name, ad_group.name, metrics.cost_micros, metrics.clicks and metrics.conversions, to surface the keywords burning money without converting. Same window toggle, same filters, same threshold, same sorting, same row actions.

Third view, Decision log. Everything the team has already reviewed, with the term or keyword, the decision, who made it, when, the campaign and ad group it came from, the spend at the time of review, and the waste theme if the triage agent assigned one. This log lives in a tab of a Google Sheet so the whole team shares it: read it with the Google Sheets "Get Values" operation, append new decisions with "Append Values", and use "Update Values" to correct or reverse an entry. The log is the dedupe source for the two report views.

Row actions on both report views. Mark as irrelevant: first read the existing negatives tab with "Get Values" so we never append a duplicate, then "Append Values" a row with the term text, the suggested negative match type, the campaign or ad group it should apply to, the spend it wasted and the date, and also write the decision into the decision log. Mark as fine: append a keep decision to the decision log so the term drops off the review list from then on. Pause the leaking ad group with the Google Ads "Mutate Ad Groups" operation, sending an update that sets status to PAUSED on the ad group resource name, or pause the whole campaign with "Mutate Campaigns" the same way. Put both pause actions behind a confirmation dialog that shows the name and its spend in the window, and record every pause in the decision log too.

Capability boundary to respect. There is no documented Google Ads operation for creating negative keywords or negative keyword lists, so do not build or promise one click negative keyword creation inside Google Ads. The negatives sheet is the deliverable. The copy in the app should say it plainly: build your negative list here, then paste it into Google Ads Editor as one bulk upload. The pause actions and the Sheets writes are the real writes.

Embedded background agent, triggered by a "Triage this week's terms" button in the header. The agent pulls the full search term list for the selected window with the paginated GAQL search, then classifies each wasteful term by why it is wasteful: wrong intent, job seekers, DIY or free seekers, competitor names, wrong geography, B2C when we sell B2B, and an other bucket. It groups the terms into themed negative lists, and for each theme it estimates the recoverable monthly spend by scaling the window spend to a month. It writes its recommendations back into the app as a pending approval queue, showing each theme with its terms, its evidence and its recoverable spend estimate, so a human can approve or reject per theme and per term. Only on approval does it append the approved set to the negatives sheet with "Append Values" and write the decisions into the decision log. The agent must skip anything already in the decision log, and it must never pause a campaign or ad group by itself.

Settings the app should expose: the spreadsheet to use, the tab names for the negatives list and the decision log, the spend threshold, the default window, and a short business context box where I describe what we sell, who we sell to, our brand and competitor names, and the geographies we serve, which the triage agent uses when it classifies terms. Show the agent run status while it is working, keep the recoverable spend per themed group visible, and handle empty states cleanly for accounts where nothing crosses the threshold that week.

What does this prompt do?

  • Lists the search terms that actually triggered your ads over the last 7, 14, or 30 days with cost, clicks, and conversions, sorted so the most expensive terms with no conversions sit at the top, plus a running wasted spend total in the header.
  • Gives every row a decision: mark it irrelevant to add it to your shared negative keyword sheet, mark it fine so it drops off the list, or pause the leaking ad group or campaign right from the row.
  • Adds a second view for keywords that are spending without converting, and a decision log of everything the team has already reviewed so the same junk terms stop reappearing every week.
  • Includes a Triage this week's terms button that hands the full list to an agent, which sorts terms into themed groups like job seekers, free or DIY searches, competitor names, and wrong location, estimates recoverable monthly spend per group, and posts its recommendations back for you to approve.

What do I need to use this?

  • A Google Ads account you can pull reporting from and pause campaigns in
  • Live data access approved for that Google Ads account, which Google grants per account before outside tools can read it
  • A Google Sheets login and one spreadsheet to hold the shared negative keyword list and the decision log
  • Google Ads Editor or the bulk upload screen in Google Ads for pasting the finished negative list in

How can I customize it?

  • Set your own spend threshold so only terms that burned more than, say, $10 or $50 in the window ever reach the review list.
  • Change the default window between 7, 14, and 30 days, or filter to the single campaign your team is cleaning up this week.
  • Point the negative list and decision log at whichever spreadsheet tabs your team already works out of, and rename the waste categories to match how you talk about bad traffic.

FAQs

Can this add negative keywords to Google Ads for me?
No, and it will not pretend to. Google Ads does not offer a supported way for outside tools to create negative keywords, so the app builds your negative list in a shared Google Sheet that you paste into Google Ads Editor as a single bulk upload. Pausing an ad group or campaign does happen directly from a row, and that change lands in Google Ads immediately.
How does it stop the same junk terms coming back every week?
Every decision your team makes is written to a shared decision log, and the review lists are filtered against it. Once a term is marked irrelevant or marked fine, it disappears from next week's queue for everyone.
What if my account is small and only spends a little per term?
Lower the spend threshold. It defaults to about $10 in the selected window so the list stays short and reviewable, but you can drop it to a dollar or two on smaller accounts or raise it on accounts spending five figures a month.
Does the triage agent change anything on its own?
No. It reads your search terms, groups them into themed waste categories with an estimate of recoverable monthly spend, and writes its recommendations back into the app. Nothing reaches the negative list until someone approves it, and the agent never pauses anything.
Can my whole team work out of this together?
Yes. The negative list and the decision log live in a shared Google Sheet, so whoever runs the weekly review sees what everyone else already decided, and the person doing the bulk upload works from one clean list.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.

Hunter
Google Sheets
App
Per-device electricity cost explorer for your smart home

Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.

Home Assistant
Google Sheets
App
Build a PR media list from real worldwide news coverage

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

GDELT
Google Sheets
Gmail
App

Stop paying for searches that were never going to convert.

Run the weekly search terms review in minutes and hand your team one clean negative list to upload.