---
name: apple-search-ads
description: Start or tune an app Product's Apple Ads — create the Brand / Category / Competitor / Discovery campaigns from a monthly budget, or audit the account and propose bid, budget, keyword and negative changes. Use for "Start Apple Ads campaigns", "Apple Search Ads", "ASA", "my bids", "TTR", "Search Match", "negative keywords", "scale my campaign". For Meta, Google or TikTok paid acquisition use ads; for the pages the ad groups land on use custom-product-pages.
metadata:
  version: 2.1.0
---

# Apple Search Ads

Two branches:

- **Start** — the ad account runs no campaign for this app, or the User asks to start one. Monthly budget → structure → target CPA per campaign → one Proposal per campaign. Only a Chat starts: it holds `connector_apple_ads_propose_campaign`.
- **Tune** — the campaigns exist. Audit them and turn what the data shows into spend Proposals. The Apple Ads Loop runs this branch; when the account has no campaign yet, its Output says so and names the Chat prompt "Start Apple Ads campaigns".

Benchmarks, seed lists, target CPAs and starting bids are in [`references/structure-and-bidding.md`](references/structure-and-bidding.md): read it before either branch.

## Gather

1. `read_context` — positioning, ICP, competitors, target keywords, and a target CPA or LTV when the Foundation doc names one.
2. `app_store_listing` — name and genres; the subtitle of each Locale from `connector_asc_localizations` when the ASC Connector exists.
3. `read_product_state` — the App Store Surface's `country` is the app's home storefront.
4. `connector_apple_ads_campaigns` — campaigns, ad groups, keywords, match types, bids, budgets and the last 30 days of spend, taps, tap installs, TTR and CPA.
5. `connector_apple_ads_search_terms` — the search terms that converted, and the ones with taps and no installs.
6. `connector_asc_analytics` when the ASC Connector exists — page views and downloads made from a page per source; their ratio on `App Store search` is the product page conversion that separates a keyword problem from a page problem.

**Keyword research** — `connector_apple_ads_suggestions` (Apple's keywords, phrases and suggested target CPA) and `connector_apple_ads_search_term_popularity` (search volume per term in one genre and storefront).

Without the Apple Ads Connector, lay out the structure, seeds and starting bids from the Foundation doc and `app_store_listing`, and name the Connection as what the creation step needs.

## Start

1. **Monthly budget.** Ask the User what they mean to spend on Apple Ads per month, in the ad account's currency, unless they already said. Size everything after it to that figure: the campaigns' daily budgets add up to about a thirtieth of it, and the plan states the split.
2. **Structure.** The reference's four campaigns, one ad group each, with its seed lists and match types. Seed Category from Apple's keyword and phrase suggestions, with the title's and the category's terms as seeds, and rank the candidates by popularity in the app's genre and storefront; rank the Competitor names the same way and drop a name Apple does not rank. Target the home storefront unless the User names others. Name each campaign `<App> – <Type> – <storefronts>`.
3. **Target CPA per campaign.** Set one per campaign from the reference's table, anchored to Apple's suggested target CPA and to LTV ÷ 3 when an LTV is known, and derive each ad group's default bid and keyword bids from it.
4. **Plan.** Show the whole plan in one message: per campaign its name, storefronts, daily budget, target CPA, ad group, default bid, and keywords with match type and bid. Each campaign goes live enabled the moment the User approves its Proposal.
5. **Propose.** Read the `connector-apis` Skill's `references/apple-ads.md` with `read_reference` (Creating a campaign) for what Apple accepts and where the ad account's currency is read, then call `connector_apple_ads_propose_campaign` once per campaign, carrying it whole. Its `why` gives the campaign's share of the monthly budget and its target CPA. On approve, Kwern creates the campaign, its ad groups, their keywords and one ad per ad group showing the default product page. A write Apple refuses fails that Proposal with Apple's reason, and Retry resumes from what exists; when the reason needs a different plan, say what to change. A change the User asks for on a campaign still pending is one `edit_proposal` call on its Proposal, carrying the whole new plan in `appleAdsCampaign`.

Done when every campaign of the plan waits as its own Proposal, and the closing message lists them with their daily budgets against the monthly budget, and says the Apple Ads Loop tunes them once they are live.

## Tune

Work through:

1. **Structure** — which of the four campaigns exist, whether budgets are separated per intent, and whether Discovery feeds proven terms into exact-match ad groups.
2. **Keywords** — per keyword: TTR, CVR, CPA against the campaign's target CPA, target CPT (`Target CPT = Target CPA × CVR`) and impression share. Classify each: scale, hold, lower bid, pause.
3. **Search terms** — new converting terms to add as exact match; irrelevant terms to add as negatives; terms with 100+ taps and no install to pause.
4. **Pacing** — month-to-date spend against the monthly budget in the briefing; a campaign that exhausts its daily budget before noon is budget-limited, one far under it is bid-limited.
5. **Page fit** — an ad group with TTR under 3 % needs a matching custom product page (`custom-product-pages`); high TTR with low CVR is a product page or paywall problem, not a bid problem.

### Output: campaign audit

- **Structure** — Brand / Competitor / Category / Discovery, each present or missing. A missing campaign is created in a Chat, from the prompt "Start Apple Ads campaigns".
- **Performance 30d** — impressions, taps (TTR), tap installs (CVR), CPA and spend per campaign, against the benchmarks and the target CPAs.
- **Top issues** — ranked, each with its fix.
- **Proposals** — one per change, each carrying `current value → proposed value` and the expected effect on taps, installs and CPA. Types: keyword bid, ad-group default bid (manually bid ad groups only), campaign daily budget, pause or enable a keyword, an ad group or a campaign, negative keyword, keyword added to an existing ad group.
- **Scaling readiness** — the reference's checklist, pass or fail, before any budget increase Proposal.

Done when every keyword with spend in the period is classified, every Proposal carries its current value, proposed value and expected effect, and the Output names the data it lacked when a Connector was absent.

## Related Skills

- `custom-product-pages` — the page each ad group lands on.
- `metadata-optimization` — the search-terms report feeds the keywords field.
- `ads` — paid acquisition on the other networks.
- `analytics` — attribution and LTV to set the target CPA.
