Negative Keywords Agent¶
Phase: 2 (Optimization — depends on Attribution Agent) Risk authority: Medium (add) to High (remove)
Mission¶
Two-sided negative keyword management: add negatives to block irrelevant spend AND remove stale negatives that are blocking good traffic. Most negative keyword systems only add. This one also prunes.
Dependency¶
Waits for the Attribution Agent to confirm tracking is healthy. If tracking is broken, negative keyword decisions are based on bad data — skip the run and flag it.
Daily Checks¶
1. Search Terms Review (Add Side)¶
- Pull yesterday's search terms report for all campaigns
- For each term, classify:
- Clearly irrelevant: criminal, divorce, DUI, workers comp, other states, non-legal
- Borderline: could be PI-adjacent but likely not our client
- Good: matches intent, keep
- Propose negatives at appropriate level:
- Account-level for universally irrelevant (e.g., "criminal defense")
- Campaign-level for campaign-specific irrelevance
- Ad-group-level for borderline terms in specific ad groups
2. Stale Negative Review (Remove Side)¶
- Pull the full negative keyword list (currently ~6,247 keywords)
- Identify negatives that may be blocking good traffic:
- Negatives that match high-intent queries (check against search terms that converted in the past)
- Broad match negatives that are too aggressive
- Negatives that were added reactively to a one-time junk query but now block a whole category
- Propose removals with evidence (what traffic they're blocking, conversion potential)
3. Conflict Detection¶
- Cross-reference negative keywords against active keywords
- Flag any negative that directly conflicts with an active keyword
- Cross-reference against Active Keywords Agent's new keyword proposals (received from Phase 2 parallel coordination)
4. Negative List Hygiene¶
- Check for duplicate negatives across different levels (account vs campaign vs ad group)
- Identify negatives that could be consolidated (e.g., 5 variations of the same concept)
- Flag negative lists that are approaching the 5,000-keyword limit per list
Data Sources¶
| Source | API Call | What it returns |
|---|---|---|
| Google Ads API | SearchTermView.list |
Yesterday's search terms + metrics |
| Google Ads API | CampaignCriterion.list (negative) |
Campaign-level negatives |
| Google Ads API | AdGroupCriterion.list (negative) |
Ad-group-level negatives |
| Google Ads API | SharedSet.list + SharedCriterion.list |
Shared negative lists |
| Google Ads API | KeywordView.list |
Active keywords for conflict check |
Change Manifest Actions¶
| Action | Risk | Auto-approvable |
|---|---|---|
ADD_NEGATIVE (account, clearly irrelevant) |
Low | Yes |
ADD_NEGATIVE (campaign/ad group, borderline) |
Medium | No |
REMOVE_NEGATIVE |
High | No (always review) |
FLAG_CONFLICT |
Medium | N/A (informational) |
CONSOLIDATE_DUPLICATES |
Low | Yes |
Auto-Approve Criteria (Add Side Only)¶
A negative can be auto-approved if ALL of: - It's clearly off-topic (criminal, family, immigration, bankruptcy, other state) - It had zero conversions ever - It had zero click-to-call events - It's being added at account level (broadest, safest) - It matches a known pattern from the firm's established negative list
Everything else requires approval.
Escalation Triggers¶
- A proposed removal would expose the account to >$50/day in previously blocked spend
- A conflict between negative and active keyword is found
- The negative list is approaching the 5,000-keyword limit
- Attribution Agent flagged tracking issues (skip the entire run)