Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/markifact/markifact-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/markifact/markifact-mcp/negative-keyword-sweep)<a href="https://agentmods.dev/commands/markifact/markifact-mcp/negative-keyword-sweep"><img src="https://agentmods.dev/badge/commands/markifact/markifact-mcp/negative-keyword-sweep/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/markifact/markifact-mcp/negative-keyword-sweep"><img src="https://agentmods.dev/badge/commands/markifact/markifact-mcp/negative-keyword-sweep.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00050 | $0.01534 |
| Opus 5.5 | $0.00020 | $0.00614 |
| Sonnet 5.5 | $0.00010 | $0.00307 |
| Haiku 4.5 | $0.00005 | $0.00153 |
Grade A, and why
negative-keyword-sweep scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 84 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Goal
Pull the search-terms report, identify spend that isn't producing, group it intelligently, and add negatives at the right level — without nuking legitimate intent.
Inputs to confirm (batch)
- Account name (substring) — required.
- Scope — single campaign, list of campaigns, or "all Search campaigns" — required.
- Lookback — default 30 days; user can override (60 / 90).
- Waste thresholds — defaults; allow override:
- No-converter: spend ≥ $X over lookback AND 0 conversions. Default $X = 2× target CPA, or $50 if no target.
- Low-CVR offender: spend ≥ 3× target CPA AND CVR < 25% of account CVR.
- Off-brand / off-intent: terms that match a denylist of words (e.g.
free,jobs,careers,tutorial,review,salary,download,cheap,pirate,crack) — calibrated to vertical.
- Negative scope preference — default behavior:
- Recurring junk seen across multiple campaigns → account-level shared negative list.
- Waste seen only in one campaign → campaign-level.
- Single-theme misintent (e.g. "free" only hurts a paid product ad group) → ad-group-level.
- Default match type: phrase, except for single-word obvious junk → broad isn't an option (negatives have no broad), so use exact for single tokens like
free.
Workflow
- Discover ops:
gads_select_accounts,gads_list_report_fields,gads_get_report,gads_create_negative_keyword_list,gads_attach_negative_list_to_campaigns,gads_add_keywords_to_negative_list,gads_add_negative_keywords_to_campaigns,gads_add_negative_keywords_to_ad_groups. - Inspect every op via
get_operation_inputs. - Resolve account (substring).
- Pull search-terms report via
gads_get_reportat the search-term granularity (search_term_viewresource). Required fields: search_term, campaign_id/name, ad_group_id/name, impressions, clicks, cost, conversions, conv_value, ctr, cvr. - Compute baselines: account-level CVR over lookback. Compute target CPA if not given (use account history / average across the scope).
- Apply thresholds → candidate list. Tag each candidate with the trigger reason (no-conv, low-CVR, denylist).
- Cluster candidates by intent. Group on shared roots / themes (e.g.
free trial spreadsheet,free template excel,free download→ cluster "free*"). For each cluster, propose:- Negative keyword(s) (the minimum tokens needed to block the cluster — usually a phrase).
- Match type (phrase by default; exact for single-token denylist hits; phrase for multi-word patterns).
- Scope (account / campaign / ad-group) per the rules above.
- Build a preview table showing every proposed negative with: keyword, match, scope, target campaigns/ad groups, wasted spend that would have been blocked, and a sample of 1–3 search terms it covers. Wait for user confirmation.
- Execute:
- Account-level batch → if a list with the right purpose already exists, use
gads_add_keywords_to_negative_list. If not,gads_create_negative_keyword_listthengads_add_keywords_to_negative_listthengads_attach_negative_list_to_campaigns. - Campaign-level batch →
gads_add_negative_keywords_to_campaigns. - Ad-group-level batch →
gads_add_negative_keywords_to_ad_groups.
- Account-level batch → if a list with the right purpose already exists, use
- Confirm: count by scope, total estimated spend blocked.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 84 lines · 50 tokens per session scan A 4a761fc0c384
negative-keyword-sweep is a command published in the GitHub repository markifact/markifact-mcp (53 stars, last pushed 18d ago), licensed MIT. It adds 50 tokens to every session and 1,534 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
change-plan
Create a comprehensive change management plan for a transformation initiative.
ma-strategy
Develop M&A strategy including target screening, synergy analysis, or integration planning.
market-entry
Develop a market entry strategy for a new market, geography, or segment.
benchmark
Benchmark a company or function against peers and industry standards.
competitor-profile
Build a detailed profile of a specific competitor.
market-scan
Run a quick market scan on an industry or market segment.