Skip to main content
search-ads pull reads Apple Search Ads with your own API key and writes this app’s numbers to appeeky/search-ads/. Use it to see what you pay per install, which keywords waste money, and which searches people typed before installing, so you can target them in the listing and rank for them for free. No Appeeky account is needed. Apple’s numbers stay in your repo.

1. Create the API key in Apple Search Ads

  1. In Apple Search Ads, open Account Settings → User Management and invite a user with an API role with read access, for example API Account Read Only.
  2. Sign in as that user and open Account Settings → API.
  3. Make an EC key pair and upload the public key:
  4. Apple shows a client id, a team id and a key id. Keep the private key file outside the repo.

2. Save the key

On your App Store Connect CLI account (your machine)

Save the Search Ads key on the same account that holds your App Store Connect key. Both keys then live in one place, and the private key never leaves the CLI:
Spec uses the account in stores.appStore.account, or the CLI’s default account. Use the EC private key, not the public key you uploaded. More options: Apple Search Ads in the App Store Connect CLI.

As environment variables (CI, Docker)

In CI there is no CLI account, so set these as secrets: When ASA_CLIENT_ID, ASA_KEY_ID or ASA_PRIVATE_KEY is set, the environment wins over the CLI account. Set all three, or Spec tells you which one is missing.

3. Point the spec at the app

4. Pull

--days <n> changes the window (default 30, up to yesterday). With no campaign for the app, it says No campaign for App Store id 1234567890 in org 1234567. A report that cannot be read is listed with !; the rest are still written.

What it writes

Keyword and search term reports come from campaigns that show in App Store search results; other placements only add to daily.csv.

Read summary.md

Search terms that brought installs and are not targets. People typed these and installed. Spec compares them with every storefront’s targets in appeeky.spec.yaml and lists up to 15. Each one is a candidate for targets and for the keyword field: ranking for it organically costs nothing. Keywords that spent and brought no install. Up to 10, most spend first. Lower the bid, pause the keyword, or check whether the listing answers that search at all.

Daily routine

  1. Run search-ads pull once a day, or let CI do it: the daily workflow and the Docker daily routine run it when ASA_CLIENT_ID is set. See GitHub Actions & CI.
  2. Commit appeeky/search-ads/ so the history builds up.
  3. Once a week, read summary.md. Move the best new search terms into targets, run check, and open a pull request.
  4. After the push, verify tells you on day 7 and day 14 whether organic ranks moved for those terms.

Metrics

ads, verify and experiments read daily.csv as two metrics, with no Appeeky connection: When the repo has daily.csv, it wins over Search Ads data from Appeeky. See Paid channels. Related: Paid channels · On your own keys · Listing