Blog · June 2, 2026 · ~9 min read
Retainer billing software: the three-layer framework (and why most tools only cover two)
When freelancers search for retainer billing software, they find time trackers and invoicing tools. Both are useful. Neither is the piece that stops clients from emailing “how many hours do I have left?” every few weeks. That question lives in a third layer the category has almost entirely ignored.
The three layers of a retainer billing stack
A retainer arrangement has three distinct operational jobs, and they map to three distinct software layers. Most tools cover one or two. Very few cover all three. Almost none are honest about which layer they actually serve.
Layer 1: Time tracking. Logging the hours you work against each client. This is the raw input to everything else — the source data that determines how much to bill and how many hours remain. Toggl, Clockify, Harvest, and Hubstaff all live here. They are excellent at their job. They are designed to answer the question: how much did I work?
Layer 2: Billing and invoicing. Turning that time data into money moving from the client’s account to yours. FreshBooks, Wave, Bonsai, and QuickBooks Self-Employed live here. Their job is to generate an invoice for the retainer fee, collect payment, and keep the books. They answer the question: did I get paid?
Layer 3: Client visibility. Giving the client a live view of their hours balance — how much of the monthly cap has been used, how much remains, what work has been logged so far this cycle, and when the cycle resets. This layer answers the client’s question: how many hours do I have left?
The status-email problem — the one every freelancer with multiple retainer clients eventually describes as “I spend half my admin time just answering hours questions” — lives entirely in Layer 3. And the retainer billing software category has almost nothing to offer there.
Where each major tool sits in the stack
It’s worth mapping the tools people actually evaluate when they search for retainer billing software against this framework, because the marketing copy on most of them implies fuller coverage than the product delivers.
Harvest (Layer 1 + partial Layer 2)
Harvest is a time tracker that added billing. Its Retainers tab lets you create a fixed monthly cap, track hours against it, and roll up a retainer invoice. The billing piece works. What Harvest doesn’t have is a Layer 3 output: there’s no shareable URL the client can open to see their balance. Harvest’s Scheduled Reports send a PDF summary by email on a fixed cadence, which means the report is always aging. A client who wants to check their balance on Thursday afternoon gets the Monday summary and has to estimate what changed since then. The email loop persists.
FreshBooks (Layer 2, minimal Layer 1)
FreshBooks is primarily an invoicing tool. It has a time tracking module, but most freelancers who use FreshBooks still track time elsewhere and import it. Its retainer feature creates a billing object for the recurring fee — it handles collection, recurring invoices, and the payment flow cleanly. FreshBooks does have a client portal, and clients can log in to see their invoices and payments. What they can’t see is their retainer hours balance. The portal is shaped for billing (invoices, payment history, outstanding balances) not for in-cycle status (20 hours cap, 13 hours used, 7 hours remaining, resets July 1). That distinction — billing view vs. hours view — is the entire Layer 3 gap.
Bonsai (Layer 1 + Layer 2, no Layer 3)
Bonsai is the all-in-one tool most solo freelancers end up evaluating: contracts, time tracking, invoicing, and client management in one subscription. Its retainer feature creates a monthly recurring contract + invoice. The gap in Bonsai’s retainer tooling is the same as FreshBooks: clients don’t get a live hours-remaining view. Bonsai’s client portal shows documents and invoices; it doesn’t show a progress bar against the monthly cap. The freelancer still has to field the balance question manually or send periodic summaries.
Toggl Track (Layer 1 only)
Toggl is a time tracker. It does Layer 1 extremely well — the timer is fast, the tagging is flexible, and Toggl’s shared report URLs let you send a client a link to their time data. The problem is that Toggl’s shared reports are date-range views of raw time entries, not retainer-cycle views of a cap with a balance. A client opening a Toggl shared link sees a list of time entries. They don’t see “12 of 20 hours used — 8 remaining — resets August 1.” The format mismatch means the shared link doesn’t actually retire the balance question.
Retainerkit (Layer 1 + Layer 2 + partial Layer 3)
Retainerkit is the closest thing the market has to a purpose-built retainer billing platform. It handles time tracking, recurring billing, and — uniquely — a client-facing portal that shows the retainer status. It gets further into Layer 3 than anything else in the category. The issue is positioning and price: Retainerkit starts at $49/month and is built for agencies with multiple clients and team seats. For a solo freelancer running three to six retainers, the price-per-retainer math and the complexity of the setup are both out of proportion to the problem.
Why Layer 3 is almost always missing
The omission isn’t accidental. Layer 3 is structurally harder to build than Layer 1 or Layer 2, and the market has consistently underestimated how much it matters.
Layer 1 tools are built for the freelancer’s workflow. The primary user is the person tracking time. The interface is optimized for fast timer start/stop, good tagging, and clean reporting that rolls up into an invoice. The client is a secondary concern — they appear on reports, not in the product.
Layer 2 tools are built for the payment flow. The primary user is still the freelancer (creating the invoice) or the client (paying it). The portal is a billing portal. It answers billing questions: what do I owe, what did I pay, what’s outstanding. It doesn’t answer the hours question because the hours question isn’t a billing question — it’s a mid-cycle status question that happens between invoices.
The hours question exists in a temporal gap that neither Layer 1 nor Layer 2 was designed to fill. It fires between the start of the billing cycle (when the freelancer hasn’t billed yet) and the end of the cycle (when the invoice arrives). In that window, the client is managing their own behavior: what to ask for, whether to submit a new request, whether to save scope for next month. They need a live picture. An invoice tells them what happened. A Layer 3 tool tells them what’s happening.
What a Layer 3 tool actually does
The Layer 3 job is a narrow one: take the time data the freelancer already has and turn it into a client-readable view of the current cycle’s balance. The client shouldn’t need to log in, interpret time entries, or do arithmetic. They should open a URL and immediately see three numbers: hours used, hours remaining, and the reset date.
The format that works is a progress bar with a work log below it:
14 of 20 hours used • 6 hours remain • resets Aug 1
[—————————————— ]
July 3 — API integration scoping (3h)
July 8 — Dashboard redesign wireframes (4h)
July 15 — Onboarding call + follow-up (2h)
July 19 — Copy revisions (5h)
That format answers the question the client actually has. It doesn’t require them to decode a time tracker’s export or read an invoice breakdown. It’s a glance-able status, not a billing document.
The critical design constraint is that the client shouldn’t need to create an account or log in. A login requirement is the main reason existing portals fail at Layer 3: the client doesn’t remember their credentials, the freelancer doesn’t want to manage client accounts, and the portal ends up being something neither side actually uses. A no-login retainer dashboard — a URL the client bookmarks the first time they receive it — removes that friction entirely. The client opens the bookmark. They see the balance. They close the tab. No login, no portal, no email.
How the three layers fit together in practice
The good news is that adding Layer 3 doesn’t require replacing your Layer 1 or Layer 2 tools. The workflow is additive:
Step 1: Track time as you normally do. Toggl, Clockify, Harvest, or a spreadsheet — it doesn’t matter. Log your hours the way you already log them. At the end of the week (or whenever you have a natural pause), export a CSV of the hours for each retainer client.
Step 2: Import the CSV into your Layer 3 tool. The import maps your time entries to the client’s retainer cycle: cap, hours used, work log. The tool calculates the balance and updates the client-facing view. This takes two to three minutes per client, once a week.
Step 3: Share the URL once. When you set up a new retainer, you send the client their dashboard URL. They bookmark it. Every subsequent time they wonder about their balance, they open the bookmark — not their inbox. The status email stops because it’s been replaced by a bookmark.
Step 4: Invoice as normal from your Layer 2 tool. Your billing workflow doesn’t change. FreshBooks still sends the invoice. Stripe still collects. The Layer 3 tool sits between the time tracker and the client’s question — it doesn’t touch the payment flow.
This is a different model from the all-in-one platforms that try to own the entire stack. All-in-one tools require the freelancer to migrate their time tracking, their invoicing, and their billing into a single system. Many freelancers have already tried this — it usually means adopting a tool they mostly don’t use because the one piece they actually needed was buried inside a platform they didn’t want to switch to wholesale. The additive Layer 3 model works alongside whatever is already in place.
Which layer you actually need depends on where the friction is
The way to evaluate any retainer billing software is to first identify which layer your current friction lives in.
If you’re losing track of how many hours you’ve worked on a client, you have a Layer 1 problem. The fix is a time tracker. Toggl and Clockify are free. Harvest is the best option if you want retainer-specific reporting built in.
If you’re having trouble sending invoices, collecting payment on time, or keeping track of which clients have paid, you have a Layer 2 problem. FreshBooks or Bonsai will solve it. FreshBooks is stronger on the invoicing and payment side; Bonsai is stronger if you also need contract management.
If you’re fielding the same hours question from clients every few weeks — if the main friction in your retainer admin is not your own tracking or your billing workflow but the client’s need for a status update — you have a Layer 3 problem. A new billing tool won’t fix it. A Layer 3 tool will.
The hours question is a billing problem in disguise — it feels like a communication issue but it’s actually a visibility gap. Closing that gap requires a dedicated Layer 3 tool, not a better time tracker or a fancier invoice template.
The cost of ignoring Layer 3
The status-email cost is easy to underestimate because the overhead arrives in small doses. One client emails once a week. Another emails twice a month. A third texts on weekends. Each individual instance feels like nothing. Added up across six retainer clients over a twelve-month engagement, the unbilled admin runs to several dozen hours per client — time that would have been billable if the client had a bookmark to check instead of an inbox to email.
The subtler cost is scope creep. A client who doesn’t know their balance can’t make informed decisions about what to request. They either hold back — using less of the retainer than they’re paying for and churning because they feel like they’re not getting value — or they overuse it, submitting requests without realizing the cap is nearly spent and then pushing back on the overage conversation. Both outcomes are worse for the relationship than a client who simply knows their balance and manages their requests against it.
Tracking hours for yourself and making those hours visible to the client are two different jobs. Layer 1 solves the first. Layer 3 solves the second. A retainer arrangement where only the freelancer knows the balance is structurally unstable — the information asymmetry creates the conditions for every friction point the arrangement is supposed to eliminate.
Evaluating retainer billing software by layer
When you’re looking at tools, ask these three questions in sequence:
1. Does the tool log my hours accurately against retainer cycles? If yes, it covers Layer 1. If no, it’s not a time tracking tool — look elsewhere for that.
2. Does the tool handle the retainer fee billing — invoicing, collection, recurring charges? If yes, it covers Layer 2. If not, pair it with a billing tool that does.
3. Does the tool give the client a live, no-login view of their hours remaining? This is Layer 3. Most tools will say “yes, we have a client portal” — but check whether the portal shows hours balance and work log, or just invoices and payments. Those are different things. A billing portal is not a retainer status dashboard.
The honest answer for most tools on question three is no. Retainerkit gets closest, at agency pricing. HourTab covers Layer 3 as its entire product, at solo-freelancer pricing ($0 for one retainer, $9/month for up to ten), and is designed to sit alongside whichever Layer 1 and Layer 2 tools are already in place rather than replace them.
If the question you want answered is “what retainer billing software should I use?” — the framework answer is: find a Layer 1 tool that fits your tracking workflow, find a Layer 2 tool that fits your billing workflow, and then decide whether the Layer 3 gap (the client hours question) is a friction source worth closing. If it is, add a dedicated Layer 3 tool. If it isn’t — if your clients are low-touch, ask rarely, and the email load is manageable — you may not need Layer 3 yet.
Most freelancers discover they need Layer 3 around client number three or four. That’s when the cumulative admin from answering the same question across multiple clients crosses from “minor inconvenience” to “I need to fix this.”
HourTab is a Layer 3 tool for freelancers with retainer clients. It takes a CSV export from any time tracker, turns it into a retainer-cycle view, and generates a shareable URL the client can bookmark — no client login required, no new portal to manage. Start free with one retainer.