10.2. Account Setup

Your default account currency is set in the Account tab under EditPreferences (GnuCashPreferences on Mac OS X). You should set this parameter correctly, as it will save you much time when building your account structure.

Similarly, GnuCash offers an option to set your preferred currency for displaying reports (like the balance sheet and income statement). The option is called Default Report Currency, and is in the Reports tab of the GnuCash Preferences screen. You’ll want to set both options when you start using GnuCash because if (for example) your accounts are all in Canadian Dollars but the generated reports are all in US Dollars, the reports will just say that there is no data/transactions (or only zeroes) for the selected time period.

When you create a new account, you have the option to define the commodity. For currency accounts, you can specify any one of the hundreds of currencies supported by GnuCash by simply selecting it from the currency commodity list. You will notice that the default currency is always whatever you have defined in the preferences. So, if you mostly work with Euros, but have the occasional Ethiopian Birr account, be sure to set your preferences to Euro.

As an example, let’s set up a typical bank account scenario where you mostly work in US Dollars, but do also have a European bank account using the Euro currency, as well as one bank account in Hong Kong using Hong Kong Dollars. So, setup 3 bank accounts, one using the Euro currency, one in US Dollars, and another in Hong Kong Dollars. One possible account structure for this would be:

-Assets                          (USD)
   -Current Assets           (USD)
      -US Bank                 (USD)
      -European Bank       (EUR)
      -HK Bank             (HKD)
-Equity                          (USD)
   -Opening Balances
      -USD            (USD)
      -EUR            (EUR)   
      -EUR            (HKD)

Note: the currency of each account is shown in parenthesis.

Since in this example you mostly work in USD, all of the parent accounts are set to USD. Of course, if you mostly work in Euros, you could change the currency of these parent accounts to EUR. To totals shown in the account tree window will always be converted to the currency of each particular account. Notice, we also setup 3 Starting Balances equity accounts, used to initially populate the 3 banks.


You could also setup just a single Starting Balance account and use a currency transfer to populate the different currency accounts. However, this is more advanced option, which is explained in a later section (Section 10.4.1, “Purchase of an asset with foreign currency”.

Below you see the result of this example, in which you start with USD 10,000, EUR 10,000 as well as HKD 10,000 in the three bank accounts. Notice that the total of the parent accounts only show the value of the currency of sub-accounts with matching currencies. In the future you can setup the exchange rates between the currencies, and the parent accounts will calculate the converted value of all sub-accounts. See the later section (Section 10.3, “Recording/Updating Currency Exchange (How-To)”) on how to do this.

Initial multi currency Account Bank Setup

Initial setup of 3 bank accounts with different currencies.

Notice that the "Total (Report)" column is being displayed. This is configured in the column header row, select Arrow down and select Total(USD).

10.2.1. User-Defined Currencies

Usually when we talk about currencies, we mean government-backed currencies (or more precisely, currencies defined in the international standard called ISO 4217). GnuCash does not allow you to create your own currencies. If you want to track non-ISO currencies, you can use either of two workarounds, depending on which fits your needs better.

Let’s say for example that you want to track RewardMiles, which count how many loyalty points you’ve earned by buying from a certain group of businesses. The account which tracks your RewardMiles will be Assets:Other:LoyaltyGroupRewardMiles.

The first method is to define a new security, of type FUND, called RewardMiles. This is pretty straightforward–when you create the new LoyaltyGroupRewardMiles account, just set the account type to Stock or Mutual Fund, click the Select... button next to the Security/currency: box, and click New to define a new security of type FUND.

This is not really what the stock and mutual fund account types are meant for, but GnuCash usually lets you decide how you want to use it, instead of dictating. The downside is that you’ll have to enter a price for every transaction involving RewardMiles, because GnuCash needs the prices to figure out the monetary value of RewardMiles and treat them as one of your assets.

The second method is to use one of the dummy currencies to track the RewardMiles. The dummy currencies are XTS (Code for testing purposes) and XXX (No currency). If you use one of these for your LoyaltyGroupRewardMiles account, you can enter transactions into the account without having to enter share prices for every transaction. And, you can keep using the same two dummy currencies to track all sorts of amounts–vacation dollars earned and used so far this year, vacation hours earned and used, health insurance benefits allowance used and remaining, and so on. You can well imagine that GnuCash can be used as a hub for all sorts of personal metrics, in addition to finances.

The drawback here is that you cannot define exchange rates for the dummy currencies to convert them to ISO currencies. If you want to do that, you really should use the first method.