How Hubstaff Activity Tracking Works: The Formula Explained
If your employer or client uses Hubstaff, you have probably noticed a small percentage next to each block of tracked time. Most people assume it measures how hard they are working. It does not. It measures whether your mouse or keyboard moved, second by second, and nothing else.
This guide breaks down the real mechanics: the formula, what registers as input, why genuine focused work often scores badly, and the things the number is structurally incapable of seeing. Everything here applies to the Hubstaff desktop app in 2026.
How does Hubstaff calculate activity?
Hubstaff divides tracked time into 10-minute windows of 600 seconds. For each second it asks one yes or no question: was there at least one mouse or keyboard event during that second? The percentage is the share of seconds that answered yes.
So if 270 of the 600 seconds in a window had at least one input event, your activity level for that window is 45 percent. Whether you moved the mouse once in that second or a hundred times makes no difference. One event marks the whole second as active.
The per-second value stored is effectively a boolean, true or false. This is why the metric cannot be gamed by moving the mouse frantically: intensity is discarded at the moment of measurement. What matters is coverage across seconds, not volume within them. We measured exactly how many seconds each kind of action covers, and published the numbers in how long one mouse movement counts.
What counts as activity
Only two categories of input register with the tracker, and both are treated identically.
- •Mouse activity. Movement, clicks, and scrolling all register as input events.
- •Keyboard activity. Any keypress, including modifier keys, arrow keys, and shortcuts.
The content of what you type or click is never part of the percentage. Typing a single space registers exactly the same as writing a paragraph of code. The algorithm is content-blind at this layer, and that is by design rather than by omission.
What does not register
- •Looking at the screen without touching anything
- •Speaking on a call, even a video call using the same machine
- •Reading a long document or reviewing a design
- •Work on a second device, a phone, a tablet, or paper
- •Watching a screen share where the presenter is driving
Every item on that list is real work, and every one of them scores zero. That mismatch is the central problem with input-based measurement, and it is not something Hubstaff can fix without changing what it measures.
How the 10-minute window shapes the number
Because the window is fixed at 600 seconds, short bursts of input spread thinly across a window score better than the same total input concentrated in one stretch. This is counterintuitive and worth an example.
| Pattern | Total input time | Activity % |
|---|---|---|
| Typing hard for 3 straight minutes, then reading for 7 | 180 seconds | 30% |
| A brief input every 2 seconds for the full 10 minutes | ~300 seconds | 50% |
| Steady mixed work with short pauses throughout | ~390 seconds | 65% |
| Continuous input with no pause at all | 600 seconds | 100% |
The first row is the case that frustrates people most. Three minutes of intense, valuable typing followed by seven minutes of careful reading is an excellent working pattern, and it scores 30 percent. A colleague idly scrolling for ten minutes scores far higher.
Windows are also independent of each other. A 20 percent window followed by an 80 percent window averages to 50, but reviewers often look at individual blocks rather than the daily average, which makes the low windows more visible than the arithmetic suggests.
A worked example: one window, second by second
Abstract formulas are easy to misread, so here is a single 10-minute window traced through. Say you spend it reviewing a pull request: reading the diff, scrolling, pausing to think, leaving a comment.
| Minute | What you did | Seconds with input | Running total |
|---|---|---|---|
| 0:00 to 1:00 | Opened the PR, scrolled the file list | 48 | 48 |
| 1:00 to 3:00 | Read the diff, scrolling every few seconds | 35 | 83 |
| 3:00 to 4:30 | Sat still working out why a test fails | 0 | 83 |
| 4:30 to 6:00 | Scrolled back, opened a second file | 52 | 135 |
| 6:00 to 7:30 | Thought about the fix, hands off keyboard | 0 | 135 |
| 7:30 to 9:00 | Typed a review comment | 78 | 213 |
| 9:00 to 10:00 | Re-read the comment, submitted | 24 | 237 |
That is a productive ten minutes of senior engineering work, and it scores 39.5 percent. The three minutes of thinking contributed nothing, because thinking produces no input events. Nothing is broken here, the metric is simply measuring something other than what you did.
Notice too that the 78 seconds of typing in minute 7:30 counted as 78, not more. Typing fast does not earn extra credit. A second with one keystroke and a second with twelve keystrokes are identical to the tracker.
How the daily average is calculated
Your daily figure is not the average of your window percentages. It is total active seconds divided by total tracked seconds, which means it is weighted by how long you tracked.
The difference shows up whenever you have a short tracking session alongside a long one.
| Session | Tracked | Active seconds | Window % |
|---|---|---|---|
| Morning block | 3 hours (10,800s) | 5,400 | 50% |
| Quick afternoon task | 10 minutes (600s) | 540 | 90% |
| **Simple mean of the two** | **70%** | ||
| **Actual daily figure** | 3h 10m (11,400s) | 5,940 | **52.1%** |
This is why a single strong hour does not rescue a weak day, and why a long low-input session dominates the number. It also explains the most common surprise: tracking a quiet 45-minute stretch costs you far more than 45 minutes of weight suggests, because it adds 2,700 mostly-inactive seconds to the denominator.
What happens at window boundaries
Windows are fixed 10-minute blocks, and they do not shift to fit your work. A burst of activity that straddles a boundary is split between two windows rather than counted in whichever one it mostly belongs to.
Practically this means a 20-minute task rarely produces two matching windows. If you started at 9:07, your work covers the tail of one block and the head of the next, and both will read lower than the work deserved. There is nothing to do about it, but it is worth knowing before you try to explain a specific block to someone.
A partially tracked window is scored on what it contains rather than scaled up. Stopping the timer four minutes into a block does not produce a 4-minute window, it produces a block with 240 seconds of possible activity and 360 seconds that never happened.
Idle time and the away threshold
If the tracker sees no input for a sustained period, it flags that stretch as idle and may prompt you to confirm whether to keep or discard the time. The threshold is configurable by the account owner, commonly somewhere in the range of a few minutes.
The underlying logic is the same second-by-second check. Sustained inactivity is just a long unbroken run of inactive seconds, and the idle prompt is a threshold on top of that run rather than a separate detection system.
What happens when you answer that prompt, and whether discarded time affects your percentage, is covered in Hubstaff idle time explained.
Screenshots are a separate system
Hubstaff can also take periodic screenshots, up to three per 10-minute window at randomized moments. These are images, and they have no connection to the activity percentage in either direction.
A high activity score does not produce more screenshots. A low one does not produce fewer. Organizations can disable screenshots entirely while activity tracking continues, which many do. The full detail is in our screenshot guide, and multi-monitor behavior is in the dual-monitor breakdown.
What Hubstaff cannot see
Because the activity layer only measures input timing, there is a great deal it has no visibility into at all.
- •Whether the work you produced was good, relevant, or even real
- •Time spent reading, thinking, or on calls, all of which look inactive
- •Work done on a second device, on paper, or in a meeting away from the keyboard
- •The difference between deliberate work and idle fidgeting, since both are just input events
- •Whether the person at the keyboard is you
That final point is not a security warning, it is a statement about the metric's scope. It measures a machine's input stream. It does not and cannot measure a person's contribution. Anyone treating the percentage as a productivity score is reading more into it than the data supports.
The wider version of this question, across all monitoring tools rather than just Hubstaff, is in what employee monitoring software can actually see.
Why the number matters anyway
None of the above makes the percentage harmless to ignore. On many contracts, particularly hourly freelance work, the number is visible to whoever approves your invoice, and a low score invites questions regardless of how good the underlying work was.
That is the practical bind. The metric is a poor measure of work, and it is also the metric you are judged by. Understanding the mechanism at least lets you see which of your working patterns the number penalizes, and which parts of your day it simply cannot represent.
Keeping a realistic activity level
Because the metric rewards consistent input rather than output, long reading or thinking sessions drag your numbers down even when you are fully engaged. There are workflow changes that help, such as scrolling as you read rather than sitting still, and taking notes in a document instead of on paper.
That is also the problem tools like Ghost Mode are built for. Ghost Mode generates natural, varied mouse movement, window focus changes, and keystroke timing so that genuine work time, including the parts spent reading or thinking, is not misread as idle.
The goal is not a fake 100 percent. That pattern is unnatural, it stands out to a reviewer, and it is the single most common mistake with tools in this category. The goal is a realistic, human-looking level that reflects the fact that you were at your desk working, including during the quiet moments input-based trackers penalize.
If your own score is sitting low, we wrote a practical follow-up on how to increase your Hubstaff activity score. If you are weighing tools, mouse jiggler vs activity simulator covers the technical difference between the two categories.
How does Hubstaff calculate the activity percentage?+
It divides tracked time into 10-minute windows of 600 seconds, marks each second as active if there was at least one mouse or keyboard event, and reports active seconds divided by 600, times 100.
Does moving the mouse faster increase my activity score?+
No. Each second is marked active or inactive, and one event is enough to mark it active. Intensity within a second is discarded, so frantic movement scores exactly the same as a single click.
Is the daily activity figure an average of my windows?+
No. It is total active seconds divided by total tracked seconds, so it is weighted by session length. A short session at 90 percent barely moves a day built mostly from a long session at 50 percent.
What happens if my work spans two 10-minute windows?+
The activity is split between them. Windows are fixed blocks that do not shift to fit your work, so a task starting at 9:07 covers the tail of one block and the head of the next, and both read lower than the work deserved.
Does Hubstaff know what I type?+
No. It records that a key was pressed during a given second, not which key. The activity layer is content-blind, and typed contents are never stored.
Do screenshots affect my activity percentage?+
No. They are two separate systems. Screenshots are images captured at random moments, activity is computed from input timing, and neither feeds the other.
Why is my activity low when I worked the whole hour?+
Because reading, thinking, calls, and reviewing produce no mouse or keyboard input, and every second without input counts as inactive. Three minutes of hard typing followed by seven minutes of reading scores 30 percent.
Can Hubstaff tell the difference between real work and random movement?+
No. The activity layer sees input events, not intent or content. Deliberate work and idle fidgeting register identically at this layer.
Keep reading
Keep your activity level accurate
Ghost Mode simulates natural mouse and keyboard activity so genuine work time isn't misread as idle.
