Free Odoo bank statement import template (CSV and Excel, filled and blank)
Need a template to import a bank statement into Odoo? Odoo's documentation says its import tool has templates for common data, bank statements included, but you have to be inside an Odoo database to get one. Here's a free one with no sign-up, as CSV and as Excel, already filled with a fictional month of business checking so you can test an import and know exactly what should come in, plus a blank copy. Below, the template line by line, the date and amount rules, the import steps for Odoo 17, 18 and 19, and how to check the result.
Short answer: download the filled Odoo CSV template (Date,Label,Partner,Amount), the blank one, or the Excel version for Odoo 19. Dates are YYYY-MM-DD, amounts sit in one column with money in positive and money out negative, and there's no balance column. The headers are Odoo's own field labels, so the import screen maps them for you. The filled template holds 31 fictional transactions: 11 deposits totalling 29,597.43, 20 withdrawals totalling 28,575.27, net +1,022.16. Import it from the bank journal's ⋮ → Import file on the Accounting Dashboard, into a test database first.
See the PDF statement behind this template
Open Utilly's fictional September 2026 checking statement (account ending 0427): every line, the balance check from 12,418.36 to 13,440.52, and the OFX, CSV and QIF downloads. Free, because the data is made up. If you'd rather not map columns at all, its OFX file carries the same 31 lines and Odoo maps OFX automatically.
- Does Odoo have a bank statement import template?
- The templates
- The template, line by line
- Dates and amounts
- Filling the template in Excel or Google Sheets
- Importing the file into Odoo
- The opening balance
- Checking the import against the known totals
- Other accounting software
- From a PDF statement or a messy bank export
- FAQ
1. Does Odoo have a bank statement import template?
Inside Odoo, yes. Odoo's Export and import data page (17.0 and 19.0) says "Import templates are provided in the import tool of the most common data to import (contacts, products, bank statements, etc.)", and that a downloaded template "can be imported in one click since the data mapping is already preconfigured". You reach the import tool from the records you're importing into; for bank transactions, that's the bank journal (steps below).
The templates on this page don't need a login, and the filled one comes with a month of transactions whose totals you know, so you can see what a correct import looks like before you put real data through it. They're for bank transactions on a bank journal. Invoices, bills, contacts and journal entries are other import types with other columns.
2. The templates
The filled files are written from the fictional statement explained on sample bank statement PDF, read by the same engine Utilly's converters use, so the rows can't drift from the PDF.
| File | What's in it | Use it when | Known totals |
|---|---|---|---|
| Filled CSV template | Header row + 31 fictional bank transactions | Testing an import on Odoo 17, 18 or 19, or comparing a bank export with a file Odoo maps | 31 lines, +29,597.43 / −28,575.27, net +1,022.16 |
| Blank CSV template | The header row only | Typing or pasting your own transactions | None |
| Excel template (XLSX) | The same 31 rows on the first sheet, with real date and number cells, plus a How to use sheet | Odoo 19, which lists XLSX as a statement format | Same as the filled CSV |
| The same month as OFX | The 31 lines with a unique transaction ID each | You'd rather skip column mapping | Same |
The filled CSV is 1.5 KB of plain ASCII text with Windows line endings. The same month also comes as .QBO, .IIF, QIF and more on sample bank statement files.
3. The template, line by line
The start and the end of the filled CSV as plain text:
Date,Label,Partner,Amount
2026-09-01,ACH DEBIT GUSTO PAYROLL 0912,,-6420.18
2026-09-01,STRIPE TRANSFER ST-K2M8Q4,,3184.27
2026-09-02,CHECK 2041,,-1850.00
2026-09-02,ACH DEBIT AUSTIN ENERGY UTIL,,-412.66
…
2026-09-30,MONTHLY SERVICE FEE,,-15.00
2026-09-30,INTEREST PAYMENT,,3.21
| Column | Odoo field | What goes in it |
|---|---|---|
| Date | Date | The transaction date, YYYY-MM-DD. In the XLSX it's a real date cell. |
| Label | Label | The bank's text for the line. Odoo 19 makes the label mandatory when you enter a transaction by hand, and with no partner set it compares the label with invoice, bill and payment numbers and references when it looks for a match, so keep the bank's wording. |
| Partner | Partner | Optional; empty in the template. Odoo finds a related record by its name, so only use the name of a contact that already exists in Odoo. If you're unsure, leave it empty and set the partner while reconciling. |
| Amount | Amount | Money in positive, money out negative: payroll is −6420.18, the Stripe deposit is 3184.27. Plain digits with a point for decimals, no currency symbol. |
Why these exact headings: they're the English labels of the fields on Odoo's bank transaction model (account.bank.statement.line: Date, Label, Partner, Amount). When you load a file, Odoo's import screen first tries an exact match between each column heading and a field's technical name or label, and only then falls back to guessing; that's in Odoo's open-source import code. Matching headings map themselves. If you rename one, pick the field by hand from the drop-down on the mapping screen; Odoo's import page suggests then using that field's label as the heading so future imports map on their own.
What's deliberately not in the file: a running balance (Odoo works out each transaction's running balance itself), the bank account number, and any $0.00 lines. Odoo's import page also says an External ID column lets you import the same records several times without creating duplicates; it's optional and not in this template.
4. Dates and amounts
From Odoo's Export and import data page:
| What | Odoo's rule | In the template |
|---|---|---|
| Date format | Odoo detects date columns and guesses the format, which can confuse day and month in a date like 01-03-2016. It recommends ISO 8601, written YYYY-MM-DD (1981-07-24 for July 24th 1981). Check the Date Format under the CSV formatting options | 2026-09-01 to 2026-09-30 |
| Excel dates | "Consider using date cells to store dates" in .xls/.xlsx files | Real date cells in the XLSX |
| Negative numbers | A minus sign or parentheses: -32000.00 and (32000.00) both work | A minus sign |
| Separators | Odoo detects the thousands and decimal separators; the Thousands Separator can be changed in the formatting options | No thousands separator, a point for decimals |
| Currency signs | Supported, but a symbol Odoo doesn't know can stop the import | None |
| Separator and quotes | The preview assumes commas and quotation marks; change the formatting options if your file differs | Commas; text is quoted only when it contains a comma |
Odoo also guesses each column's field type from the first ten lines of the file, and the formatting options don't appear for Excel files.
5. Filling the template in Excel or Google Sheets
- Open the template: the blank CSV, or a filled one with rows 2 to 32 (the fictional transactions) deleted. Keep row 1 exactly as it is.
- Paste your transactions under the header: date in A, the bank's text in B, a partner name in C only if it matches a contact in Odoo, and the signed amount in D.
- Money in and money out in two columns? With money in in E and money out in F of your pasted export,
=E2-F2gives the signed amount; copy it down, paste it as values into column D, then delete the two originals. Blank cells count as zero. - Fix the dates. In Excel, Format Cells → Custom →
yyyy-mm-dd; in Google Sheets, Format → Number → Custom date and time. - Delete balance columns, totals lines and blank rows.
- Save. For Odoo 17 or 18, save as CSV: Excel File → Save As → CSV UTF-8 (Comma delimited), Google Sheets File → Download → Comma-separated values. For Odoo 19 you can keep the .xlsx; Odoo reads its first sheet.
Excel can quietly change a CSV when it opens one, turning dates around on a computer set to a different region. Opening a bank CSV in Excel without breaking it covers the safe way.
6. Importing the file into Odoo
Odoo 19, from the 19.0 Transactions page:
- Go to the Accounting Dashboard.
- Click the ⋮ (ellipsis) icon on the bank journal and select Import file, or drag and drop the file onto the bank journal.
- Select the CSV or XLSX and upload it.
- Set the formatting options (CSV only), check each file column is mapped to its Odoo field, click Test, then Import.
Odoo 17 and 18: on the Accounting Dashboard, click Import File on the bank journal (or ⋮ → Import file, or open Transactions from that menu, click the gear icon and choose Import records), upload the CSV, check the mapping, then Test and Import.
Pick the journal of the account the statement belongs to. Test checks the file without importing it, and Odoo's import page warns that imports "are permanent and cannot be undone", so run the filled template through a test database first. Formats, reconciliation, duplicates and Odoo Community are covered in how to import a bank statement into Odoo.
7. The opening balance
A statement import brings in transactions, not the balance they start from. Odoo's Transactions page flags this as important: to make the ending balances of your statements in Odoo match the bank's, "create an opening transaction to record the bank account balance as of the date you begin synchronizing or importing transactions". For the template's month that's one transaction dated before September 1, 2026 for 12,418.36. You can add it as the first data row of your own file, for example 2026-08-31,Opening balance,,12418.36, but only once per journal: on a journal that already has transactions it would count the balance twice.
8. Checking the import against the known totals
The point of a filled template is that you know what should come in. After importing it, compare:
| Check | Should be | If it's wrong |
|---|---|---|
| Transactions | 31 | Fewer: some lines didn't import. 62: the file went in twice |
| Deposits | 29,597.43 (11) | A different total means lines were skipped or an amount was misread |
| Withdrawals | 28,575.27 (20) | Same as above |
| Net change | +1,022.16 | −1,022.16 means every sign is flipped |
| Dates | 1–30 Sep 2026 | Dates in other months mean the day and month were swapped: check the Date Format option |
| Balance with the opening transaction | 12,418.36 → 13,440.52 | Off by 12,418.36: the opening transaction is missing |
The transactions are fictional (Example Community Bank and Sample Customer LLC don't exist; the statement they come from says SAMPLE STATEMENT, FICTIONAL DATA FOR DEMONSTRATION ONLY). Import them into a test or demo database, never into books you file from, and replace every row before using the template for real. If a real month won't tie out after reconciling, finding bank reconciliation discrepancies walks through the usual causes.
9. Other accounting software
- Xero takes *Date, *Amount, Payee, Description, Reference with YYYY/MM/DD dates: Xero CSV import template.
- QuickBooks Online takes Date, Description, Amount (or a 4-column version): QuickBooks Online CSV import template.
- NetSuite wants nine columns in a fixed order with MM/DD/YYYY dates: NetSuite bank statement import template.
- Zoho Books has its own CSV rules: importing a bank statement into Zoho Books.
10. From a PDF statement or a messy bank export
Odoo's documentation doesn't list PDF as a bank statement import format. Upload the PDF to bank statement to OFX: the preview is free with no sign-up and checks that the opening balance plus every transaction equals the closing balance, and the downloads include an OFX, which Odoo maps automatically, and a CSV with ISO dates and one signed Amount (map its Description column to Label and delete its Balance column). Downloading uses 1 credit ($9 for 5, no subscription). Have a bank CSV with a title block on top or Debit and Credit columns? CSV to OFX reads it and writes an OFX; it's free up to 100 rows.
Get your own statement into Odoo
PDF statements, downloaded or scanned, get a free preview with the balance check, no sign-up. CSV and Excel exports are free up to 100 rows. Files are processed in memory and not stored.
Utilly isn't affiliated with Odoo S.A. The rules and steps above are from Odoo's official documentation and its open-source code (versions 17.0 to 19.0), checked November 10, 2026; the templates weren't imported into a live Odoo database. Sources: Export and import data (19.0), Export and import data (17.0), Transactions (19.0), Transactions (18.0), Transactions (17.0), Bank reconciliation (19.0), base_import (17.0 source), account_bank_statement_line (17.0 source). Odoo updates these pages; if a screen differs, follow the current documentation.
FAQ
Does Odoo have a bank statement import template?
Odoo's Export and import data page says import templates are provided in the import tool for the most common data, bank statements included, so look on the import screen in your database. The templates on this page need no login, use the column names Odoo maps automatically, and the filled one has a test month with known totals.
What columns does an Odoo bank statement CSV need?
A date, a label and an amount for each transaction, plus a partner if you know it. Headed Date, Label, Partner and Amount, the columns match the field labels of Odoo's bank transaction model, so the import screen maps them without you choosing fields. Leave out a running balance column: Odoo calculates the balance itself.
What date format should an Odoo bank statement CSV use?
Odoo's import page recommends ISO 8601, written YYYY-MM-DD, for example 2026-09-01. Odoo guesses date formats and can swap the day and month in a date like 01-03-2016, so a year-first date avoids that. Check the Date Format under the formatting options before you import.
How should amounts be entered in the Odoo template?
In one Amount column: money in positive, money out negative, for example 3184.27 for a deposit and -6420.18 for a payroll payment. Odoo also reads numbers in parentheses as negative. A bank export with separate Debit and Credit columns needs combining into one signed amount first.
Can I import an Excel file into Odoo instead of a CSV?
In Odoo 19, yes: its Transactions documentation lists Excel (XLSX) as a bank statement import format, and the XLSX template here has real date and number cells on its first sheet, which is the sheet Odoo reads. The 17.0 and 18.0 pages list CSV but not XLSX, so use the CSV template on those versions.
Who goes in the Partner column?
Only a contact that already exists in Odoo, typed the way the contact is named, because Odoo finds the partner by its name. If you're not sure, leave the cell empty: you can set the partner while reconciling, and with no partner Odoo compares the line's label with invoice, bill and payment references to find a match.
How do I know the import worked?
Import the filled template into a test database first. It should bring in 31 transactions dated September 2026: 11 deposits totalling 29,597.43 and 20 withdrawals totalling 28,575.27, a net change of +1,022.16. A net of -1,022.16 means the signs were flipped; dates in other months mean the day and month were swapped.
Related guides
- How to import a bank statement into Odoo (CSV, OFX, QIF, CAMT.053 or PDF)
- Free sample bank statement CSV (fictional, with known totals)
- Free Xero CSV import template for bank statements (filled and blank)
- Free QuickBooks Online CSV import template for bank transactions (3- and 4-column)
- Free sample OFX file (bank and credit card), explained
- Free sample bank statement files: PDF, CSV, QBO, IIF, QIF and Xero CSV
Related tools
- Bank reconciliation checker: compare a bank statement to your books and list missing, duplicate and mismatched transactions.
- Receipt to CSV: turn PDF or photo receipts and invoices into CSV, Excel, or QuickBooks and Xero bill imports.