Running an HVAC business with Odoo

What can I do for bank reconciliation in Odoo?

Workflow overview: What can I do for bank reconciliation in Odoo?
Workflow overview. Instructional screenshots show the actual demo interface.

Review a fictional bank statement against native Odoo payment and journal-item exports, retain discrepancies and assign follow-up without claiming bank reconciliation.

Alex uses a native Odoo journal-item export to compare recorded customer and supplier payments with statement evidence, save the review on the bank journal and assign discrepancies for follow-up. With the stock full-accounting permission enabled, this Community setup also exposes Bank Statements, Models and Matching Rules. The inspected controls did not demonstrate a usable bank feed, statement import or statement-matching execution. This walkthrough completes a manual review; the outstanding ledger entries remain unmatched.

Alex Rivera and Demo Air HVAC are fictional training examples. Prices, dates, quantities and business situations in this guide are illustrative.

Before you begin

Tested in stock Odoo 20.0-20260926 Community as the demo owner administrator, with official modules and standard configuration. Complete How do I record full or partial customer payments in Odoo?, How do I record a supplier payment in Odoo? and How do I set up bank accounts and payment journals in Odoo?. This checkpoint also preserves Can I accept online invoice payments in Odoo?. Use Demo Operating Bank H73, the same fictional company and USD. Prepare a four-row synthetic statement input, explicitly labelled as invented training data: October 14 receipts +$50 and +$121.72, a supplier row -$19 and an unrecorded fee row -$3. These are not actual bank evidence. In a real review, obtain the independent statement and confirm account, currency, dates and references. Keep banking credentials and actual personal details out of a public tutorial.

The administrator has granted the existing stock Show Full Accounting Features permission to the demo owner. That standard permission exposes the accounting Dashboard and review menus used below; no extra app or module was installed. If those menus are missing, have your administrator check this permission before continuing. The screenshots use the ordinary business interface.

For this exercise, download the fictional four-row statement CSV and, optionally, the eight-row Odoo journal-item CSV from this walkthrough. The first file is invented training input. The second is the actual export described in Step 4; exporting your own selected records produces your own file.

Step-by-step workflow

Step 1. Check the native workflow actually available

In Invoicing, open Dashboard and find Demo Operating Bank H73. Click Transactions to inspect Bank Statements. The tested list is empty and its Actions menu offers Export; no New, Upload, Import or Reconcile control appears in that view.

Return to the bank card and open its three-dot menu. Under reconciliation, inspect Models and Matching Rules. The existing Internal Transfers and Bank Fees models both show Manual; Matching Rules is empty. Both configuration lists offer New, which this review leaves unused. In Configuration → Settings, the inspected bank-import option is QIF Import Enterprise, unchecked. Leave it unchanged. These visible lists and settings do not establish a working statement-import or matching procedure.

Action 1: Review the existing bank journal on Dashboard. The actual target is highlighted in gold.
Review the existing bank journal on Dashboard.
Action 2: Open the bank journal Transactions view. The actual target is highlighted in gold.
Open the bank journal Transactions view.
Action 3: The empty statement list offers Export only. The actual target is highlighted in gold.
The empty statement list offers Export only.
Action 4: Open the bank card menu without creating a transaction. The actual target is highlighted in gold.
Open the bank card menu without creating a transaction.
Action 5: Review the two existing manual reconciliation models. The actual target is highlighted in gold.
Review the two existing manual reconciliation models.
Action 6: Open the existing Matching Rules list. The actual target is highlighted in gold.
Open the existing Matching Rules list.
Action 7: This Matching Rules list is empty. The actual target is highlighted in gold.
This Matching Rules list is empty.
Action 8: QIF Import is labelled Enterprise and remains unchecked. The actual target is highlighted in gold.
QIF Import is labelled Enterprise and remains unchecked.

Step 2. Open the existing bank journal and its items

Open Demo Operating Bank H73 through Configuration → Journals and verify its existing Bank type and fictional account. Click that journal’s Journal Items button so the list retains its journal context. Keep the Journal: Demo Operating Bank H73 and Posted filters. Remove only the Journal Entry grouping to see the eight underlying lines. There are four payment entries with two accounting lines each, not eight separate cash movements. The inspected list has no New button.

Check the journal filter and eight-line count before selecting records. Opening a saved child-view address directly did not retain this journal scope in the test; return to the parent journal and use Journal Items if that filter is missing.

Action 9: Review the existing Demo Operating Bank journal. The actual target is highlighted in gold.
Review the existing Demo Operating Bank journal.
Action 10: Open Journal Items from this bank journal. The actual target is highlighted in gold.
Open Journal Items from this bank journal.
Action 11: Keep the Journal and Posted filters. The actual target is highlighted in gold.
Keep the Journal and Posted filters.
Action 12: Remove only the Journal Entry grouping. The actual target is highlighted in gold.
Remove only the Journal Entry grouping.
Action 17: Review eight lines for four recorded payments. The actual target is highlighted in gold.
Review eight lines for four recorded payments.

Step 3. Expose the reference and residual columns

Open the column selector tune, check Reference and Residual, then close the selector. Inspect the existing manual-payment references and the separate Demo checkout entry. Selecting the eight rows and opening Actions offered Export, Delete, Unreconcile, Move to Account and Change Period, with no Reconcile action. Choose Export for this lesson and leave the other actions unused. An available model or field named Statement or Reconciliation Model does not establish a complete statement-processing screen.

Action 13: Open the journal item column selector. The actual target is highlighted in gold.
Open the journal item column selector.
Action 14: Show the saved payment references. The actual target is highlighted in gold.
Show the saved payment references.
Action 15: Show the current residual amounts. The actual target is highlighted in gold.
Show the current residual amounts.
Action 16: Close the column selector. The actual target is highlighted in gold.
Close the column selector.
Action 17: Review eight lines for four recorded payments. The actual target is highlighted in gold.
Review eight lines for four recorded payments.
Action 22: Select exactly the eight journal item rows. The actual target is highlighted in gold.
Select exactly the eight journal item rows.
Action 23: Open the selected journal item Actions. The actual target is highlighted in gold.
Open the selected journal item Actions.
Action 24: Use Export only; leave the other accounting actions untouched. The actual target is highlighted in gold.
Use Export only; leave the other accounting actions untouched.

Step 4. Export the actual journal items as CSV

Select the eight rows and choose Actions → Export. In Export Data, retain Date, Number, Partner, Reference, Description, Debit, Credit, Matching # and Residual (at date). Remove the default Account field from Fields to export. Find Account Name in Available fields and click its + control to add it. Check that the ten fields appear in the order listed, with Account Name last.

Choose Plain Text (.csv) in Format, then click Export once and save the actual download. The verified file contains eight records and ten unique columns, totalling 1,371 bytes in this example. Export reads existing records; it does not import or match a bank statement. Close the export dialog after downloading. The example Odoo export preserves the exact downloaded bytes.

Action 22: Select exactly the eight journal item rows. The actual target is highlighted in gold.
Select exactly the eight journal item rows.
Action 23: Open the selected journal item Actions. The actual target is highlighted in gold.
Open the selected journal item Actions.
Action 25: Open the native Export Data dialog. The actual target is highlighted in gold.
Open the native Export Data dialog.
Action 26: Remove Account before choosing Account Name. The actual target is highlighted in gold.
Remove Account before choosing Account Name.
Action 27: Add Account Name with its native plus control. The actual target is highlighted in gold.
Add Account Name with its native plus control.
Action 28: Review the ten selected export fields. The actual target is highlighted in gold.
Review the ten selected export fields.
Action 29: Choose Plain Text CSV for this export. The actual target is highlighted in gold.
Choose Plain Text CSV for this export.
Action 30: Download the actual eight row journal item CSV. The actual target is highlighted in gold.
Download the actual eight row journal item CSV.

Step 5. Compare the two customer receipt rows

Compare the synthetic statement by reference, date, direction and amount, using the Outstanding Receipts row for each receipt rather than counting both accounting lines. DEMO-H56-RECEIPT-001 on October 14 is +$50 and agrees with PBNK1/2026/00002. DEMO-H56-RECEIPT-002 is +$121.72 and agrees with PBNK1/2026/00003. Their receivable counterparts have zero residual and matching number 1; the Outstanding Receipts rows still have residuals $50 and $121.72 with blank matching numbers. Agreement of the evidence does not change those ledger states.

Action 18: Review the recorded fifty dollar receipt. The actual target is highlighted in gold.
Review the recorded fifty dollar receipt.
Action 19: Review the recorded second customer receipt. The actual target is highlighted in gold.
Review the recorded second customer receipt.

Step 6. Retain the supplier difference and missing fee

The synthetic row DEMO-H74-PARTIAL-001 shows -$19, while PBNK1/2026/00001 records $20 sent on the same date/reference. Record the $1 amount difference for investigation; do not silently change either source. DEMO-H75-FEE-001, -$3 has no corresponding recorded payment and needs separate evidence/treatment review. The $55.12 Demo checkout is a simulation and is excluded from this statement exercise. Do not infer bank receipt from its Paid/Reconciled labels.

Action 20: The supplier payment records twenty dollars. The actual target is highlighted in gold.
The supplier payment records twenty dollars.
Action 21: Keep the separate Demo checkout outside this comparison. The actual target is highlighted in gold.
Keep the separate Demo checkout outside this comparison.

Step 7. Save the review and both files on the journal

Return to the same bank journal. Click Log note, write the two agreeing rows, the $1 supplier discrepancy, the unrecorded $3 fee and the explicit statement/ledger limits. Use Attach Files to attach the labelled synthetic statement CSV and actual Odoo export. Wait for both filenames, then click Log. The saved internal note retains both files on this journal. The test checked them as the owner; it does not establish access for another role or safe public sharing.

Action 31: Start an internal journal review note. The actual target is highlighted in gold.
Start an internal journal review note.
Action 32: Record the two agreements and two unresolved differences. The actual target is highlighted in gold.
Record the two agreements and two unresolved differences.
Action 33: Attach the labelled fictional statement CSV. The actual target is highlighted in gold.
Attach the labelled fictional statement CSV.
Action 34: Attach the actual native journal item CSV. The actual target is highlighted in gold.
Attach the actual native journal item CSV.
Action 35: Both CSV files are attached to this internal draft. The actual target is highlighted in gold.
Both CSV files are attached to this internal draft.
Action 36: Log this internal review once. The actual target is highlighted in gold.
Log this internal review once.
Action 37: Review the saved internal note and its two files. The actual target is highlighted in gold.
Review the saved internal note and its two files.

Step 8. Assign the unresolved review instead of clearing it

Click Activity. Keep To-Do, enter H75: Review $1 supplier difference and unrecorded $3 fee in Summary and retain Assigned to: Demo Air Owner. Click the displayed due date to edit Due on, set 10/16/2026, and commit the date. In the note, identify rows 003/004, require independent evidence and retain the instruction against a balancing payment or a reconciliation-complete claim. Click Save, not Mark Done. This creates an open owner follow-up; it does not fix the amounts or schedule a bank import.

Action 38: Schedule the unresolved owner review. The actual target is highlighted in gold.
Schedule the unresolved owner review.
Action 39: Name the supplier difference and missing fee. The actual target is highlighted in gold.
Name the supplier difference and missing fee.
Action 40: Edit the displayed activity deadline. The actual target is highlighted in gold.
Edit the displayed activity deadline.
Action 41: Set the explicit October 16 review date. The actual target is highlighted in gold.
Set the explicit October 16 review date.
Action 42: Keep Demo Air Owner assigned to the review. The actual target is highlighted in gold.
Keep Demo Air Owner assigned to the review.
Action 43: Keep evidence review and the no-balancing instruction. The actual target is highlighted in gold.
Keep evidence review and the no-balancing instruction.
Action 44: Check October 16 before saving the open review. The actual target is highlighted in gold.
Check October 16 before saving the open review.
Action 45: Save one open owner review without marking it done. The actual target is highlighted in gold.
Save one open owner review without marking it done.
Action 46: The owner review is open and due Today. The actual target is highlighted in gold.
The owner review is open and due Today.

Step 9. Reopen the review and confirm the financial boundary

Reload the same journal. Check one review note, both CSV attachments and the open To-Do due October 16. On the October 16 capture date, the activity is labelled Today. The saved files match the uploaded bytes. Reopening retained one activity and did not duplicate the review or payment records. Existing four payments and their ledger entries are unchanged, with no Bank-account entry. There are still zero bank statements/statement lines and nine accounting moves. Outstanding Receipts totals $226.84 including the separate Demo $55.12, and Outstanding Payments remains $20 unmatched. Keep the two review exceptions open until the evidence and required corrections are resolved.

Action 46: The owner review is open and due Today. The actual target is highlighted in gold.
The owner review is open and due Today.
Action 47: Reopening retains the same internal review note. The actual target is highlighted in gold.
Reopening retains the same internal review note.
Action 48: The fictional statement file remains attached. The actual target is highlighted in gold.
The fictional statement file remains attached.
Action 49: The original native export file remains attached. The actual target is highlighted in gold.
The original native export file remains attached.
Action 50: Keep this owner follow-up open for investigation. The actual target is highlighted in gold.
Keep this owner follow-up open for investigation.

Check the result

A native eight-row journal-item CSV supports four synthetic statement-row comparisons: two customer references/dates/amounts agree, the supplier row differs by $1 and a $3 fee has no recorded payment. The bank journal retains one internal review note, two checksum-matching CSV attachments and one open owner To-Do due October 16. Existing payment/ledger records and invoice balances are unchanged. No payment, Bank-account posting, statement/line or ledger reconciliation was created. This is a verified manual review and handoff, not completed bank reconciliation.

If your screen differs

This availability check covers stock Odoo 20.0-20260926 Community, the owner with Show Full Accounting Features enabled, and the inspected Dashboard, bank journal, statements, model/rule lists, settings and selected-line actions. It does not establish a blanket limitation for every edition, version or permission configuration. The separate Accounting catalogue entry and the QIF Import setting were Enterprise-labelled and left unused. The existing models and the New controls on their configuration lists do not prove working statement import or matching.

Matching # and zero residual on invoice receivable/payable counterparts are distinct from settlement of the outstanding lines. The invented statement excludes the Demo checkout. Fee classification, corrections, independent bank evidence and future activity completion remain unresolved. Background jobs remain disabled; no unattended bank synchronization or reminder delivery was tested.

Frequently asked questions

What can I do for bank reconciliation in Odoo? In this tested Community setup, use the recorded payments and native journal-item CSV to compare independent statement evidence, then retain a note/files and assign discrepancies for review. The demonstrated result is manual evidence comparison. Its Outstanding Receipts/Payments remained unmatched, and no bank feed, statement import or full reconciliation action was demonstrated.
Can Odoo automatically import bank statements in this setup? The inspected menus/settings and journal-item actions did not provide a usable bank-feed or statement-import/matching workflow in this setup. The CSV procedure here exports existing journal items; it does not import a statement. Existing bank-statement models or export fields do not prove a supported working screen. No Enterprise or third-party add-on was introduced.
Should I create a payment to make a bank difference disappear? Investigate the independent evidence and actual record first. The synthetic example retained a $19 statement row against a $20 recorded supplier payment, plus an unrecorded $3 fee, and assigned both for owner review. It created no balancing payment and did not mark the To-Do done or claim bank reconciliation.

Continue building the business

Continue with How do I submit and approve employee expenses in Odoo?. Keep the bank-review To-Do open while investigating its two exceptions; the reviewed statement and accounting records have not been reconciled by this lesson.

Talk to an Odoo partner

Bring your current process and the result you need to Onward to plan your Odoo workflow. Talk to an Odoo partner.