10.4. Recording Purchases in a Foreign Currency (How-To)

You can do it in two different ways.

1) Use GnuCash build in currency exchange between accounts when you do your transactions. This is mainly used for one time transactions, and nothing which happens regularly.

2) Use separate accounts for this Purchase, where all involved accounts use the same currency. This is the recommended method, since it allows much better tracking and follow up. In this way, you do one currency exchange transaction, and after that you do normal transactions.

The rest of this section will explain more based upon option 2)

10.4.1. Purchase of an asset with foreign currency

Your normal place of residence is in Florida, therefore you are using USD as your default currency. But, you do like to travel to Bahamas and go fishing. You like it so much so you decided to purchase a boat there. To do this, you opened a bank account in Jamaica, moved some money from US, and then purchased your dream boat (smallest version)

To record this in GnuCash we use the following basic account structure

-Assets                          (USD)
   -Current Assets           (USD)
      -US Bank                 (USD)
      -Jamaican Bank       (JMD)
   -Fixed Assets           (USD)
      -Boat                (JMD)
-Equity                          (USD)
   -Opening Balances
      -USD            (USD)

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

First you need to transfer some money ($10,000) to Jamaica, and you use your normal US bank account (with balance of $100,000) for that. The bank give you an exchange rate of USD 1 = JMD 64, but charges you USD 150 to do transfer the money.

Currency transfer

Transfer money to Jamaica

Select the Jamaica transaction line ($9,850.00), right click and select Edit Exchange Rate

Edit Exchange rate

A dialog window where the exchange rate in a currency transaction is specified

As Exchange Rate you enter 1 USD = 64 JMD, since this is the rate your bank gave. Press ok in the Transfer Funds (Edit Exchange Rate) window, and then save this split transaction. Below is how it now looks in the main Chart of Accounts.

Chart of Accounts before purchasing the boat

Chart of Accounts before purchasing the boat

You find the boat, and since it’s a bargain at JMD 509,000 you decide to buy it. To record this transaction in GnuCash, you will need to enter a simple transaction in Assets:Current Assets:Jamaican Bank withdrawing 509,000 and transferring it to Assets:Fixed Assets:Boat

Chart of Accounts after purchasing the boat

Chart of Accounts after purchasing the boat

The Chart of Accounts now reflects that your bank account has been reduced with the value of the boat (JMD 509,000), and that your Fixed Assets boat account has been increased with the same amount. If you also have turned on the CoA (Column Choice) "Total (USD)" you will see the corresponding value in USD. The USD value will always reflect the latest currency exchange rate you have either automatically or manually updated GnuCash with.

10.4.2. Purchasing foreign stocks

This example will show how to purchase stocks that are priced in a different currency than your normal currency.

Assume that you live in New York and therefore you have set the default currency to USD. You decide to purchase a stock traded in Hong Kong that is priced in HKD. You would also like to be able to track the various income and expenses per stock and broker.

You decide to purchase stock in the Beijing Airport (Hong Kong). (After all, the 2008 Olympics in Beijing have finished and the price has returned to Earth.)


The above stock (Beijing Airport) has been chosen only as an example, and should not be taken as any kind of stock purchase advice.

You need to find out what the stock ticker is for this stock. To do this, you do a bit of investigation on the Internet, and in particular on Yahoo! Finance - Ticker Symbol Lookup (http://finance.yahoo.com/lookup). This gives you the following:

  • Beijing Airport has the Stock Symbol 0694.HK at Yahoo

Since we wanted to be able to track all various incomes and expenses, we come up with the following Account structure:

Assets:Investments:Brokerage Accounts:Boom:0694.HK     (Beijing Airport)
Assets:Investments:Brokerage Accounts:Boom:Bank        (HKD)
Equity:Opening Balances:HKD                            (HKD)
Expenses:Commissions:Boom.0694.HK                      (HKD)
Income:Investments:Dividend:Boom:0694.HK               (HKD)

The Chart of Accounts looks like this after creating all the needed accounts:

Chart of Accounts for international stocks

Chart of Accounts for international stocks

The stock definition can be seen in the Security Editor. (Tools+Security Editor)

International securities

International securities

If you have not moved some money (HKD 50,000) into the brokerage’s cash account (Assets:Investments:Brokerage Account:Boom:Bank), do so now, either using the Equity (HKD) account, or an existing bank account (Currency Transfer).

Let’s assume that stock price is HKD 3 per share. To record the purchase, open the brokerage’s HKD cash account (Assets:Investments:Brokerage Account:Boom:Bank), and enter the following:

Buy Stocks
Assets:Investments:Brokerage Account:Boom:Bank  Withdrawal 50,000
Expenses:Investments:Commission:Boom_HKD Deposit 500
Assets:Investments:Brokerage Account:Boom:0694  Deposit 49,500 (16,500 shares)

If the exchange rate dialog box does not appear automatically, right-click on the stock row, and select Edit Exchange Rate. Enter the number of shares (16,500) as the To Amount.

Transfer Funds

Setting the number of shares in the Transfer Funds dialog

If you return to the Chart of Accounts, you will see the purchased shares reflected in the stock account’s total.

Purchased international stocks

Chart of Accounts with some international stocks

However, as you can see, the USD totals may be zero if GnuCash doesn’t have an exchange rate between USD and HKD. To fix this, go to ToolsPrice Editor and click the Get Quotes button to automatically retrieve the exchange rates you need.


This example shows how stock can be purchased in any currency by entering the transaction in the register of the cash account used to make payment. It is also possible to enter the purchase in the stock account’s register, but proceed with caution! When doing it that way, the stock is assumed to be priced in the currency of the stock account’s parent.

In this example, the stock account’s parent (Assets:Investments:Brokerage Account:Boom) is denominated in HKD. Since this is same currency as the stock price, the purchase can be safely entered in the stock account’s register.

10.4.3. Purchasing foreign stock with a domestic account

In some cases one is able to use a domestic brokerage account to purchase foreign stocks on the foreign exchange. Whether you're able to do this may depend upon the securities laws in your country and whether you can find a broker who offers this service.

Because GnuCash can handle only one commodity/currency pair per split, it's necessary to create a special account in the foreign currency to use to create this type of transaction. For this example, we're using a Book in UK Pounds Sterling (GBP), and trading a well-known American consumer goods stock which trades on the NASDAQ exchange. We set up the following chart of accounts:

Notice in particular the account Pricing-USD, denominated in US Dollars. (USD). We begin our stock purchase in that account in order to force the transaction currency to USD. From there, enter a stock transaction as usual, with USD values. You'll get a Transfer Funds dialog box in which to enter the share price or number of shares, as you prefer, when you enter the stock account split. Next add an offsetting withdrawal split from the Pricing-USD for the purchase amount and a balancing deposit amount to the Brokerage Account for the equivalent in GBP. You'll get an Transfer Funds dialog box to enter the exchange rate. Do so and click OK. When you're done, your transaction should look something like this:

Now that we have the Brokerage Account split, we don't actually need the Pricing-USD splits any longer, but we can't delete them from here. If we switch to the Brokerage Account register, our transaction looks like:

And after deleting the Pricing-USD and Trading:CURRENCY:USD Splits it looks like this:

We guessed when we entered the transaction that the stock price would be $450/share and that the exchange rate $1.60/£. Suppose when we get our trading confirmation that the actual numbers turn out to be $452/share and $1.58/£. We make the adjustments in two steps. First, from Assets:Investment:Brokerage Account:Stock:AAPL, adjust the price. The result will be imbalanced, but don't worry about that yet. The transaction will look like:

Now switch to the Brokerage Account register and enter the new amount in GBP. You can calculate it outside of GnuCash or you can just type in the calculation as 45200/1.58. The register will look like

Now right (or control on a Mac) click in the Brokerage Account Withdrawal cell and select Edit Exchange Rate from the context menu. Select the Amount radio button and enter 45200 so it looks like this:

Click OK to dismiss the dialog box and press Enter to confirm the changes in the transaction, which will look like this: