Skip to content
AgentThread
Open Source#invoicing#self-hosted#open-source#freelance#billing#time-tracking

Invoice Ninja: Stop Paying Monthly SaaS Fees for Invoicing

A self-hosted invoicing, quoting, and time-tracking platform for freelancers and small agencies who want to own their billing stack instead of renting it.

AgentThread10 min read
Share

FreshBooks charges $43 per month on the Plus plan (at full price) for a freelancer who needs recurring invoices and expense tracking. QuickBooks Online starts at $35 per month and scales up from there. Invoice Ninja does the same job for the cost of a $5 server, or nothing if you already rent one. Both FreshBooks and QuickBooks are SaaS tools (software you access through a browser and pay for monthly, with your data stored on the vendor's servers).

It is a self-hosted billing platform: install it on a server you control, and the software itself costs nothing. Freelancers, consultants, and small agencies use it to send invoices, track time against projects, manage expenses, and collect payments through Stripe, PayPal, or Square. "Self-hosted" means the app runs on infrastructure you own or rent, not on a vendor's servers. The client portal, recurring billing, and e-signatures are all included. The project lives at github.com/invoiceninja/invoiceninja and has nearly 10,000 stars.

FactValue
What it isSelf-hosted invoicing, quoting, expense tracking, and time-tracking platform
Built byInvoice Ninja team; active since 2013, 200,000+ businesses worldwide
LicenseElastic License v2 (ELv2): free for self-hosting and personal business use; commercial resale requires a separate agreement
PlatformsWeb app plus mobile apps (iOS, Android, F-Droid) and desktop apps (macOS, Windows, Linux)
RequiresPHP 8.1+, MySQL 5.7+ or MariaDB 10.3+, a web server (Nginx or Apache)
Install methodDocker Compose (recommended), zip package, or one-click via Cloudron, Elestio, YunoHost
VerdictInstall if you are paying monthly SaaS fees for invoicing and want to own the data; skip if you need a pure bookkeeping or tax tool

What Invoice Ninja actually is

Invoice Ninja is an invoicing and business management application built on the Laravel PHP framework (Laravel is a popular toolkit for building web applications in PHP). The full source code is available on GitHub. The Elastic License v2 lets you run it freely for your own business, with restrictions only if you want to resell it as a hosted service to others.

The core pitch is straightforward: every invoice you send, every client record you store, every payment you receive goes into a database running on your own server. You are not dependent on a software-as-a-service (SaaS) vendor's pricing decisions, terms-of-service changes, or uptime track record. The software is the same whether you self-host or use the cloud version at invoiceninja.com.

The cloud version has a free tier limited to 5 clients, with the Ninja Pro plan at $14 per month and Enterprise at $18 per month for teams. Self-hosting removes those client limits entirely. If you have more than a handful of active clients, self-hosting pays for itself in the first month.

One detail worth noting upfront: Invoice Ninja is not accounting software. It does not replace QuickBooks or FreshBooks if you need double-entry bookkeeping, payroll, or tax preparation features built in. It focuses on the billing and payment side of running a small business. Exporting to an accountant or a dedicated bookkeeping tool is the expected workflow.

What you get after installing it

Invoicing and quoting

The core of the platform is its invoice builder. You create clients, add line items with quantities and rates, apply taxes and discounts, and send the invoice directly from the app. Invoices go out by email with a link to the client portal where clients can view, download, and pay.

Quotes work the same way and convert to invoices with one click once a client approves. Quotes include an e-signature field so clients can sign and accept a proposal without leaving the browser.

Recurring invoices are invoices that are generated and sent automatically on a schedule. You set the frequency (weekly, monthly, quarterly, annually), the start date, and Invoice Ninja handles the rest. Monthly retainers, software maintenance agreements, and subscription-style billing for agencies all work this way without any manual work each cycle.

Payments and gateways

Invoice Ninja integrates with over 45 payment gateways. A payment gateway is a service like Stripe or PayPal that processes card payments from your clients. Stripe (the most common online payment processor for small businesses) and PayPal are both supported natively, as are Square, GoCardless, WePay, and others. Clients click "Pay Now" in the portal and pay by card or bank transfer without you handling any of the transaction mechanics.

ACH bank transfer support (US bank-to-bank payments, which have lower fees than card payments) is included on the Enterprise hosted plan and on self-hosted installations.

Time tracking and projects

Projects group tasks together under a client. You log time against tasks, and Invoice Ninja aggregates the hours and rates into a line item you can add to an invoice. For a consultant billing hourly, this closes the loop between tracking time and getting paid without exporting to a separate spreadsheet.

Kanban task boards (a visual board where tasks move from column to column as they progress) are available for project management inside the app.

Expenses

You can log expenses against clients or projects, mark them as billable, and include them directly on an invoice. Expense categories, vendor records, and receipt attachments are all supported.

Client portal

Every client gets a branded portal where they can view all their invoices, quotes, payments, and project status. The URL can be set to your own domain. White-label means you can remove Invoice Ninja branding and add your own logo and color scheme throughout the portal. A $40 per year white-label license removes all Invoice Ninja references from client-facing pages for self-hosted installations.

API and automation

Invoice Ninja ships a full REST API (a web interface that lets other software talk to Invoice Ninja programmatically) with documentation at api-docs.invoicing.co. You can create invoices, sync clients, and trigger payment reminders from external tools, CRMs, or scripts without opening the web app.

The install experience

The recommended self-hosting path is Docker Compose. Docker is software that packages Invoice Ninja into a container you run on any server. The Docker image is available at Docker Hub, and the repository includes a sample docker-compose.yml configuration file.

The server requirements are modest: PHP 8.1 or higher, MySQL 5.7+ or MariaDB 10.3+ (MariaDB is a popular open-source database that is largely interchangeable with MySQL), a web server like Nginx or Apache, and a Linux server with at least 1 GB RAM. A $5 to $10 per month virtual private server (a rented slice of a remote computer you control) from Hetzner, DigitalOcean, or Vultr handles a typical freelance or small-agency workload comfortably.

The practical steps via Docker Compose:

  1. Copy the sample environment file and set your database credentials, app URL, and mail server settings
  2. Run docker-compose up -d to pull and start the containers (the -d flag runs them in the background so they keep running after you close the terminal)
  3. Open the setup wizard in your browser at your-domain.com/setup to initialize the database
  4. Configure your domain with SSL/TLS (the encryption protocol behind the padlock in browser URLs; Let's Encrypt provides free certificates)

For non-Docker deployments, you download a zip file from invoiceninja.org that includes all dependencies. You extract it into your web server's document root (the folder on the server where publicly accessible files live), set the file permissions, configure the database, and run the setup wizard. This path requires more manual web server configuration but works on standard shared hosting that supports PHP, which is available on many budget hosts for a few dollars per month.

One-click deployment options exist via Cloudron, Elestio, and YunoHost for operators who want a simpler path. These platforms handle the server-level configuration automatically. Elestio in particular supports deploying Invoice Ninja to a managed instance in under five minutes.

The honest difficulty level: setting up Invoice Ninja via Docker is straightforward if you have deployed a web application before. If you have not, the setup wizard covers the database configuration steps, but you will need to handle web server and SSL setup yourself or use a managed platform like Elestio. The documentation at invoiceninja.github.io covers each step.

Where it fits and what to compare it to

FreshBooks is the most direct comparison point for freelancers. FreshBooks is polished, has built-in time tracking, and supports accountant access. The Plus plan runs $43 per month at full price (discounts are available). The trade-off is that your data lives on FreshBooks servers, you pay per client at scale, and migrating away requires a data export. For a freelancer with steady clients who values setup simplicity over data ownership, FreshBooks is a reasonable choice.

QuickBooks Online is the standard for small businesses that need accounting as well as invoicing. It handles payroll, tax prep, bank reconciliation, and double-entry bookkeeping in ways Invoice Ninja does not. If your accountant lives in QuickBooks, staying in that ecosystem reduces friction at tax time. Pricing starts at $35 per month and scales to $235 per month for the Advanced plan. It is meaningfully more powerful as accounting software and meaningfully more expensive for what is essentially invoicing.

Wave (wave.com) offers free invoicing and accounting software hosted in the cloud. It is the closest free alternative to Invoice Ninja on the hosted side. The catch is that Wave makes money through its payment processing fees, which run 2.9% plus 30 cents per card transaction (slightly higher than Stripe's standard rates). Wave also restricts some features behind paid plans. For a freelancer who wants zero setup effort, Wave is the comparison to make.

Crater (craterapp.com) is another open-source, self-hosted invoicing tool built on Laravel. It is lighter-weight than Invoice Ninja with a simpler feature set. If you only need basic invoicing without time tracking or project management, Crater is worth evaluating.

Invoice Ninja is the right fit when you have more than 5 active clients, bill in multiple currencies or need recurring invoices, want a client portal with payment processing, and are comfortable running a Linux server or using a one-click deployment platform. On all of those criteria, it is the strongest self-hosted invoicing option by feature coverage and community size.

Verdict

Install it if you are currently paying monthly SaaS fees for invoicing and your needs fit the feature set.

The combination of recurring invoices, time tracking, project management, a client portal with payment processing, and 45+ payment gateway integrations covers the full billing workflow for most freelancers and small agencies. The self-hosted version has no client limits, no per-seat fees, and includes all features that the hosted Pro and Enterprise plans charge for.

The cases where Invoice Ninja is not the right call: you need full accounting with bank reconciliation and tax preparation, in which case QuickBooks is the better tool and the monthly fee is justified. You want zero server responsibility and are billing only a handful of clients, in which case the Invoice Ninja free hosted tier (up to 5 clients) or Wave covers the need without any infrastructure work.

For the freelancer or small agency who sends 20 to 100 invoices per month, tracks time against client projects, and wants to stop paying $14 to $43 per month for software that holds their billing data: Invoice Ninja on a $5 to $10 server is the obvious move. The project has been maintained since 2013, has 200,000+ businesses using it, and the source code is public. That is the kind of project longevity that makes a self-hosted dependency reasonable.

Related posts