---
name: google-search-campaign-launcher
description: "Launch google sem ads campaigns the disciplined way: tightly-themed ad groups, keyword match-type strategy, RSAs, a seed negative list, conversion tracking verified, launched paused and diffed against the plan before spend. Uses Ahrefs for volumes if connected."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "campaign-launch"
  adspirer_source: "https://www.adspirer.com/skills/google-search-campaign-launcher"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "google ads campaign"
  adspirer_secondary_keywords: "google search campaign, google ads campaign setup"
  adspirer_launch_wave: "1"
  adspirer_kind: "skill"
  adspirer_level: "operator"
  adspirer_platforms: "google"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "Launch google sem ads campaigns the disciplined way: tightly-themed ad groups, keyword match-type strategy, RSAs, a seed negative list, conversion tracking verified, launched paused and diffed against the plan before spend. Uses Ahrefs for volumes if connected."
  adspirer_connections_required: "ahrefs,adspirer"
  adspirer_connections_optional: ""
---

# Google SEM Ads Campaign Launcher: Disciplined Google Search Campaign Builder

## Use this when

Use this to launch a new google sem ads campaign on Google Search from scratch — a genuinely new product/service line, a new geo expansion, or a rebuild after an account-quality reset. Best fit when you have a defined offer, a landing page that's live and trackable, and a budget range already agreed with the user. Not the right skill for: adding a single ad group to an existing well-structured campaign (too heavy), Performance Max or Shopping launches (different inventory/signal model), ads in Google Maps / Google Maps ads placements (local-pack and Maps inventory use a different targeting, radius, and asset model than Search — route those to a Maps-specific skill, not this one), or "just turn on some keywords fast" asks with no conversion tracking in place — that gets built here, not skipped.

## What you need

- Landing page URL(s) live and loading (not staging) — one primary URL minimum, ideally one per ad group theme
- Monthly budget the user has approved for this campaign (a number, not "whatever performs")
- Target geo(s) and language(s)
- A short list of seed keyword themes or the product/service being sold (3-8 themes is a good starting range — fewer and the account structure is too thin to learn, more and you're better off as multiple campaigns)
- Conversion action already defined in the account, or agreement on what counts as a conversion (form fill, purchase, call) so tracking can be verified before spend
- Business name, 1-2 unique value props, and any promo/pricing details for RSA copy
- Any brand terms, competitor names, or known negative-fit terms the user wants excluded from day one
- Before building or changing a live campaign, read `references/google-search-launch-checks.md` for the task-specific policy, tracking, and final-URL checks. Re-open it if the platform returns a policy or tracking warning.

## Procedure

1. Confirm the brief with the same discipline expected of a Google Ads certified strategist. Restate offer, geo, language, budget, and landing page(s) back to the user in one line each. If the landing page isn't live yet or budget wasn't stated as a real number, stop and ask — don't guess a budget.
2. Cluster keyword themes into ad groups (SKAG-adjacent, not literal SKAGs). Group by search intent, not just shared root — "running shoes for flat feet" and "running shoes wide width" are different ad groups even though both say "running shoes," because the intent/landing page fit differs. Target 8-15 tightly related keywords per ad group; if a theme needs 30+ keywords to cover it, split it. This is the single biggest lever on Quality Score — one relevant headline set per ad group beats one generic set stretched across everything.
3. Pull search volume and CPC ranges for the seed list, if Ahrefs is connected.
**Connect Ahrefs:** this step uses Ahrefs. Add the Ahrefs MCP/connector to your agent — setup: https://docs.ahrefs.com/en/mcp/docs/introduction, then continue. Skip only if a step says it's optional.
Use Ahrefs Keywords Explorer to get volume, keyword difficulty, and CPC estimates per theme, and to surface adjacent long-tail variants and "also rank for" terms you missed. If Ahrefs isn't connected, proceed on the user's seed list plus Google's own volume signal once keywords are entered — don't block the launch on this, just flag that estimated CPCs are unverified until the account has live auction data.
4. Decide match-type strategy per ad group, not per account. Default: Phrase match as the primary match type for coverage + control (broad match without Smart Bidding maturity burns budget on irrelevant queries; exact-only starves the ad group of volume and stalls learning). Use Exact match only for your highest-intent, highest-CPC head terms where you want to hard-pin the query. Avoid Broad match on a brand-new campaign with no conversion history — revisit after 2-3 weeks of search-term data once you have negatives seeded and, ideally, enough conversion volume (30+ conversions/mo) for Smart Bidding to have a signal. State this default explicitly to the user since it's a real tradeoff they may want to override (e.g., aggressive volume-first launches sometimes want broad + tROAS from day one — that's a valid but different risk profile).
5. Build the seed negative keyword list before writing a single ad. Minimum coverage: (a) job/career terms ("jobs," "salary," "hiring") unless recruiting, (b) "free" and "cheap" if the offer isn't price-led, (c) competitor brand names unless the user explicitly wants a conquesting campaign (flag this choice — conquesting on trademarked terms has its own policy and legal exposure the user should confirm), (d) irrelevant modifiers surfaced from the Ahrefs pull (e.g. "diy," "tutorial," "reviews" for a services business), (e) generic informational intent ("what is," "how does X work") if the landing page is transactional not educational. Apply at campaign level unless a specific ad group needs an exception.
6. Write 2-3 RSAs per ad group using the business name, geo, and value props from the brief. Minimum 8-10 headlines and 3-4 descriptions per RSA to give Google's combination-testing room to work — fewer headlines materially caps Ad Strength and optimization. Pin sparingly: pin only if brand/compliance requires exact wording in position 1 (e.g. a regulated claim), since pinning suppresses combination testing. Include at least one headline with the primary keyword theme verbatim per ad group for relevance signal, and one with a clear CTA. Add sitelinks, callouts, and structured snippets at the campaign level if the user has assets for them — these are free real estate for CTR and Quality Score.
7. Verify conversion tracking is live and firing before touching the ad platform.
**Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed.
Use audit_conversion_tracking (or equivalent live check) to confirm the conversion action exists, is set to the right count-type (one per conversion for leads, or the appropriate model for purchases), and has fired at least once recently if the site has any existing traffic. A campaign with broken or absent tracking should not launch even paused — fix tracking first or launch with an explicit "tracking unverified" flag to the user and get their sign-off to proceed anyway.
8. Build the full campaign structure in the ad platform: campaign → ad groups → keywords → RSAs → sitelinks/assets → seed negatives, with budget and bidding strategy set per the brief, and launch it PAUSED. Do not enable serving in this step regardless of how confident the structure is — pause is the default terminal state of the build step.
9. Diff the built campaign against the approved plan before recommending go-live. Pull the live structure back from the platform (ad groups, keyword count and match types, budget, geo/language targeting, negative list, RSA count per ad group) and compare line-by-line against what was approved in steps 1-6. Flag any mismatch — a keyword that silently changed match type on import, a budget that saved wrong, a geo that defaulted to a broader radius than specified — before asking the user to approve go-live.
10. Present the paused campaign plus the diff to the user and ask for explicit go-live approval, stating the daily/monthly budget that will start spending and the earliest date it would begin.

## Fixed checks

- Conversion tracking check re-pulled live from the ad platform (not assumed from the brief) immediately before the structure build and again immediately before recommending go-live — tracking can be edited or broken between steps by the user or another process
- Live re-fetch of the built campaign structure (ad groups, keyword match types, negative list, budget, geo/language, RSA headline/description counts) diffed against the approved plan — never trust the tool call's own "success" response as proof the structure matches intent
- Campaign serving status confirmed PAUSED via a live status read immediately before presenting to the user, not inferred from the creation response
- Budget amount and currency confirmed live against the account's actual currency setting — a plan budget stated in USD can silently apply as local currency on some account setups
- Ad group keyword counts and match-type distribution re-pulled live and checked against the plan (catches match-type drift on bulk import)

## Stop conditions

- Success: Campaign built exactly to the diffed, approved plan; launched and confirmed paused; conversion tracking verified live; user has approved go-live with a stated budget and start date.
- No-op: User brief was incomplete in a way that blocks any safe build (no real budget number, no live landing page, no defined conversion action) — nothing built, user asked for the missing input.
- Blocked: Conversion tracking cannot be verified as firing, or the diff step surfaces a structural mismatch (e.g. budget imported 10x, match type reverted to broad account-wide) that isn't safely auto-correctable — campaign stays paused, issue reported to user with the specific discrepancy, no go-live recommendation given.
- Needs-approval: Structure is built, verified, and diffed clean — campaign sits paused awaiting the user's explicit go-live decision. This is the expected normal end state of every successful run; the skill never enables serving on its own.

## Approval boundaries

Every spend-triggering action requires the user's explicit, separate approval — this skill's default terminal state is a paused campaign, never live. Specifically: (1) the campaign is built and left PAUSED regardless of how clean the plan looks; (2) enabling serving (go-live) requires a distinct, explicit user approval after being shown the diffed structure and the exact budget/currency/start date that will begin spending; (3) any mid-build deviation from the approved brief (e.g. user wants to switch match-type strategy to broad, or add a conquesting ad group targeting competitor brand terms) requires re-confirming that specific change before building it, not silent adoption. Nothing in this skill self-authorizes spend under any condition.

## What you get

A fully structured google sem ads campaign on Google Search — themed ad groups with 8-15 keywords each on a stated match-type strategy, 2-3 RSAs per ad group with 8-10 headlines/3-4 descriptions, a seed negative keyword list, sitelinks/callouts where assets exist, and verified-live conversion tracking — built and left PAUSED in the ad account. Plus a line-by-line diff of the live-built structure against the approved plan (flagging any drift), and a clear go/no-go ask with the exact budget and start date pending the user's explicit go-live approval.
