App Factory

How ideas are scored

Every idea on the list is a search term someone might type into Google Play, such as "mma training". The finder looks at the apps Play shows for that term and gives the idea an opportunity score from 0 to 100. Higher means a better chance for a solo developer to build an app people want and will pay for. All of this is plain code with no AI (stages/finder/score.py).

Step 1: collect the data

For each search term, the finder:

Step 2: five sub-scores, each 0 to 100

Sub-scoreQuestion it answersHigher when
DemandDo people want this?The apps for this term have many installs
Unhappy users (dissatisfaction)Are current users unhappy?Ratings are low, there are many 1 to 2 star ratings, apps are abandoned, and one fixable complaint dominates
BeatableCan a newcomer compete?The leading app is small or poorly rated, and few of the apps are brands
Pays (monetization)Will people pay?Competitors charge, sell in-app purchases or show ads
EvidenceHow much data backs this?The target apps have many ratings and many reviews tied to complaint themes

Demand

Adds up the installs of the non-game apps. Each app counts only as much as its title matches the specific words of the search term, so a general workout app adds little to "rowing machine workout". Generic words like "workout", "free" and "timer" don't count as a match. The total is placed on a log scale: 1,000 installs gives 0 and 100 million gives 100.

Unhappy users

Looks only at the target apps that have ratings, weighting bigger apps more:

When complaint themes exist, this blend becomes 80% of the score. The other 20% is complaint focus: how much of an app's low-star reviews fall into its single biggest fixable complaint. One clear, fixable problem is a better opening than scattered noise.

Known weakness: most established Play apps sit at 4.5 to 4.9 stars, so the rating part is often near 0 (lesson L001).

Beatable

Looks at the 5 biggest non-game apps and the "leader", the one with the most ratings:

Pays

Evidence

Step 3: combine into one score

The first four sub-scores are combined with a weighted geometric mean:

DemandUnhappy usersBeatablePays
30%25%25%20%

A geometric mean multiplies instead of adding. A very weak sub-score therefore drags the whole idea down: a huge market with an unbeatable leader still scores low. No sub-score counts as less than 1, so a single zero doesn't wipe out the idea.

Then evidence applies a discount. An idea with full evidence keeps its score, and one with no evidence loses 30%. In between it scales smoothly: score × (0.7 + 0.3 × evidence ÷ 100).

Worked example: "mma training" (9 Nov data, current formula)

Sub-scores: demand 54.3, unhappy users 59.2, beatable 63.8, pays 73.3, evidence 49.4.

  1. Geometric mean: 0.543^0.30 × 0.592^0.25 × 0.638^0.25 × 0.733^0.20 = 61.3
  2. Evidence discount: 0.7 + 0.3 × 0.494 = 0.848
  3. Opportunity: 61.3 × 0.848 = 52.0

Step 4: rank, review, and grow the list

History

When you change score.py, update this page too.