Most trend talk is a guess. This is a count — every BookTok video we hold, one play total each, and every trope measured as a share of reader conversation so our own growing archive cannot fake a trend.
This report was published on 7 August 2026. On 21 August an internal audit found that several of its figures did not reproduce against the data they were drawn from. They have been recomputed and republished. The original is preserved and available on request.
Every figure below is the plays on the videos we hold under that hashtag, each video counted once. It is not the hashtag's lifetime reach, and it is not the whole of BookTok — it is our panel, stated plainly, with the video count beside it so you can see how thin or thick the base is.
As measured 22 August 2026 · panel: 73,802 videos across 426 hashtags
Each trope's share of romance reader conversation in Q2 2026 against Q1 2026 — a share, not a count, so the growth of our own archive cancels out. Every trope shown carries at least 250 mentions in each quarter.
Change in share of romance reader conversation, Q1 2026 → Q2 2026 · measured on the reader's posting date, not our collection date
Reader demand signals in our corpus against published titles in our registry that deliver the trope. This ranks tropes against each other on one date. It is not a count of readers per book — read the note under the chart before quoting it.
As measured 22 August 2026, 04:00 UTC
The hero who protects is gaining share of the conversation, and the tropes in section 03 have the least published supply behind the demand we can see. Where those two overlap is the honest place to aim — and knowing which is which beats guessing at a trend.
This is a dated snapshot, and every figure on this page carries its measurement date. The data moves every week.
See what YOUR next book should hit →SELECT count(*) AS videos,
sum((payload->>'playCount')::bigint) AS plays
FROM (SELECT DISTINCT ON (video_id) video_id, payload
FROM raw_booktok_videos
WHERE video_id IS NOT NULL
AND payload->>'playCount' IS NOT NULL
ORDER BY video_id, scraped_at DESC, id DESC) v;
22,293,880,514 plays across 72,641 videos as measured 21 August 2026; re-run on 22 August it returns 22,652,648,965 across 73,802 videos, because the panel grows hourly. We considered and rejected a second method — summing each hashtag's latest reported total, which gives about 15.6 billion. It double-counts any video carrying more than one hashtag, and the per-hashtag total is itself only the videos one scan returned, so it is not a stable measure of anything. The per-video count has neither problem, so it is the one we use everywhere.
SELECT hashtag, count(*) AS videos,
sum((payload->>'playCount')::bigint) AS plays,
percentile_disc(0.5) WITHIN GROUP (
ORDER BY (payload->>'playCount')::bigint) AS median_plays
FROM raw_booktok_videos
WHERE payload->>'playCount' IS NOT NULL
GROUP BY hashtag ORDER BY plays DESC;
3. Trends — share, on the reader's clock. Each trope's mentions in a quarter divided by that quarter's total mentions across all romance lanes, Q2 2026 against Q1 2026. Two rules make this a market measurement rather than a measurement of us: we window on when the reader posted, never on when our pipeline parsed it; and we compare shares, never raw counts, because our archive is growing fast enough that raw counts would show almost everything “rising”. Only tropes with at least 250 mentions in each quarter are shown.