The !Watchtime Command: Track & Show Viewer Watchtime
Turn hours watched into a number your community can see, compare and be proud of.
!watchtimeWhat Does the !Watchtime Command Do?
The !watchtime command tells a viewer how many hours they've spent watching your streams in total. A chatter types the trigger and the bot answers with something like “@Dave has watched for 147 hours 12 minutes.” Many setups extend it with a leaderboard variant that posts the top watchers in the channel, which is where most of the fun lives.
Where this command differs fundamentally from something like followage is that nobody else is keeping this number for you. Twitch, YouTube and Kick don't publish a per-viewer watchtime figure to third parties. The number your bot reports is one the bot has counted itself, minute by minute, by checking who's in your channel while you're live and adding time to each of their totals.
That has a consequence worth understanding before you promise chat a leaderboard: watchtime only exists from the moment your bot started counting. A channel that has been live for three years and installed a watchtime bot last week has one week of data, and there is no historical backfill to import. The counter is also only as reliable as the bot's connection — if the bot drops out of chat mid-stream, or you go live before it connects, those minutes are simply never recorded.
Most bots also count presence rather than attention. Being listed in the channel's chatter list is what gets you credit, so a viewer who leaves the tab open while they sleep will out-earn one who watches attentively for two hours. Some bots mitigate this with an AFK timeout or by requiring periodic chat activity; most don't. It's not a flaw so much as a design choice, and it's why watchtime works better as a celebration than as a competition with a prize attached.
Why Streamers Use It
Watchtime is the closest thing a chat bot can give you to a loyalty score. A follow is a single click made once, possibly years ago, possibly by someone who has never come back. Hours watched is accumulated in the present tense and can only go up by someone actually showing up. When you want to know who your community really is — not who clicked follow during a raid in 2021 — the watchtime list is the honest answer.
That makes it a great basis for recognition. Streamers use it to pick who gets a mod invite, who gets shouted out at the start of a stream, who gets first pick in a viewer game night, or who gets a role in the Discord. Because the number is earned by presence rather than by spending money, it's one of the few status markers in a channel that a viewer with no disposable income can top — which matters more than it sounds for the health of a community.
It's also the metric that rewards the quiet regulars. The people who sit at the top of a watchtime leaderboard are very often the same people who never say much — the ones who type !lurk and then keep you company for six hours. A watchtime command gives them a way to be seen for exactly the thing they do, without asking them to become chatters to get credit.
Finally, it gives you a stream-planning signal. If your top watchers have thousands of minutes but your average concurrent number is flat, you've got a retention-strong, discovery-weak channel and your effort belongs in getting new people in the door. If the leaderboard turns over constantly with nobody accumulating, the opposite is true. That's a more actionable read than a follower count, which mostly measures how many people once considered watching you.
!Watchtime Variations & Example Responses
| Command | Example Response | Notes |
|---|---|---|
| !watchtime | @Dave has watched for 147 hours 12 minutes. | The default. Reports the total for whoever typed it. |
| !watchtime @Sam | @Sam has watched for 61 hours 40 minutes. | Looks up another viewer. Handy for mods settling an argument. |
| !top watchtime | Top watchers: 1. Sam (612h) 2. Dave (147h) 3. Kira (133h) | The leaderboard variant. Keep it to three to five names or it floods chat. |
| !watchtime (with rank) | @Dave has watched for 147 hours — rank #2 in the channel. | Adding rank is what turns the command into a competition. |
| !watchtime (new viewer) | @Dave has watched for 12 minutes. Welcome — the clock has started. | Write this case yourself. A bare zero reads like the command is broken. |
| !hours | @Dave has watched for 147 hours 12 minutes. | Common alias. Viewers guess !hours as often as they guess !watchtime. |
Set Up !Watchtime in StreamUps
StreamUps commands run across Twitch, YouTube Live and Kick from one dashboard, so a viewer's watchtime response reaches whichever chat they typed in.
- 1Sign in to StreamUps and connect the channels you stream to.
- 2Open the Commands section of the dashboard and add a new command.
- 3Set the trigger to !watchtime.
- 4Write the response using the watchtime placeholder so the bot fills in the tracked total — for example: $(user) has watched for $(watchtime).
- 5Set a global cooldown of around 20 seconds, and consider restricting a !top watchtime leaderboard variant to moderators so it can't be spammed.
- 6Enable the command on each connected platform and save. Remember the counter starts from the moment tracking is switched on — there's no historical data to import.
Set Up !Watchtime in Nightbot
Nightbot does not track watchtime. It has no built-in points or hours system, so a Nightbot watchtime command has to read the number from somewhere else using $(urlfetch).
- 1Decide which service will actually do the tracking — a loyalty-system bot such as StreamElements, or StreamUps, has to be in your channel counting the minutes.
- 2Find that service's public API endpoint for a user's points or watchtime, and confirm it returns a plain-text value (not JSON) — $(urlfetch) posts whatever it receives straight into chat.
- 3Go to nightbot.tv, open Commands → Custom → Add Command.
- 4Set Command to !watchtime.
- 5Set Message to something like: $(touser) has watched for $(urlfetch https://your-tracking-service/api/watchtime/YOURCHANNEL/$(touser)) — substituting the real endpoint.
- 6Set Cooldown to 20 seconds and Submit. If you don't already run a tracking bot, skip this route entirely: Nightbot alone cannot produce a watchtime figure.
Set Up !Watchtime in StreamElements
StreamElements tracks watchtime as part of its loyalty system, so this is mostly a matter of switching the system on and enabling the right command.
- 1Sign in at streamelements.com and open the Bot section, confirming the bot has joined your Twitch channel.
- 2Open Loyalty (Points) settings and enable the loyalty system — watchtime is only recorded while this is active.
- 3In Chat Commands → Default Commands, look for the watchtime command and enable it.
- 4To customise the wording, create a custom command instead and use the watchtime variable in your response, e.g. ${user.watchtime} — check the variable list in the command editor, as StreamElements occasionally renames these.
- 5Add a leaderboard variant if you want one, using the top-watchtime variable exposed in the same editor.
- 6Set Cooldown to 20 seconds, save, and test with a second account.
Switching Bots Without Losing Your Watchtime
Here's the pain point nobody warns you about: watchtime data belongs to the bot that recorded it, and moving bots usually means starting from zero. Every hour your community banked lives in one provider's database, and there's no universal export format that another bot will happily import. Streamers discover this at the worst possible moment — after switching — when a regular with 900 hours types the command and gets told they've watched for four minutes.
Before you migrate anything, check whether your current bot lets you export points and watchtime. StreamElements exposes its loyalty data in the dashboard and via its API, and a few other platforms let you download a CSV of users with their totals. Grab that file first, even if you have nowhere to put it yet, because you generally lose dashboard access to a bot the moment you disconnect it from your channel.
Then check whether your destination bot can import. Some can take a CSV of usernames and starting balances; some can't, in which case the practical workaround is a manual top-up for your top 20-50 viewers rather than trying to reconstruct the whole list. If neither works, the graceful option is to announce a reset in advance, pin the old leaderboard somewhere public — a Discord message or a channel panel — and frame it as a fresh season rather than a loss. Communities take that far better than a silent wipe.
A related trap: usernames aren't stable. Twitch lets people change their login name, and any watchtime record keyed to the old name will not follow them. If a long-time viewer's total suddenly disappears without a bot change, a rename is the first thing to check.
Two more things worth deciding early. Set a global cooldown of about 20 seconds — leaderboard variants in particular are the commands most likely to be spammed, and posting a top-10 list five times in a row wrecks a chat. And decide whether you want an AFK cutoff. If watchtime is going to unlock anything meaningful in your channel, a cap on how long a completely silent session keeps counting stops overnight tab-parkers from dominating the board. If it's just for fun, leave it uncapped and let people enjoy their absurd numbers.
If you're weighing bots specifically on this, it's worth comparing what each one stores and what it exports before you commit — our Nightbot alternative and custom chat commands pages cover how StreamUps handles commands across Twitch, YouTube Live and Kick from a single dashboard.
!Watchtime Command FAQ
How does a bot know how long someone has watched?
Why is my watchtime lower than it should be?
Does watchtime count if I'm AFK with the stream in a tab?
Can I show a watchtime leaderboard in chat?
Can I transfer watchtime when I change bots?
Is watchtime a better loyalty metric than follows?
Related Commands
!lurkLurk
Let viewers announce they're watching quietly without leaving the stream.
!followageFollowage
Show viewers exactly how long they've been following your channel.
!soShoutout
Give another streamer an on-stream shoutout with a link to their channel.
!discordDiscord
Drop your community Discord invite into chat on demand.
!socialsSocials
Share all of your social media links in a single chat message.
!uptimeUptime
Tell chat how long the stream has been live at any moment.
!quoteQuote
Save memorable stream quotes and replay them in chat later.
!rulesRules
Post your chat rules on demand so moderation stays transparent.
!clipClip
Let chat capture the last 30 seconds the moment something happens.
!songSong
Show whatever track is playing right now without breaking your flow.
!subcountSubcount
Put your live subscriber total in chat to fuel milestone hype.
!8ball8ball
Answer chat's questions with a random magic eight ball verdict.
!hugHug
Give viewers a way to interact with each other, not just with you.
!specsSpecs
Answer the most-asked question on any stream: what's in your PC?
Set Up Chat Commands in Minutes
Add !lurk, !so, !discord, and more to your Twitch, YouTube, or Kick chat with StreamUps. No bot hosting, no code—just pick your commands and go live.