How ActivityPulse works
A desktop agent on Windows or macOS records which application and window are in the foreground, aggregates that into activity segments on the device, and syncs them as per-project hours. It captures metadata only by default: no keystroke content, no screen recording, no webcam.
From a foreground window to a billable hour
Six steps, and nothing hidden in between them.
The agent samples the foreground window
A small desktop application on Windows or macOS records which application and which window are in front, and for browsers the site-level identity of the tab. It reads window and process metadata. It does not read page content, document contents or what you type.
Samples are aggregated on the device
Raw samples never leave the machine. The agent folds them into activity segments locally — a stretch of continuous work in one application, against one project — so what is sent is a summary, not a stream. This is what keeps the volume low enough to work on a bad connection, and it is why there is no raw feed of your day sitting on a server.
Idle time is subtracted, not counted
When the machine goes idle, the segment ends. Idle time is reported separately rather than folded into active hours, so an hour of attributed work is an hour someone was actually at the keyboard.
Segments sync, exactly once
Each segment carries a UUIDv7. The server upserts on that id, so a segment that arrives twice — a retry after a dropped connection, a resumed sync after a flight — is stored once. With no network, segments queue in a local outbox and go when the connection returns.
Overlaps between a person's devices are resolved
Somebody working on a laptop and a desktop in the same hour has worked one hour. Overlapping time from two devices belonging to the same person is resolved before it reaches a report, with the raw per-device figures kept alongside the credited ones so the resolution is inspectable.
Hours become timesheets and exports
The result is per-project and per-task hours you can review, adjust and export. A manual adjustment is recorded as an adjustment — marked, attributed and audited — rather than overwriting what was captured.
What is never captured
On any plan, in any configuration.
- Keystroke content — what you type is never recorded, on any plan.
- Webcam or microphone — the agent has no access to either.
- Continuous screen recording — there is no session replay or video capture.
- Personal file contents — the agent reads window and process metadata, not documents.
- Browsing on a paused device — pausing capture stops collection, it does not hide it.
What the design guarantees
Enforced architecturally by the endpoint agent and server.
- no-double-count
- An hour is never counted twice: each activity segment carries a UUIDv7 the server upserts on, so a retried sync adds nothing.
- offline-first
- The agent keeps working with no network, queueing segments locally and syncing them when the connection returns.
- two-devices-one-hour
- One person working on two machines is credited with one hour, not two — overlapping time is resolved before it reaches a report.
- manual-adjustments-audited
- A manually adjusted timesheet is marked as adjusted and audited; captured data is never silently overwritten.
What the monitored person sees
The person being tracked is not the last to know what is being collected about them. The console has a page of their own — listing exactly what is captured under the settings that apply to them, open without an administrator and without a role — and the agent shows which project their time is going to and offers a pause control for personal time.
This is a design position, not a feature list. A monitoring tool that a team discovers rather than agrees to is one that gets worked around, and the data it produces stops being worth trusting.
Frequently asked questions
How does ActivityPulse track time?
A desktop agent for Windows and macOS records which application and window are in the foreground, aggregates that into activity segments on the device, and syncs the segments to be attributed to projects and tasks. There is no manual timer to start or stop.
Does ActivityPulse read what I type or see?
No. Keystroke content is never captured, there is no screen recording by default, and the agent does not read document or page contents. It reads window and process metadata.
What happens if I lose my internet connection?
Capture continues. Segments queue in a local outbox on the device and sync when the connection returns. Because each segment carries an id the server upserts on, a delayed or retried sync never produces duplicate hours.
How does it know which project I am working on?
Time is attributed to the project currently selected in the desktop agent, and switching project is a single action. Rules can also attribute particular applications or sites to a project automatically.
Can I pause tracking?
Yes. The agent has a pause control for personal time. Pausing stops collection — it does not hide activity that was already captured.
Which operating systems are supported?
Windows and macOS. There is no Linux client and no mobile client. A browser extension acts as a companion to the desktop agent rather than a replacement for it.
See where the hours actually went
Free for up to three people. Windows and macOS. No keystroke content on any plan, and screenshots off unless an administrator turns them on.