01 / INTERPRETING THE 1–100 SCALE

What a score of 5, 35, or 85 actually means for App Store Optimization

Apple’s `searchPopularity1to100` index is exponential, not linear. A keyword with a popularity of `80` does not have twice the search volume of a keyword with a popularity of `40`—it often represents 10× to 50× more daily searches. When selecting keywords for your iOS Title (30 chars), Subtitle (30 chars), and Keyword Field (100 bytes), breaking the 1–100 scale into four operational tiers prevents you from wasting metadata space:

Popularity Band Keyword Tier Typical Examples Recommended ASO Placement Strategy
80 – 100 Macro Head Terms & Big Brands calculator, photo editor, vpn, instagram Avoid targeting as standalone terms in a new app’s Title; the top 10 results have hundreds of thousands of ratings. Use only as modifiers inside multi-word phrases.
45 – 79 Mid-Tail Category Terms habit tracker, budget planner, pdf scanner, pomodoro timer Primary Title & Subtitle targets once your app has solid ratings, or when combined with a lower-difficulty modifier in your 100-byte keyword field.
20 – 44 High-Intent Long-Tail Terms water intake reminder, invoice maker, vocabulary flashcards The indie sweet spot. High tap-to-install intent, specific user need, and winnable top-10 difficulty.
5 – 19 Micro-Niche / Baseline Floor freelance invoice generator, offline bible study notes 5 is Apple’s floor for low-volume queries. Worth targeting only when exact-match relevance is 100% and competition is near zero.
02 / THE TWO ENDPOINTS COMPARED

Why Searchbop never mixes `countryPopularity` and `suggestions` without a label

When we built Searchbop’s ASO engine ([`apple-ads.ts`](file:///Users/tarik/Desktop/TengrX-SEO/packages/core/src/aso/apple-ads.ts) and [`apple-popularity-test.mjs`](file:///Users/tarik/Desktop/TengrX-SEO/scripts/aso-test/apple-popularity-test.mjs)), we tested both of Apple’s official popularity endpoints across head terms and 4-word long-tail phrases in multiple storefronts (`US`, `TR`, `GB`, `DE`). Here is the exact behavior observed on the wire:

APPLE ADS API ENDPOINT COMPARISONhttps://api.ads.apple.com/v1
Endpoint A: POST /v1/insights/apps/search-term-popularity/query
- Granularity:  WEEKLY_SUN_SAT (requires completed Sunday-Saturday UTC range)
- Filters:      countryOrRegion = "US", searchTerm IN [...]
- Coverage:     Lists only ~top 500 terms per genre (15 genres). Most 3-4 word
                long-tail phrases return 0 rows (absent from the table).
- Scale:        True country-specific popularity for that storefront and week.

Endpoint B: POST /v1/suggestions/keywords/query
- Filters:      promotedObjectId = [adamId], terms IN [seed], countriesOrRegions IN [country]
- Coverage:     Returns related keywords + exact match popularity for almost ANY term,
                including long-tail phrases absent from Endpoint A.
- Scale Caveat: Returns the exact same popularity integer across different countries,
                and its integer value for head terms differs from Endpoint A's country score.
- Ownership:    Apple only serves suggestions for an adamId that belongs to the connected
                Apple Ads account (returns 4xx refusal for third-party competitor app IDs).

Because of this behavior, Searchbop runs a strict two-step lookup in [`readPopularity()`](file:///Users/tarik/Desktop/TengrX-SEO/packages/core/src/aso/research.ts#L55-L80):

  1. It first batches your keywords (50 terms per request) against Endpoint A (`countryPopularity`) using the newest published Sunday–Saturday week for that country and marks every match as source: "insight".
  2. Only for terms missing from the country insight list, it queries Endpoint B (`suggestions`) using your app’s storeAppId and marks matches as source: "suggestion". If the app you are inspecting is a competitor’s app (not linked to your Apple Ads account), Searchbop catches Apple’s 4xx refusal gracefully and displays a clear notice explaining why only country-level insight scores are available.
03 / WEEKLY PUBLICATION LAG

Why querying “last week” in Apple Ads often returns empty rows on Monday

A common bug in custom ASO scripts is computing the most recently finished Sunday-to-Saturday UTC week and assuming Apple has already published its `searchPopularity1to100` rows on Sunday morning. In practice, Apple publishes each weekly batch several days after Saturday ends.

To prevent false “no data” results, Searchbop’s [`latestWeek()`](file:///Users/tarik/Desktop/TengrX-SEO/packages/core/src/aso/apple-ads.ts#L116-L123) probe generates the last 8 completed Sunday–Saturday UTC windows (`recentWeeks(8)`) from newest to oldest and tests each week with a lightweight 1-row check (`limit: 1` in `PRODUCTIVITY_UTILITIES`) until it finds the newest week that Apple has actually populated for that country.

04 / LOCAL ES256 KEY GENERATION

Connecting Apple Ads safely with a local `prime256v1` key pair

Apple Ads uses OAuth 2.0 client credentials backed by an asymmetric ECDSA key pair (`ES256` on the `prime256v1` curve). Instead of making you run `openssl ecparam` commands in Terminal, Searchbop’s Connections screen generates the key pair locally on your machine using Node’s native `crypto.generateKeyPairSync("ec", { namedCurve: "prime256v1" })`:

Honest boundaries & official sources

No campaign or bid changes: Searchbop requests the `searchadsorg` token scope strictly to read `/acls`, `/insights/apps/search-term-popularity/query`, and `/suggestions/keywords/query`. It never creates ad campaigns, modifies bids, or initiates ad spend. Reference: Apple Ads API Documentation.

Research context & search queries covered on this page Apple Ads API · P1

Cluster & intent: apple-ads-popularity (Informational / Technical · P1) · Target queries: apple search ads keyword popularity, apple ads popularity score, searchPopularity1to100, apple search ads keyword tool, apple search ads api key.