Blog · July 10, 2026 · ~11 min read
Harvest vs. HourTab for retainer client visibility: what Harvest reports can’t do
Harvest users are often surprised to discover that sharing a Harvest report link with a retainer client is not the same as giving them a live “hours remaining” view. Harvest reports show what happened. HourTab shows what’s happening right now — how many hours are used, how many are left, and when the cycle resets. They answer different questions for different audiences.
What Harvest is designed to do
Harvest is one of the most widely adopted time tracking and invoicing tools for freelancers, consultants, and small agencies. It has been around long enough to develop genuinely mature features: a polished timer interface, project and task breakdowns, team time management for small shops, budget tracking with alert thresholds, and professional invoicing that pulls directly from logged hours. For freelancers who bill by the hour, Harvest handles the operational core cleanly.
For retainer freelancers specifically, Harvest is a solid internal tool. You log hours against a retainer project, track the running total against the monthly cap, and generate an invoice when the cycle ends. Harvest’s budget tracking feature lets you set a threshold and receive an alert when a project reaches, say, 80% of the retainer budget — a useful early warning for overages. This internal view is well-built.
Harvest also has a shareable report feature. You can generate a detailed time report and share it via a link that doesn’t require the recipient to have a Harvest account. This is a meaningful feature and one that sets Harvest apart from many time trackers. But a shared Harvest report is not a retainer client dashboard, and the distinction matters more than it appears.
What Harvest’s shared reports actually look like
When you share a Harvest report, the recipient sees a detailed breakdown of time entries: the dates, the tasks, the notes, the hours logged per entry. It is a comprehensive record of what happened during the reporting period. For a client who wants to audit your time, this level of detail is valuable.
What the report does not show, by default, is the retainer-specific view a client actually needs day-to-day: how many hours are left in the current cycle. Harvest shared reports are historical views of logged time. They can tell the client that you logged 14 hours so far this month. They do not tell the client that 14 of 20 hours are used, 6 remain, and the cycle resets on August 1st.
The cycle-awareness and progress framing are what transform a time log into a retainer dashboard. Without them, the client sees raw data and has to do the math themselves: they need to know their cap, subtract what they see in the report, and calculate what remains. This is not self-service visibility — it is a spreadsheet problem they weren’t expecting to solve.
There’s also a freshness issue. Harvest shared reports are generated at a point in time. If you share the link on the 10th and the client opens it on the 25th, the link shows the report as it was generated, not a live feed of every hour logged since. To keep the report current, you would need to regenerate and re-share the link every time you add significant hours — which recreates the same manual update cycle you were trying to escape.
The gap in Harvest’s retainer client handling
The core gap is this: Harvest shows your clients what you did. It does not show them what they have left.
For retainer clients, “what do I have left?” is the operative question. It drives decisions about whether to request new work this month, whether to push a task to next cycle, whether the invoice at month-end reflects what they expected. The question comes up mid-cycle, not just at billing time. It comes up on a Tuesday afternoon when a client is deciding whether to ping you about a new request. It comes up during a renewal conversation when a client is evaluating whether the retainer hours pool is appropriately sized for how they actually work with you.
Without a live answer to that question, most Harvest users default to one of two approaches. They send mid-cycle email updates with the current hours figure. Or they wait until the invoice arrives and field the resulting questions. Both approaches create reactive communication cycles where the client is always playing catch-up instead of managing their hours proactively.
Some Harvest users set up budget alerts so that they receive a notification at a threshold. This helps the freelancer manage overage risk. It doesn’t help the client, who gets no notification and has no view of where hours stand unless the freelancer manually communicates it.
What HourTab does (specifically)
HourTab solves the client-visibility problem directly. You export a CSV from Harvest’s time report (standard Harvest CSV export, available on any plan), upload it to HourTab, and HourTab generates a public URL for each retainer client. That URL shows:
- A progress bar showing hours used out of the monthly cap
- The specific count: “14 of 20 hours used, 6 hours remain”
- The cycle reset date: “resets August 1”
- A work log of every time entry in the current cycle, with dates and task descriptions
The client receives this URL once — at the start of the retainer. They bookmark it and check it whenever they’re curious. The URL stays the same every month; only the data updates when you upload a new CSV. No new link to share. No login required from the client. No portal account to create or maintain.
The practical result is that the client can answer their own question — “how many hours do I have left?” — at any moment without emailing you. This single capability eliminates the most common retainer administration overhead.
How Harvest and HourTab work together
Because Harvest handles time tracking and invoicing while HourTab handles client-facing hours visibility, the two tools are genuinely complementary. The combined workflow adds about 60 seconds of friction per update cycle:
You log time in Harvest. Nothing changes about your time tracking workflow. Harvest timers run as they always have. Hours accumulate against the retainer project.
You export a Harvest time report as CSV. Harvest exports are straightforward: filter to the client and date range, export. This is the same data export you may already be running for billing verification.
You upload the CSV to HourTab. HourTab parses the Harvest export format, matches time entries to the retainer, and updates the client’s URL. The upload takes under a minute.
The client checks their URL. They have had the link since the retainer started. They check it before requesting new work, at cycle mid-point, or before the invoice arrives. The view is always current as of your last upload.
Harvest generates the invoice. At cycle end, Harvest invoices as usual. The client has already seen the hours building via HourTab, so the invoice total is expected. Billing disputes are almost always about surprise; continuous visibility eliminates the surprise.
Why the combined stack is not redundant
Harvest users sometimes ask: “Can’t I just share the Harvest report and be done with it?” The answer depends on what problem you’re trying to solve.
If your clients review historical time logs for audit purposes, a shared Harvest report is appropriate. It shows them every entry, every task, every note. That’s the right tool for that use case.
If your clients need to know how many hours are left before requesting more work, a shared time report is the wrong tool. It requires them to do math, it doesn’t update automatically, and it doesn’t show cycle context. For this use case, HourTab’s progress bar URL is the right tool.
The distinction is who the data is designed for. Harvest’s reports are designed for billing records and project management. HourTab’s URL is designed for the client to self-serve. Most retainer clients need both at different moments — a live dashboard week-to-week and a detailed log at invoice time. Harvest + HourTab covers both.
When Harvest alone is enough
There are retainer arrangements where HourTab adds nothing because the visibility problem doesn’t exist:
Flat-fee retainers with no hours pool. If the engagement is a fixed monthly fee for defined deliverables, there are no hours remaining to display. Harvest handles contracts and invoices; HourTab has nothing to show.
Clients who actively review your Harvest reports. Some clients are power users of whatever tool you share access to. If a client genuinely reviews the Harvest shared report regularly and finds the data sufficient, there is no gap to fill. This is more common in agency-client relationships where the client has dedicated operations staff.
Very high-trust, low-scrutiny retainers. Long-running relationships where the client trusts the invoice and never asks about hours mid-cycle. These exist, especially in professional services where the client is buying expertise rather than tracking time closely.
One retainer client total. With a single client, a quick weekly Slack message with the current hours count is often sufficient. The overhead of setting up HourTab only makes sense when you have multiple retainer clients or when the one client asks repeatedly.
When you need HourTab alongside Harvest
The signal that HourTab would add value is almost always client behavior:
Clients email you asking about hours between cycles. If you receive any variation of “how many hours do we have left?” more than once per month per client, the shared Harvest report is not solving the visibility problem. HourTab creates the permanent self-service answer.
You have three or more active retainer clients. Managing visibility for multiple clients via manual Harvest report shares and mid-cycle emails becomes a non-trivial task. HourTab centralizes it: upload a CSV per client, all URLs stay current.
You experience invoice pushback about hours. When clients dispute the invoice because the hours total surprises them, the root cause is almost always a visibility failure. Regular client reporting prevents this, and HourTab’s URL is the most frictionless form of ongoing reporting.
You want renewal conversations to be easier. When the client has watched the work log build all cycle, the renewal conversation is a review of something they already witnessed — not a pitch to someone who has lost visibility into where the hours went. Harvest handles the tracking; HourTab handles the narrative the client carries into the renewal.
Your clients manage tight monthly budgets. Clients who monitor spend closely need to know where retainer hours stand before approving new requests. A client who wants to be a responsible budget steward cannot do that without a live hours view. Sending them to a Harvest report and asking them to do the math is friction that erodes the retainer relationship over time.
Cost and setup considerations
Harvest pricing starts at $11/month per seat (or $10.80/month billed annually) for their Harvest plan, which includes time tracking, invoicing, and shareable reports. Teams pay $14/month per seat. If you are already a Harvest user, this is an existing line item.
HourTab’s Solo plan is $9/month and covers up to 10 active retainer clients with custom URL slugs and no factory branding. The combined stack runs about $20/month for a solo freelancer — a straightforward return on investment if it eliminates even one billing dispute or renews a single retainer that would have lapsed due to value-perception drift.
Setup for the HourTab layer requires no integration with Harvest. You export CSVs from Harvest manually and upload them to HourTab. This is a deliberate design choice: HourTab works with any time tracker that exports CSV, which means it is not locked to any vendor’s API or pricing decisions. The manual step also keeps you in control of when the client’s view updates — useful if you want to review entries before they become visible.
The practical setup flow
For a Harvest user adding HourTab to their retainer workflow, the first session typically takes 20 minutes per client:
Create a retainer in HourTab for each client, entering their name, monthly hours cap, and cycle start date. HourTab generates a permanent URL. Send that URL to the client in the retainer onboarding note or add it to your retainer contract document — something along the lines of “this link always shows your current hours for the month, no login needed, bookmark it.”
Then establish your update cadence. Weekly is the most common: every Monday morning, export the prior week’s time entries from Harvest for each retainer client, upload to HourTab. The whole operation takes about 5 minutes per client per week. For three clients, that is 15 minutes per week to maintain full client communication around hours without any manual emails.
At cycle end, Harvest generates the invoice as usual. The hours on the invoice match what the client has been watching via HourTab all month. Approval is faster because there are no surprises.
The one question that separates them
If you want to know which tool to use, ask one question: who needs to see this data?
If you need it for billing and internal project management, Harvest is the right tool. It logs time accurately, tracks budget against cap, generates invoices, and produces exportable reports for your records.
If your retainer client needs to see it — to make decisions about requesting work, to feel confident about where the engagement stands, to arrive at invoice time without surprise — HourTab is the right layer. It takes Harvest’s data and presents it in the one format a retainer client actually needs: a live progress bar at a permanent URL they already have bookmarked.
Harvest is the best internal time tracker for freelancers who need mature invoicing and team features. HourTab is the client-facing layer that Harvest doesn’t attempt to be. Together, they close the retainer visibility loop that most time tracking tools leave open.
HourTab turns your Harvest CSV export into a live retainer dashboard your client can bookmark. Start free →