Accounting Export — Xero
One-way export of journals & invoices to Xero / QuickBooks / Sage import formats
Businesses that run Odoo for day-to-day trading but file their accounts in Xero, QuickBooks Online or Sage 50 lose hours every month re-keying journals and invoices by hand — and every manual entry is a chance to mis-post or unbalance a move. This module removes that dual-keying entirely. You build a reusable export profile per target system, crosswalk your Odoo accounts and VAT taxes to the platform's nominal and tax codes, then collect, validate and export a date range to the exact CSV import format that system expects. A validation pass catches unbalanced moves and unmapped accounts before anything leaves Odoo. It is one-way, format-generation only — no live API, no stored credentials and no certification — so UK SMEs and their bookkeepers get a clean, balanced handover without the lock-in.
Key Features
Reusable Export Profiles
Each gb.acc.export.profile pins a target system (Xero, QuickBooks Online or Sage 50), the journals to include, a date format, decimal places and whether draft entries are exported. Configure once, then reuse the profile for every period-end handover.
Per-System Column Specs
The _column_spec method emits the exact headers each platform's import wizard expects — Xero's *ContactName/*InvoiceDate/*AccountCode, QuickBooks JournalNo/Debits/Credits, or Sage 50 Type/NominalCode/TaxCode — so the file drops straight into the target tool.
Account-Code Crosswalk
The gb.acc.export.map model maps each Odoo account.account to the target's nominal code. action_autofill_mapping seeds a blank row for every account in use, then you fill the target codes so each line lands in the right ledger.
Tax-Code Mapping with Smart Defaults
gb.acc.export.tax.map crosswalks Odoo taxes to platform VAT codes; suggest_code proposes defaults from the rate and sale/purchase type — Sage T1/T5/T0, Xero '20% (VAT on Income)', or QuickBooks '20% S'.
Batch Collect and Stage
A gb.acc.export.batch pulls posted move lines via action_collect into gb.acc.export.line records, resolving each line's target and tax code up front. Computed move_count, line_count, total_debit and total_credit give an at-a-glance check before export.
Pre-Export Validation Pass
action_validate checks every move balances to zero and, when Require Full Mapping is on, flags any account with no target code. Problems are written to validation_log and block the export, so you never ship a broken file to your bookkeeper.
One-Click CSV and Download
action_export writes the formatted CSV to an attachment field with a per-system filename, and action_download streams it via /web/content. The batch moves through draft, validated and exported states tracked on its mail thread.
Quick-Run Wizard
The gb.acc.export.wizard defaults the date range to last month and shows a live move_estimate count. On Run it creates, collects and exports a batch in one step, then opens the finished file ready to download.
Format-Generation Only — No Lock-In
The export is one-way and offline: it never connects to Xero, QuickBooks or Sage and stores no credentials. Nothing to authorise, no API certification, no third-party data exposure — just a clean CSV you import yourself.
Use Cases
Screenshots
Run Export
Why Choose This Module
Move your Odoo journal entries and invoices into Xero, QuickBooks or Sage without re-typing. This module generates the exact CSV import formats those systems expect — one-way, format-generation only: no live API, no stored credentials, no certification required. Sage and Xero dominate UK SME accounting, and this bridge removes the manual dual-keying that plagues businesses running Odoo alongside an external bookkeeper's package.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: account
- Support: support@pokutsoft.com
Update date: 2026-07-02