Blog · July 3, 2026 · ~12 min read

Harvest retainer tracking: the complete guide to CSV export and client balance URLs

Harvest is widely used by freelancers and small agencies for retainer client management because of its clean interface, solid invoicing integration, and — notably — the best time entry CSV export of any major time tracker. The gap Harvest doesn't close: giving retainer clients a live balance view they can check mid-cycle without accessing your Harvest account. This guide covers the complete Harvest retainer workflow: project and client configuration, the Detailed Report export, and the one addition that turns Harvest data into a client-bookmarkable balance URL.

Why Harvest is strong for retainer time tracking

Harvest has genuine advantages for consultants managing retainer clients. Its time entry structure maps naturally onto retainer work: you log time against a project associated with a client, mark it billable, and Harvest handles the rest of the bookkeeping. A few specifics that matter for retainer workflows:

The Project Budget feature: what it does and what it doesn't do

Harvest has a Project Budget feature that is easy to confuse with a retainer balance tool. Understanding the distinction is important because many Harvest users configure a project budget for their retainer work and then discover it doesn't solve the client-visibility problem.

A Harvest Project Budget lets you set an hours cap (or dollar cap) on a project and receive email alerts when you hit thresholds (typically 80% and 100%). The alert goes to you, not to the client. The budget status — how many hours remain against the cap — is visible inside your Harvest account under the project details. It is not accessible to the client without giving them Harvest access.

This means Harvest's Project Budget solves an internal problem: it prevents you from accidentally over-delivering on a fixed cap. It does not solve the client communication problem: clients who want to know their remaining hours still have to ask you. The Project Budget is an alert system for yourself, not a balance display for your client.

The detailed explanation of why Harvest budgets aren't client-facing balance tools is covered in the post on Harvest retainer tracking. The short version: Harvest's client portal gives clients access to invoices and project cost summaries, not a retainer hours-remaining view. The two are different data structures with different audiences.

Step 1: Configure Harvest for retainer work

A few decisions made during Harvest setup make the export and downstream workflow significantly cleaner.

Create a Client record for each retainer client

In Harvest, go to Clients and create a client record for each retainer client. Every project associated with that client — whether it's strategy work, content work, or advisory calls — should be linked to the same client record. The Detailed Report filter "Client = [name]" is how you pull all retainer hours at export time; if time is logged under projects attached to different client records, it won't appear in a single filtered export.

If you inherited a Harvest account where time was logged inconsistently (e.g., a client has entries under two different client records, or under a client record with a slightly different name), clean this up before relying on the filtered export for billing. Harvest allows you to merge projects or re-assign them to the correct client record.

Set default billable rates on retainer projects

When you create a project for a retainer client in Harvest, set the project billing type to "Hourly" and assign a rate. Even if you don't invoice hourly — even if the retainer is a flat monthly fee — this setting ensures that time entries under the project are tracked as billable by default. The billable/non-billable flag on each entry is what allows you to filter to only retainer hours at export time.

For retainers that are flat-fee (a fixed dollar amount per month, not a per-hour rate), you can set any hourly rate as a placeholder; the dollar amounts in the CSV export won't be used in the HourTab import, only the hours column will.

Task names: keep them consistent

In Harvest, time entries are tagged with a Task in addition to a Project. Tasks appear in the CSV export as a column and can help categorize work types (Strategy, Content, Client Calls, Implementation). For retainer clients, consistent task names across cycles make it easier to analyze where retainer hours are going when you review the work log with the client.

The Notes field on each entry is what becomes the work log description in the client-facing view. Write notes at log time: "Reviewed Q3 editorial strategy and provided feedback on content pillars" is a useful client-visible work log entry. "Strategy work" is not. The post on management consulting retainer management covers the description-quality discipline in the context of advisory retainers where the work is hard to make concrete.

Step 2: Export the Harvest Detailed Report

At the end of a billing cycle — or mid-cycle when you need to update the client's balance view — go to Reports in Harvest and open the Detailed Time Report.

Filters to apply before exporting

Export as CSV

Once filters are applied, click "Export" and select CSV. Harvest's CSV output includes one row per time entry with these columns: Date, Client, Project, Task, Notes, Hours, Billable Rate, Billable Amount, First Name, Last Name, Employee?, Billable, Approved, Invoiced, First Time, Last Time, External Reference ID.

The columns you actually need for HourTab are: Notes (entry description) and Hours. HourTab reads the hours column to compute the total hours consumed and the notes column to populate the work log entries. The additional columns (rates, amounts, names, invoiced status) don't affect the import.

Step 3: Generate the client balance URL in HourTab

With the Harvest CSV in hand, the HourTab setup takes under two minutes:

  1. Create a retainer in HourTab. Enter the retainer name (typically the client name and the word "Retainer"), the hours cap (the monthly contracted hours, e.g., 20 hours), the cycle start date, and the cycle duration (monthly, or a specific number of days if your cycle is non-standard). This is the contract information that lives nowhere in Harvest.
  2. Import the Harvest CSV. Upload the file you exported. HourTab reads the hours and notes columns, sums the billable hours consumed, and populates the work log with each entry's notes as the description. The per-entry detail from Harvest carries over automatically.
  3. Share the URL. HourTab generates a permanent public URL for the retainer. The URL shows the client a progress bar (hours used vs. cap), the hours remaining, the cycle end date, and the work log. No login required. No Harvest access required.

When you re-export from Harvest mid-cycle (with an updated date range to capture new entries) and re-import, the client's URL refreshes with the current hours. The URL stays the same; the data updates. The client can bookmark once and check whenever they want.

Harvest-specific edge cases for retainer tracking

Harvest client accounts vs. the HourTab URL

Harvest has a feature that lets you invite clients to have their own Harvest login. Through the Harvest client account, clients can view invoices and project status. This is different from a retainer balance view in an important way: Harvest client accounts show clients the invoice history and can show project cost summaries, but they are not designed to show a mid-cycle retainer hours balance. The client would need to understand Harvest's project view and know where to look for hours totals, and even then they wouldn't see the hours-remaining-against-cap display that retainer management requires.

The HourTab URL doesn't replace the Harvest client account — it answers a different question. The Harvest client account answers "what have I been invoiced?" The HourTab URL answers "how many retainer hours do I have left this month?" These are separate questions that clients ask on different cadences: invoices are reviewed monthly, balance URLs are checked weekly or whenever the client is deciding whether to submit a request.

Invoice sync timing vs. retainer cycle dates

In Harvest, the invoice workflow is typically triggered at the end of the billing cycle. You create an invoice, pull in the hours, send it, and the client pays. The retainer cycle in HourTab is about the hours available during the current period — not about the invoice. These two cycles are related but not the same.

The scenario where this causes confusion: you send a Harvest invoice on the 1st of the month covering the previous month's work. The client pays and then asks "how many hours do I have for July?" If you only update the HourTab balance at invoice time (once a month), the client's view is stale for most of the month. The solution is to update the HourTab import more frequently than invoice cadence — weekly mid-cycle updates keep the balance view current even though invoices only go out monthly.

Harvest's scheduled report email feature (available on paid plans) can remind you to run the export and update HourTab on a weekly schedule. Set a scheduled Detailed Report email to yourself each Monday, and you have a natural trigger to update the client balance view at the start of each week.

Non-billable hours and scope exceptions

Retainer engagements often include occasional out-of-scope work that the consultant absorbs without billing. In Harvest, log these entries as non-billable under the same client and project. When you run the Detailed Report with the "Billable" filter, non-billable entries are excluded automatically from the export. The client's HourTab balance view will show only billable hours against the cap, which is what they actually care about.

The distinction matters for the work log. If you include non-billable entries in the HourTab import, they'll appear in the work log — which could be confusing if the client sees work described in the log that isn't consuming their retainer hours. Using the Billable filter consistently avoids this ambiguity.

Team retainers: multiple people logging time for one client

If you run a small studio and multiple team members log hours for the same retainer client, Harvest's multi-seat structure handles this cleanly. Each team member logs under the same project and client. The Detailed Report export includes all members' entries when "all team members" is selected in the filter.

In the HourTab import, all entries appear in the work log with their notes as descriptions. If you want the client to see who did what work (e.g., "Strategy work by [name], Development by [other name]"), consider including the team member's name in the notes field at log time or using Harvest's Task field to categorize work by role rather than by person.

The Harvest retainer workflow at a glance

For consultants who want a repeatable week-by-week process:

  1. Every Monday, log into Harvest and run the Detailed Report for each active retainer client. Filter: Client = [name], Billable only, Date = retainer cycle start to today.
  2. Export each report as CSV.
  3. Log into HourTab and import the updated CSV for each retainer. HourTab updates the hours consumed and the work log.
  4. The client's bookmark updates automatically. No email required unless you want to send a summary.

The total time for this cycle for one retainer client is under five minutes once the setup is done. For three to five clients, it's a 15-minute Monday morning routine. For the dedicated tool view on managing multiple retainers simultaneously, the shared retainer dashboard overview covers what the multi-client balance management experience looks like.

Common Harvest retainer tracking questions

Does the Harvest CSV export require a paid plan?

Harvest's Detailed Report CSV export is available on all Harvest plans, including the free tier (which supports one seat and two projects). For most solo consultants with two or fewer active retainer clients, the free Harvest plan is sufficient for the export-and-import workflow. If you have more than two projects (one project per retainer client, plus any fixed-price projects), you'll need a paid Harvest seat.

Can I use Harvest's scheduled report emails to automate the update?

Harvest's scheduled email reports (available on paid plans) can deliver the Detailed Report to your inbox on a set schedule. You can't have Harvest import automatically to HourTab — that step requires downloading the CSV and uploading it. But the scheduled email gives you a reliable trigger: when the Harvest report email arrives on Monday, it's your reminder to run the five-minute HourTab update. It's not full automation, but it removes the "I forgot to check Harvest" failure mode.

What if a retainer client also has fixed-price project work running simultaneously?

Use separate Harvest projects to distinguish retainer work from fixed-price project work. For example, "Acme Corp — Monthly Retainer" and "Acme Corp — Annual Report Project" should be separate projects in Harvest with separate budget settings. At export time, filter by client and review the projects included in the export — or filter by the specific retainer project rather than the client — to ensure only retainer hours go into the HourTab import.

The case for filtering by project rather than client: if the Detailed Report includes hours from both the retainer project and a concurrent fixed-price project, the balance URL will show more hours consumed than the client expects against the retainer cap. Always check the project filter before exporting.

What does the client see in the HourTab URL?

The client sees: the retainer name, the hours cap (e.g., "40 hours per month"), a progress bar showing hours used vs. cap, hours remaining (e.g., "12.5 hours remaining"), the cycle end date (e.g., "Cycle ends July 31"), and the work log. The work log shows each time entry's Notes field from the Harvest CSV, with the date and duration. The client does not see: your Harvest account, your billing rates, other clients' data, or the hours amount in dollar terms. The Harvest retainer tracker overview covers the client access model in more detail.

Can I give different clients different cycle dates?

Yes. Each retainer in HourTab has its own cycle start date and duration. If one client's retainer runs 1st-to-31st and another runs 15th-to-14th, you configure them independently. The Harvest export date range for each client should match their specific cycle dates. There's no requirement that all retainer cycles align to calendar months.

Why adding the balance URL changes retainer conversations

The practical effect of giving a retainer client a live balance URL is that the "how many hours do we have left?" question stops being a weekly interruption in your inbox. Clients who can check the balance themselves stop asking — not because they're less curious, but because the answer is already available to them.

The secondary effect is that clients with visible balances make different decisions about how to use the remaining hours. A client who can see they have 8 hours left in a 40-hour retainer with two weeks remaining will group related requests into one conversation rather than submitting four separate small asks. This is beneficial for both sides: the client gets more coherent work from the retainer, and you have fewer context-switching interruptions.

Harvest's time entry data — particularly the Notes field that captures entry descriptions — is what makes the client-facing work log useful rather than just a total. Clients reviewing a detailed work log understand what the retainer produced. This is especially true for advisory and consulting retainers where the deliverables aren't tangible. A work log of 20 entries with specific descriptions ("Reviewed product roadmap and provided prioritization recommendations," "Attended design review and gave feedback on IA") gives the client a much clearer picture of retainer value than an invoice line that says "40 hours of consulting services."

For the full picture of what retainer management looks like at the client relationship level, the post on Clockify retainer tracking covers the same workflow for Clockify users, and the post on management consulting retainer management covers the advisory retainer context specifically.

Give retainer clients a live balance URL from your Harvest data

Export your Harvest Detailed Report CSV. HourTab generates a shareable balance URL in under two minutes. Free for one retainer.

Related reading