What are the three scores?
Opportunity is the share of the page left open by difficulty, scaled down for a keyword searched too rarely to matter, so either one can veto a keyword.
Every popularity number is an estimate built from public store signals, except where the source says Apple Ads search popularity. asobeast publishes the formula below and a calibration command, so the estimate can be checked against Apple’s own number rather than taken on trust.
How is popularity estimated?
Each store leaves different evidence, so each store has its own estimate.App Store
App Store popularity is estimated from the first 25 search results and the search suggestions by a model fitted against Apple’s own search popularity, so the estimate is on Apple’s 1 to 100 scale. It reads:
The estimate is a weighted sum of these signals taken as the logarithm of popularity plus one, so each signal scales the estimate rather than adding a fixed number of points. It is rounded and held between 1 and 100. The weights come from
pnpm --filter api scoring:popularity-study, which searches terms whose popularity is known and fits the weights by least squares. The fit for the US week of 20 September 2026 used 252 terms Apple listed that week, 16 per genre, and 770 terms whose popularity was published elsewhere, most of them long tail phrases from games, trivia, meme and geography searches, because the terms people track are mostly long tail.
The model carries two sets of weights from that one study:
Knowing that Apple left a term out of its list is evidence in itself, so the unlisted weights are not pulled upward by head terms that would read Apple’s own number anyway. Held out of the fit in five rounds, the unlisted weights estimated the published terms with a Spearman correlation of 0.49 and a mean error of 5.2 points, and 85 percent of them landed in the same grade band. On terms held out of the general fit, the published terms ranked at 0.44 with a mean error of 5.1 points, and the listed terms ranked at 0.59 but read about 9 points low on average, because a term in the head of another genre looks much like a strong long tail phrase in the search results. With an Apple Ads key, a listed term reads Apple’s own number instead.
Apple does not suggest many short, common searches as themselves, so a phrase it never suggests can still be searched often, and the model weighs suggest reach together with the search results rather than on its own. Continuations read the suggestions differently: Apple still offers popular searches that begin with such a word, like “map my run” for “map”, while a phrase few people search is continued by few, and a misspelling by none, because Apple offers the corrected spelling instead. A case form of the phrase itself is not a continuation either, the way an English plural is not, so “дневником” alone does not continue “дневник” while “дневником привычек” does, and neither does a different word that only shares the stem, like “программирование” for “программа”. When the suggestion lookup fails, the model reads 5 continuations, a typical count, and treats the phrase as suggested only once typed in full, so a failed lookup neither raises nor sinks a phrase.
A title contains a word when it has it as a whole word, singular or plural. “map” is found in “Google Maps” but not in “Roadmap”, and “geo” is not found in “Geography”. Chinese, Japanese, Thai, Lao, Khmer and Burmese are written without spaces, and Korean attaches particles to the end of a word, so in these scripts a word counts wherever it appears in the title. In Cyrillic, where both words of a comparison change their endings by case, two words count as the same word when they share at least seven characters from the start, those characters are all Cyrillic, and each word keeps at most three characters after that shared start: “тревожности” in a title finds the word “тревожностью”, while “тревога” and “тревожность” stay different words, and so do “программа” and “программирование”, where the longer word keeps thirteen characters after the shared start. Other scripts whose words inflect the same way join this rule as they are added. A search with fewer than five results stays at or below 10 on the shown scale, and a search with no results scores 0.
Google Play
Google Play popularity starts from suggest reach: how early the store offers the exact phrase while it is being typed. A phrase the store completes after one or two typed characters is searched by many people; a phrase it only offers once the whole text is typed is searched by few.
The values are the typical published popularity, divided by 10, of the phrases in each row, measured on 502 US keywords across games, trivia, board game, meme and geography searches. Where the phrase sits in the suggestion list does not change its reach, because on that sample the typical popularity was the same at every position. A phrase of two or more words counts only when the store suggests it exactly as written, in every word: “geography games” or “geography game offline” does not count for “geography game”, and nor does a case form of one of its words, because a phrase people search is suggested as itself. A single word is different, because Google Play offers longer searches that begin with a word rather than the word alone, so for one word a suggestion counts when it is the word in the plural, in any of its case forms in a script whose words inflect, Cyrillic today, or continues it with more words. A search that only shares its first letters does not count.
Three more inputs place a phrase within its row:
Google Play popularity is the weighted sum of the four:
The store completing a long phrase early says more than completing a short one after the same number of characters, which is what the untyped share adds to the reach. A phrase many people search also attracts strong apps that put it in their titles, so the page itself carries evidence of demand. The weights were fitted by least squares against published popularity for 442 US keywords and checked on 200 further keywords the fit never saw. On those 200, rank agreement with the published popularity rose from 0.73 to 0.80, the mean error fell from 5.5 to 4.6 points, and 165 landed in the same grade band against 157.
Two caps apply: a phrase the store never suggests stays at or below 15 on the shown scale, and a search with fewer than five results stays at or below 10. A search with no results scores 0. When the suggest lookup fails, the reach is taken as 2.5 and the untyped share as 0.4, the typical values of that sample, and confidence drops to low.
How is difficulty rated?
Difficulty measures how hard it is to reach the first ten results for the phrase. It reads the first ten results on both stores, the search results on the App Store and the ten detail lookups on Google Play, and combines three inputs:
Each store weighs them differently:
Difficulty is the base, plus strength and targeting times their weights, minus the phrase length times its weight, cut to a whole number from 1 to 100. A search with no results scores 0.
The weights were fitted against published difficulty for 794 App Store and 444 Google Play keywords in the US store. On the App Store the titles count almost as much as the apps: a page of strong apps whose titles do not carry the phrase is easier to break into than one where every title does. On Google Play the strength of the page decides, and a longer phrase is easier. Star ratings, installs, days since release or update, publisher diversity, chart positions and titles past the tenth result were tested as well and are left out, because none of them changed the order by more than 0.01 of rank agreement.
A brand page is scored like any other page, so difficulty always describes the apps a newcomer has to pass.
The
flags in the score signals describe the page and do not change difficulty. brand means the leader is named after the phrase, a misspelling included, and holds at least 10,000 ratings, ten times the typical rival whose title also targets the phrase. weak_leader means the top result has fewer than 100 ratings, small_serp three results or fewer, and padded that the average title match strength over the top ten is at most 0.2.
On Google Play the rating counts come from one detail lookup per result. A result whose lookup fails keeps its place on the page without a rating count, and when fewer than half of the lookups succeed the keyword is not scored in that run and the job retries.
Which scale does a response use?
Popularity and difficulty are stored on a 0 to 10 scale. The API returns popularity in thetraffic field, a name kept so existing clients keep working. asobeast shows them on a 0 to 100 scale by multiplying by 10 and clamping the result to 0 to 100, and volume is popularity on that scale. A field name alone does not tell you which scale a response uses, so read it from this table.
Convert a stored value the same way before showing it, or a row written outside the scoring job can display past 100.
What evidence does a score carry?
Every persisted score is stored with the provenance needed to audit or recompute it.
Confidence says how complete the evidence was.
What are score signals?
GET /apps/{id}/keywords returns the evidence behind each stored score as scoreSignals, and the score details in the keyword table say the same in words.
scoreSignals is null for a row scored by an older formula, and scoreOutdated is true for it.
A score without provenance cannot be audited, so asobeast never shows one.
How is opportunity calculated?
Opportunity asks how likely the keyword is to bring installs: whether enough people search it, and how much of the page is still open.
Volume counts only up to 30. Past that point a keyword brings enough searches that the competition decides whether the installs can be won, so a keyword with a volume of 30 and one with 70 score the same on the same page. Below it, opportunity falls a little faster than the volume does: a volume of 15 keeps 42 percent of the score and a volume of 7 keeps 16 percent. Difficulty counts across the whole range: a difficulty of 20 keeps 80 percent of the reach, 50 keeps half and 80 keeps a fifth.
A popular phrase held by the largest apps therefore scores low, and a moderately searched phrase on an open page scores high.
game at a volume of 68 and a difficulty of 71 scores 29, while geography map game at 33 and 23 scores 77.
The shape was chosen against published keyword effectiveness. On the reference’s own popularity and difficulty it orders 794 App Store and 2,101 Google Play keywords at a rank agreement of 0.92 and 0.95. The power on reach is there because published effectiveness falls faster than volume in the long tail: with it, the share of keywords that land on the same side of the high opportunity threshold as the reference rose from 77 to 82 percent on 770 App Store keywords and held at 81 percent on 442 Google Play keywords, scored from estimated popularity and difficulty. A two-dimensional table of popularity and difficulty bands fits the reference more closely on its own inputs, but orders the keywords worse from estimated popularity and difficulty, because a band edge turns a small estimation error into a jump.
Opportunity is the same for every app that tracks the keyword. Relevance is reported next to it and not multiplied in, so the number says what the keyword is worth and relevance says whether it belongs in this listing. The action rules read both.
Storing opportunity would mean recomputing every row whenever either score changed. Deriving it on read keeps one keyword row, and the read layer says so in the response, so a consumer can tell a derived score from a stored one.
How are scores graded?
The tables grade every judged number into one of four words: strong, fair, weak or poor. The grade reads the number for what it means to the app, so a high popularity is strong while a high difficulty is poor.
A score is graded on the whole number the table shows. An unscored keyword and a keyword that was checked and not found carry no grade: they read “not scored yet” and “not ranking” instead.
Each grade has a colour, green, yellow, orange and red, but the colour is never the only signal. The number stays, the meter keeps its length, and the grade word is part of what a screen reader announces.
The grades apply to popularity, difficulty, opportunity and position on the keyword monitor, to every position and score in the comparison matrix, to the positions in the keyword movers card, and to the best position, average position and rating in discovery. Charts that show a distribution, such as the rank distribution, keep their own sequential colours.
Where does relevance start?
The tracked keyword’s source sets the starting relevance, which is then adjusted by how the phrase overlaps the app’s snapshot text.
Full overlap with the snapshot text adds 10 and no overlap subtracts 10. A word overlaps when the snapshot text has it as a whole word, as a whole word or a word followed by a particle for a Korean word, or anywhere at all for a Chinese, Japanese, Thai, Lao, Khmer or Burmese word. A character of those scripts ends a word written next to it as a space would, so
ai overlaps with AIが3行要約. Ranking evidence follows:
- An app already ranking at position 50 or better has a relevance of at least 70, because the store already treats it as relevant.
- A
DESCRIPTION,SUGGESTEDorCOMPETITORkeyword that was checked and not found loses 10.
Can asobeast use Apple’s own numbers?
Yes, with an Apple Ads API key. Apple publishes a weekly search popularity from 1 to 100 per storefront and genre for its most searched terms. With the key configured, asobeast syncs the newest complete week every Monday and, for App Store keywords:- uses Apple’s number for a term Apple lists, with the source
APPLE_ADS_POPULARITYand high confidence, unless the term sits at the floor of its genre, see What is a floor answer?; - caps the estimate for a term Apple does not list below the lowest popularity Apple published that week in the term’s own genre, because the list covers the 500 most searched terms of each genre and the bars differ: in one US week the lowest listed term read 41 in Sports and 56 in Games. The genre is the one most of the first ten results belong to, and when none of them maps to a genre Apple reports, the lowest value of the whole week applies. The cap never goes under 15 on the shown scale.
pnpm --filter api scoring:calibrate compares the estimate with Apple’s number for every keyword that has both, and prints the rank correlation and the typical error, so an operator can see how far the estimate is from Apple’s own figure.
What is a floor answer?
Apple’s weekly list ends somewhere: it holds the most searched terms of each genre and publishes nothing below its lowest value, the floor. A number read from the list is a measurement only above that edge. Two answers say little more than “at or below the edge”, and asobeast calls both a floor answer:- Floor. Apple lists the term at the lowest value it publishes in every genre that lists it at that value. A term that clears the floor of any one of those genres is a measurement. The number is Apple’s, and the source stays
APPLE_ADS_POPULARITY, but it marks where the list ends, not a measurement of this term alone. - Absent. Apple’s list for the week does not hold the term, so its popularity is below the floor. The number shown is the estimate held under that floor, as described above, and the source stays
APPLE_SEARCH_SIGNALS.
MEDIUM. Difficulty and opportunity share it, and their details say so, even though difficulty itself is read from the search results. A row keeps its earlier confidence until its next weekly score. The keyword export carries the state, the floor, the week and the last value above the floor in the officialPopularityState, officialPopularityFloor, officialPopularityWeek, lastAboveFloorValue and lastAboveFloorWeek columns.
What happens to old scores after an upgrade?
They are rescored once, automatically. When the API starts with a new formula version, every tracked keyword whose latest score used an older version is queued for one score job, through the same rate limited queues as weekly scoring. Until its job runs, the keyword keeps its old numbers and the table says “Older formula”. Such a row keeps its bucket, so an audit still knows the app’s priority keywords, but it never raises a keyword action or a high opportunity entry, because its numbers were not made for the current threshold. Stored history keeps the version it was scored with.Are scores comparable across stores?
No. Apple and Google Play scores come from different public evidence and are store specific signals. See App Store and Google Play. They are also not a substitute for first party acquisition or conversion data. asobeast has no download or revenue data and never presents one.When are scores recalculated?
Weekly, on theCRON_SCORING schedule, which defaults to 0 4 * * 0, meaning 04:00 UTC on Sunday. Scoring is the most expensive job per keyword on Google Play, which is why it is weekly rather than daily. See The daily pipeline and rate limits.
The weekly run and the formula rescore cover the same workspaces as the daily run. A workspace that is suspended or whose plan is no longer in force gets no score jobs, and a workspace past the grace period of its keyword limit gets scores for the keywords the plan covers only. A score job already queued checks again before it reaches the store and does nothing once no workspace that tracks its keyword may still collect, so a keyword another workspace shares is still scored.