launch-google-search

A command workflow for creating a Google Ads Search campaign. Search campaigns show text ads in response to people searching Google for selected keywords.

In plain words
What is it for?
Use it to create a campaign, ad group, responsive search ads, keywords, sitelinks, callouts, and negative keywords.
Why use it?
It collects the required campaign details and prepares everything paused, so the setup can be checked before advertising begins.

Command

Install

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.

agentmods
npx agentmods add commands/markifact/markifact-mcp/launch-google-search
Clone the repo
git clone --depth 1 https://github.com/markifact/markifact-mcp
Per session 52 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,365 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.00052 $0.01365
Opus 5 $0.00026 $0.00682
Sonnet 5 $0.00010 $0.00273
Haiku 4.5 $0.00005 $0.00136

Measured 2d ago against content hash 7774025cba0c, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

launch-google-search 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 2d 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.

commands/launch-google-search.md · 74 lines

How it starts

The opening of the file, as written. The whole thing — 74 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Goal

Stand up a production-ready Google Ads Search campaign in one workflow. Always start paused so the user reviews before spending.

Inputs to confirm with the user (batch these in one question)

  1. Account name (substring match) — required.
  2. Campaign objective (Leads / Sales / Website traffic) and conversion action to optimize for — required if Smart Bidding is requested.
  3. Daily budget — required.
  4. Bidding strategy — MAXIMIZE_CONVERSIONS, TARGET_CPA, TARGET_ROAS, MAXIMIZE_CLICKS, or MANUAL_CPC. Default: MAXIMIZE_CLICKS if no conversion data exists yet, else MAXIMIZE_CONVERSIONS.
  5. Geo + language — required.
  6. Final URL — required for RSAs.
  7. Keyword themes (3–10 tightly-grouped concepts) — required.
  8. Brand name + 1-line offer — required for RSA generation.

If the user gave a brief in the slash argument, parse it first and only ask for what's missing.

Workflow

  1. Discover required ops once with find_operations. Look for IDs containing: gads_select_accounts, gads_create_campaign, gads_create_ad_group, gads_create_responsive_search_ad, gads_add_keyword_to_ad_group, gads_create_sitelinks, gads_create_callouts, gads_create_structured_snippets, gads_add_negative_keywords_to_campaigns, gads_search_geo_targets.
  2. Inspect each with get_operation_inputs before first use — never guess Google Ads input shapes.
  3. Resolve account: gads_select_accounts with the user-given name as substring; if multiple match, ask user to disambiguate.
  4. Resolve geo IDs: gads_search_geo_targets for each location string the user provided.
  5. Create campaign (PAUSED) → returns campaign_id. Set advertising_channel_type=SEARCH, the chosen bidding strategy, daily budget, geo + language targeting.
  6. Create ad group under that campaign_id → returns ad_group_id.
  7. Generate RSA assets following the rules below, then gads_create_responsive_search_ad with ad_group_id and the final URL.
  8. Add keywords with gads_add_keyword_to_ad_group. Default match types: phrase + exact for the same theme; avoid pure broad unless the user is on Smart Bidding with sufficient conversion data.
  9. Add extensions in order: sitelinks → callouts → structured snippets. All optional — skip silently if the user didn't ask for them, but suggest it once at the end.
  10. Add account-level brand-protection negatives (competitor names if any) and obvious junk negatives (free, jobs, careers, download, crack, etc. — adjust to vertical) via gads_add_negative_keywords_to_campaigns.
  11. Confirm to user: campaign ID, ad group ID, ad strength, keyword count, link to review in Google Ads UI. Remind they're paused.

Read the full file on GitHub · 74 lines

Changes

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.

  1. 2d ago First seen · 74 lines · 52 tokens per session scan A 7774025cba0c

Subscribe to this mod's changes

launch-google-search is a command published in the GitHub repository markifact/markifact-mcp (48 stars, last pushed 14d ago), licensed MIT. It adds 52 tokens to every session and 1,365 once invoked, about $0.0003 per session on Opus 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.