---
name: actcenter_search-terms-analyst
description: Analyze Google Ads search-term reports to find wasted spend, intent-mismatched queries, and high-intent winners. Builds negative keyword lists, identifies new ad-group seed terms, and flags brand-cannibalization or competitor incursions. Use whenever the user says "search terms", "negativas", "wasted spend", "look at the queries", "negative keyword list", "search query report", "PMax search categories", or pastes a Search Terms CSV. Outputs a paste-ready negative list and a one-page summary tied to the ACTCENTER Priority Engine.
metadata:
  type: skill
  version: 1.0
  owner: actcenter
---

# actcenter_search-terms-analyst

Turns raw search-term reports into action: a paste-ready negative keyword list, a list of winning queries worth their own ad group, and a flag for any structural issues hiding in query data.

## When to use

Trigger on any of:

- "Search terms for [account]"
- "Negativas pra rodar essa semana"
- "Wasted spend audit"
- "PMax search categories"
- User pastes a Search Terms CSV / pastes a list of queries
- "Take a look at what queries are pulling spend"

## Input the skill expects

- Search-term report from Google Ads, last 14–30 days. Columns at minimum: search term, match type, campaign, ad group, impressions, clicks, cost, conversions, cost / conv.
- Optional: keyword the term matched against, conversion value (for e-com), top-of-page rate.
- For PMax: Search Categories report from Google Ads UI (terms are bucketed, not raw).

If less than 100 queries are in the file, broaden the window. If less than 30 queries even at 90 days, the account is too small for this skill — note it and stop.

## The framework — Query Classification Grid

Every query lands in one cell:

| | High intent | Mixed intent | Low / off intent |
|---|---|---|---|
| **Spend > $50 / no conv** | Re-rank as keyword candidate. Likely needs better ad/LP, not a negative. | DIAGNOSE — split, test, or restructure. | NEGATE immediately. |
| **Spend > $50 / conv** | WIN — promote to its own ad group or pin into headlines. | KEEP — monitor; no action. | Check tracking — conversions may be miscounted. |
| **Spend < $50** | Watch for next pass; not enough data. | Ignore for now. | Negate if pattern repeats across queries. |

## Negative-keyword categories to scan for

Every search-term sweep checks these clusters:

1. **Price-sensitive** — *cheap, cheapest, free, no cost, lowest price, budget, affordable, discount*. Drop these for premium / quality-led brands.
2. **DIY / how-to** — *how to, DIY, fix it myself, tutorial, instructions*. Drop for service businesses.
3. **Job seekers** — *jobs, hiring, career, salary, apply*. Drop for everyone except recruiters.
4. **Wrong service / product** — every account has its set; map them.
5. **Wrong geography** — countries / states / cities you don't serve.
6. **Competitors** — only if the user does not intentionally bid on competitor terms.
7. **Educational / wiki** — *wiki, definition, what is, meaning*.
8. **Reviews / complaints** — *review, complaint, scam, BBB*. Mixed — sometimes worth keeping for reputation campaigns; default negate for direct-response.
9. **Adult / off-topic** — anything that should never have matched.
10. **Brand drift** — your brand name mis-spelled or paired with off-topic words.

## PMax-specific approach

PMax does not give raw search terms — only Search Categories with aggregate spend. The approach changes:

1. Pull Search Categories report (UI → Insights → Search categories).
2. For each category with spend > $50: assess intent vs. business mix.
3. Add brand terms as account-level negatives if you want PMax to stop serving on them (and you have a Brand Search campaign).
4. Add wasted categories as account-level negatives (max ~100 across the account).
5. Track week-over-week category drift; if a new category appears, investigate.

## Output

Two files per run:

### File 1 — `negatives-{client}-{YYYY-MM-DD}.csv`

Paste-ready into Google Ads Editor. Columns:

```
Keyword, Match type, Campaign, Ad group (optional), Reason
"free roof inspection", Phrase, ALL, , price-sensitive
"how to fix shingles", Phrase, ALL, , DIY/how-to
"roofing jobs near me", Phrase, ALL, , job-seekers
```

Match types: Phrase by default. Use Exact when negating a very specific brand or competitor variant. Use Broad sparingly — Broad-match negatives in Google Ads are stricter than positive Broad and can over-block.

### File 2 — `search-terms-summary-{client}-{YYYY-MM-DD}.md`

```markdown
# Search-Terms Summary — [client] — [YYYY-MM-DD]

## Snapshot
- Window: last [N] days
- Total queries reviewed: NNN
- Total spend in window: $X,XXX
- Negative actions proposed: NN
- Wasted spend recovered (estimate): $X,XXX / month

## Top wasted clusters
1. **[cluster name]** — $X spent / 0 conv. Negate at: ALL.
2. **[cluster name]** — $X spent / 0 conv. Negate at: [campaign].
3. …

## Winning queries (promote)
- "[query]" — $X / N conv / CPA $X. Action: pin as headline, or build dedicated ad group.

## Structural flags
- **Brand cannibalization in PMax** — [yes/no, evidence]
- **Match-type drift** — [yes/no]
- **Geo drift** — [yes/no]
- **Tracking anomaly** — [yes/no]

## This week's 3 actions
1. Apply negatives file (paste into Editor).
2. Promote [winning query] into its own ad group.
3. [investigate structural flag, if any]
```

## How to run

```
1. Confirm: which account, which 14- or 30-day window, Search Network / Shopping / PMax / all.
2. Read the CSV. If file is too small, ask the user to broaden the window.
3. Run the Query Classification Grid + 10 cluster scans.
4. Produce the two files. Save to /search-terms/{client}/{YYYY-MM-DD}/.
5. Hand off the negatives CSV with a "paste this into Google Ads Editor" note.
```

## Voice

Operational. Each finding is **cluster + spend + zero/low conv + recommended match type**. No "we should consider" — say "negate as Phrase in ALL campaigns. $312 / 0 conv last 30 days."

## Boundaries

- Don't add negatives blindly. Verify each cluster actually has zero conversions in the window.
- Match types: default Phrase. Confirm with the operator before adding any Broad negative.
- Don't negate brand terms unless the user has a dedicated Brand Search campaign.
- For PMax, work in Search Categories — don't pretend raw terms are available.
- Maintain the account-level negative-list cap (5,000 in a shared list).
