01 / WHAT IS PUBLIC VS. PRIVATE

What Apple’s public `itunes.apple.com/lookup` endpoint actually returns

When you pass any competitor’s App Store URL or numeric ID to `https://itunes.apple.com/lookup?id=COMPETITOR_ID&country=us`, Apple’s server returns a public JSON payload containing `trackName` (Title), `primaryGenreName` (Category), `description` (up to 4,000 chars), `releaseNotes` (What’s New), `userRatingCount`, and `averageUserRating`.

Notice what is missing: the private `keywords` field (100 bytes) is never included in public `lookup` responses. When a $199/month enterprise ASO tool claims to show you “Competitor X’s keywords,” it is not reading a secret Apple endpoint—it is running candidate queries through `itunes.apple.com/search` and recording which queries return Competitor X in the top 200 results.

02 / METHOD 1: COMPETITOR TITLE N-GRAMS

Why competitor App Titles reveal their #1 priority keywords

Because the 30-character App Title carries the heaviest ranking weight on the App Store, every serious competitor puts their highest-converting search phrase directly in their Title after a colon or dash (`Brand: Keyword Phrase`). In Searchbop, [`extractTitleTerms()`](file:///Users/tarik/Desktop/TengrX-SEO/packages/core/src/aso/score.ts#L62-L76) splits the titles of the apps ranking for your current keywords along punctuation boundaries and extracts recurring 1-word, 2-word, and 3-word phrases:

HOW SEARCHBOP EXTRACTS PHRASES FROM COMPETITOR TITLESpackages/core/src/aso/score.ts
export function extractTitleTerms(titles: string[], lang: string): string[] {
  const counts = new Map<string, number>();
  for (const title of titles) {
    for (const part of title.split(/[:\-–—|,&·•()/+]+/)) {
      const words = normalizeTerm(part, lang).split(" ").filter((w) => /\p{L}/u.test(w));
      for (let size = 1; size <= 3; size++) {
        for (let i = 0; i + size <= words.length; i++) {
          const phrase = words.slice(i, i + size).join(" ");
          if (phrase.length >= 3) counts.set(phrase, (counts.get(phrase) ?? 0) + 1);
        }
      }
    }
  }
  // Sorted by frequency across top-ranking competitor titles
  return [...counts.entries()].sort((a, b) => b[1] - a[1]).map(([term]) => term);
}
03 / METHOD 2: AI LISTING EXTRACTION

Extracting 40 target keywords from any competitor App Store URL

Even though Apple doesn’t index the 4,000-character Description for search, developers almost always use the exact same domain nouns and feature phrases in their Description that they placed into their hidden 100-byte Keyword field.

In Searchbop, you can paste any competitor’s App Store URL (or `trackId`) into the Competitor Extraction input. Searchbop’s [`aiTermsFromListing()`](file:///Users/tarik/Desktop/TengrX-SEO/packages/core/src/aso/research.ts#L82-L88) fetches the competitor’s live storefront listing for your chosen country and instructs your connected AI model to extract up to 40 1-to-3-word search terms in that storefront’s native language (automatically stripping out the competitor’s own brand name).

04 / METHOD 3: VERIFYING RANKS & POPULARITY

Testing which extracted competitor keywords are actually worth targeting

Once Searchbop extracts candidate phrases from a competitor’s listing or top-10 titles, it doesn’t blindly dump all 40 phrases into your tracking database. Instead:

  1. It checks **Apple Ads Country Popularity (`searchPopularity1to100`)** for those candidate phrases in your target country so you can see which terms have real search demand.
  2. It scores **AI Semantic Relevance (`0.0–1.0`)** against your app’s actual feature set so you don’t waste metadata space targeting a feature only the competitor has.
  3. When you select the winning terms to add to your table, Searchbop queries `itunes.apple.com/search` to compute **Top-10 Difficulty** and check where your app currently ranks (`#1–#200`).

Technical note: Apple Ads Suggestions vs. Country Popularity on competitor apps

If you add a competitor’s app directly as a workspace in Searchbop to track its ranks over time, note one Apple API rule: Apple’s Country Popularity (`searchPopularity1to100`) works for any app, but Apple’s `/suggestions/keywords/query` endpoint refuses `promotedObjectId` values that do not belong to your own linked App Store Connect account. Searchbop handles this automatically and uses competitor listing extraction + country popularity instead.

Research context & search queries covered on this page Competitor ASO · P1

Cluster & intent: competitor-app-keywords (Informational / Commercial · P1) · Target queries: how to see what keywords an app ranks for, how to find competitor keywords on app store, can you see an app's keywords on app store, competitor aso keyword research.