curl https://rolearn.dev/api/genre-opportunities \
-H "X-API-Key: rk_live_XXXX"
[
{
"name": "horror",
"display_name": "Horror",
"total_games": 3200,
"total_ccu": 480000,
"avg_ccu": 150.0,
"growth_rate": 0.12,
"saturation_index": 0.58,
"opportunity_score": 72.4,
"monetization_depth": 4.1,
"demand_per_game": 150.0,
"top3_share": 0.41,
"newcomer_share": 0.18,
"entry_verdict": "enter_with_edge",
"recommendation": "Viable, but you'll need a clear differentiator.",
"locked": false
}
]
Market Data
Genre Opportunities
Get genre opportunity scores and analytics
GET
/
api
/
genre-opportunities
curl https://rolearn.dev/api/genre-opportunities \
-H "X-API-Key: rk_live_XXXX"
[
{
"name": "horror",
"display_name": "Horror",
"total_games": 3200,
"total_ccu": 480000,
"avg_ccu": 150.0,
"growth_rate": 0.12,
"saturation_index": 0.58,
"opportunity_score": 72.4,
"monetization_depth": 4.1,
"demand_per_game": 150.0,
"top3_share": 0.41,
"newcomer_share": 0.18,
"entry_verdict": "enter_with_edge",
"recommendation": "Viable, but you'll need a clear differentiator.",
"locked": false
}
]
Returns supply/demand opportunity metrics for each Roblox genre, served straight
from the authoritative
Genre table (recomputed every 6 hours). Uses Roblox’s
official genre taxonomy. See Genre Heatmap for the
methodology.
Works unauthenticated (returns free-tier names_only shape) or with a session /
X-API-Key. Plan gating controls how many fields are populated.
curl https://rolearn.dev/api/genre-opportunities \
-H "X-API-Key: rk_live_XXXX"
[
{
"name": "horror",
"display_name": "Horror",
"total_games": 3200,
"total_ccu": 480000,
"avg_ccu": 150.0,
"growth_rate": 0.12,
"saturation_index": 0.58,
"opportunity_score": 72.4,
"monetization_depth": 4.1,
"demand_per_game": 150.0,
"top3_share": 0.41,
"newcomer_share": 0.18,
"entry_verdict": "enter_with_edge",
"recommendation": "Viable, but you'll need a clear differentiator.",
"locked": false
}
]
float
Supply/demand crowding
R / (R + demand_per_game). 0.5 = platform norm, ≥0.6 = crowded.float
0–100 composite of demand percentile, growth, and openness (higher = better).
float
CCU change versus a fixed baseline 7 days ago.
null if no baseline.float
Share of genre CCU held by the 3 biggest games (concentration).
float
Of the top-20 games’ CCU, the share held by games launched in the last 12 months (openness).
string
One of
strong | enter_with_edge | avoid | unproven.Free-tier callers receive only
name, display_name, total_games,
total_ccu, and locked: true; the analytic fields are null until you
upgrade to Builder+.
