The Exchange Bot keeps the balance values of accounts in multiple currencies in sync with every transaction. This avoids the need for manual replication or batch processes.
The Exchange Bot can calculate your unrealized FX gains and losses at any moment from the perspective of any currency in which you are operating, lowering risk and strengthening your FX decisions.
Multiple Currency Accounting
Create a Bkper book for each currency you operate in with a name and currency suffix (MyBusiness USD, MyBusiness EUR, MyBusiness JPY) and place all books together in a collection with the name of the books without the suffix (MyBusiness).
Install the Exchange Bot on all books in the collection and set the properties on these books that are required for the Exchange Bot to function properly.
Transactions mirroring
Once the Exchange Bot is installed and properties are set on the books in a collection, transactions are mirrored in other currencies according to the exchange rate at the moment of the transactions.
Apply transaction properties to change the standard behavior of the Exchange Bot. This is relevant for international wires and when actual rates differ from the Exchange Bot rates. (see bellow)
FX Gains and Losses
The context menu (More) on books where the bot is installed has an Exchange Bot menu option that runs the exchange update process. This process calculates and records foreign exchange gains or losses on your assets according to real-time rates.
The standard behavior for the Exchange Bot is to record exchange differences in liability accounts with the same name as the permanent account plus the EXC suffix. These accounts are automatically created by the bot and don't need to be added manually.
Behavior in conjunction with the Stock Bot is different for accounts that have the stock_exc_code
set on their parent group. For assets traded by the Stock Bot, unrealized and realized FX gains and losses are recorded in incoming-type accounts due to their trading nature.
Overview
Exchange Bot Status
Gray: working properly
Red: error
No icon: not installed
Exchange Bot Flow
Post a transaction in a book of one currency (USD).
Example: 100 USD Bank account >> Accounts Payable
This post event triggers the Exchange Bot.
The Exchange Bot determines in which other currencies this transaction must be mirrored.
The Exchange Bot fetches the current exchange rates for the other currencies.
The Exchange Bot posts the same transaction in the other book(s) but in the currency of that book (EUR).
Example: 98.50 EUR Bank account >> Accounts Payable
Installation
Books and Collection
Create the currency books (at least two currencies).
Add all currency books to one Bkper collection.
Install the Exchange Bot on all currency books in the collection.
Note: If your books are already in a collection for the Portfolio Bot (or any other bot), you do NOT need to create another collection. You can use the same collection.
Accounts
Create a chart of accounts in your books that represents all your assets and liabilities. When you work with US dollars and euros, create accounts for all your assets and liabilities in both currencies in both books.
For example, if you have a City Bank account in the USA and a Deutsche Bank account in Europe, create both accounts in both the USD and EUR books. The balance of the European bank account in the USD book is represented in USD value, and vice versa—the City Bank balance value is represented in euros in the EUR book.
Note: Exchange gain and loss accounts (realized and unrealized) are created by the Exchange Bot when you run Exchange Gain/Loss from the context menu (see below).
Groups
Although optional, you can create groups for each currency you work with and place all accounts that must be mirrored to other currencies in that group. This makes it easier to manage which accounts are mirrored into other currencies. See the group configuration below.
Configuration
Book Properties
Set these properties in all currency books in the collection.
The exchange code is required in each currency book in the collection:
In a US dollar book:
exc_code : USD
In a euro book:
exc_code : EUR
In a Japanese yen book:
exc_code : JPY
Group Properties
Group properties are optional for the Exchange Bot since it generally matches accounts by their names between different currency books. Add all accounts that operate in one currency to a group with the exc_code to ensure they are replicated in the correct currencies.
In a USD group:
exc_code : USD
Transaction Properties
Transaction properties are optional but can be used to override fetched exchange rates. It's common to encounter different exchange rates than those fetched automatically. In these cases, you need to override the fetched exchange rate.
exc_code : USD
exc_amount : 1200
The exchange code specifies which currency to override, and the exchange amount indicates the correct amount. For example, if you send money from a European bank to a USD account, you indicate that the exchange rate to override is for USD and that the exact amount in euros was 1200.
Find all configuration settings for the Exchange Bot here
Exchange Operations
Regular Transactions
Regular transactions in any currency are mirrored in other currencies with the exchange rate applied.
You: Post a transaction in the USD book.
05/06/2025 100 Citi Bank >> Expense
The Exchange Bot listens to the post event.
Exchange Bot: On each post event, it checks for the exc_code:USD
on either the accounts or the group that the accounts belong to.
When it finds the exc_code
, it posts the transaction in the other currency books:
In the EUR book:
05/06/2025 101.12 Citi Bank >> Expense
In the JPY book:
05/06/2025 14,615.60 Citi Bank >> Expense
International Wire Transfers
You: Post an international wire transfer from EUR to USD in the EUR book.
05/06/2025 5,000.00 Bank of Europe >> Citi Bank exc_amount: 5408.75 exc_code: USD
Exchange Bot: On each post event, it checks for the exc_code:USD
and the exc_amount
on the transaction properties.
When it finds these transaction properties, it posts the transaction in the specified currency book with the exc_amount
and adds properties to the mirrored transaction:
In the USD book:
05/06/2025 5,408.75 Bank of Europe >> Citi Bank
exc_amount: 5,000.00 e
xc_code: EUR
exc_rate: 1.08175
In the JPY book:
05/06/2025 808,696.57 Bank of Europe >> Citi Bank
exc_amount: 5,000.00
exc_code: EUR
exc_rate: 161.739313539692
Exchange Bot Operations
Calculate Unrealized Results
The Exchange Bot calculates currency gains and losses in all currencies across all books in your collection and posts the results.
How to run the calculation:
Open any book in your collection and select Exchange Bot from the More menu. Set your calculation date and click Gain/Loss to start the process.
Note: First-time users will need to authenticate the Exchange Bot.
What happens next:
The Exchange Bot will:
Create unrealized results accounts (with "EXC" suffix) if they don't exist
Post gain/loss transactions to each currency book based on exchange rate differences on the calculation date
Example: In your USD book, you'll see the exchange results for any accounts you have in euros, Japanese yen, or other currencies.
Note: When used together with a Portfolio Bot, the Exchange Bot will also calculate and post realized gains and losses from portfolio operations.
Multi Currency Accounting Template
Note: You have to put the books into a collection for the Exchange Bot to work