A decent online invoicing web app

Initially, I was going to use WHMCS because of the tight integration with cPanel as it was built to accommodate selling web hosting but then I felt it was a bit overkill for what I needed.

All i wanted from an invoicing software was something basic and simple to use, nothing fancy. I was not looking for an online invoicing web app full of features that i probably did not need. But in the same time, I wanted full control in what i want to do with it.

A search on Google revealed a few decent options.

These open source web invoicing applications are:

Simple Invoice

Simple Invoices is PHP-based and features support for recurring payments, sales reports, multiple customers/users, PDF invoices and a variety of payment types. You can install it yourself or use of the service providers supported by the developers.

This one was promising but has not been updated since 2013 so was not sure if development was still active?


Simple Invoices is PHP-based and features support for recurring payments, sales reports, multiple customers/users, PDF invoices and a variety of payment types. You can install it yourself or use of the service providers supported by the developers.

I think i would have use this but not having any Ruby On Rails experience, i gave it a miss. 

Open Source Billing

Open Source Billing promotes its support of online payment processors such as PayPal so that you can receive online payments. It also features a rather attractive interface with a dashboard of year-to-date income, amount billed and outstanding invoices. You can also export invoices to PDF.

Again, I would have used this if it wasn't for the fact that it is built using Ruby On Rails.


InvoicePlane is a self-hosted completely free invoicing web application for managing your invoices, quotes, clients and payments. It was built with an intention to offer free application for billing, invoicing, client management and payment tracking.  So far the application has garnered over 30,000 users in over 180 countries. 


  • Easily customisable to make sure it fits all your needs
  • Multi language Interface with 23+ languages
  • Easy create an invoice with one simple click
  • CRM-like customer management, making it easy for you to manage your customers.
  • Easily prepare and send quote for customers with a single click.
  • Makes it easy to keep track of payments
  • Integrates well with Paypal
  • Sales reporting tool

At the end, i chose to use InvoicePlane as it had enough of the basics i required, including recurring payments which i needed for my web hosting I offer to my clients.

I believe i made the right choice to install and use InvoicePlane. It was easy to just get started without reading too much documentation, even though it was very well documented. Also, development was still active and that is a good sign the software is still evolving. There is nothing worst than using an outdated web application that might be vulnerable to security because we are storing and dealing with sensitive personal information. 


I installed InvoicePlane on MariaDB 10, PHP 5.6.x (I think it also works with PHP 7) with all the PHP extensions required. It was installed on a subdomain and this gave me an issue. The installation kept redirecting me to my server IP address and prevented me from continuing with the install. However, it was an easy fix by opening up index.php file and add my subdomain:

define('IP_URL', 'https://subdomain.duvien.com');

Once that was done, i was able to proceed to complete the installation.

Using InvoicePlane

InvoicePlane dashboard

 When you login, you are presented with a nice dashboard that clearly outline all your invoice items.

First thing i did was to go straight to configure the system settings. As i said, InvoicePlane is well documented and the user guide/wiki is excellent even for novice users so i wouldn't bother going through each settings.

I recommend setting 'Email Sending Method' to use SMTP because it is a more reliable method. If you are using cPanel, you may already have the ability to create email accounts. You can use your email account for SMTP. Just remember to set your port to 465.

If you need to setup Paypal under 'Merchant account', you will need a business account because this gives you access to obtain a Signature API key. 

If you are using recurring invoices, you must setup a cronjob so it will automatically recur at a specific frequency. Check the documentation to setup cronjob

Once you have setup the system to the way you want it, first thing is to add your clients before you can start invoicing. 

Talking about 'client', it has a 'client name' field but not client's company field which i also wanted. This was easy enough to add as you can add custom fields to client, quote or invoice section. Go to menu --> settings --> custom fields. 

Click on 'new' button to add a new custom field. This is what i created, i gave it a label of 'Company Name'

InvoicePlane custom fields

 Select 'client' for table field because we want this new field to be associated with 'client'. Once this is added, you will see the new field in 'client' form.

This isn't yet completed, your invoice template will not be aware of this new field so you will need to add this to your invoice template.

The invoice template files are located in directory: /application/views/invoice_templates/pdf/

Add this code snippet where you want to show client's company name text:

<?php echo $invoice->client_custom_company_name; ?>

There are about 3 template files, i would add it into each template.

Don't forget to add it to the quote template as well. The directory is located at: /application/views/quote_templates/pdf/

The code snippet is a little different, use:

<?php echo $quote->client_custom_company_name; ?>

One thing i notice was that the client's email, mobile and website fields were not included in the template so none of this is printed out in the invoice pdf. These were not custom fields but was already part of the system. Not sure if this is deliberately left out by the developers? It is up to you if you want to leave this out but I like to show this in my invoice. To do this add this snippet under where the your company address is outputted:

<? php if ($invoice->user_mobile) {
	            echo '<div>' . $invoice->user_mobile . '</div>';
		if ($invoice->user_email) {
	           echo '<div>' . $invoice->user_email . '</div>';
		if ($invoice->user_web) {
	           echo '<div>' . $invoice->user_web . '</div>';

That is for the invoice template.

For the quote template, use:

<? php if ($quote->user_mobile) {
	            echo '<div>' . $quote->user_mobile . '</div>';
		if ($quote->user_email) {
	           echo '<div>' . $quote->user_email . '</div>';
		if ($quote->user_web) {
	           echo '<div>' . $quote->user_web . '</div>';

Deleting invoices

Once an invoice has been created, it is locked down to read-only so you cannot delete any invoice. This is to prevent you making any mistake by accidentally deleting an invoice. 

I like this safeguard option but what if you really did make a mistake after saving it and want to start again. Or that you were just testing out the invoicing application by creating a few test invoices but now you want to delete them. By default, you cannot delete any invoice but you do have the options to override this default settings. It would be nice if this setting was offered in the system settings page but it's not, so you will need to open up your config file in directory: /application/config/config.php 

Find these variable and change false to true:

$config['enable_invoice_deletion'] = false;


$config['disable_read_only'] = false;

Save the file, go back to your admin page and you can now delete the invoice. Remember, to change it back to false after you have finished to prevent yourself from accidentally deleting a genuine invoice.


I really like this invoicing app because it is hosted online which means i can access it anywhere and on any computer. The simplicity is enough for what i need since my process are:

  1. Setup new client
  2. Create a quote
  3. Send the quote by email to client
  4. Client accepts quote
  5. Upon work completion, convert quote to invoice
  6. Send invoice to client
  7. Invoice paid, mark 'paid' and add payment received, done

The ability to convert quote to invoice was a real time saver. The reporting tools are a bit too simple but it does the job.

You can try out InvoicePlane demo to see if it fits your needs.

If you want to use this invoicing app but don't wish to install it, InvoicePlane do offer a hosted version but this is on other hosting providers.

If you want to run this on your own server but need help to install and configure it, drop me a message.

Update on 1st May 2017 - InvoicePlane v1.5 has now added Projects and Tasks, and 26 online payment providers


The content of this field is kept private and will not be shown publicly.
Your email address will be kept private and will not be shown publicly.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
PureVPN A2Hostng DigitalOcean Themeforest