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
- 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.
- Sign in as that user and open Account Settings → API.
-
Make an EC key pair and upload the public key:
- 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: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’stargets 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
- Run
search-ads pullonce a day, or let CI do it: the daily workflow and the Dockerdailyroutine run it whenASA_CLIENT_IDis set. See GitHub Actions & CI. - Commit
appeeky/search-ads/so the history builds up. - Once a week, read
summary.md. Move the best new search terms intotargets, runcheck, and open a pull request. - After the push,
verifytells 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
