--- name: google-app-campaign description: "Launch a Google App campaign with the conversion event and asset variety checked before spend, and bidding matched to the volume the app actually produces. Use for a new install or in-app action push." 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-app-campaign" adspirer_trigger: "launch a Google app install campaign" adspirer_connection_url: "https://adspirer.ai/sign-up" adspirer_primary_keyword: "google app campaign" adspirer_secondary_keywords: "app install ads, universal app campaign" adspirer_launch_wave: "2" adspirer_kind: "skill" adspirer_level: "operator" adspirer_platforms: "google" adspirer_supported_clients: "claude,claude-code,claude-cowork,chatgpt,codex,cursor,gemini,windsurf" adspirer_summary: "Check the conversion event and asset coverage first, then build an App campaign paused with bidding matched to real event volume." adspirer_connections_required: "adspirer" adspirer_connections_optional: "" --- # Google App Campaign ## Use this when The app is live in both stores and the growth target is installs by the end of the quarter. Someone has been told App campaigns are mostly automated, which is true in the sense that there are few levers — and misleading, because the handful that exist decide almost everything and most of them are set before launch. Use this skill to set them deliberately. It works out: - whether the in-app event you want to optimize toward is actually being received; - whether the app has enough event volume for value-based bidding to be realistic yet; - whether the asset set covers enough formats for the system to have anything to assemble; - which store and which markets the campaign is genuinely eligible for; and - what to expect during the learning period, agreed before rather than explained after. This is for launching a new App campaign, whether it is the first one or a second alongside existing campaigns. It does not create app store listings or produce creative assets. ## What you need - Adspirer connected to the Google Ads account, with active billing and access that can create campaigns. - The app live in its store, and the store listing in the state you want people to arrive at. Ad performance is capped by the listing, and a weak listing shows up as an expensive campaign. - Conversion tracking that genuinely reports installs and, if you intend to optimize deeper, the in-app event you care about. Whether events are actually arriving gets verified rather than assumed. - Assets across the formats the system needs — text, image, and video. Where video is missing, Google will assemble something from what exists, and that usually performs worse than a purpose-made asset. - Budget, target markets, and a decision on whether this campaign chases installs or a deeper in-app action. Those are different campaigns with different volume requirements. ## Procedure **Connect Adspirer before any live ad-account step.** Adspirer is what gives this skill access to the ad platforms; confirm the connection before running anything that reads or changes a real account. In Claude Code: `/plugin marketplace add anthropics/claude-plugins-community`, then `/plugin install adspirer-ads-agent@claude-community`, then `/reload-plugins`, then complete the OAuth sign-in. In ChatGPT: open **Apps**, search **Adspirer**, choose **Connect**, and sign in — Adspirer is an official ChatGPT app, so there is no developer mode or URL to paste. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → `https://mcp.adspirer.com/mcp`. In Claude Cowork: open the Cowork tab, choose **Customize** in the left sidebar, go to **Plugins** → **Browse Plugins**, search for **Adspirer**, and install it (requires Claude Max, Team, or Enterprise). Any other client: https://www.adspirer.com/docs/ai-clients. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. 1. **Verify the signal before choosing what to bid toward.** Confirm the app is linked to the account and that install and in-app events are genuinely being received, not merely configured. Then check the recent volume of whichever event the campaign is meant to optimize toward. If that event is rare, say so now and recommend optimizing toward installs first — a campaign told to find a deep event the app produces a handful of times a week cannot learn, and it will underdeliver rather than error. 2. **Match the bidding to the volume that exists.** Choose the bidding approach from the account's actual event history rather than from the ambition. Where volume is thin, start where the system can learn and say when it would be reasonable to move deeper. Where a target is proposed, source it from the account's own results rather than inventing a figure, and be clear that early performance during learning will not represent steady state. 3. **Build the asset set for what the system has to assemble.** App campaigns compose ads from what you provide across formats, so gaps constrain where the campaign can appear. Confirm coverage across text, image, and video, and flag any missing format with what it costs in reach. Where no video exists, say plainly that an auto-assembled one will be used and typically underperforms — that is a production decision, not a setting. 4. **Confirm markets, stores, and eligibility.** Set the geography and languages, confirm which store the campaign points at, and check for anything that would restrict delivery. A campaign built for markets the app is not available in spends against people who cannot install it, and that is invisible in the campaign view. 5. **Build paused, verify, and hand over the launch.** Create the campaign with everything above configured and nothing active. Re-read what Google saved and run the fixed checks against it. Present the build alongside the event-volume finding, the asset gaps, and what to expect during learning, then enable only on an explicit go. ## Fixed checks - Confirm the app is linked and that install and in-app events are actually being received, read from the account rather than from configuration. - State the recent volume of the intended optimization event, and the figure any bidding recommendation rests on. - Confirm asset coverage per format, and name any gap with its effect on reach rather than silently proceeding. - Confirm the campaign points at the intended store and that target markets are ones the app is available in. - Confirm the campaign is paused before approval is requested, read back from the live account. - Confirm the saved budget matches the approved figure in the account's own currency. - Never invent a target cost or value; source it from account history or state that none exists. - Set expectations for the learning period explicitly, so early results are not misread as failure. ## Stop conditions - **Success:** the campaign is built, verified, approved, and enabled with expectations set. - **Built and parked:** everything is assembled and verified paused, and the user wants to review first. - **Blocked — signal:** installs or the intended in-app event are not being received. Stop rather than launching bidding that cannot optimize. - **Blocked — assets:** no usable assets exist for the required formats and none can be supplied. - **Blocked — access:** the connection lacks campaign-creation access, or billing or policy problems prevent launch. - **Needs approval:** the build is complete and verified, waiting on an explicit go. - **Needs a handoff:** event instrumentation, store listing work, or creative production belongs to someone else. ## Approval boundaries Building, checking, and presenting the campaign involves no spend — it is created paused and stays that way until you say otherwise. Enabling is the single moment spend begins and follows an explicit approval given after the verification has been seen. This skill cannot instrument or repair in-app event tracking, edit the app store listing, produce creative assets, resolve billing, or appeal policy decisions; each is named with its owner when it blocks. Targets and budgets are never invented, and a thin optimization event is reported rather than worked around. ## What you get An App campaign in the account — live if approved, paused if not — with the parts that quietly decide its outcome settled before spend rather than diagnosed after. The optimization event is verified as actually arriving, with its recent volume stated, so the campaign is not asked to learn from something the app barely produces. Bidding is matched to that volume rather than to ambition, with any suggested target sourced from the account's own history. Asset coverage is reported per format, with any gap named alongside what it costs in reach — including a plain statement when no video exists and an auto-assembled one will be used instead. Markets and store targeting are checked against where the app is actually available, which is a silent and expensive mismatch otherwise. You also get expectations for the learning period agreed up front, so the first week is read correctly instead of triggering a premature change.