Business accounting with GnuCash

Please consider subscribing to LWN Subscriptions are the lifeblood of LWN.net. If you appreciate this content and would like to see more of it, your subscription will help to ensure that LWN continues to thrive. Please visit this page to join up and keep LWN on the net.

The first stop in the search for a free accounting system that can replace QuickBooks is a familiar waypoint: the GnuCash application. GnuCash has been around for many years and is known primarily as a personal-finance tool, but it has acquired some business features as well. The question is: are those business features solid enough to allow the program to serve as a replacement for QuickBooks?

The first order of business is importing existing data into the system. That is not a straightforward task, but it can be done; see this article for the gory details. The result was a 1.8MB XML file containing the company's accounting data since the beginning of 2016. Starting GnuCash with that file takes about 20 seconds on a reasonably modern laptop. It's amazing how long 20 seconds can seem sometimes.

GnuCash has had, for some years, the ability to store its data in a relational database manager rather than an XML file. Attempts to use this feature with PostgreSQL proved fruitless; saving a file to a database yielded the helpful information that the server "experienced an error or encountered bad or corrupt data". Saving to an SQLite file worked, at the cost of expanding the storage used to 17MB and with no noticeable improvement in startup or save speed. The pre-2.8 development version of GnuCash crashed when asked to read an SQLite file. But, then, that version proved crash-prone in general.

Overall, the database back-end mechanism feels too unstable to trust in a role like this. Even if PostgreSQL worked, GnuCash still doesn't support concurrent access to the accounting data, wiping out what would otherwise be one of the big advantages of storing it on a central server.

Accounting functionality

GnuCash is a solid tool for basic accounting; it implements a standard double-entry bookkeeping scheme and most basic tasks are relatively straightforward and quick. The application wants to work in an "everything in one window" mode, meaning that one ends up juggling a number of tabs in normal usage. It is possible to break out a tab into a separate window, but that's not the default behavior. The register window mostly works as one would expect, though the column-resizing behavior is so strange that there is an FAQ entry dedicated to it. For the most part, though, this is the core part of GnuCash, and it has worked reasonably well for a long time.

Running GnuCash in a business mode brings a few new features to bear. It adds "accounts payable" and "accounts receivable" accounts for the management of bills and invoices, for example. With regard to these accounts, it's worth noting that GnuCash assumes that accrual accounting is in use; it has no option to do accounting on a cash basis. That can result in some confusing differences in reports if data for a cash-basis company is brought over.

GnuCash has basic support for tracking customers and vendors. On the customer side, along with shipping information and such, it can track sales-tax (or VAT) information and payment terms. Similar information is tracked on the vendor side. One significant shortcoming is the inability to perform tax reporting for vendors — to generate 1099 forms for consultants in the US, for example. There is support for managing bills from vendors and invoices to customers, including the usual set of reports to see which vendors need to be paid and which customers are running late.

There is also basic support for the tracking of employees, but no support for activities like payroll processing, which is fine; that work is best outsourced anyway. It is possible to manage and pay expense reports, which are essentially treated the same as invoices. The interface for this activity is not fully intuitive; some information is filled in via a pop-up dialog, followed by a full-window screen for the rest. In general, the business support is functional, but much of it feels clunky and bolted on. The business screens clearly have not received the same level of user-interface work that has gone into the core accounting functions; their operation is not always clear, and they are visually less attractive.

In the "visually attractive" area, report generation in GnuCash works reasonably well. One can get the usual array of tabular reports, bar charts, pie charts, and more. The "custom report" mechanism allows a number of different elements to be combined in a single page if desired.

Getting data into the system is clearly an important part of the accounting task. This data comes from banks, payroll processors, credit-card processors, and more; in LWN's case, it also comes from the web site itself. GnuCash comes off reasonably well in this regard. Data files in the QFX or CSV formats can be imported by the application. The import process is rather tedious and click-heavy at the outset, but the transaction-classifying machinery learns quickly and does a pretty good job — most of the time. There is no support for the IIF format provided by some companies, unfortunately. There is claimed support for direct online access to banks that play along, but I was unable to get it to work, despite using a bank that is said to work.

If all else fails, of course, the Python bindings can be used to feed data directly into a GnuCash file. The biggest problem here is the single-user nature of those files; a user wanting to import some data with an external script while GnuCash is running will be disappointed.

Most other functionality that one would expect is there. Check printing works and has a reasonably flexible mechanism for describing specific check formats. Relative to QuickBooks, which can queue up a series of checks to print and automatically assign check numbers to transactions, the interface is more work to use. Happily, the need to print checks is falling even in the US, but one does still need to do it on occasion. Beyond that, GnuCash can do reconciliation, scheduled transactions, budgeting, and so on. It also has a mechanism for assigning tax categories to income and expense accounts — a useful tool for dealing with accountants, in the US at least.

Development community

An important thing to keep in mind when one is considering relying on a free-software project is the health of that project's development community. It would not do to end up stuck with an accounting system that is no longer developed or maintained. A number of free accounting systems seem to be maintained as platforms for add-on consulting or services businesses, a situation that, while not without its own hazards, at least provides a way for developers to be paid for their work. GnuCash, which has its roots more in the personal-finance realm, does not appear to have that sort of commercial ecosystem around it. Thus it relies entirely on volunteer developers.

The result is a relatively small community and relatively slow development — but GnuCash is nonetheless a project that appears to have some staying power. The last major GnuCash release was 2.6.0 at the very end of 2013. There has been a steady stream of maintenance releases since, up to 2.6.17 on July 2. There is a 2.8 release that is said to be nearing completion, though it felt pretty unstable when tested for this article. GnuCash 2.8 does not appear to bring a lot in the way of new features, but it does bring the rather overdue GTK+ 3 transition.

Since 2.6.0, the project has merged just short of 2,600 changesets from 96 developers. Three of those developers (John Ralls, Geert Janssens, and Robert Fewell) have accounted for 75% of those changes. The 2.6.13 release came out in September 2016; since then, there have been 1,590 changes from 52 developers. The same three developers accounted for 84% of the changes during that time. So GnuCash is dependent on a small set of dedicated developers with a few dozen folks putting in an occasional fix. It is not a single-person project, but it is not a huge community either; the loss of one of those top-three developers would hurt.

In conclusion

The bottom line of all this is clear enough: GnuCash is indeed a viable tool for a small company's accounting needs. The basic accounting features are there, and it is relatively easy to integrate into a company's operation if one isn't afraid of doing a little scripting around the edges. The core functionality is reasonably easy to use. It is fully free software, with no company trying to sell the proprietary modules needed to obtain its full functionality.

This survey of accounting systems will not stop here, though, and that is a good thing. While GnuCash can do the job, it is not a perfect fit. The business functionality often feels like an afterthought, and the relatively small size of the development community is a bit worrisome. The facts that GnuCash is only now pulling together a release to move to GTK+ 3 and that the 2.8.0 release, after more than three years, brings almost no new features suggest a lack of development momentum. If GnuCash is the best there is, that will be good enough, but it's hard not to hope that there is something better out there.

