FinBodhi Transaction CSV format
This specification defines a CSV format supported by the FinBodhi importer, alongside its built-in support for many statement formats. Use it when you control the conversion process, including when an AI assistant converts a statement for import. Each row represents a FinBodhi transaction.
Use a custom importer when importing a file created by someone else.
CSV requirements
- The file must be UTF-8 CSV with a header row.
- Header names are case-sensitive and use
snake_case. - Every required header must occur exactly once. Column order does not matter.
- Optional headers may occur at most once.
- Additional columns are removed during import.
- Rows must contain values for every required field.
- Values containing a comma, quote, or line break must use standard CSV quoting.
- Do not include blank rows, totals, opening or closing balances, or other non-transaction rows.
Required columns
| Header | Description |
|---|---|
finbodhi_date | Transaction date in ISO calendar-date form: yyyy-MM-dd. |
finbodhi_description | Transaction description or payee. |
finbodhi_from_account | Name of the account from which value moves. |
finbodhi_from_account_category | Category of the from account. See account categories. |
finbodhi_from_account_instrument_type | Instrument type of the from account. See instrument types. |
finbodhi_from_quantity | Positive decimal quantity leaving the from account. |
finbodhi_to_account | Name of the account to which value moves. |
finbodhi_to_account_category | Category of the to account. See account categories. |
finbodhi_to_account_instrument_type | Instrument type of the to account. See instrument types. |
finbodhi_to_quantity | Positive decimal quantity entering the to account. |
If you do not know an account name, use unknown. FinBodhi's account predictor will try to automatically predict the account during import.
Optional columns
| Header | Description |
|---|---|
finbodhi_from_price | Positive decimal unit price of the from quantity. Defaults to 1 when omitted or empty. |
finbodhi_to_price | Positive decimal unit price of the to quantity. Defaults to 1 when omitted or empty. |
finbodhi_tags | Comma-separated key:value tags. Quote the CSV field when it contains multiple tags. |
finbodhi_tags uses the same key:value comma-separated representation as the FinBodhi transaction CSV export. For example: merchant:coffee,source:statement. Each key and value must be non-empty; invalid entries are ignored.
Balance rule
All quantities and supplied prices are unsigned, positive decimal numbers. Use . as the decimal separator; do not use currency symbols, thousands separators, parentheses, or negative signs.
When a price column is omitted or its value is empty, its effective price is 1.
Every row must balance:
finbodhi_from_quantity × effective finbodhi_from_price = finbodhi_to_quantity × effective finbodhi_to_price
For ordinary cash transactions, omit both price columns and use the transaction amount as both quantities.
Account categories
finbodhi_from_account_category and finbodhi_to_account_category must be one of:
assetsequityexpensesincomeliabilities
Instrument types
finbodhi_from_account_instrument_type and finbodhi_to_account_instrument_type must be one of:
cashmetalmfnpsothersstock
Example: cash transactions
finbodhi_date,finbodhi_description,finbodhi_from_account,finbodhi_from_account_category,finbodhi_from_account_instrument_type,finbodhi_from_quantity,finbodhi_to_account,finbodhi_to_account_category,finbodhi_to_account_instrument_type,finbodhi_to_quantity
2026-08-01,salary,unknown,income,cash,85000.00,hdfc savings,assets,cash,85000.00
2026-08-02,"coffee shop, downtown",hdfc savings,assets,cash,245.50,unknown,expenses,cash,245.50
2026-08-03,electricity bill,hdfc savings,assets,cash,1820.00,unknown,expenses,cash,1820.00
Example: asset purchase
finbodhi_date,finbodhi_description,finbodhi_from_account,finbodhi_from_account_category,finbodhi_from_account_instrument_type,finbodhi_from_price,finbodhi_from_quantity,finbodhi_to_account,finbodhi_to_account_category,finbodhi_to_account_instrument_type,finbodhi_to_price,finbodhi_to_quantity
2026-08-10,buy acme shares,hdfc savings,assets,cash,1,1255.00,acme stock,assets,stock,125.50,10
Additional columns
Additional columns are allowed and are removed during import.
For example, an exporter may include identifiers:
finbodhi_transaction_id,finbodhi_from_account_id,finbodhi_to_account_id
transaction-123,account-123,account-456
These fields are not required by this version of the format and must not be required for import.
Conversion prompt
Copy this prompt when using an assistant to convert a source statement:
Convert the attached statement into a FinBodhi Transaction CSV file.
Read and follow this specification before converting the file:
https://finbodhi.com/docs/misc/transaction-csv-format.md
Return only valid UTF-8 CSV with a header row. Do not include Markdown, an explanation, totals, balances, blank rows, or transactions that are not present in the source statement. Ensure every row satisfies the required columns and balance rule.