Odoo accounting integration

Connect Odoo, map categories/journals/taxes, choose owner separation, and see what syncs (and what does not).

On this page

Connect your workspace to Odoo so the money you record here — rent payments, expenses, deposits, and the people behind them — turns into accounting records in Odoo automatically. This article explains what syncs, how to set it up step by step, and how to keep an eye on it.

Odoo is a paid-plan feature and is configured on the web app (not mobile). Setup lives under Settings → Integrations, and you need the Manage accounting integration permission (the Accountant role has it by default).

How it works (in one minute)

The sync is one-way: this app → Odoo (push only). When something is recorded and approved here, we queue a job and a background worker creates or updates the matching record in your Odoo database. Each record we create is remembered, so editing the same thing again updates the existing Odoo record instead of duplicating it.

Two things to keep in mind:

  • Changes you make inside Odoo do not flow back to this app. Odoo is the accounting book of record; this app is where operations happen.
  • Records are created as drafts by default, so your accountant reviews and posts them in Odoo. You can switch on auto-posting later (see Draft vs. posted below).

What syncs, and as what

When you……we create in OdooState
Get a rent payment approveda customer invoice (scaled to the amount actually paid, with rent/services/VAT lines)Draft — or posted + matched payment if auto-post is on
Get an expense verifieda vendor billDraft — or posted if auto-post is on
Record a deposit payment or refunda payment entry (money in / money out)Posted
Add or edit a contact / vendor / ownera partner (res.partner)Saved

A payment only syncs after it's approved in the payment workflow; an expense only after it's verified. That's intentional — only money your team has confirmed reaches the books.

Before you start

You need:

  1. An Odoo instance (Odoo Online or self-hosted) with the Accounting app installed.
  2. An API key for an Odoo user that can create invoices, bills, payments, and partners. (In Odoo: Preferences → Account Security → New API Key.)
  3. Your Odoo database name and URL.

Setup, step by step

Go to Settings → Integrations and work top to bottom:

1. Test the connection. Enter your Odoo URL, database name, login email, and API key, then Test connection. On success you'll see the Odoo version, and we'll pre-fill your company and a sale journal.

2. Set the defaults. Pick the Odoo company, the default sale journal, and the Rent product used on rent-invoice lines (there's a one-click “Create Rent product in Odoo” if you don't have one). Choose the sync language for the text we write into Odoo (match the Odoo company, or force English/Arabic).

3. Choose owner separation (only if you manage properties for more than one owner):

  • Off — everything posts to the one company. Use this if it's all your own portfolio.
  • By company — each owner maps to a separate Odoo company; their transactions post there.
  • By analytic account — everything posts to the one company, but each owner's lines are tagged with their analytic account (for per-owner P&L without separate companies).

In By company / By analytic mode, map each owner to their Odoo company / analytic account in the Owner mappings card.

4. Map your codes. So each record lands in the right place:

  • Expense category → account (which Odoo account each expense category books to)
  • Payment method → journal (cash, bank transfer, etc. → the matching Odoo journal)
  • VAT rate → tax (e.g. 15% → your Odoo sale/purchase tax)

Use the Setup Assistant to speed this up: Suggest mappings matches your items to Odoo objects automatically (you review before applying), and it can create accounts in Odoo for any unmatched expense categories.

5. Enable + backfill. Flip the Enable switch. On first enable you'll be offered a Backfill — it pushes your existing contacts, then expenses, deposits, and payments to Odoo in the right order. Choose how far back to go.

Draft vs. posted

By default we leave invoices and vendor bills as drafts so your accountant checks them before posting — the safe choice for ZATCA (Saudi e-invoicing), where a posted invoice is legally binding. Two switches in the Defaults section change this:

  • Auto-post customer invoices — posts rent invoices immediately and records the matching payment.
  • Auto-post vendor bills — posts expense bills immediately.

Leave them off while you're getting comfortable; turn them on once your mappings are trusted and you want full automation.

Keeping an eye on it (and troubleshooting)

  • Every payment and expense shows a sync status chip on its detail page (Synced / Pending / Failed / Not synced).
  • Settings → Integrations → Sync queue lists every job. Failed jobs show the reason — usually a missing mapping (an unmapped expense category, payment method, or VAT rate). Fix the mapping, then Retry (one job, or Retry all failed).
  • A quick way to confirm it's all working end-to-end: record a rent payment and approve it → a draft customer invoice appears in Odoo; verify an expense → a draft vendor bill; record a deposit → a payment; add a contact → a partner. Watch the sync queue drain to Done.

Disconnecting

Settings → Integrations → Disconnect wipes the connection and all mappings from this app. It does not delete anything already created in Odoo — those records stay in your books.