Blog · July 11, 2026 · ~10 min read

Invoice Ninja vs. HourTab for retainer client hours visibility

Invoice Ninja is the open-source alternative to FreshBooks and QuickBooks, popular with developers and tech-savvy freelancers. Unlike most invoicing tools, it includes built-in time tracking. But its client portal requires account creation and shows invoices — not a live, no-login retainer hours URL. Here’s what each tool handles and where they don’t overlap.

What Invoice Ninja is and who uses it

Invoice Ninja is an open-source invoicing and business-management platform that you can self-host on your own server or use through the hosted cloud version at InvoiceNinja.com. It covers invoicing, time tracking, expense tracking, proposals, and a client portal in one application.

Its open-source licensing makes it the top choice for developers and sysadmins who want full control over their data and infrastructure. Self-hosting means your invoice data never passes through a third-party server. Many freelancers in the developer and open-source community choose Invoice Ninja specifically for this reason — the same values that lead to preferring open-source tools in their technical stack extend to their business software.

Invoice Ninja is also popular with tech-adjacent freelancers — technical writers, security consultants, DevOps contractors, and independent open-source maintainers who prefer self-hosted tooling. The setup requires a server or a hosting provider that can run a PHP application, which filters the user base toward people comfortable with server administration.

Core capabilities at a glance: invoicing with custom templates, recurring invoices, time tracking with a built-in timer and manual entry, expense tracking, project management with task lists, proposals and quotes, a client portal for invoice access and payment, payment gateway integrations (Stripe, PayPal, and many others), and a REST API for automation.

Invoice Ninja’s time tracking: what it does

Invoice Ninja’s time tracking is a meaningful differentiator from most invoicing tools. You can start a timer directly in the Invoice Ninja interface, assign it to a client and project, add a task description, and let it run. When you stop the timer, the time entry is logged to that client and project.

You can also log time manually — enter start time, end time, date, and description without using the live timer. This is useful for retroactive logging or for freelancers who track time elsewhere and consolidate it in Invoice Ninja at the end of the day.

The critical capability for retainer billing: logged time entries can be converted directly to invoice line items. At the end of a billing period, you select the unbilled time entries for a client, and Invoice Ninja generates the invoice with those entries as line items. You do not need to manually calculate hours or enter totals — the calculation flows from the time log to the invoice automatically.

This is a genuinely useful feature that Wave, PayPal Invoicing, and QuickBooks Self-Employed do not offer. For freelancers who were previously tracking time in Toggl or Clockify and manually transferring totals to their invoicing tool, Invoice Ninja’s built-in time tracking eliminates a manual step.

The Invoice Ninja client portal: what it shows

Invoice Ninja includes a client portal — a web interface where your clients can view their invoice history, download invoices, make payments, and review project details. This is one of the more complete client-access features among open-source invoicing platforms.

What the client portal requires: an account. Your client receives an invitation email and must create a password to log into the Invoice Ninja portal. This is a standard authenticated portal, not a public URL.

What the portal shows: invoice history (with payment status), outstanding balances, and the ability to pay online. On some Invoice Ninja versions and plans, the portal also shows project details and task lists. The focus is on invoice and payment management — it is a billing portal, not a live hours dashboard.

What the portal does not show: a real-time view of current-cycle hours consumed versus hours remaining. If a retainer client logs into the Invoice Ninja portal mid-month, they see their invoice history — typically a series of past monthly invoices. They do not see a progress bar showing “14 of 20 hours used this cycle” or a work log of what those 14 hours covered.

This is the specific gap that HourTab addresses. The client portal is excellent for invoice management; it is not designed to be a live retainer status feed.

The mid-cycle visibility problem in Invoice Ninja

Even with time tracking and a client portal, Invoice Ninja has no mechanism for surfacing a live “hours remaining” view to clients mid-cycle. Here is why:

The portal shows billing history, not billing status. Invoice Ninja’s portal centers on invoices — documents that represent completed billing cycles. A client can see that last month’s invoice was $1,800 for 18 hours. They cannot see that they have consumed 14 hours in the current cycle and have 6 hours remaining.

Time entries are internal until invoiced. Time entries logged to a client in Invoice Ninja are part of the unbilled time ledger — they appear in your Invoice Ninja dashboard as unbilled work. They are not accessible through the client portal as a live status view. The client does not see their unbilled hours accumulating in real time.

The portal requires login. Even if Invoice Ninja exposed a hours-remaining view in the portal, the client would need to log in to see it. Login-required portals have a specific friction pattern: clients forget passwords, use the wrong email address, or simply don’t bother logging in when they want a quick answer. The practical result is that they email you instead.

For retainer relationships where mid-cycle visibility matters — clients who want to know their remaining hours before submitting a new project request, or clients who have asked “where are we on hours?” more than once — the Invoice Ninja portal does not solve the problem.

What HourTab provides that Invoice Ninja doesn’t

HourTab is a single-purpose tool: it takes a time-tracker CSV and produces a public, no-login URL that shows the client’s current retainer hours status. It does not handle invoicing, expense tracking, proposals, or any of the other functions Invoice Ninja covers.

A bookmarkable URL with no login. The client receives a URL at the start of the retainer. They bookmark it. When they want to know their hours status, they open the bookmark. No login, no account creation, no password to reset. The URL is not indexed by search engines, but it is accessible to anyone who has it — typically just the client.

A live progress bar. The URL displays a visual progress bar: how much of the monthly retainer cap has been used, as both a percentage and an exact count. “14 of 20 hours used • 6 hours remain.” The bar updates every time you refresh the client’s data by uploading a new CSV.

The cycle reset date. “Cycle resets August 1.” Six hours remaining means something different with 3 days left versus 18 days left. The reset date makes the hours number actionable.

A work log. Below the progress bar, each time entry with date, description, and duration. The client sees what the hours were spent on. This is the answer to “can you tell me what you worked on this month?” — the client can look it up themselves without asking.

No required workflow change. If you are already using Invoice Ninja’s time tracker, you export a CSV of time entries for the billing period and upload it to HourTab. Invoice Ninja continues handling invoicing, payment, and the client portal. HourTab adds the one layer that Invoice Ninja was not designed to provide: a live, mid-cycle status feed for the client.

How to export from Invoice Ninja and use it with HourTab

Invoice Ninja supports time entry exports, though the specific export path depends on whether you are using the self-hosted version or the cloud version and which Invoice Ninja version you are on.

Option 1: Export time entries from Invoice Ninja directly. In Invoice Ninja’s reports section, you can export time logs filtered by client and date range. The output is a CSV with date, duration, description, and client fields. This CSV can be uploaded to HourTab directly.

Option 2: Use a parallel time tracker with CSV export. Some Invoice Ninja users who log time internally for billing purposes still use a dedicated time tracker — Toggl, Clockify, or Harvest — as their primary time logging interface, and enter totals into Invoice Ninja at invoice time. If that is your workflow, export the CSV from your time tracker rather than from Invoice Ninja. The result is the same: a CSV with date, description, and duration per entry.

Step-by-step setup for one client:

Step 1: Export the current billing period’s time entries. Filter by the retainer client and the current cycle dates. Export as CSV.

Step 2: Create the client in HourTab. Enter their monthly hours cap (e.g., 20 hours) and their billing cycle reset date (e.g., the 1st of each month).

Step 3: Upload the CSV. HourTab parses the entries, maps them to the billing cycle, and generates the URL with the progress bar and work log.

Step 4: Send the URL to the client. Include it with the next Invoice Ninja invoice or in a retainer kickoff message. Ask them to bookmark it for mid-cycle status checks.

Going forward: whenever you want to refresh the client’s view, export a new CSV from Invoice Ninja covering the current cycle and upload it to HourTab. The URL remains constant. Invoice Ninja handles billing and payment as before.

When Invoice Ninja alone is sufficient

Flat-fee retainers. If you charge a fixed monthly amount regardless of hours, there is no “hours remaining” question. Invoice Ninja’s recurring invoicing handles this case completely. The mid-cycle visibility problem only arises with hours-capped retainers.

Clients who actively use the portal. A small subset of retainer clients genuinely engage with client portals — they log in monthly to review invoices and manage payment methods. For those clients, Invoice Ninja’s portal covers their primary needs. If they have never asked mid-cycle status questions, the portal may be sufficient.

Clients in the same technical community. Some Invoice Ninja users work with technically sophisticated clients who are comfortable with the login-required portal flow. If the client already has a portal account and uses it regularly, the friction of the login requirement is minimal.

Short billing cycles. Weekly or bi-weekly retainers have less mid-cycle exposure than monthly retainers. A client billed weekly has at most 6 days between invoice data points. For very short cycles, the gap between visibility and billing is narrow enough that mid-cycle status requests are rare.

When you need HourTab alongside Invoice Ninja

Monthly retainers with a consistent status-check pattern. A client who asks “where are we on hours?” once or twice every month is signaling that they want real-time visibility. Providing a URL answers the question permanently — the client bookmarks it and stops emailing. This is the clearest signal to add HourTab.

Clients who forget or avoid portal logins. Many retainer clients are not technical and do not maintain software account credentials as a habit. If your client has never used the Invoice Ninja portal despite being invited, they will not use it for mid-cycle status checks either. A no-login URL that works like any other webpage requires no account maintenance.

Invoice review friction from hours surprises. A client whose first mid-cycle data point is the invoice — even via the Invoice Ninja portal — may question line items when the total is higher than anticipated. Mid-cycle visibility via a bookmarkable URL means the client has been watching hours accumulate throughout the cycle. There is nothing new about the invoice total when it arrives.

Scope self-regulation. A client with access to their remaining hours before submitting a new project request can self-regulate: they see 3 hours left with a week until the cycle resets and decide to hold a large request. Without visibility, that same client submits the request, triggers an overage conversation, and creates friction on both sides. The URL removes the friction by moving the decision earlier in the cycle.

Multiple retainer clients on hourly arrangements. The value of the URL compounds with client count. For one client, the overhead of responding to occasional status emails is manageable. For four or five retainer clients each making two requests per month, that is eight to ten manual status emails per month that a URL eliminates.

Direct comparison: what each handles

Capability Invoice Ninja HourTab
Invoice creation and delivery Yes No
Recurring invoice scheduling Yes No
Payment collection (Stripe, PayPal, etc.) Yes No
Built-in time tracking / timer Yes Via CSV import
Convert logged time to invoice line items Yes No
Expense tracking Yes No
Proposals and quotes Yes No
REST API for automation Yes No
Self-hostable (data ownership) Yes No
Client portal (login required) Yes No login required
Live retainer hours URL (no login) No Yes
Hours remaining progress bar (mid-cycle) No Yes
Cycle reset date shown to client No Yes
Work log visible to client without login No Yes
Base cost (software) Free self-hosted / ~$10/mo cloud Free / $9/mo

Invoice Ninja’s open-source advantage and where it ends

Invoice Ninja’s open-source, self-hosted architecture is a genuine advantage for freelancers who prioritize data ownership. Your invoice data, client information, and time records live on infrastructure you control. This matters for freelancers with confidentiality obligations, clients in regulated industries, or simply those who prefer not to store business financial data with a SaaS provider.

The self-hosted architecture does not, however, change the design of the client portal. The portal is login-required on both the self-hosted and cloud versions — it is a client authentication system, not a public URL scheme. Running Invoice Ninja on your own server gives you control over the data; it does not change the portal’s interface from the client’s perspective.

HourTab URLs, by contrast, are public by design. The client does not need an account with HourTab or with your instance of Invoice Ninja. The URL works like any other web page — the client opens it in any browser, on any device, without credentials.

For Invoice Ninja users who chose the tool specifically for its open-source credentials, it is worth noting that HourTab does not require any integration with Invoice Ninja’s internals. It reads a CSV file — a universal export format available from any invoicing or time tracking tool. Adding HourTab to an Invoice Ninja workflow does not compromise the data ownership benefits of self-hosting Invoice Ninja.

The Invoice Ninja + HourTab stack for developer freelancers

Developer freelancers on Invoice Ninja often have retainer clients who are technical buyers — engineering managers, CTOs, technical co-founders. Technical buyers are not necessarily more comfortable with billing portals; they are simply more comfortable with tools. If a no-login URL is easier to access than a portal, they will use the URL.

For developer freelancers billing monthly hourly retainers, the combined workflow looks like this:

Time logging: Use Invoice Ninja’s built-in timer or your preferred external tracker throughout the month. Log every retainer task with a description.

Client visibility updates: Weekly or after significant task completions, export the current cycle’s time entries from Invoice Ninja as CSV and upload to HourTab. The client’s URL refreshes automatically. You can do this in under two minutes once the workflow is set up.

Billing: At the end of the cycle, convert the unbilled time entries in Invoice Ninja to an invoice. Send it through Invoice Ninja. The client who has been watching their hours via the HourTab URL is not surprised by the total.

Payment: The client pays through Invoice Ninja’s payment gateway (Stripe, PayPal, or bank transfer). The HourTab URL resets for the next billing cycle after you upload the next CSV.

For context on structuring the broader retainer billing workflow — from pricing through renewal — the retainer billing best practices guide covers the end-to-end process. For guidance on mid-cycle communication standards, the retainer client reporting post explains when and how to update the client’s hours view throughout the billing cycle.

FAQ

Does Invoice Ninja have time tracking?

Yes. Invoice Ninja includes a built-in time tracker that logs hours directly to projects and clients. You can start a timer, log manual entries, and convert tracked time to invoice line items. This distinguishes Invoice Ninja from Wave, PayPal, and QuickBooks Self-Employed, which have no time tracking.

Can my client see their retainer hours in Invoice Ninja without logging in?

No. Invoice Ninja’s client portal requires your client to create an account and log in. There is no public, no-login URL showing live retainer hours. The portal shows invoice history and allows payment — it is not a live hours dashboard.

How does HourTab work with Invoice Ninja?

Invoice Ninja lets you export time entries as a CSV. You upload that CSV to HourTab, set the client’s monthly hours cap and cycle reset date, and HourTab generates a public URL showing the client’s live hours status. Invoice Ninja continues handling invoicing and payment. HourTab adds the client-facing visibility layer that Invoice Ninja’s portal doesn’t provide.

Is Invoice Ninja free?

Invoice Ninja offers a free self-hosted version (you run it on your own server) and a cloud-hosted paid plan. The self-hosted version is fully featured including time tracking and the client portal. The cloud version (InvoiceNinja.com) has a free tier with limitations and paid plans starting around $10/month.

What does HourTab add that Invoice Ninja doesn’t already provide?

HourTab provides a no-login, bookmarkable URL that shows the client’s current retainer hours status in real time — progress bar, exact hours used and remaining, cycle reset date, and work log. Invoice Ninja’s client portal requires login, shows invoices rather than live hours, and does not display a mid-cycle progress bar. HourTab fills the gap between billing cycles when the client wants to check their status without contacting you.


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