The Books register export, the Generic CSV importer, and the downloadable template all use the same CSV layout. This article is the column reference for that format.
What a row represents
Each row is one side of a transaction. Rows that make up the same transaction share an EntryId and must balance, meaning their amounts add up to zero.
A simple deposit is two rows that share an EntryId: the bank account receives money (positive amount) and the matching category records it (negative amount). A deposit split across several categories is one bank row plus one row per category, all sharing the same EntryId.
Within one EntryId, every row must share the same Date and Type.
Columns
| Column | Required | Description |
|---|---|---|
| EntryId | Yes | Groups rows into one transaction. Use any value; it just ties the rows together. |
| Date | Yes | The day the transaction happened, in YYYY-MM-DD format. |
| Type | Yes | One of deposit, journal_entry, or opening_balance. (expense_payment and void rows appear in exports but can’t be imported, see below.) |
| Account | Yes | The exact name of the account this row belongs to. |
| Account Type | Yes | bank for a financial account, or budget_item for an income or expense category. |
| Amount | Yes | Signed decimal. Positive adds to a bank account or records spending against a category; negative is the other side. |
| Memo | No | Free-text description. The first non-blank Memo is used for the transaction. |
| Reference | No | Check number, transaction id, or other identifier. Same first-non-blank rule. |
Examples
A simple deposit (bank receives, category records it):
EntryId,Date,Type,Account,Account Type,Amount,Memo,Reference
1,2026-03-10,deposit,Checking,bank,250.00,Membership drive,
1,2026-03-10,deposit,Memberships,budget_item,-250.00,Membership drive,
A bank-to-bank transfer (two bank rows, no category):
2,2026-03-15,journal_entry,Checking,bank,-1000.00,Sweep to savings,
2,2026-03-15,journal_entry,Savings,bank,1000.00,Sweep to savings,
A multi-category deposit (one bank row, several category rows):
3,2026-03-20,deposit,Checking,bank,180.00,Bake sale,
3,2026-03-20,deposit,Fundraising,budget_item,-120.00,Bake sale,
3,2026-03-20,deposit,Misc Income,budget_item,-60.00,Bake sale,
An opening balance (the account’s starting balance, offset against the built-in Opening Balance Equity category):
4,2026-04-01,opening_balance,Checking,bank,5000.00,Opening balance for Checking,
4,2026-04-01,opening_balance,Opening Balance Equity,budget_item,-5000.00,Opening balance for Checking,
Opening Balance Equity is a holding category Volo Cash provides; you don’t create it.
Some rows are export-only
expense_payment rows come from marking an expense paid in the normal workflow, and void rows come from voiding a transaction. Both stay tied to their original record. Exports include them so your history is complete, but the importer skips them and lists them as skipped rows.
You don’t lose anything by their being skipped. When an imported transaction lines up with an expense already in your books (by check number, amount, date, and payee), the importer matches it to that expense on the Matches step instead of creating a duplicate. To record a brand-new expense payment, mark the expense paid in the regular workflow instead.
Re-importing creates duplicates
Importing a file you previously exported creates a second copy of those transactions. The EntryId only groups rows within a file; it isn’t matched against what’s already in your books. To bring back data you already imported:
- If it came in through an earlier import, roll that batch back first.
- If you entered it by hand, edit it on the register directly. The importer adds new data; it doesn’t update existing entries.
Common errors
- “CSV is missing required columns.” A required header is missing. Use the exact names from the table above (both
Account TypeandAccountTypework; the rest are case-sensitive). - “Bank account isn’t in your books.” The Account column named a financial account that doesn’t exist yet. The wizard’s Accounts step lets you merge it with an existing account or create it.
- “Postings didn’t balance.” Rows sharing an EntryId don’t add up to zero. Fix that group and re-upload.