Skip to main content
OpenCX records what your human agents actually do. There is nothing to turn on. Ask Companion for the numbers you need, or have it build a mini app that becomes your time-tracking dashboard.

Worked time

Worked time counts from when an agent opens a session until they update it: a reply, an internal note, a status change, a close, an assignment, a merge and so on. The time is credited at the update. For an agent’s next update on the same session, only the time since their previous update counts, and never time from before their working day began, so nothing is counted twice. Time spent looking at a session without updating it is shown separately as viewing, not as worked time. Each update carries two measures:
  • Focused time (the default): time the agent was actively working on that session.
  • Open time: time the session was open in the agent’s browser tabs, focused or not, the way ticket-tab timers count it. Use it to compare with numbers from a ticket-based tool.
When an agent’s time overlaps, with two tabs or two computers, it counts once: the update with more time keeps the overlap. An agent never logs more than 60 minutes in an hour. A working day runs from an agent’s first activity until a break of four hours or more, so a shift that runs past midnight is credited whole. Group updates by day in your own time zone. An update with no recorded activity, such as one from before recording started, is credited the time since the agent’s previous update on that session, up to 15 minutes, and never time that recorded activity already covers. An internal note counts as an update only when the agent was working around it: on that session at the time, on another update within 15 minutes, or on that session within 12 hours. Availability statuses are not worked time. Time online, on lunch or in a meeting is available time, which is useful next to worked time for idle time and utilization.

What is recorded

  • Availability changes: every time an agent’s status changes, from any source: the status menu, the Members page, the public API, calendar or helpdesk sync. Custom statuses such as Lunch or Break are included by name. Removing a member from the workspace records them going offline.
  • Focused time: a stretch starts when an agent works in the OpenCX dashboard and ends at their last mouse or keyboard input. It only runs while the tab is visible, the window has focus, and the agent used mouse or keyboard in the last two minutes. A locked screen, a second window, or time away never counts. Each stretch belongs to the session that was open, or to no session.
  • Open time: a stretch runs while a session is open in a browser tab, focused or not, and ends when the agent moves to another session or closes the tab. Time while the computer sleeps never counts.
  • Updates: replies, internal notes, closes, reopens, assignments, tags, statuses, snoozes, priority changes and merges on each session, by the agent who made them. Replies sent through the public API in an agent’s name are not counted as that agent’s work.
Recording started when this feature shipped. Status history starts from each agent’s status at that moment.

Build your dashboard

Ask Companion in your own words, for example:
  • “How much did each agent work yesterday, in seconds?”
  • “Show me the raw update table for Sam yesterday.”
  • “What’s each agent’s open time over the last 7 days, with overlaps removed?”
  • “Show average handle time per update by agent this month.”
  • “How much time did agents spend viewing sessions they didn’t update?”
  • “How many hours was each agent online last week, excluding Lunch?”
  • “Who is working on which session right now?”
  • “Build a timesheet dashboard with a row per agent, a day timeline and a CSV export.”
Companion uses focused worked time unless you ask for a different rule, such as open time or every focused second, and tells you which one it used. Mini apps and Companion read these reporting tables, scoped to your workspace: Updates by one agent on one session in the same second count as one update: its time is on one row, and the others are empty. When sessions are merged, time spent on a merged session counts toward the session it was merged into, including chains of merges and merges made after the work: effective_session_id is the session the time belongs to, and session_id keeps the one the agent had open. A status lasts until the agent’s next change, so an agent who went online yesterday is still online today with no new row. An empty status_name is the built-in Online or Offline state. Reports reflect the latest synced data, so the last minute or two can take a moment to appear.

Who can see it

Reading these tables needs the Reports permission, like any other custom dashboard. Agents’ own dashboards record their activity without any extra permission.