Skip to main content

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

HeaderDescription
finbodhi_dateTransaction date in ISO calendar-date form: yyyy-MM-dd.
finbodhi_descriptionTransaction description or payee.
finbodhi_from_accountName of the account from which value moves.
finbodhi_from_account_categoryCategory of the from account. See account categories.
finbodhi_from_account_instrument_typeInstrument type of the from account. See instrument types.
finbodhi_from_quantityPositive decimal quantity leaving the from account.
finbodhi_to_accountName of the account to which value moves.
finbodhi_to_account_categoryCategory of the to account. See account categories.
finbodhi_to_account_instrument_typeInstrument type of the to account. See instrument types.
finbodhi_to_quantityPositive 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

HeaderDescription
finbodhi_from_pricePositive decimal unit price of the from quantity. Defaults to 1 when omitted or empty.
finbodhi_to_pricePositive decimal unit price of the to quantity. Defaults to 1 when omitted or empty.
finbodhi_tagsComma-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:

  • assets
  • equity
  • expenses
  • income
  • liabilities

Instrument types

finbodhi_from_account_instrument_type and finbodhi_to_account_instrument_type must be one of:

  • cash
  • metal
  • mf
  • nps
  • others
  • stock

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.