14.3. Protocol

GnuCash does not have an integrated payroll system. GnuCash can track your payroll expenses, but you need to develop a payroll protocol and perform the calculations outside of GnuCash, in a spreadsheet for example. In this section, one such protocol is presented. You can use the sample protocol as a model.

14.3.1. Step 1: Deductions list

The first step to the payroll protocol is to create a list of all the possible taxes and deductions for each employee. Each entry should include definitions and formulas for calculating each value. Once the protocol is established it needs to be changed only when payroll laws or tax rates change.

In the proposed scenario, such a list would look like this:

  • E_GROSS_SALARY - Employee gross salary

  • E_TAX1 - Employee contribution to tax1 (X% of E_GROSS_SALARY)

  • E_TAX2 - Employee contribution to tax2 (X% of E_GROSS_SALARY)

  • C_TAX1 - Company contribution to tax1 (X% of E_GROSS_SALARY)

  • C_TAX2 - Company contribution to tax2 (X% of E_GROSS_SALARY)


The employee’s net salary (E_NET_SALARY) is defined as E_GROSS_SALARY - E_TAX1 - E_TAX2 and need not be placed in this list since it is composed of items that already exist.

Place the actual formulas for calculating each deduction in this list. Sometimes these formulas are quite complex, and sometimes they simply say "look it up in table XYZ of the tax codes".

Notice that you can calculate some interesting values using the above definitions. One such value is the total cost to the company: E_GROSS_SALARY + C_TAX1 + C_TAX2.

14.3.2. Step 2: Create the Transaction Map

When you record payroll in GnuCash, do so with a single split transaction. This split transaction populates the appropriate expense and liability accounts. If you need to look the payroll details at a later time, open the split transaction.

With the deductions list from above, an employee split transaction map can be generated. Each of the items in the list is mapped to a GnuCash account.

Table 14.1. Transaction Map

Assets:Checking E_NET_SALARY
Liabilities:Tax1 E_TAX1
Liabilities:Tax2 E_TAX2
Liabilities:Tax1 C_TAX1
Liabilities:Tax2 C_TAX2

Note that the C_TAX1 and C_TAX2 components have entries in the both the liability and expense accounts. The company component of each tax is expensed at the time of payroll, but remains a liability until taxes are due.

14.3.3. Step 3: Pay the Employee

Go to the account from which the employee will be paid, for example your Assets:Checking account. Open a split transaction and enter the real values using the Transaction Map above as a guide. Repeat this for all employees.


This manual process is tedious, especially if you have a large number of employees.

One GnuCash tool you certainly want use when entering employee payroll is duplicate transaction (use the Duplicate Toolbar button). This saves you from having to enter all the transaction splits for each employee. You still need to change the amounts of money to match each employee’s real payroll values, but you will not have to build the split for each employee.

If payroll transactions do not change significantly every pay period, you can also use the duplicate transaction feature to duplicate each employee’s most recent payroll transaction for the current pay period. If you find you are doing so all the time, read about the Schedule Transactions feature and save even more time!

14.3.4. Step 4: Pay the Government

The final thing to do is to pay the taxes to the government. The liability accounts have been collecting the taxes for various government agencies, and periodically you need to send a check to the government to pay this charge. To do so, you simply enter a 2 account transaction in (for example) your checking account to pay off the tax liability. The transaction is between the checking account and the liability account, no expense account is involved. The expense accounts are charged at the time the tax liability is recorded.