Google Ads
Search-Term Cleanup → Negatives
Find search terms that burn budget without converting or miss the intent, and get a vetted list of negative keywords to add yourself.
Recommendations only: the prompt never changes your ad accounts.
How to run it
Three steps, about a minute.
Connect RoASr to Claude or ChatGPT
Create an API key in RoASr and add the RoASr MCP server. Access is read-only: the prompt cannot change anything in your ad accounts.
Paste the prompt
Copy the text below into a new chat.
Answer a few questions
The prompt asks only what it cannot find itself, then reads your data and answers in a fixed format.
- Guides in the blog
What it asks
- client
- window — last 30 days
- waste threshold — 2x the campaign's average CPA
- output format — chat table
Data it reads
- roasr_load_skill
- roasr_limits
- roasr_list_clients
- roasr_list_accounts
- roasr_signals
- roasr_metrics_campaigns
Method
- roasr_frame
- google_search
- report_format
Full prompt
The prompt
Before you start, ask me about each [input] below — one question at a time, with ready-made answers to pick from; skip whatever you can already tell.
Clean up the search terms of [client: if not listed, call roasr_list_clients and let me pick]: find terms that spend without converting or miss the intent, and turn them into negative keyword candidates I can review and add myself.
1. **Load the RoASr method.** Call roasr_load_skill('roasr_frame'), roasr_load_skill('google_search') and roasr_load_skill('report_format') and follow them exactly.
2. **Frame the data.** Call roasr_limits, roasr_list_clients and roasr_list_accounts: plan, niche, margin, KPI, account currencies, sync status and dataSince. Use [window: last 30 days (default) | last 14 days | last 90 days | custom]. If the window starts before dataSince, say so and narrow it. If currency.mixed is true, never sum money across accounts; work account by account. Name any account whose sync is failed or never and draw no conclusions from it.
3. **Pull the terms.** roasr_signals with kind google_search_terms, limit 200. Each account is its own snapshot: do not merge payloads. If an account returns no terms, say that search term data is missing there and skip it.
4. **Get the baseline.** roasr_metrics_campaigns for the same window (campaign level, limit 200): average CPA or ROAS per campaign, to set the waste threshold and to place each term in its campaign when the payload names it. Decide brand versus non-brand from settings and what actually converts, not from campaign names. If the whole account shows zero conversions in the window, stop and report a probable tracking problem: waste cannot be told apart from broken measurement.
5. **Pick candidates.** Three groups: (a) spend above [waste threshold: 2x the campaign's average CPA (default) | 1x average CPA | 3x average CPA | custom amount] with zero conversions; (b) clearly off-intent terms at any spend (jobs, free, DIY, support pages, unrelated products; competitor names only if I do not target competitors); (c) brand terms leaking into non-brand campaigns, which is a structure issue, not a negative. Terms with little spend and no conversions are "watch", not negatives.
6. **Vet every candidate.** Check each proposed negative against all converting terms in the same campaign: would it match any of them? If yes, narrow it to exact or drop it. Prefer exact for a single query and phrase for a repeated off-intent root, at campaign level. Never propose broad match negatives.
**Output:** open with one sentence — how much spend sits in the candidates, its share of search-term spend, and how many negatives you propose. Then a table: negative · match type · campaign · spend · clicks · conversions · reason · risk of blocking a converter. Then the structure issues from group (c) and the "watch" list. Then 3–6 actions grouped High / Medium / Nice-to-have, each with the expected effect. Format: [output format: chat table (default) | Google Ads Editor CSV]. For CSV, add a plain-text block with the columns Campaign, Keyword, Criterion Type (Negative Exact or Negative Phrase). I import it myself in Google Ads Editor; nothing is applied for me.
**Output rules:**
- Recommendations only — never apply changes; RoASr tools are read-only.
- The saving is an upper bound: the wasted spend already happened and similar queries may shift elsewhere. Say so.
- Express money in each account's own currency; if the currency is unknown, say "in account currency" without a symbol.
- If the client has no margin set, talk CPA and ROAS, not profit.
- Show the top 20 candidates by spend; summarise the long tail as one row.
- Answer in the language of this prompt.Optimize
Related prompts
- Budget Reallocation by EfficiencyCompare campaigns by profit or ROAS/CPA, check stability and diminishing returns, and get a cautious proposal for shifting a share of spend.Meta Ads · Google Ads · TikTok Ads
- Meta Creative Fatigue AlertA weekly check for Meta ad sets where frequency rises while CTR falls and CPM climbs. First run sets a baseline, later runs show only changes.Meta Ads
- Quality Score Fix ListFind the costly keywords with a weak Quality Score, see which component drags each one down, and get a fix list: ad copy, ad group structure or landing page.Google Ads
- Scaling Headroom CheckSeparate campaigns that lose demand to budget from those held back by bids or quality, check competitor pressure, and get a cautious scaling plan.Google Ads
- PMax Asset Group ReviewReview Performance Max asset groups: spend, conversions and CPA, weak assets, missing formats, and what to replace. No guesses about channels.Google Ads