Blog · May 30, 2026 · ~9 min read

Hubstaff retainer report: why activity screenshots and Client Hub don’t answer “how many hours do I have left?”

Hubstaff has time tracking, per-project billing, a Client Hub for client-facing access, and a Time & Activity export with every column a productivity-conscious freelancer could want — including screenshots, activity percentages, idle time, and app tracking. If you bill retainers through Hubstaff, the in-the-box answer to “how many hours do I have left?” is technically available somewhere in that kit. And yet the email loop keeps running. The reason isn’t a missing feature. Hubstaff’s tracking and reporting is shaped for employer accountability, and the hours-remaining question is a client status question. The two are aimed at different audiences, different decision moments, and different mental models — and the mismatch is structural, not cosmetic.

What Hubstaff’s built-in client-facing tooling actually shows

Worth being precise. Hubstaff’s primary client-access surface is the Client Hub: a login-gated portal where clients see invoices you’ve sent, approve or reject submitted time, view project budgets (in hours or dollars), and process payments. The workflow is: freelancer logs time → submits for approval → client logs into Client Hub, reviews the timesheet, approves it → freelancer invoices → client pays. It’s a tidy billing-and-approval loop.

The time export, separately, is the Time & Activity report: a CSV (or PDF) you pull from Reports with columns for Date, Member, Client, Project, Task, Notes, Hours, Activity %, Idle Time, and Screencasts. On Hubstaff’s paid tiers, screenshots are captured at configurable intervals during tracked time — a screenshot every 10 minutes, or every 3, depending on your plan — and the Screencasts count in the export tells you how many were taken. Activity % is the percentage of tracked time that was keyboard or mouse activity rather than idle. These columns exist to give employers or clients who “need to see the work” evidence that the billed hours were active hours.

A retainer client opening their inbox with one specific question — where am I in the cycle right now? — is not in that flow. Client Hub doesn’t answer the in-cycle question cleanly; it answers the billing question. The Time & Activity CSV, if you forwarded it, shows the data — but the data is framed as proof, and the framing matters.

Three structural mismatches between Hubstaff’s built-ins and a retainer status page

Hubstaff could render “8 hours remain” on a public URL if that were a product priority. It isn’t, because that’s not the problem Hubstaff was built to solve. Three specific places where the architecture diverges:

1. Proof-of-work shape vs. status shape

Hubstaff’s reporting output was designed to answer a different question than the one your retainer client is asking. The question Hubstaff answers: did the contractor actually work those hours, or were they idle? The columns that answer it — Activity %, Idle Time, Screencasts — carry implicit information about the employment relationship: there is a principal (employer or client) who is uncertain whether the work happened, and a time-tracker with screenshot evidence that proves it did. That’s a trust-verification flow.

A retainer client’s question is not about trust verification. It’s about scope arithmetic: how much of this month’s allocation is already used? That question doesn’t require screenshots or activity percentages — it requires a cycling cap, a current burn-down, and a reset date. Passing a retainer client a Time & Activity CSV with a Screencasts column doesn’t answer their question; it changes the conversation from “status” to “accountability,” and that shift is uncomfortable for freelancers who operate on trust. The data is right there in the Hours column, but the surrounding columns signal a monitoring relationship that most retainer engagements don’t have and don’t need.

This isn’t a criticism of Hubstaff’s design. The screenshot and activity features are exactly what teams using Hubstaff for employee monitoring or contractor oversight need. The mismatch is in the use case: if you’re a freelance consultant billing a trusted retainer client, you’re using Hubstaff’s proof-of-work output to answer a status question, and the answer is wrapped in a frame that belongs to a different kind of working relationship.

2. Client Hub: approval inbox, not live cycle status

Client Hub is a billing workflow product. The client logs in, sees outstanding invoices, approves submitted time, and processes payment. That’s a post-work, end-of-cycle flow: the work is done, the hours are submitted, the client confirms the total and pays. The approval moment is the end of the billing conversation — not the mid-month moment when the client is about to scope new work and wants to know whether the retainer can absorb it.

The hours-remaining question arrives mid-cycle, not at the end. A client planning a new piece of work on the 18th of the month needs to know right now: are there 6 hours left or 2? Client Hub can answer that question indirectly — if they log in, find the project, check the budget bar, and do arithmetic — but it’s not the surface the client will reflexively reach for at that moment. They’ll reach for email. The Client Hub login, the navigation to project budgets, the mental mapping from “budget remaining” to “hours this cycle” — each of those is friction. The email is three words (“how many left?”) and a send button. Frictionless beats comprehensive when the question is a quick check.

The same structural problem appears in the FreshBooks client portal: an invoice-and-approval inbox gets pressed into service for mid-cycle status queries, and the friction of the portal login is why the email loop persists even when the data is technically available. Hubstaff’s Client Hub has the same approval-inbox shape, and it has the same limitation.

3. The right data in the wrong frame

Hubstaff’s Time & Activity export does contain the data a retainer status page needs: Date, Notes (or Task), and Hours. Those three columns are all HourTab reads. The remaining columns — Activity %, Idle Time, Screencasts, Member, Client, Project — are ignored on import. The raw data is fine.

The problem is what you have to do with it before sharing it. You can’t paste the raw CSV into an email and call it a status update: the Activity % and Screencasts columns would require explanation, or removal, or a disclaimer that the client should ignore them. That editing step — filter to the right project, remove the proof-of-work columns, compute the remaining hours, format the result — is the manual work the status question keeps generating. The email isn’t faster than the export flow; it’s faster than the export-plus-edit-plus-format flow. The loop persists because the shortest path to the answer is still “just ask.”

This is structurally identical to the Clockify shape mismatch: in Clockify’s case the date-range shared report URL and the project Estimate are the wrong shapes; in Hubstaff’s case the Time & Activity export is the right data in a frame that doesn’t translate directly to a client-glance page. The data exists; the shape for the client’s question doesn’t.

What the client’s behaviour tells us

The signal is familiar: the email keeps arriving even when all the underlying data is in a well-designed system. A retainer client billing through Hubstaff has access to Client Hub, and the Client Hub has project budget information. But they email anyway, because logging in and navigating to the right budget view is more work than asking. They’ve learned, correctly, that the email is faster.

This is the same pattern documented in the underlying billing-vs-status analysis that runs across every retainer setup regardless of which tracker is upstream. Toggl’s shared reports don’t fix it. Harvest’s scheduled emails and project budgets don’t fix it. FreshBooks’ client portal doesn’t fix it. Clockify’s free-tier access doesn’t fix it. Five different trackers, five different feature sets, the same email loop — because the question is on the client’s status surface and the kit is on the freelancer’s tracking surface. Hubstaff adds a proof-of-work layer on top of the tracking surface; that doesn’t move the status surface any closer to the client.

What a Hubstaff-shaped retainer status page should look like

The Hubstaff export already has the right data. The status page just needs to reframe it around the client’s question rather than the employer’s accountability question. Three things the reframing layer adds that the raw export doesn’t have:

  1. The cap — e.g. 20 hours / month. Now “remaining” is computable from the hours Hubstaff already tracked.
  2. The cycle — e.g. resets the 1st of each month. Now “current” means today’s burn-down against this month’s cap, not the all-time project total.
  3. The right columns — Date, task description (Task or Notes column), and Hours. No Activity %, no Idle Time, no Screencasts. The client sees what they booked, presented as durations and descriptions, with no proof-of-work framing. Same hours; different signal.

The output is one URL per retainer. Open it on the 18th of the month and it shows: 12 of 20 hours used • 8 hours remain • resets June 1. A fat progress bar. The work log underneath. No login. No approval workflow. No Activity % columns the client didn’t ask about.

That’s the shape HourTab’s Hubstaff flow ships. You pull the Time & Activity CSV from Reports — the standard export Hubstaff already gives you — we map Date, Task/Notes, and Hours, and ignore the activity columns. You set the cap and cycle once. The URL goes to the client. From then on, re-importing a fresh export updates the same URL. Hubstaff keeps doing the proof-of-work tracking job it’s good at; HourTab adds the public status page that was missing.

When Hubstaff’s built-in tooling is the right answer

There are retainer shapes where the Client Hub approval flow and the Time & Activity report are the correct answer. If your “retainer” is actually a managed services contract with a team — multiple people logging time, an employer-side manager reviewing activity, a formal timesheet approval cycle each week — the Client Hub workflow is exactly the right product. That’s the contract shape Hubstaff was built for. The screenshots and Activity % are valued, the timesheet approval is central to the relationship, and Client Hub is the right interface for a client who is acting as an employer.

The mismatch we’re describing appears specifically when a solo freelance consultant or small studio bills a trusted client on a monthly hours cap, the client’s relationship is buyer-of-services rather than employer-of-contractor, and the question the client keeps asking is “where are we this month?” — not “did the work actually happen?” For that client profile, the accountability infrastructure Hubstaff provides is more than the retainer relationship requires, and the resulting client-facing surfaces (the export, the Hub) are correspondingly more than the question needs.

The takeaway in one line

Hubstaff’s tracking output is proof-of-work-shaped and its client portal is approval-shaped — both are correct shapes for the employer-accountability use case Hubstaff was built for. The retainer client’s hours-remaining question is status-shaped: it wants a cycling cap, a current burn-down, and a glance-friendly URL anyone can open at the question moment. If you run trusted solo-freelancer retainers through Hubstaff, the accountability infrastructure exceeds the relationship’s requirements, and the client still emails because the status surface doesn’t exist yet — not because Hubstaff is wrong, but because the question is on a different surface than the one Hubstaff was designed to serve.

If you bill retainers through Hubstaff and you recognise the email loop this post is about, you can see how the Hubstaff-CSV-to-public-URL flow works on the integration page, or read the case for why a public URL beats a portal for the glance question regardless of which tracking tool is upstream. For a side-by-side of all five trackers on the same question, the tracker comparison roundup covers each tool’s built-in client features and the shared gap across Toggl, Harvest, Clockify, FreshBooks, and Hubstaff. The waitlist on the pricing section is open — free for the first retainer, no credit card — and the only email we’ll send is the one when your first share URL is ready.