Blog · July 10, 2026 · ~10 min read

Wave Accounting vs. HourTab for retainer client hours visibility

Wave is a free accounting and invoicing tool used by thousands of freelancers who want professional invoicing without a monthly subscription. Unlike Zoho Invoice, Wave has no built-in time tracking at all — freelancers billing hourly retainers must use a separate time tracker. Here’s how the full three-tool stack works and where HourTab fits in.

What Wave is and why freelancers use it

Wave is a free accounting platform targeted at small businesses and independent freelancers. Its core offering — invoicing, expense tracking, and basic accounting reports — is free with no per-transaction percentage fees on bank transfers (ACH). Payment processing for credit cards is fee-based, but the software itself is free.

Wave is frequently recommended as the free alternative to FreshBooks and QuickBooks Self-Employed. For freelancers who need professional invoicing, basic income/expense tracking, and end-of-year reporting without a monthly subscription, Wave covers the fundamentals. It is especially popular with designers, copywriters, and consultants who are cost-optimizing their toolstack and do not yet need project management or client CRM functionality.

Invoicing. Wave provides customizable invoice templates with your branding. You can create one-time or recurring invoices, set payment terms, and enable automatic payment reminders. Clients pay via credit card, bank transfer (ACH in the US), or Apple Pay depending on the payment methods you configure.

Recurring billing. Wave supports automatic recurring invoices on a schedule you define — monthly, weekly, bi-weekly. For retainer freelancers billing a fixed monthly amount, this eliminates the manual step of generating and sending each invoice. The schedule runs automatically and Wave notifies you when a payment is received.

Expense tracking. Wave connects to bank accounts and credit cards to import transactions for categorization. This makes expense tracking and end-of-year income/expense reporting substantially less manual than maintaining a spreadsheet.

Accounting reports. Wave generates profit and loss statements, balance sheets, and accounts receivable reports. These are the reports a freelancer or their accountant needs for tax preparation. They are internal business reports, not client-facing documents.

What Wave does not have: time tracking. This is the key distinction from Zoho Invoice, which includes a built-in timer that logs time directly to projects and clients. Wave has no time tracking feature. If you bill by the hour, you must track those hours in a separate tool — Toggl, Clockify, Harvest, Timely, or similar. There is no way to log a timer in Wave and have it appear on an invoice. The invoice total must be entered manually, calculated from your external time records.

The retainer billing workflow in Wave

For freelancers billing flat-fee monthly retainers, Wave’s recurring invoice feature covers the workflow well. Set up the invoice once, configure the schedule, and Wave sends it automatically each month.

For freelancers billing hourly retainers — where the client pays for a set number of hours and the actual hours worked determines the invoice total — the Wave-only workflow requires manual steps at each billing cycle:

You log time in an external tracker throughout the month. At the end of the billing period, you export or review your time records for that client, calculate the total hours (and therefore the total due), manually enter that amount into Wave, and send the invoice. Wave handles delivery and payment collection; the hours calculation is entirely on your side.

This is a workable process, but it has the same gap as all invoicing-first tools: the client sees their hours total for the first time when the invoice arrives. During the month, they have no visibility into how much of the retainer they have consumed. The first data point is the bill.

The mid-cycle visibility gap in Wave

Wave’s client portal shows clients their invoice history and payment records. It does not show a real-time retainer status: how many hours have been used this cycle, how many remain, or when the billing period resets.

Because Wave has no time tracking at all, there is no internal time record that could even theoretically be surfaced to the client. Even the invoicing-layer visibility that some time-tracking tools provide (Harvest’s project hours view, Toggl’s time entries shared reports) is absent. The gap is structural.

For retainer clients, this creates a specific type of friction:

Mid-cycle status requests. Clients who want to know where they stand on hours email the freelancer directly. The freelancer pulls numbers from their external time tracker and replies. For a Wave user, this means opening two tools — the time tracker and Wave — to answer a question that should ideally never need to be asked.

Invoice review conversations. A client who has no visibility into hours during the month receives an invoice total as their first hours data point. If the amount is higher than they expected, the natural question is “can you explain this?” For a Wave user, providing that explanation means pulling time logs from the external tracker and manually constructing a breakdown. This is the kind of after-the-fact accounting that mid-cycle visibility prevents.

Scope decisions without hours context. Clients submit work requests without knowing how many retainer hours they have available. A client with 2 hours remaining who submits a 6-hour project request creates an overage conversation. A client who can see their remaining hours before submitting a request has the information they need to time their requests appropriately.

What HourTab provides that Wave doesn’t

HourTab solves one specific problem: giving retainer clients a live, no-login URL that shows their current hours status. It is not an invoicing tool and does not replace Wave in the billing workflow.

A visual progress bar. The client opens their URL and sees how much of the monthly retainer cap has been used, displayed as a progress bar. Status is communicated instantly — clients opening the link on a phone get their answer in under two seconds without needing to read a table of numbers.

The exact hours count. “11 of 20 hours used • 9 hours remain.” This is the number the client needs before deciding whether to submit a new work request or hold it until the billing cycle resets.

The cycle reset date. “Cycle resets August 1.” Nine hours remaining reads differently with 2 days left in the cycle versus 18 days. The reset date makes the hours number actionable rather than abstract.

The work log. Each time entry with a date, description, and duration. The client can see what the hours were spent on without asking — which is the question that most often turns into a billing conversation when the invoice arrives.

No login required. The URL is public — not indexed or searchable, but open to anyone with the link. The client bookmarks it at the start of the retainer and returns to it whenever they want a status check. No Wave account required, no new software to install.

How the three-tool stack works in practice

For Wave users billing hourly retainers, the complete workflow uses three tools:

Toggl (or Clockify, Harvest, etc.) handles time logging. You log every hour of retainer work in your time tracker, with task descriptions and date stamps. This is your internal record and the source of truth for invoice calculation. The time tracker is also the source of the CSV you will upload to HourTab.

HourTab handles client-facing hours visibility. Periodically — after completing significant tasks, weekly, or whenever hours move substantially — you export a CSV from your time tracker covering the current billing period for the retainer client and upload it to HourTab. The client’s URL refreshes. The client sees their updated hours status without any interaction from you.

Wave handles invoicing and payment collection. At the end of each billing cycle, you review the hours in your time tracker, calculate the invoice total, create the invoice in Wave, and send it. Wave delivers the invoice and processes payment. The client who has been watching their hours accumulate via the HourTab URL is not surprised by the total.

The three tools do not overlap in function. Each covers a distinct part of the retainer workflow: time logging (tracker), client visibility (HourTab), billing and payment (Wave).

The Wave + HourTab setup workflow

Setting up HourTab for a retainer client you are already billing through Wave takes about 15 minutes:

Step 1: Export the current cycle’s time entries from your time tracker. In Toggl, Clockify, or Harvest, filter by the retainer client and the current billing period and export as CSV. The CSV contains at minimum: a date, a task description, and a duration. This is all HourTab needs.

Step 2: Create the client in HourTab. Set their monthly hours cap and billing cycle reset date. For a client with a 20-hour/month retainer that resets on the first of each month, those two values are all you configure.

Step 3: Upload the CSV. HourTab parses the CSV, maps the hours to the billing cycle, and generates the progress bar and work log. You get a permanent URL for this client.

Step 4: Share the URL with the client. Send it in an email alongside the next Wave invoice, or in a kickoff message at the start of the retainer. Ask the client to bookmark it. Explain that it will show them their hours status throughout the month.

Going forward, the maintenance is: export a fresh CSV from your time tracker and upload it to HourTab when you want to refresh the client’s view. The URL does not change. Wave continues handling billing and payment as before.

When Wave alone is sufficient

Flat-fee retainers. A retainer billed as a fixed monthly amount regardless of hours has no “hours remaining” question. Wave’s recurring invoice feature handles this perfectly. The question of mid-cycle hours visibility only applies to hourly (hours-capped) retainers.

Clients who do not ask about hours mid-cycle. Some retainer relationships are low-friction on billing. Invoices arrive, get paid, retainers renew. If a specific client relationship has no history of mid-cycle status questions or invoice disputes, there is no immediate gap to fill.

One or two retainer clients early in the practice. When the retainer roster is small, responding to an occasional hours email is a manageable overhead. The value of a dedicated URL increases as the number of clients who need status visibility scales up.

Clients who are already in the same time-tracking tool. Some freelancers and clients use the same time tracker (for example, a Harvest workspace shared with the client). In that case, the client can see their hours internally without needing an external URL. This is a relatively uncommon arrangement but it does exist.

When you need HourTab alongside Wave

Recurring status-update emails. A retainer client who emails “can you tell me where we are on hours?” twice a month is sending a clear signal that they want mid-cycle visibility. Providing a URL eliminates those emails entirely. The client answers their own question.

Invoice friction from hours surprises. A client who has no visibility during the month and sees the invoice total as their first hours data point may question line items. This is not a character problem — it is an information problem. Mid-cycle visibility means the client is not receiving new information when the invoice arrives. There is nothing to question because the data has been visible throughout the cycle.

Scope submissions without hours context. When a client does not know their remaining hours, they submit work requests without regard for the billing cycle. Adding HourTab means clients self-regulate: they check the URL, see 2 hours remaining with 5 days until reset, and hold a large request for next month rather than triggering an overage conversation.

Retainer renewal friction. A client who has had live visibility into hours throughout the retainer relationship has a concrete, data-grounded sense of what the retainer delivered. Renewal conversations are faster and more confident because the client has been watching the work accumulate in the same URL they bookmarked on day one.

Scaling past three or four retainer clients. Wave handles billing regardless of client count. Client-communication overhead scales with the number of clients who ask for status updates. Adding HourTab for all retainer clients is a single fixed cost that scales to any number of clients.

Direct comparison: what each handles

Capability Wave HourTab
Invoice creation and delivery Yes No
Recurring invoice scheduling Yes No
Credit card / ACH payment collection Yes No
Expense tracking + bank sync Yes No
Accounting reports (P&L, balance sheet) Yes No
Built-in time tracking No Via CSV import
Client portal for invoice history Yes (login required) No login required
Live retainer hours URL (no login) No Yes
Hours remaining progress bar No Yes
Cycle reset date shown to client No Yes
Work log visible to client No Yes
Base cost Free (card % on payments) Free / $9/mo

The Wave + time tracker + HourTab stack in context

It is worth distinguishing the Wave + HourTab case from the Zoho Invoice + HourTab case, since both are free invoicing tools aimed at cost-conscious freelancers.

Zoho Invoice has a built-in timer. A freelancer using Zoho Invoice can log time internally in Zoho and export that data as a CSV for HourTab. The external time tracker is optional — you can use Zoho Invoice as both the invoicing tool and the time logging source.

Wave has no timer at all. A freelancer using Wave for retainer invoicing must use a separate time tracker. This means the Wave + HourTab user always has a three-tool stack (time tracker + Wave + HourTab), not the two-tool stack that is possible with Zoho Invoice.

If you are using Wave and have not yet chosen a time tracker, Toggl and Clockify are both free at the level of usage most freelancers need. Either exports a CSV that HourTab can parse. Harvest is also commonly used, though it has a monthly fee. The time tracker you use alongside Wave does not affect the HourTab workflow — what matters is the ability to export a filtered CSV of time entries by client and date range, which every mainstream time tracker supports.

For context on how to structure the retainer client reporting workflow — including when and how to refresh the HourTab URL during the billing cycle — the retainer client reporting guide explains the communication cadence that works best for hourly retainer clients.

For guidance on the broader retainer billing workflow, from initial pricing through overage conversations, the retainer billing best practices post covers the end-to-end process with specific attention to the stages where client visibility has the most impact.

Practical next step

If you are using Wave for retainer invoicing and tracking hours in Toggl or Clockify, you can test HourTab for one client without changing anything in your existing workflow.

Export the current month’s time entries for one retainer client from your time tracker as a CSV. Upload it to HourTab, set the hours cap and cycle reset date, and send the URL to the client. The setup takes 15 minutes. If the client bookmarks the URL and stops sending mid-cycle status emails, you have a concrete signal that the tool is worth the $9/month for additional clients.

The free tier of HourTab covers one active retainer, so you can test without any spend. Wave and your time tracker continue operating exactly as they do today. You are not replacing any tool — you are adding the one layer that was always missing from the Wave-based retainer workflow: client-facing hours visibility.


HourTab gives retainer clients a live hours URL from a time-tracker CSV. Works alongside Wave without replacing your invoicing workflow. Free tier covers one client. Start free →