Blog · July 3, 2026 · ~13 min read
FreshBooks for retainer tracking: what FreshBooks does and what you need to add
FreshBooks is a popular choice for freelancers and small agencies because it combines time tracking with invoicing in a single tool. For retainer clients specifically, FreshBooks handles the billing side well — you can log time, pull it into a retainer invoice, and send it through the FreshBooks client portal. The gap: the FreshBooks client portal answers the question "what have I been invoiced?" not "how many hours do I have left this month?" This guide covers exactly what FreshBooks does for retainer tracking, where its client portal ends, and the one export-and-import step that adds a live balance view your clients can check without logging into anything.
What FreshBooks does well for retainer clients
FreshBooks was designed for freelancers who bill clients — and retainer billing fits this model well. Three FreshBooks features are specifically useful in a retainer context:
- Time tracking by project and client: FreshBooks has a built-in time tracker (desktop timer and manual entry) organized by project and client. You can log time entries with descriptions, mark them billable, and organize them under the retainer client's project. Time entries can be filtered by client and date range when you need to see total hours for a billing cycle.
- Retainer invoice template: FreshBooks supports retainer invoices — you can create a recurring invoice for the flat monthly retainer fee. When the retainer fee is fixed (a flat dollar amount regardless of hours), this is straightforward. When the retainer is hour-based (you bill for actual hours up to a cap, or the retainer fee adjusts based on hours used), you can pull time entries directly into an invoice line item from the FreshBooks time tracking section.
- Client portal: FreshBooks gives each client access to a client portal where they can view and pay invoices. Clients don't need a FreshBooks account to access the portal — they get a unique link. The portal shows outstanding and paid invoices. This is useful for retainer billing because clients can see their invoice history and pay outstanding balances without requiring a FreshBooks login.
For the accounting and invoicing side of retainer management, FreshBooks handles the workflow competently. Many freelancers and small studios who run retainer relationships use FreshBooks specifically because time-to-invoice is low: log time, pull it into an invoice, send.
The client portal gap: invoice-centric vs. balance-centric
The FreshBooks client portal is an invoice portal. Its purpose is to let clients review and pay invoices. This is a different information structure from a retainer balance view, and the distinction matters.
A retainer balance answers: "How many hours have been used against my monthly cap, how many remain, and when does the cycle reset?" An invoice answers: "What am I being charged for this billing period, and what's the total?" These are related but structurally different. An invoice is a billing document. A balance view is a real-time usage tracker.
The FreshBooks client portal does not show a retainer balance. Clients who log into the FreshBooks portal see their invoice list. They cannot see: how many hours have been logged this month against their retainer cap, how many hours remain, or the work log (individual time entries with descriptions) for the current cycle. To get this information from FreshBooks, they would need to ask you — and you would need to generate a report in FreshBooks and send it to them manually.
This is the core workflow problem: clients who need to make decisions based on their remaining retainer hours — "Can I submit another project this month, or should I wait until next cycle?" — cannot self-serve the answer from the FreshBooks portal. The question routes back to you every time. The detailed treatment of why invoice portals don't solve the balance problem is in the FreshBooks retainer tracking overview.
How to configure FreshBooks for retainer time tracking
If you're using FreshBooks as your primary time tracker for retainer work, a few configuration decisions make the export and downstream balance workflow cleaner.
One project per retainer client
Create a dedicated FreshBooks project for each retainer client's ongoing retainer work. If you also do fixed-price project work for the same client, keep those under separate FreshBooks projects. This separation matters at export time: when you filter by project to get the retainer hours, you don't want fixed-price work polluting the retainer total.
Naming convention matters here too. "Acme Corp — Monthly Retainer" and "Acme Corp — Website Redesign" is unambiguous. "Acme Corp" (one project for everything) creates ambiguity when you need to export only the retainer hours.
Mark time entries as billable
In FreshBooks, each time entry has a billable toggle. For retainer hours, mark entries as billable. If you occasionally do work for a retainer client that you're absorbing rather than billing against the cap — a goodwill call, a quick review that would feel petty to bill for — log it as non-billable. At export time, you can filter to billable-only entries to get the hours that count against the retainer cap.
Write entry notes at log time
The notes field on each FreshBooks time entry is what becomes the work log description in the client-facing balance view. The quality of these descriptions determines whether the work log is a useful client communication artifact or just a list of vague task labels. "Reviewed SEO audit findings and provided keyword prioritization recommendations for Q3" is a useful work log entry. "SEO work" is not.
Writing descriptions at the time of logging is consistently easier than retroactively reconstructing what you worked on. The habit of writing a specific description for every entry — even if it's a few words longer than strictly necessary — pays off when the client can read the work log and see exactly what the retainer produced. For advisory and consulting retainers where the work isn't tied to tangible deliverables, this is particularly important for demonstrating retainer value.
How to export FreshBooks time entries to CSV
FreshBooks allows you to export time entries as a CSV. The process:
- Go to Time Tracking in FreshBooks. In the left navigation, select Time Tracking to see the time entry list.
- Filter by client or project. Use the filters at the top of the time entry list to narrow to the retainer client. You can filter by client, project, and date range.
- Set the date range to the retainer billing cycle. Use a custom date range that matches your retainer cycle dates exactly — not "This Month" unless your retainer cycle aligns with the calendar month.
- Export the filtered entries. FreshBooks provides an export option for the time entry list. Export as CSV. The CSV includes columns for: date, client, project, task, note, hours, and billable status.
The FreshBooks time entry CSV is clean and imports directly into HourTab without transformation. The hours column and the note column are the primary data points HourTab uses.
Step 3: Generate the client balance URL in HourTab
With the FreshBooks CSV exported:
- Create a retainer in HourTab. Enter the retainer name (e.g., "Acme Corp — Monthly Retainer"), the hours cap, the cycle start date, and the cycle duration. This is the contract information that FreshBooks doesn't hold.
- Import the FreshBooks CSV. Upload the exported file. HourTab reads the hours column and the note column, sums the billable hours consumed, and populates the work log with each entry's notes.
- Share the URL. HourTab generates a permanent public URL. The client opens it and sees: a progress bar (hours used vs. cap), hours remaining, the cycle end date, and the work log. No login required. No FreshBooks access required.
When you update mid-cycle — re-export from FreshBooks with an updated date range, re-import to HourTab — the client's URL updates. The URL is permanent; the data refreshes with each import. For the shared balance view experience, the shared retainer dashboard overview covers what clients see and what they don't.
The dollar-vs-hour retainer question
FreshBooks is invoice-centric and tracks the dollar value of time (hours × rate). HourTab is balance-centric and tracks the hours against a cap. When you have a flat-fee retainer billed in dollars, a question arises: should the retainer cap be tracked in hours or dollars?
For most retainer structures, tracking in hours is more useful for the client. A client who has a "$3,000/month" retainer doesn't have a useful mental model of what $3,000 means in terms of request capacity. A client who has a "20 hours/month" retainer knows immediately whether submitting a 5-hour request this week is reasonable given what's left. Hours are the unit clients understand when making request decisions; dollars are the unit they understand when paying invoices.
The practical conversion: if your retainer is "$3,000/month" at a $150/hour effective rate, the hours cap is 20 hours. HourTab tracks the 20-hour cap. FreshBooks handles the $3,000 invoice. The two tools are tracking different dimensions of the same engagement, and neither needs to know what the other is doing.
When the retainer is billed in dollars with no explicit hour cap
Some retainers are structured as "a fixed monthly fee for a scope of services" with no explicit hours limit — the freelancer delivers certain outputs for a flat fee, and hours are an internal concern, not a client-facing metric. In this case, the client doesn't need a balance URL because there's no cap to track against.
The retainer balance workflow (export CSV, import to HourTab, share URL) is specifically useful when there is an explicit hours cap that the client needs visibility into. If the retainer is output-based rather than hours-based, the FreshBooks invoicing workflow is complete as-is; no balance layer is needed.
When the retainer is dollar-denominated but effectively hours-capped
Many retainers are described as "$X/month" but function as hours-capped engagements in practice: clients have an implicit expectation of roughly N hours of access per month, and the conversation when hours run short is about hours, not dollars. In this case, defining an explicit hours cap — even if it's not in the contract verbatim — and tracking it in HourTab is useful because it aligns client expectations with the actual delivery capacity.
If a client has been assuming they can submit unlimited requests under a "$2,000/month" retainer because no one ever told them otherwise, making the hours cap explicit (and visible) is a healthy clarification that prevents retainer scope creep. The balance URL is often the first time the client has a concrete number to anchor to.
FreshBooks vs. dedicated time trackers for retainer work
FreshBooks time tracking is designed around invoicing: you log time so you can bill for it. For retainer clients who want to see a detailed work log, FreshBooks' time entry detail (note field, project, task) is sufficient. The question is whether you want to track time inside your accounting tool or in a dedicated time tracker.
Dedicated time trackers like Toggl and Clockify have more powerful time entry management (keyboard shortcuts, browser extensions, mobile apps with geofencing, team integrations) and are optimized for logging speed. FreshBooks' time tracker is optimized for billing accuracy. For solo freelancers with a small number of retainer clients and straightforward work, FreshBooks is sufficient. For consultants who log 8+ time entries per day across multiple clients, a dedicated tracker with a faster entry UI may be worth using alongside FreshBooks.
The HourTab import workflow works from either source. If you use Clockify for time logging and FreshBooks for invoicing, you can import the Clockify CSV directly into HourTab for the balance view and use FreshBooks solely for invoicing. If you log time in FreshBooks and also invoice in FreshBooks, you can export from FreshBooks for the HourTab import. Either path works; HourTab doesn't care which tool generated the CSV.
For Clockify users managing this split (time logging in Clockify, accounting in FreshBooks or QuickBooks), the post on Clockify retainer tracking covers the Clockify-specific workflow. For QuickBooks users, the QuickBooks retainer tracking overview covers the accounting tool context.
Common FreshBooks retainer tracking questions
Can I use the FreshBooks client portal to share retainer hours with clients?
The FreshBooks client portal shows invoices and estimates, not time entry logs. Even if you send a client a detailed invoice that lists individual time entries, the portal view is invoice-level: the client sees the invoice total, the line items, and the payment status. There is no view in the FreshBooks client portal that shows a retainer balance (hours used vs. cap) or a live progress bar. The portal is designed for invoice payment, not mid-cycle balance checking.
Can I attach a time entry report to the FreshBooks invoice as a workaround?
Some FreshBooks users export a time entry report as PDF and attach it to invoices. This gives the client a static snapshot of hours at invoice time. The problems with this approach for retainer balance tracking: (1) it's a static document, not a live view — the client can't see the current balance mid-cycle; (2) it's only updated at invoice time (monthly), not when clients need to check before submitting a request; (3) it's delivered as an email attachment, not a bookmarkable URL the client can return to without asking you for a new one. The PDF attachment is better than nothing but doesn't solve the live balance problem.
Does the HourTab import require a specific FreshBooks CSV format?
HourTab's importer reads standard time tracker CSV formats including FreshBooks. The key columns are hours (duration) and the note or description field. FreshBooks' standard time entry CSV export includes both. You don't need to reformat or clean the CSV before importing — upload the file as exported from FreshBooks.
What if I track retainer hours in FreshBooks but invoice in a different tool?
FreshBooks time entries can be exported independently of invoicing. If you use FreshBooks for time tracking and invoice through a different system (QuickBooks, Stripe, manual invoices), the FreshBooks export workflow for the HourTab import is unchanged. The export is from the Time Tracking section, not from the invoicing section, so it doesn't depend on whether you invoice through FreshBooks.
How do I handle a FreshBooks retainer where the client has overage hours?
If a retainer client exceeds their monthly hours cap, HourTab shows the balance as negative (hours over cap). This is visible to the client in the balance view: the progress bar extends past 100%, and the hours remaining shows as a negative number. The overage is transparent.
How you handle overages commercially is separate from the tracking question: some retainers bill overages at an hourly rate, others bank them against next month, others absorb them. HourTab tracks the hours; the overage policy lives in your retainer agreement. When you invoice for overages in FreshBooks, you can create a separate line item for the excess hours using the standard FreshBooks invoicing flow.
The practical argument for adding a balance layer to FreshBooks
FreshBooks is a complete tool for the billing side of retainer management. The case for adding a balance layer on top isn't about replacing FreshBooks — it's about answering a question that FreshBooks was never designed to answer.
Retainer clients ask two distinct questions on different cadences. At the end of the month: "What's my invoice?" — FreshBooks answers this cleanly through the client portal. Mid-cycle, every time they want to submit a request: "How many hours do I have left?" — FreshBooks doesn't answer this in a client-accessible way.
The first question has a natural delivery mechanism: the invoice. The second question has no delivery mechanism in FreshBooks — it requires the client to email you and wait for a response. If a client asks this question two or three times per month across multiple retainers, it becomes a recurring support load that generates no revenue and interrupts billable work.
When the balance URL exists, clients stop asking. Not because they're less interested in their hours — they check more often, because it's easy — but because checking doesn't require interacting with you. The question answers itself. That shift — from "email the consultant and wait" to "open the bookmark and see immediately" — is the practical value of adding the balance layer to an otherwise complete FreshBooks retainer workflow.
Add a live balance URL to your FreshBooks retainer workflow
Export your FreshBooks time entries as CSV. HourTab generates a client-bookmarkable balance URL in under two minutes. Free for one retainer.
Related reading
- FreshBooks retainer tracking: the gap between invoicing and balance visibility
- QuickBooks retainer tracking: the same accounting-tool gap in a different tool
- Clockify retainer tracking guide: if you use a dedicated tracker instead of FreshBooks time
- Harvest retainer tracking guide: Harvest-specific workflow and export steps
- Shared retainer dashboard: what clients see in the HourTab balance URL