launch-google-search
SkillSearchLaunch a complete Google Ads Search campaign, campaign, ad group, responsive search ads, keywords, sitelinks, callouts, and negatives, built paused and ready to review. Use when the user wants to spin up a new Search campaign on Google Ads.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the launch-google-search skill
What this skill tells your AI
The instructions your AI receives, as published by markifact/markifact-mcp in plugins/hermes/markifact/skills/launch-google-search/SKILL.md and read by ahel’s review.
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)
- Account name (substring match) — required.
- Campaign objective (Leads / Sales / Website traffic) and conversion action to optimize for — required if Smart Bidding is requested.
- Daily budget — required.
- Bidding strategy —
MAXIMIZE_CONVERSIONS,TARGET_CPA,TARGET_ROAS,MAXIMIZE_CLICKS, orMANUAL_CPC. Default:MAXIMIZE_CLICKSif no conversion data exists yet, elseMAXIMIZE_CONVERSIONS. - Geo + language — required.
- Final URL — required for RSAs.
- Keyword themes (3–10 tightly-grouped concepts) — required.
- 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
- 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. - Inspect each with
get_operation_inputsbefore first use — never guess Google Ads input shapes. - Resolve account:
gads_select_accountswith the user-given name as substring; if multiple match, ask user to disambiguate. - Resolve geo IDs:
gads_search_geo_targetsfor each location string the user provided. - Create campaign (PAUSED) → returns
campaign_id. Setadvertising_channel_type=SEARCH, the chosen bidding strategy, daily budget, geo + language targeting. - Create ad group under that
campaign_id→ returnsad_group_id. - Generate RSA assets following the rules below, then
gads_create_responsive_search_adwithad_group_idand the final URL. - 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. - 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.
- Add account-level brand-protection negatives (competitor names if any) and obvious junk negatives (
free,jobs,careers,download,crack, etc. — adjust to vertical) viagads_add_negative_keywords_to_campaigns. - Confirm to user: campaign ID, ad group ID, ad strength, keyword count, link to review in Google Ads UI. Remind they're paused.
Use the safe-write-operations skill for every step from #5 onward — each is a write. Batch into a single approval request when possible.
Platform-specific rules the model MUST respect
- Prefer dedicated ops over
gads_mutate. Only fall back to mutate if no dedicated op exists for the action. - RSA asset minimums and limits: 3–15 headlines (30 chars each), 2–4 descriptions (90 chars each). Generate at least 8 headlines and 3 descriptions for healthy ad strength. Each asset must be unique — Google rejects duplicates.
- No pinning unless requested. Pinning headlines or descriptions tanks ad strength and limits Google's optimization. If the user demands pinning (legal disclaimer, brand-required), pin sparingly to position 1.
- Smart Bidding requires conversions. If the user picks
TARGET_CPAorTARGET_ROASand the account has < 30 conversions in the last 30 days, warn that the strategy will struggle and recommendMAXIMIZE_CONVERSIONSfirst. - Match types: don't add the same keyword in multiple match types in the same ad group — phrase + exact is fine across ad groups; same ad group causes self-competition.
- Geo targeting uses Google's geo target IDs (numeric) — always resolve via
gads_search_geo_targets, never pass a country/city name string. - Budget shared vs daily: a campaign-level daily budget is what the user usually means. Don't auto-attach a portfolio budget unless asked.
- Always start PAUSED so the user inspects targeting and assets before spending.
Failure modes & recoveries
- "Bidding strategy requires conversion tracking" → drop to
MAXIMIZE_CLICKS, tell the user, and suggest enabling conversion import from GA4 first. - "Ad strength: Poor" after creation → add more headline variety (different angles: benefit, feature, urgency, brand, question), re-create the RSA, leave the old paused.
- "Geo target not found" → ask the user for the more specific name (city + region) or a postcode.
- Account has multiple matching results → list them with IDs and ask user to pick one.
Output to user
A short table:
| Item | Value |
|---|---|
| Account | (id) |
| Campaign | (id, PAUSED) |
| Ad group | (id) |
| RSAs created | |
| Keywords added | (phrase=, exact=) |
| Extensions | sitelinks=, callouts=, snippets= |
| Negatives added |
End with: "Review in Google Ads, then unpause when ready. Ask me to /markifact:diagnose-underperformer after 7 days of data."
Signals
- GitHub stars
- 48
- Forks
- 8
- Last commit
- Sep 2026
ahel review
S4info
community integration, published by markifact, not google
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Key
launch-google-search- Source
- github.com/markifact/markifact-mcp