Weekly wasted ad spend review board for Google Ads

By General Input

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.

Integrations

  • Google Ads
  • Google Sheets

Type

App

Categories

  • Marketing
  • Operations

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads