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.

Connect RoASr

Recommendations only: the prompt never changes your ad accounts.

How to run it

Three steps, about a minute.

  1. 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.

  2. Paste the prompt

    Copy the text below into a new chat.

  3. Answer a few questions

    The prompt asks only what it cannot find itself, then reads your data and answers in a fixed format.

  4. 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.