I have an account for cryptocurrency (USDT) which is set up as a stock account, and sometimes I pay with USDT for different goods. The expense accounts have USD currency. How do I record in GnuCash that I have paid for something in USDT? I assume it must convert USDT to USD using the current sell price, but it doesn't happen. The stocks just disappear and expenses are not increased by the corresponding USD amount when I record sell transactions from the crypto account.

1 Answer 1


Stock accounts are often set up in conjunction with Asset accounts. The Asset account records the value of the stock in some currency (e.g. USD) and the Stock account records the number of units held.

You normally pick a base currency for your accounts so you can report things like how much you earned in a period. Paying with something (e.g. USDT) other than your base currency messes this up unless it (USDT) can be assigned a value in your base currency for the purpose of that transaction.

Gnucash has provision for various forms of automatic conversions, but let's keep this simple. When you buy something with stock, you can think of the transaction as taking place notionally in two steps:

  1. SELL the stock (e.g. USDT) and BUY your base currency (e.g. USD).
  2. Buy something with your base currency.

If this really was a 2-step process, step 1 would have deposited USD into a bank account or into petty cash, and step 2 would have used USD from that account. Here, you can use an Asset account to represent a notional bank account. For example, you might create a "USDT Transactions" account. Each time you buy something using USDT, you record both steps with reference to the "USDT Transactions" account.

In step 1, you go through the stock SELL process and use the prevailing USD/USDT conversion rate to record the value of the USDT amount as a deposit in "USDT Transactions". This decreases the number of USDT units you hold, decreases the value of the USDT you hold by the original BUY price of the USDT you just used up (recorded as USD in the USDT asset account), increases the value of USD in your "USDT Transactions" account by the current value of the USDT you used, and records the capital gain or loss in an appropriate account.

Capital gains and losses as a result of this transaction might not be of immediate interest, but you need to have it somewhere in the system for the accounts to balance. The important thing is that Gnucash now has USD in an asset account that you can use to record your purchase.

Now you can do step 2: treat the "USDT Transactions" like a bank account to record how much you spent. Because this is just a notional conversion, use the same value of USD that you came up with in step 1.

Disclaimer: I am not a qualified financial advisor and the above is not financial advice. Please consult relevant professionals before acting on any of the information provided.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .