Skip to content

Numbers module

The Numbers module turns your Twitch events into stream-by-stream analytics. It starts with the core counts — follows, subscriptions, resubs, gifted subs, bits, tips, sub points, hype trains, and raids — and layers on deeper intelligence: where your viewers come from, how raids convert, the journey from first view to loyal sub, when and in what context people convert, and how your subscriber base grows and retains. The same data drives goals, streaks, and overlay widgets.

Available on the Free tier and above. See Module access by tier.

At a glance

AreaWhat it does
OverviewLive Followers / Subscribers / Sub Points totals, plus a KPI card per metric (Today / Stream / 7d / 30d) with sparklines
ChartsTime series per metric (tip revenue included), hype-train level, Plus Points, average viewers, and point-in-time total-follower/subscriber/tier-split trends
SessionsEvery stream as a discrete session — click one for its viewer-count history and category/title timeline
AcquisitionWhere each new follower/sub first came from (raid, organic, returning), with per-raid source breakdown
RaidsIncoming + outgoing raid analytics: conversion, reciprocity, ROI, source quality, and rule-based recommendations
JourneyA cross-source engagement funnel, per-source comparison, and viewer behavior archetypes
BehaviorMulti-session attendance (returning vs one-time viewers) and content/game preference
PatternsWhen and in what context viewers convert — by hour, day, viewer band, game, and event lift
ScheduleWhich broadcasts do better — weekday, start time, and stream length compared per stream and per streamed hour, plus a verdict on a schedule change
GoalsTwitch Goals shown automatically, with manual overrides per metric
StreaksConsecutive streams that hit a goal target, with live progress
Plus ProgramEstimated Plus Points and level, trackable as a goal and on overlays
SubscribersTiered subscriber list plus tier-progression, tenure, retention, and loyalty insights
Hype TrainsAll-time-high records (own + shared) and live overlay variables
Top ChattersA message-count leaderboard sourced from the Chatters module
WidgetsCounter, goal-progress, and hype-train data for browser-source overlays

What Numbers tracks

Every stream is recorded as a session, opened by Twitch’s stream.online event and closed by stream.offline. Within (and outside) sessions, Numbers ingests follows, subs (by tier), resubs, gifted subs, bits, tips (from the Tipping module), hype trains (counted when a train ends), and both incoming and outgoing raids, bucketing each metric per hour, per day, and per stream. While you’re live it also samples your viewer count roughly once a minute (see Sessions).

Details worth knowing:

  • Sub points weight subs by tier: Tier 1 = 1, Tier 2 = 2, Tier 3 = 6 points.
  • Total Subs = new subs + resubs + gifted subs.
  • Tips are tracked twice: Tips counts the number of tips and Tips (amount) sums the money, in your channel’s tip currency. A refunded or disputed tip is subtracted back out of the hour, day, and stream it originally landed in.
  • Gifted subs are counted once — the gift event increments the total; the recipient sub events don’t double-count.
  • Every event is deduplicated, so Twitch webhook redeliveries never inflate numbers.
  • Retention for the raw event feed is tier-based: 7 days (Free), 30 days (Affiliate), 365 days (Partner), unlimited (Partner+). The per-viewer analytics tables (acquisition, raid cohorts, journeys, subscriber tier history, conversion context, and session attendance) honor the same window; aggregated chart buckets, sessions, hype-train records, and total-snapshot history are kept regardless of tier. See Tier comparison.
  • Much of the newer analytics is forward-only — it accrues from the moment the feature shipped and can’t be backfilled from older event history. The relevant sections call this out.

Overview

The Overview leads with a live totals row — current Followers, Subscribers, and Sub Points at a glance — followed by one KPI card per metric showing Today, Stream (current stream; 0 when offline), 7d, and 30d totals, each with a 7-day sparkline. Average viewers and Tips (amount) get cards of their own alongside the counted metrics.

Charts

A line chart per metric — including Tips (amount), plotted in your tip currency — with range buttons for Stream, Today, 7D, and 30D (stream/today plot hourly, longer ranges daily). When you’re offline, the Stream range shows your most recent stream, and charts expand to a zoomed modal on desktop.

Beyond the summed metrics, several point-in-time snapshot charts plot absolute totals recorded once a day:

  • Hype Train Level — the level reached by each hype train.
  • Plus Points (daily) — the once-a-day Plus Program snapshot.
  • Avg Viewers — average concurrent viewers per stream, from the live viewer sampling.
  • Total Followers / Total Subscribers / Sub Points, and a tier split (Tier 1 / Tier 2 / Tier 3, plus % of subs gifted).

Because snapshot charts record an absolute total rather than summing events, they only have data from the day recording started and can’t be backfilled for earlier dates.

Sessions

Recent stream sessions, newest first, with start time, end time (or a LIVE badge), and duration. If a stream ends without Twitch delivering the offline event, the next stream start closes the dangling session automatically.

Click a session to open its detail view:

  • A viewer-count history chart across the stream, plus Average viewers, Peak viewers, and the number of samples collected.
  • A timeline of category / title / tag changes during the stream.

Viewer counts come from a background job that polls Twitch’s Get Streams API every ~60 seconds while you’re live, recording one snapshot per open session (with game, title, and tags). Category/title changes are captured the instant they happen via channel.update, even between polls. While a stream is live the detail view auto-refreshes so the chart keeps growing. Sampling only exists from the point it began for a session — the first minutes before the first poll aren’t backfilled, and a session with no samples shows “No viewer data recorded”.

Acquisition

The Acquisition tab answers one question: how did each viewer first arrive? The first time Numbers observes a viewer doing something meaningful — following, subscribing, receiving a gifted sub, cheering, resubbing, or chatting — it classifies where they came from and locks that label in. First observation wins; a source is never overwritten by later activity.

It shows a source breakdown over a selectable window (7d / 30d / 90d / year-to-date) with counts and shares, a top raid sources list (which channels raided you and how many viewers each brought), and a recent acquisitions table with each viewer’s source, first-seen time, and the game/title/viewer-count that were live when they arrived.

SourceHow it’s attributed
ReturningAlready following (by Twitch’s records) more than 5 minutes before we first saw them — an existing follower, not a fresh acquisition. Counted separately and excluded from new-acquisition totals.
RaidFirst seen within 15 minutes of an inbound raid; credited to the raiding channel.
OrganicFirst seen during a live stream with no recent raid to attribute them to.
UnknownFirst seen while you were offline (no live session) and with no raid.

A follow that lands within the 5-minute grace window counts as a genuine new follower. Because classification originally only ran forward, a daily backfill re-checks each channel’s full follower list against Twitch and corrects older rows to Returning where the follow predates the first sighting.

Caveats: attribution needs a readable Twitch connection; anonymous cheers/gifts aren’t recorded, and only the gifted-sub recipient is credited (not the gifter). Raid attribution is a 15-minute time-window heuristic.

Raids

The Raids tab shows both sides of your raid activity — who you send viewers to, who sends viewers to you, whether raids get reciprocated, and how well raided-in viewers convert and stick. A range selector (Today, 7 / 30 / 90 days; default 30) scopes the whole page. Four headline cards show Outgoing raids (with avg viewers sent), Incoming raids (with avg viewers in), Viewers sent, and Viewers received.

Incoming conversion. Twitch reports only an aggregate raid viewer count, not a per-user roster, so Numbers infers each raid’s cohort: any follow, sub, or chat message from a viewer within 15 minutes of an incoming raid is attributed to it. For that cohort it reports follow rate (and avg time-to-follow), sub rate (and avg time-to-sub), return rate (came back in a later session), and 30 / 60 / 90-day retention.

Source quality. Each channel that raids you is profiled from its cohort’s behavior: High retention (≥40% return and ≥20% at 30d), Quick convert (≥30% follow or ≥10% sub but <40% return), Slow burn (≥20% return but <30% follow), or One and done.

Reciprocity & ROI. For every channel you raided, Numbers checks whether they raided you back in range. Reciprocity rate = channels that raided back ÷ channels you raided. ROI = viewers received ÷ raids you sent them (viewers earned per raid). A reciprocity map lists raw raids/viewers each way per channel.

Insights & recommendations. A deterministic (non-AI) rules engine surfaces advice only when the sample is large enough — best raid-size band by raid-back rate, best game for raider retention, up to five highest-ROI channels worth repeating, and whether gifting raid viewers a sub improves their 30-day retention.

Caveats: cohorts are inferred, not exact (a silent post-raid lurker isn’t attributed); raids are only recorded for channels StreamerCatalyst tracks; and deliveries within 120 seconds are de-duplicated.

Journey

The Journey tab traces how viewers move from first contact to loyal subscriber, stitching follows, subs, resubs, cheers, and chat into one per-viewer timeline. Every panel recomputes for viewers first seen in the selected range (Today, 7 / 30 / 90 days). The first time each milestone happens wins and is never overwritten.

Engagement funnel — five stages, each shown as a share of everyone Discovered:

StageMeaning
DiscoveredEvery identified viewer first seen in range
ChattedEver sent a chat message
FollowedEver followed
ReturnedCame back on a different stream than their first
SubscribedEver subscribed

Stages are independent flags, not strict drop-offs (a silent follower counts in Followed but not Chatted). Alongside the funnel: average time-to-follow, time-to-sub, the follow→sub gap, the chatted-first vs followed-first split, and 30/90-day retention.

Source comparison — how a viewer was first acquired (raid, organic, returning, or unknown) compared across follow rate, sub rate, streams/time to convert, sub-tier mix, and retention, with a top raid channels breakdown.

Behavior archetypes — a rule-based classifier (first matching rule wins) sorts each viewer into one bucket by their journey shape: Instant Fan, Community First, Skeptic, Silent Supporter, Lurker Loyalist, Gifted Convert, Community Hopper, or Unclassified (often still mid-journey). Archetypes are a snapshot over the range.

Caveats: silent lurkers are invisible (Twitch gives no identity for non-chatting, non-acting viewers); journey data ages out with your plan’s retention window.

Behavior

The Behavior tab tracks repeat viewers across streams and the content they prefer (same range selector). It’s forward-only — streams before launch aren’t backfilled.

Attendance patterns — attendees and streams in range; sessions-attended distribution (1, 2–3, 4–7, 8+); average gap between visits (viewers with 2+ sessions); schedule consistency (average share of your streams a viewer showed up for); churned viewers (no return within 14 days); same-day binge viewers; and events per session in a viewer’s first session vs their later ones, so you can see whether returning viewers get more active.

Content preference — for each game that acquired viewers (top 20), the share who went on to follow, subscribe, and return; plus follow for you vs for the game — viewers who return across more than one distinct game are counted as loyal to you, while single-game viewers are following the game.

Caveats: attendance and content require an open (live) session when each event lands; offline and pre-launch activity is excluded.

Patterns

The Patterns tab answers when and in what context viewers convert. All clock times use your channel timezone. Context is captured only for follows/subs that land while you’re live — how far into the stream, the current game/category, the title, and the live viewer count — so it’s forward-only and excludes offline events.

  • Temporal — follows/subs by hour of stream (with peak follow/sub hours; a small-sample note appears under 20 context events), day of week (timezone-bucketed, DST-accurate), time of day (Late night / Morning / Afternoon / Evening), and stream duration band (Under 1h through 6h+; completed sessions only).
  • Context — conversions by viewer band (0–5, 6–15, 16–50, 51–150, 150+) highlighting your best-converting band, and by game/category (games under 5 conversions fold into “Other”).
  • Event lifthype-train lift (sub rate during a train through 30 minutes after, vs baseline, as a multiplier) and raid lift (follow rate in the 15 minutes after an incoming raid vs baseline, with overlapping windows merged).

Schedule

The Schedule tab answers the other half of the timing question: not when inside a broadcast a viewer converts, but which broadcasts do better. Both views below live on it.

Schedule comparison

Schedule comparison compares whole streams rather than individual events, across three dimensions: the weekday you went live, the 2-hour band you started in, and how long the stream ran (the same Under 1h → 6h+ bands as above). Ranges are 30 days, 90 days, 180 days, a year, or everything on record (capped at the 500 most recent streams).

The unit is a completed stream — open sessions are left out (they have no length yet) and counted separately, as are zero-length rows. A stream that ran past midnight is attributed to the weekday and band it started in, in your channel timezone.

Every metric is reported both per stream and per streamed hour, and per-hour is the fair comparison: a 6h stream picks up more follows than a 2h one by construction, so ranking lengths on per-stream totals only tells you that longer streams are longer. A group with fewer than three streams is shown but never ranked, and a dimension with fewer than two ranked groups answers “not enough streams yet” instead of handing back the top of a noisy list — as does a winner that isn’t meaningfully ahead of your own baseline.

Follows, subs, bits, sub points, tips and hype trains come from per-stream counters that are never pruned, so they answer as far back as you ask. Average and peak viewers do not: viewer history honors your plan’s retention window, so older streams show an em dash for viewers rather than a zero, alongside how many streams in the group did have viewer data.

Average viewers is selectable as the comparison metric too. It is already an average, so it is never divided by hours and the per-stream / per-streamed-hour buttons do not apply to it — they switch off while it is selected, and switching back to a count metric restores your choice. It is also ranked only over groups that still have viewer samples: a group can hold twelve streams and no viewer data at all, so it is shown dimmed and left out of the comparison rather than ranked on nothing, and a range reaching back past your plan’s retention window answers “no viewer history” instead of naming a winner. Peak viewers stays a per-group informational figure and is deliberately not rankable — a group’s peak is the highest of its streams’ peaks, so a weekday with forty streams has forty chances at a high peak and one with four has four; ranking on it would rank how often you stream, not how the slot performs.

Schedule experiments

Schedule experiments answer the follow-up question: you moved your streams — did it work? The same range is split into two periods, your older half and your more recent half by stream count — not by date. Streaming cadence is uneven, and a calendar split of a range containing a three-week break would compare 4 streams against 30. An equal number of streams on each side makes them comparable; the cost is that the two periods cover different spans, which is why the page shows each period’s real first and last stream, and why every figure is per stream or per streamed hour, never per day.

Numbers then checks whether three things materially moved between the periods: your start time, your stream length, and your weekday mix (each weekday’s share of that period’s streams). Start times are treated as clock positions, so a move from 23:30 to 00:30 reads as one hour later rather than 23 hours earlier. A negative start-time shift means you moved earlier.

Each metric is then compared across the two periods, both per stream and per streamed hour — per-hour is the headline, because moving earlier and shortening your streams can lower your follows per stream while making every hour strictly more productive. The verdict is one of: not enough streams yet, no change detected, improved, worse, flat, or mixed (your metrics disagree with each other). “No change detected” still shows the numbers — “nothing about your schedule moved and your follows are up 30% anyway” is worth knowing.

Each period needs at least five completed streams. Below that you get “come back after a few more streams” rather than a set of ratios computed from four of them.

Anything that qualifies the answer is listed on the page rather than left out, including: your length changed too, or your weekdays did, so the difference can’t be pinned on the start time alone; your start times are scattered enough that there wasn’t a fixed schedule to change; the two periods differ a lot in total streamed hours, so per-stream figures aren’t comparable even though per-hour ones are; the older period is outside your plan’s viewer-history window, so viewer figures read “unavailable” instead of a ratio against nothing; and both periods are short, so the result is directional only.

This is a comparison of your own two periods, not proof that the schedule caused the change. Everything else about your channel moved too — the games you played, raids you got, what Twitch recommended you to. Treat it as evidence, not a verdict.

Goals

The Goals page merges two sources per metric (follows, new subs, resubs, gifted subs, total subs, bits, and Plus Points — the last two are override-only, since Twitch has no goal type for them):

  • Twitch Goals — goals you create on Twitch appear automatically (⚡ badge).
  • Overrides — set your own target and label per metric in the dashboard (✏ badge). An override always wins over a Twitch goal.

Progress (current) uses all-time follows for the follow goal and current-or-last-stream totals for sub goals. If your Twitch token has expired the page prompts you to re-login to see Twitch Goals.

The Plus Points row is special: with no override it auto-targets the next Plus Program level threshold (100, then 300) with a 🎯 badge, so a Plus goal works with zero setup. Set an override to track a custom point target instead.

A sub or bit goal set here can also drive the Subathon goals overlay: turn on Sync progress with a Numbers goal in that widget’s settings and its ladder tracks this goal’s total — including a live Twitch creator goal’s own progress — instead of counting only what the overlay itself sees.

Plus Program

Twitch’s Plus Program raises your sub revenue share once your Plus Points stay above a level threshold for three consecutive months — Level 1 (100 points) pays 60/40, Level 2 (300 points) pays 70/30. Points are earned per recurring paid sub each month, weighted by tier (Tier 1 = 1, Tier 2 = 2, Tier 3 = 6); gifted and Prime subs earn none.

Plus Points run on a monthly cycle: the number on your Twitch dashboard resets on the 1st and climbs as each paid sub is charged.

When your channel’s Plus widget is enabled on Twitch (the public progress widget on your channel page), Numbers syncs Twitch’s own count directly and that is the number shown everywhere — the panel, the Plus Points goal, overlays, and the daily history chart. The sync is fail-soft: if it’s ever unavailable, everything falls back to the estimate below seamlessly.

Twitch is polled every 15 minutes, but you don’t wait 15 minutes to see a new sub: subs and tier upgrades arrive by event within seconds and are added on top of the last synced count, so overlays move right away and the figure re-settles on Twitch’s own number at the next sync. It never counts down mid-stream while a sync catches up.

Twitch offers no official API for Plus Points, so for channels without the public widget Numbers reconstructs it — and the this-month figure counts only confirmed billings, never a forecast:

  • This month — the figure comparable to your Twitch dashboard, and what the goal, widgets, and history chart use. A subscription earns its points when it is paid for, so this is two things added together: every sub bought this month — new subs and tier upgrades, counted in full on the day Twitch charged it — plus each carried sub’s renewal once its billing date passes. A sub still subscribed past its renewal date has provably been charged (one that cancelled drops off the list instead and never counts), so renewals are credited as they actually happen, the same way Twitch’s own number climbs. Carried subs whose renewal date isn’t on record yet are left out and shown on the panel as unconfirmed rather than guessed at — coverage grows as they share resubs. Refunded subs are un-counted automatically.
  • Month-end pace — where the month lands once every carried sub has also renewed. This is the one figure that still forecasts; level pacing (100 / 300) is judged against it.

Two calibrations keep the estimate honest:

  • Prime detection — the subscriber list can’t distinguish Prime subs from paid Tier 1 subs, but their sub and resub chat notices can. Numbers listens for those and automatically excludes known-Prime subscribers (they earn no Plus Points); coverage grows as Prime subscribers sub or share resubs. The Adjustment field on the panel (Numbers → Subscribers) covers any remaining gap against your Twitch Creator Dashboard; the broadcaster and Lead Mods can edit it, regular mods see it read-only. A calibration saved against an older version of the estimate is not applied — it was measuring that model’s error, so re-applying it would double-count — which is why the field may read 0. It applies point-for-point to both the this-month figure and the month-end pace (enter 9 and both rise by 9) and stays constant across the month — it is not scaled by the date, so you can calibrate on any day.
  • Tier upgrades — upgrading mid-month charges immediately and earns the new tier’s points on top of what the old tier already billed, and upgrades stack: stepping Tier 1 → Tier 2 → Tier 3 earns 1 + 2 + 6 = 9 that month (verified against real dashboard readings). Each step announces like a fresh sub at the new tier, so Numbers credits it in real time; a daily diff of the subscriber list is the safety net for anything missed.

Where it shows up:

  • Numbers → Subscribers — the Plus Program panel: this month’s estimated points, month-end pace, level pacing and revenue share, paid subs per tier, and the adjustment setting (editable by the broadcaster and Lead Mods). It also lists your previous months’ Plus Points — Twitch’s own settled monthly count, straight from the same sync, so it appears only for channels sharing the public Plus widget and is never estimated.
  • Goals — the Plus Points goal (auto next-level target, or your override); progress is the this-month estimate, so it fills over the month like Twitch’s own number.
  • Charts — a Plus Points (daily) trend, recorded once a day (it saw-tooths with the monthly reset, like Twitch’s figure; history starts accruing the day the feature ships and can’t be backfilled).
  • Home dashboard — an optional Plus Program card (broadcaster only).
  • Overlays — the Goal and Counter widgets accept the Plus Points metric, and custom widgets can read it via SC_API.numbers.goal('plus_points') / SC_API.numbers.metric('plus_points'). SC_API.numbers.plus() gives a custom widget the whole picture in one call — points, level, revenue share, the next level and its target, how many points are still needed, and whether the figure is Twitch’s own count or the estimate — so an overlay never has to hardcode the level thresholds. It answers available: false when the figure can’t be read (a disconnected Twitch login, for instance), which is a different thing from zero and should be shown as such. A custom widget’s fields can also sync to the Plus Points goal the way they sync to a tip goal (see Widgets). Plus Points move when a paid sub is charged, so an overlay refreshes them on the subscriber event rather than waiting for a metric update.

Streaks

A streak counts consecutive streams that hit a goal target — e.g. “gained ≥ 25 followers every stream.” Add a streak goal per metric on the Streaks page; the target comes from that metric’s effective goal (Twitch or override), so set the goal first.

  • Streaks advance live the moment the target is crossed mid-stream, and are fully recomputed when a stream ends or settings change.
  • Each streak card shows the current streak, best streak, and the best streak’s date range.
  • Combine streams from the same day treats all streams sharing a local calendar day as one unit. The day boundary uses your channel timezone (change it in Settings); toggling this recalculates existing streak history.
  • Streak goals can be disabled (keeps history) or deleted (removes history).

Subscribers

A live subscriber list grouped by tier (Tier 3 / Tier 2 / Tier 1 & Prime), showing each subscriber’s resub streak, total months, Prime badge, and — for gifted subs — the gifter (or “Anonymous”). Totals and sub points come straight from Twitch. The Prime badge is evidence-based — Twitch’s subscriber API can’t flag Prime, so it’s detected from sub and resub chat notices and fills in as Prime subscribers sub or share resubs. Lists cap at 5,000 subscribers.

Two analytics panels sit above the list. Both are additive — if their data can’t load, the panel simply stays hidden.

Tier & type insights

  • Live snapshot (works immediately, from your current ledger): tier distribution and shares, average tier value (base weighted T1=1 / T2=2 / T3=6), and a paid vs known-Prime vs gifted type breakdown.
  • Progression (accrues over time, from an append-only change log, over a selectable window — default 30 days): upgrades, downgrades (confirmed at renewal, not cache lag), gifted→paid conversions, and the corresponding rates.

Tenure, retention & loyalty

  • Loyalty cohorts — subs at 3mo+, 6mo+, 12mo+, and 24mo+ cumulative months.
  • Average tenure — mean cumulative months across subs with resub history (month-1 subs never emit a resub notice, so they’re excluded rather than dragging the average down).
  • New subs (last 30 days) — split into first-time vs returning (returning = any prior sub or resub on your channel).
  • Resub rate / churn — derived from the two most recent daily total-sub snapshots (needs 2+ days of history first).
  • Upcoming milestones — subscribers about one month from their next anniversary (3, 6, 12, 24… up to 120 months) whose projected renewal falls within the next 30 days, which filters out lapsed subs (top 20 shown).

Progression, milestones, and resub/churn are forward-only and honor your plan’s retention window, so early figures read low and very old progression drops off.

Recalculate sub totals

Twitch fires a separate subscription event for every step of a tier upgrade — going Tier 1 → Tier 2 → Tier 3 sends three of them, plus a renewal notice echoing each one. Until 4 September 2026 we counted each step as its own new subscriber, its own renewal, and its own sub points, so one viewer upgrading could add 3 new subs, 3 resubs and double their sub points to a stream’s totals. That’s fixed for everything recorded since.

Totals banked before the fix stay as they were until you correct them. A Recalculate sub totals panel appears on this page when your history still contains that inflation, showing what each figure is now and what it becomes.

It works by subtracting the duplicate, not by rebuilding your counts. That distinction is what makes it safe:

  • It only ever removes a duplicate it can still see the subscription events for, and never takes a figure below zero.
  • Days where those events are gone keep their totals exactly as they are — whether they fell outside your plan’s retention window or were removed because a viewer opted out of analytics. There is nothing to prove a duplicate with, so nothing is touched. (A tool that rebuilt your counts from the surviving events would set those days to zero instead.)
  • Gifted subs never move. A gift was counted once under the old rule and is counted once under the new one, so it cancels out.
  • Counts recorded after the fix aren’t touched. They were never inflated, and removing a duplicate from a correct figure would just make it wrong.

Recalculating also rebuilds your goal streaks, so a streak can’t be left standing on a figure that no longer exists. It can be run once per channel — the correction is a one-time removal, so running it twice would take the duplicate off twice. Broadcaster or lead moderator only.

Hype Trains

The Hype Trains page shows your record-setting trains as two cards: All-Time High (your own channel) and Shared All-Time High (shared/cross-channel trains you took part in). An all-time-high record captures the highest level reached, the total contribution points at that peak, and the date it was achieved — and a record only ever moves up; a lower incoming value never overwrites a stored higher one.

Records update automatically as trains run. Your own high comes from the live channel.hype_train.begin/progress events; the authoritative achieved dates and the shared high come from Twitch’s Get Hype Train Status endpoint, fetched at most once every 5 minutes so it isn’t hammered during a train. If a source is briefly unavailable, existing records are left untouched.

Below the record cards, History lists every completed train grouped by stream session, with its level, type, and the subs and bits that went into it. Twitch reports a train only as a points total — it never tells us how many subs or bits made it up — so those two columns are derived from the contribution events (cheers, subs, resubs, and gift bombs) that landed around the train, then checked back against the train’s points total. Anything the total accounts for that no contribution event reached us for is added back rather than dropped, and hovering a figure says how much of it that was. Shared trains are the exception: their total includes contributions from the other channels in the train, which never reach us at all, so those rows only count what your own channel contributed. The Discord bot’s hype-train results and the hype-train overlay use exactly the same rules, so all three report the same numbers for a train.

The native Hype Train overlay widget (banner, theater, and streak variants) surfaces these live. Per-event variables include level, progress, goal, total, all_time_high_level, and all_time_high_total, from which it renders the level, a progress meter (progress / goal), a ”% to next level” readout, and a record line (“Best Lv N” and “Y% of record”).

Top Chatters

A message-count leaderboard (who chats most, over Stream / Today / 7D / 30D / 90D ranges) sourced from the Chatters module’s activity tracking.

Channel timezone

Numbers uses a single per-channel timezone, set in the dashboard under Settings (an IANA zone such as America/New_York; defaults to UTC, broadcaster-only to change). It’s stored globally for your channel and shared across features. It determines:

  • Day boundaries for streaks — including whether same-day streams combine and how midnight-crossing sessions are attributed. Changing it recalculates existing streak history.
  • Pattern bucketing — the day-of-week and time-of-day views in Patterns bucket events in your local time (DST-accurate).
  • Displayed dates/times — streak date ranges, subscriber milestone projections, and pattern labels are localized to your channel timezone.

Widgets

Numbers supplies overlay data through a per-channel widget token. Widget setup — building browser-source URLs and arranging overlays — now lives in the Widgets module; Numbers is the data source behind:

  • Counter — a single live number for any of the nine metrics (This Stream / Today / 7 Days / 30 Days).
  • Goal progress — current / target / percentage for a goal metric over the same windows.
  • Plus Points — the live Plus Program estimate (the goal variant auto-targets the next Plus level).
  • Hype Train — live level, progress, and all-time-high records (see Hype Trains).

(The old Numbers → Widgets tab now redirects to the Widgets module.)

Automatic behaviors

  • EventSub subscriptions (stream online/offline, follows, subs, gifts, cheers, resubs, hype trains, raids) are registered when you run setup — and re-checked automatically on your first dashboard visit, so missing subscriptions self-heal.
  • A per-minute job polls Twitch’s Get Streams API while you’re live to sample viewer counts into the current session.
  • Daily jobs record total-follower/subscriber/Plus-Points snapshots, backfill retroactive acquisition reclassification, and prune raw events plus per-viewer analytics past your tier’s retention window.
  • All processing is deduplicated and fail-soft: a failed write never breaks event delivery.

Configuration

Open Numbers in the dashboard sidebar. Its tabs, in order: Overview, Charts, Sessions, Subscribers, Top Chatters, Acquisition, Raids, Journey, Behavior, Patterns, Schedule, Goals, Streaks, and Hype Trains. Regular mods and read-only sessions can view everything but not change goals, streaks, tokens, or the channel timezone.

API and endpoint reference

See Numbers — API endpoints for the full list of HTTP endpoints.

Auth reference

See Numbers — Authentication & permissions for the OAuth scopes this module uses and the EventSub subscriptions it registers.