Skip to the content

apple-search-ads

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.

Written by Kwern, after the skill of the same name in Eronred's aso-skills, MIT. Updated 2026-10-05.

The file, as Kwern runs it

Nothing below is rewritten or cut. The description a model routes on comes first, then the file itself. The whole thing, frontmatter included, is at /skills/apple-search-ads.md.

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.

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: 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.

  • 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.

What it discloses

The Skill reads these files only when it needs them, so the model spends nothing on them the rest of the time.

  • references/structure-and-bidding.md

From your accounts to a proposal

  1. 01

    Connect what it reads

    Give the Apple Ads agent the accounts it works on. Kwern never asks for a password, and an agent missing a connection says so instead of guessing.

  2. 02

    The loop runs weekly

    Before it writes a word it reads the foundation doc, which holds the positioning, the audience and the voice, and whatever its connectors return that day.

  3. 03

    The apple-search-ads skill runs

    The agent activates it when the run calls for it, and what the model then reads is the file on this page, word for word.

  4. 04

    A proposal waits for you

    Nothing is published and nothing is spent until you approve it. Approve and Kwern posts it where it holds the keys; where it does not, it hands you the text and the link.

The file, the agency, and the agent

On your ownAn agencyKwern
The methodWhatever you remember to do that weekTheirs, and you never get to read itThis file, open on this page
Who runs itYou, when there is timeAn account manager, between other accountsThe Apple Ads agent, weekly
What it readsWhat you can pull by handWhat you remembered to send themYour connected accounts and your foundation doc
What comes outA draft, sometimesA deck, and a report at the end of the monthA proposal you approve or throw away
What it costsYour eveningsA retainerOne subscription, and the model on your own key

Questions about apple-search-ads

Someone is asking for what you built today.

On Reddit, on X, in ChatGPT's answers. Kwern finds them every morning and drafts the reply in your voice; you decide what goes out.