Guides · Odoo

Free Odoo bank statement import template (CSV and Excel, filled and blank)

Updated November 10, 2026 · 7 min read · By the Utilly team

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.

Filled CSVBlank CSVExcel (XLSX)

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.

FileWhat's in itUse it whenKnown totals
Filled CSV templateHeader row + 31 fictional bank transactionsTesting an import on Odoo 17, 18 or 19, or comparing a bank export with a file Odoo maps31 lines, +29,597.43 / −28,575.27, net +1,022.16
Blank CSV templateThe header row onlyTyping or pasting your own transactionsNone
Excel template (XLSX)The same 31 rows on the first sheet, with real date and number cells, plus a How to use sheetOdoo 19, which lists XLSX as a statement formatSame as the filled CSV
The same month as OFXThe 31 lines with a unique transaction ID eachYou'd rather skip column mappingSame

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
ColumnOdoo fieldWhat goes in it
DateDateThe transaction date, YYYY-MM-DD. In the XLSX it's a real date cell.
LabelLabelThe 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.
PartnerPartnerOptional; 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.
AmountAmountMoney 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:

WhatOdoo's ruleIn the template
Date formatOdoo 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 options2026-09-01 to 2026-09-30
Excel dates"Consider using date cells to store dates" in .xls/.xlsx filesReal date cells in the XLSX
Negative numbersA minus sign or parentheses: -32000.00 and (32000.00) both workA minus sign
SeparatorsOdoo detects the thousands and decimal separators; the Thousands Separator can be changed in the formatting optionsNo thousands separator, a point for decimals
Currency signsSupported, but a symbol Odoo doesn't know can stop the importNone
Separator and quotesThe preview assumes commas and quotation marks; change the formatting options if your file differsCommas; 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

  1. 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.
  2. 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.
  3. Money in and money out in two columns? With money in in E and money out in F of your pasted export, =E2-F2 gives the signed amount; copy it down, paste it as values into column D, then delete the two originals. Blank cells count as zero.
  4. Fix the dates. In Excel, Format Cells → Custom → yyyy-mm-dd; in Google Sheets, Format → Number → Custom date and time.
  5. Delete balance columns, totals lines and blank rows.
  6. 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:

  1. Go to the Accounting Dashboard.
  2. Click the ⋮ (ellipsis) icon on the bank journal and select Import file, or drag and drop the file onto the bank journal.
  3. Select the CSV or XLSX and upload it.
  4. 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:

CheckShould beIf it's wrong
Transactions31Fewer: some lines didn't import. 62: the file went in twice
Deposits29,597.43 (11)A different total means lines were skipped or an amount was misread
Withdrawals28,575.27 (20)Same as above
Net change+1,022.16−1,022.16 means every sign is flipped
Dates1–30 Sep 2026Dates in other months mean the day and month were swapped: check the Date Format option
Balance with the opening transaction12,418.36 → 13,440.52Off 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

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 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.