Review your team's utilization and profitability
Open the Utilization report to see the whole team's hours by tech or by client, then the Profitability report to see labor cost against revenue, and know what the portal is doing with time automatically in the background.
What you will have
- Switch the Utilization report between Day, Week and Month, and read the whole team's total hours, technician count, and how much of that time came from the timer versus manual entries.
- Read one tech's own line: their working window for the period, how many entries across how many tickets, their presence time, and their percentage against the expected hours target.
- Open a tech's ticket by ticket breakdown, and see the same totals grouped by client instead of by tech.
- Find a client where a tech shows pure presence with nothing worked yet, the leak the By Client view exists to catch.
- Read the Profitability report for a client: labor cost against MRR, a margin percentage and color band, and a confidence score that says whether a loss is real or just under-tracked time.
- Know what the portal does with time automatically: folding research time back into the ticket that prompted it, holding unattributed time until you sort it, and Elise checking in when a timer goes idle.
Why it works this way
Presence, meaning idle time, breaks, and time simply spent with a page open, is shown everywhere next to worked time but is never added into it. A busy looking day should never read as a productive one.
The Profitability confidence score is not a comment on the client. It is a comment on how the hours it is built from were captured. A loss built mostly from typed in time is a data problem to go fix before it is a pricing conversation.
A ticket you have open counts as research the moment you come back to it within 30 minutes. Wander off longer than that and the portal treats the time separately instead of guessing it was still about that ticket.
Unattributed time never disappears and it never bills itself either. It waits for you as the Unattributed Time window until a person decides where it goes.
Steps
Open Utilization from the Time area.
Utilization sits under Time in the sidebar, alongside My Time, Profitability and Review.
Open Utilization from the Time area. Switch the period to Month and see the date range you are looking at.
Day, Week and Month sit next to arrows and a Today button that step you through any range; September 2026 shown here rolled the whole team's time up for the month instead of just today.
Switch the period to Month and see the date range you are looking at. Read the Total Hours tile, including its presence rider.
3.9h Total Hours is worked time only; the smaller + 28.3h presence beside it is idle time, breaks and ambient page-view time, shown for visibility but never folded into the 3.9h.
Read the Total Hours tile, including its presence rider. Read the Timer Tracked and Manual tiles.
These split the same 3.9h by how it was captured: 0.8h (20%) came from the timer starting itself, and 3.1h (80%) was typed in by hand. A team leaning almost entirely on Manual is a team the auto-start timer is not catching.
Read the Timer Tracked and Manual tiles. Read one tech's own line.
Northwind Demo's row reads 7:44 AM - active (their day is not over yet), 198 entries across 18 tickets, + 28.3h presence, then Timer and Manual figures and a 3.9h total with a 2% utilization figure in muted text (green from 80%, amber from 50%, muted below that). Switching this same page to Day adds a wall-clock timeline strip under a tech's line, plotting exactly when their slices happened; Week and Month roll that detail into the totals shown here instead.
Read one tech's own line. Click the tech row to expand it, then find Open full day view.
Expanding a tech's row adds an Open full day view link, a By Client chip strip, and the ticket by ticket list below it, all for this same tech and period. The link opens that tech's day on My Time, the same page they see for themselves.
Click the tech row to expand it, then find Open full day view. Read the ticket by ticket breakdown.
Each row names the ticket, its client and how many time entries it carries, then the minutes this tech logged on it: #16 Front desk PC will not wake from sleep at 0.8h, #12 Phishing email reported by receptionist at 0.8h, and two more tickets below them. Clicking a row opens that ticket.
Read the ticket by ticket breakdown. Turn on By Client.
The toggle in the top right regroups the whole report by client instead of by tech, using the same figures.
Turn on By Client. Find a client with time worked showing 0h next to a large presence figure.
Northwind Managed Services reads 0h worked and 28.0h present: a tech had pages open against this client's context all month without ever declaring work on it. That gap is what the By Client view exists to surface, a client nobody is billing time to even though someone was clearly around.
Find a client with time worked showing 0h next to a large presence figure. Open Profitability from the Time area.
Profitability sits below Utilization in the same Time section of the sidebar. A smaller Tech Utilization widget is also available on a customizable dashboard: it lists each tech with a progress bar, their logged time and their percentage for today only, and clicking it opens this same full report; the full report adds the whole month or week, the ticket by ticket detail, the By Client grouping and the presence figures the widget has no room for.
Open Profitability from the Time area. Read one client's Margin, Band and Confidence.
Bluebird Dental reads -1032% margin, a Red band, and 69% confidence, with an Hours surging flag beside it. Confidence is the share of that client's hours that came from the timer or automatic capture rather than typed in by hand; a low confidence number next to a loss means the number is unreliable and worth fixing before it becomes a pricing conversation. The Core plan clients only toggle above the table, Core only by default, is meant to hide any client without an active Core service plan so the table reads as your core margin book; switch it to All subs to see every active or onboarding client instead. On this tenant every client currently holds an active Core plan, so both positions show the same seven rows here - the toggle itself, not this table's row count, is what changed.
Read one client's Margin, Band and Confidence. Know that time between two visits to the same ticket can attribute itself.
Leave a ticket open, browse a KB article, a vendor doc or a device config page for a few minutes, then come back to that same ticket within 30 minutes: the portal stamps the browsing in between as research for that ticket instead of leaving it unattributed. It still counts as presence, not declared work, until a reply or a manual entry gathers it in. Wander off longer than 30 minutes, or land on a different ticket, and this does not happen.
Know what the Unattributed Time window asks for.
When time is left without a home, an overnight job gathers it and the Unattributed Time window asks about it the next time you open the portal. It names the date and how much time needs attributing, with Smart Suggestions already checked based on how sure it is: a reply is treated as certain, a ticket you acted on as likely, one you only viewed as least sure. If the checked rows add up to less than the total, the window says so on an Unaccounted line and tells you to place it on a row or leave it pending; + Add row is how you file the rest, for example as Admin time. Confirm Attribution books only the checked rows and leaves the remainder pending, so minutes you did not place are never thrown away. It never discards anything: with nothing checked it asks you to check a row instead.
Note: The window never traps you. Later, Escape, the backdrop and the header X all defer it, and it comes back in a new browser tab and the moment you open a Time page. Discard All deletes those minutes for good and asks you to confirm first; on an instance running Finalize Day Mode on hard block that button is replaced by the words Discard disabled.Know why Elise sometimes asks if you are still working on a ticket.
A running timer with no page activity for a while gets flipped to Idle by the portal on its own, and Elise posts a message in that ticket's chat asking whether you are still on it, so you can correct the minutes before they go anywhere near an invoice. The wall clock never stops counting and nothing is deleted; only the bucket the time is filed under changes.
Other ways to do this
A tech's own day
Open My Time (Time > My Time) for the same slices a tech sees for themselves, one day at a time.
If it did not work
- If Utilization shows Couldn't load time data, use the refresh icon in the page header and try a different period before assuming nothing was logged.
- If a client you expect is missing from Profitability, check the Period field first; it shows a single month at a time.
- If Profitability is missing from the Time sidebar for a staff account that can already see Utilization, check that account's Billing permission, not their Time permission.
- If your MSP runs Finalize Day Mode on hard block, you still cannot clock in or start new work until yesterday is attributed, though you can still move around the portal; use + Add row to file leftover minutes as Admin time rather than inventing a ticket.
Questions this page answers
How does time tracking work?
Time is tracked per-ticket via the timer widget or manual entry. The Time page shows all entries grouped by tech with ticket-level breakdown. Filter by date range to see utilization over different periods.
Why does time on KB pages show up on my ticket?
When you view a ticket and then read a KB article, vendor doc, or device config, that time gets attributed back to the ticket that prompted the research. This is automatic - the system tracks page navigation per tab via TechPageView and rolls admin-page time into the most recent ticket you were on.
What is the ghost-time modal that appears in the morning?
If you did not finish attributing yesterday's time, an overnight job gathers the unattributed minutes and the Unattributed Time window asks about them the next time you open the portal. It pre-fills suggestions ranked by AI confidence (replied = 0.95, viewed + assigned = 0.85, viewed only = 0.70), and the rows always add up to the total in the header, so any minutes the suggestions do not claim sit in a leftover row. Check the rows you want and press Confirm Attribution; confirming part of the time attributes that part and leaves the rest pending, so minutes you did not place are never thrown away. Press Later, Escape or click outside to deal with it another time - it never stands in front of the pages you were using, and it comes back in a new browser tab and whenever you open a Time page. If your MSP runs Finalize Day Mode on hard block you still cannot start new work until the time is attributed, but you can still move around the portal. Discard All deletes the minutes for good and asks you to confirm first.
What does the confidence score on the profitability report mean?
Each client's margin number includes a confidence percentage: how much of the labor time was auto-captured (TIMER / PAGE_VIEW / AUTO_START) vs manually entered. A low confidence score means a margin problem could be a tracking problem, not a pricing problem. Use it to decide whether to fix capture or have a renewal conversation. The Core plan clients only toggle, on by default, hides any client without an active Core service plan so the table reads as your core margin book; switch it off to see every active or onboarding client, whether or not it holds a Core plan.
What is the difference between worked hours and presence on the Utilization report?
Total Hours counts actual work minutes. Passive presence, meaning idle time, breaks, and ambient page-view time captured while a tech simply had the app open, is shown separately as a "+ {n}h presence" rider and is never added into worked hours (that double-count once let banked hours exceed the hours in the day). Expand a tech's By Client breakdown and each client chip shows worked hours first, then presence as "· {n}h present". Worked time attributes to a client only through ticket-linked work, so the chips line up with the ticket list, while loose presence attributes to whatever org its slice carried. The Timer Tracked and Manual tiles still break the worked total down by how it was captured.
How does time reporting work?
The Time area's Utilization tab totals each tech's worked time over the period you pick, day, week, or month, stepped with the previous/next arrows, with a "By Client" toggle for the same totals grouped by client. Total Hours counts worked minutes only; passive presence (idle, breaks, ambient page-view time) rides alongside as a "+ {n}h presence" figure and is never summed into worked time. Every active tech appears, even those who logged nothing, each row showing their working window ("{start} - {end}", or "active" while a timer runs) and a utilization percentage against expected hours (green at 80%+, amber at 50%+). A wall-clock timeline plots when each slice happened; the Timer Tracked and Manual tiles split the worked total by capture method. Expand a tech for per-client chips (worked "{n}h" then "· {n}h present") and an "Open full day view" drill-down into their full day.
How is the tech utilization report different from the dashboard widget?
The dashboard widget shows today's utilization at a glance. The full Utilization report (/admin/time/utilization) adds a per-tech breakdown: each tech's working window ("{start} - {end}") and utilization percentage (green at 80%+, amber at 50%+), worked hours with passive presence shown separately as a "+ {n}h presence" rider, the Timer Tracked vs Manual capture split, a wall-clock timeline, a period selector (day/week/month), a By Client toggle, and an "Open full day view" drill-down into any tech's full day. Use it to compare techs without re-running the dashboard.
What does the Utilization tab show for each tech?
In the default By-tech view every active tech gets a row, including anyone who logged nothing that period, so gaps stay visible. Each row leads with the working window ("{start} - {end}", or "active" while a timer is still running) and a utilization percentage against expected hours per day, colored green at 80% or higher, amber at 50% or higher, and muted below. A wall-clock timeline strip plots when each slice actually happened, colored by bucket. Expand a tech and click "Open full day view" to open their full day on the My Time page; managers can view any tech this way, landing on a "Viewing {name}'s time" banner with a "Back to my time" link.
Was this helpful?