Analytics
Analytics sits under INSIGHTS in the Pyre.Stream sidebar, next to Revenue, and its subtitle is the whole idea in one line:
Every stream you have run, across every platform, with what happened in it.Not a viewer chart. Every platform already has a viewer chart, and each one is better at its own numbers than we will ever be, for a reason this page is blunt about further down. What no platform can show you is your stream as one thing: the Twitch and Kick and YouTube halves of the same night side by side, against the time you told people you would be live, next to the chat, the subs, the tips, the clips and the ad breaks that happened inside it.
The five tabs
Section titled “The five tabs”| Tab | What it answers |
|---|---|
| Streams | Every stream Pyre has recorded, newest first, with length, platforms, peak, average, chat, support, revenue and how the start compared to your schedule. |
| Stream summary | One stream in full: the viewer curve, per platform peak and average, and what happened in it. |
| Schedule | You said you would be live at a time. This is when you were. |
| Trends | Followers, viewers per stream, and the rest of it, over 7, 30 or 90 days. |
| Chat stats | How your Twitch chat uses emotes, and who chats the most, from 7stats. |
There is an Export CSV button in the header if you would rather have the rows than the page.
Your streams
Section titled “Your streams”The Streams tab is the list, and one row is one stream, however you ran it. A stream from the desktop app and a stream from the Cloud Studio land in the same list and are directly comparable, because they are written by two doors into one record rather than two separate histories. The summary names which door you used:
Streamed from the desktop app.Four numbers sit above the list for the last 30 days: Streams, Hours live, Average viewers and Started on time, each with the same length of time before it as a comparison. A stream still running wears a Live now badge rather than a suspiciously short length.
One stream, in full
Section titled “One stream, in full”Open a row and you get the Stream summary: the viewer curve across the whole stream, per platform peak and average underneath it, and a card called What happened in it holding chat messages, people who chatted, new followers, subs and tips and gifts, revenue, clips created and song requests played. Previous stream and Next stream step through your history without going back to the list.
Every one of those figures is deep linked to the page that owns it, because this page owns none of them: See the people goes to Community, See the money to Revenue, See the clips to Clips.
The three words, and why they matter more than the numbers
Section titled “The three words, and why they matter more than the numbers”Every figure on this page wears one of exactly three labels. They are the same three Revenue already taught you, deliberately reused rather than a second vocabulary invented beside the first:
Available is the platform's own number. Estimated is sampled by Pyre every 60 seconds. n/a means nobody can answer.| Badge | What it means |
|---|---|
| Available | The platform’s own figure, as the platform computed it. |
| Estimated | Pyre counted it, by asking the platform how many people were watching once a minute. |
| n/a | Nobody can answer. Not zero. |
That last one is the one worth reading twice, and the page says it out loud:
n/a is not a zero. It means no platform can answer, so the space stays empty instead of showing a number we invented.Sampled means sampled
Section titled “Sampled means sampled”While you are live, Pyre asks Twitch and Kick how many people are watching, once every 60 seconds, and keeps the answers. Peak and average are worked out from those samples when the stream ends. That is genuinely an estimate, and the page carries the caveat in the section itself rather than hiding it in a tooltip:
Viewer numbers are sampled once a minute while you are live, so a spike shorter than a minute can be missed.Your Twitch dashboard’s number will not match ours exactly, and it should not. Twitch computes unique viewers and true minutes watched server side, from data no API exposes to anyone. Sampling once a minute is the honest ceiling on what any third party can do, which is exactly why the number is labelled Estimated and never Available.
A gap in the connection is drawn as a gap
Section titled “A gap in the connection is drawn as a gap”If a platform stops answering mid stream, the curve breaks. It does not slope down to zero, because zero would be a claim about your audience when what actually happened was a claim about the connection:
Twitch dropped out for 4 minutes at 21:14.TikTok is n/a forever, and that is not a Pyre limitation:
TikTok publishes no viewer figures to anyone, and it never has. Your stream went out fine; the counting is what is missing.There is no watch time on this page, on purpose
Section titled “There is no watch time on this page, on purpose”No platform gives us a watch-time figure we could stand behind, so we do not print one. n/a is not a zero.Twitch has no watch time API at all. A modelled figure would look like a measurement and would not be one, so the page has none.
YouTube arrives hours later, and that is correct
Section titled “YouTube arrives hours later, and that is correct”YouTube is the one platform Pyre does not sample while you are live. It has no “how many people are watching my channel right now” report to call: its concurrency figures are published per video, after the fact. So instead of guessing at a number YouTube already knows, Pyre goes and asks for YouTube’s own peak and average once the stream is over, which is why a YouTube row is badged Available while Twitch and Kick are badged Estimated.
Those numbers are not final the moment you go offline. Pyre first asks about two hours after the stream ends, and tries again later if there is nothing yet. In the meantime the row says so:
YouTube has not reported this stream yet. Its numbers usually arrive within a few hours of you going offline.After four attempts across roughly two days with nothing back, the row stops waiting and says so:
YouTube never reported this stream. We asked four times over two days and got nothing back, so there is no peak or average to show.There is a third state, and it is the only one on the whole page with a button, because it is the only one you can do anything about:
Pyre lost permission to read your YouTube analytics, so this stream was skipped. Reconnect YouTube and your next stream will report again.Reading YouTube’s analytics needs a permission you grant to Pyre, and permissions expire, get revoked, or were never given in the first place. Reconnect YouTube sends you back through Google’s sign in, and your next stream reports normally. Note the tense: reconnecting fixes the next stream. A stream that was skipped stays skipped, because YouTube will not backfill a window Pyre had no permission to read at the time.
YouTube also reports one figure for the whole stream rather than a minute by minute series, so it sits in the per platform table and not in the curve:
YouTube reports a peak and an average for the whole stream, not a minute by minute series, so it sits in this table and not in the curve above.Did you start when you said you would
Section titled “Did you start when you said you would”The Schedule tab compares each stream against the schedule you publish. Its subtitle:
You told people when you would be live. This is when you were.There are four verdicts and no more:
| Verdict | When |
|---|---|
| On time | You started within 10 minutes of your slot, in either direction. |
| N minutes late | The number is the label. No adjective attached. |
| N minutes early | Reported, not praised and not corrected. |
| Not scheduled | Nothing was on the schedule near this stream. |
Starting within 10 minutes of your slot counts as on time.Not scheduled is not a failure. A spontaneous stream has done nothing wrong, and the copy does not scold:
Nothing was on the schedule near this stream, so there is nothing to compare it against.A slot you skipped is reported as a stat, not as a fifth verdict, because a missing stream is a fact about your schedule rather than a stream that went wrong. If Pyre cannot see a schedule at all it says that instead of pretending every slot was missed:
We cannot see your schedule from here.Your schedule itself lives on the Schedule and social page, and Edit your schedule on this tab goes straight there.
Trends
Section titled “Trends”The Trends tab is the longer view, over 7 days, 30 days or 90 days.
Followers is one of the few lines here that is nobody’s estimate and nobody’s sample:
Each platform reports its own follower count once a day, so this line is the platforms' number rather than ours.Viewers per stream carries your average and your best stream. The rest of it is a plain table: streams, hours live, chat messages, subs and tips and gifts, ad breaks and watch time, each against the same length of time before it. Days are bucketed in UTC, and the tab says so rather than implying your own midnight.
What your ads earned, estimated
Section titled “What your ads earned, estimated”Twitch has no API that reports ad revenue, or even how many ads ran. Pyre can estimate it anyway, for one reason: when you use Ad Manager, Pyre fires the commercials, so the count is ours to keep. Each stream’s summary gets one quiet row under Ad breaks:
3 breaks, 412 ad minutes viewed, est. $1.44“Ad minutes viewed” is each break’s length multiplied by how many people were watching at the time, taken from the same 60 second viewer samples the rest of the page uses. Multiply that by a rate and you have an estimate. The rate is printed on the page rather than hidden:
Estimated at $3.50 per 1,000 ad minutes viewed. Import a Twitch payout and Pyre fits the rate to what you were actually paid.$3.50 per 1,000 is a rough published consensus figure and it is a starting point, not a claim about your channel. Import a Twitch payout CSV on Revenue that overlaps a period with ad history in it, and Pyre divides what you were actually paid by the ad minutes it counted, giving you a rate fitted to your own channel. That fitted rate then replaces the default. The figure carries Revenue’s ESTIMATED badge, always, and never REAL.
An undercount stays an undercount
Section titled “An undercount stays an undercount”If a break ran at a moment with no viewer sample within 90 seconds of it, Pyre has no honest multiplicand for it, so it is left out rather than filled in with a guess:
One break ran with no viewer sample within 90 seconds of it, so it is left out of the total. The estimate is short rather than guessed.The estimate is therefore biased low, on purpose, and it tells you when. The same rule applies as a stream ages: viewer samples are kept for 90 days, and when they go, ad minutes for that stream can no longer be worked out. The breaks stay on record forever, because they were counted while they happened:
Viewer samples for this stream aged out after 90 days, so ad minutes can no longer be worked out. The 3 breaks are still on record.A stream with no ads says so plainly, rather than showing a zero row with an estimate of $0.00, which would read as a failure to earn rather than a decision not to run ads:
No ads ran during this stream.And when Ad Manager did exactly the job it exists for, the summary says so:
All 4 breaks landed between matches, which is what Ad Manager was aiming for.Chat totals outlive the chat log
Section titled “Chat totals outlive the chat log”Chat messages and chatters are counted while the stream is running and stored as part of that stream forever. Your chat log, the record of who said what, has its own retention window that you control in Bot settings. When a stream is older than that window you keep the totals and lose the transcript:
Chat history for this stream has aged out. The totals were counted while it was live and are kept for good, but who said what is gone.Your chat log keeps 30 days. You can change that in Bot settings, and it applies from today forward.That split is a deliberate rule and not an accident of storage: an aggregate count with nobody’s name in it survives, and anything about a specific person ages out with the source it came from.
Chat stats
Section titled “Chat stats”Chat stats shows your Twitch chat the way 7stats.tv sees it. 7stats is part of Pyre: it reads public Twitch chat and counts every 7TV, BTTV, FFZ and Twitch emote as it is used.
You do not have to sign up for it. Every Pyre streamer with Twitch connected is tracked automatically, from the moment Twitch is connected. Pick 24 hours, 7 days or 30 days and the tab shows:
- Emote uses, Chatters, Unique emotes and Emotes in set for the period
- Activity: emote uses per hour, or per day over 30 days
- Top emotes, with how many people used each one
- Most active chatters, the same leaderboard your public 7stats page shows
Open on 7stats takes you to your public page there, with more detail.
Your chat can ask too. The !7stats command
answers in chat with the same numbers.
Turning it off
Section titled “Turning it off”Your chat and emote stats are public on 7stats.tv. If you would rather they were not, switch off Chat stats on 7stats at the top of the tab:
Your channel's chat and emote stats are public on 7stats.tv. Turn this off to stop tracking and hide the page.Switching it off pauses tracking and hides your page on 7stats. What was already counted is kept, so switching it back on brings your history back with it. Nothing from the time it was off is recorded.
When it shows nothing
Section titled “When it shows nothing”| You see | Why |
|---|---|
Tracking started. Stats appear after a few minutes of chat. | Your channel was enrolled recently and chat has not used an emote yet. |
Chat stats are off. | You switched tracking off. |
7stats didn't answer. | 7stats is busy or restarting. Your chat is still tracked; try again in a minute. |
What this page will not do
Section titled “What this page will not do”No per viewer data, with one exception. Analytics holds aggregate numbers with no people in them. There is no viewer list, no per person breakdown and no name in any chart. Every per person question leaves for Community, which is the page that exists to answer it. This is not an oversight, it is the boundary: a count of chatters is a fact about your stream, and a chatter is a person. The one exception is Most active chatters on Chat stats, which repeats the leaderboard that is already public on your 7stats page. Viewers who do not want to be counted there can opt out on 7stats.
It starts the day it shipped. Pyre measures a stream while it is running, so there is nothing to bring in from before the feature existed. Every account, including old ones, starts empty:
Your first stream will show up here.Pyre measures a stream while it is running, so there is nothing to bring in from before today. Go live once and this page fills in: the viewer curve, the chat and support counts, and whether you hit your scheduled start.Go live once and it fills in. There is no import, no backfill and no way to reconstruct a stream nobody was counting.
No watch time, and no benchmark against other creators yet. Watch time is covered above: no platform gives one we could stand behind. The peer benchmark is a separate matter. There is a switch for it on Revenue, and it tells you the truth about itself: the cohort is not running yet, so joining stores your choice and shows you nothing today. It has no effect on your own numbers either way.
Where the numbers on this page come from
Section titled “Where the numbers on this page come from”| Number | Source | Badge |
|---|---|---|
| Twitch and Kick peak and average | Pyre, sampled every 60 seconds while live | Estimated |
| YouTube peak and average | YouTube’s own analytics, read a few hours after the stream | Available |
| TikTok viewers | Nothing. TikTok publishes none | n/a |
| Watch time | Nothing any platform will stand behind | n/a |
| Followers | Each platform’s own daily count | the platforms’ number |
| Chat, chatters, subs, tips, clips, songs | Pyre, counted while the stream ran | ours, exact |
| Ad breaks | Pyre, because Pyre fired them | ours, exact |
| Ad revenue | Ad minutes viewed multiplied by a rate | Estimated |
| Chat stats (emotes, chatters, activity) | 7stats, counted from public Twitch chat | 7stats’, exact |