Methodology

How we score.

Every niche on NovelRadar gets a single headline number — the composite — that's the weighted geometric mean of four independent axes. We use a geometric mean (not arithmetic) because we want to reward niches that win on multiple dimensions, not ones that spike on one and crater on another.

composite = (demandw₁ · trendw₂ · revenuew₃ · channelw₄)1 / (w₁ + w₂ + w₃ + w₄)

Default weights are 1/1/1/1. Paid users can adjust weights live and re-rank all niches in <100ms.

№ 01

Demand

Reader appetite minus title supply. High = hungry market, thin shelf.

demand = log1p(Σ_normalized(TikTok hashtags, YouTube proxy, Trends 90d, Reddit "looking for" frequency)) − log1p(Σ_normalized(KDP title count, Goodreads top-10 reviews))
№ 02

Trend

90-day momentum across Royal Road, Reddit, and NovelUpdates.

trend = mean_z(linear_slope(RR rising rank, 90d), linear_slope(Audible new releases, 90d), linear_slope(Google Trends, 90d))
№ 03

Revenue

KU penetration, paperback price depth, audiobook arbitrage.

revenue = weighted_mean(KU penetration %, p75 paperback price, Patreon patron count in genre, KDP-Audible gap)
№ 04

Channel

Series friendliness and cross-channel readability.

channel = mean(TikTok BookTok normalized, YouTube Shorts fit proxy, Goodreads sequel/book1 ratio, RR avg series length normalized)

What we don't republish.

For Amazon / KDP data, we display only what's licensed via the Amazon Product Advertising API (PA-API) — covers, titles, BSR, KU status. We scrape public category pages for scoring-only internal signals (e.g., top-100 BSR density per niche keyword), but those signals never appear on the public page. The signals.is_displayable column on every row enforces this at the database layer.

Royal Road and NovelUpdates data is republished as public facts (chapter counts, follower counts) with link-out to the source. Reddit thread titles are quoted under fair use with permalinks.