Odoo + QuickBooks Online integration

Connect Odoo and QuickBooks Online so invoices, bills and payments reach the books once, without re-keying, or move from QuickBooks to Odoo Accounting with clean opening balances. AIONDATA maps your chart of accounts, taxes and contacts first, then builds, tests and monitors the sync.

California-based leadership · Serving US and international teams

Odoo
AIONDATAsync · MCP · rules
QuickBooks
CustomersVendorsProducts and servicesCustomer invoices and credit notesVendor bills and refundsPaymentsChart of accounts, taxes and termsJournal entries and classes
Illustrative integration flow

Your integration, scoped before we build

  • Object and field mapping for your workflows
  • Sync timing, error handling and reconciliation
  • Written scope, timeline and support options

How Odoo and QuickBooks work together

Companies run Odoo and QuickBooks Online together when operations move to Odoo but the accountant keeps the books in QuickBooks, when Odoo Community (Invoicing, not full Accounting) runs sales and stock, or during a staged move to Odoo Accounting. An Odoo QuickBooks integration posts Odoo customers, vendors, invoices, credit notes and bills to QuickBooks and returns payment status to Odoo. If you are leaving QuickBooks, we migrate master data and open items once instead of syncing forever. We build on the QuickBooks Online Accounting API with OAuth 2.0, webhooks and change data capture, and on Odoo’s JSON-2 or XML-RPC API.

Plan your Odoo + QuickBooks implementation

These decisions shape the scope, cost and acceptance tests. The flows below describe possible implementation behavior, not a preinstalled connector or a guarantee for every product edition.

Choose migration or ongoing sync

Decide whether QuickBooks stays the ledger or Odoo Accounting replaces it. A migration moves master data and open items once, ideally at a fiscal year end. An ongoing sync needs a clear owner for every record type.

Map accounts, taxes and terms

List QuickBooks accounts with their type and detail type beside Odoo accounts, taxes, journals and payment terms. For US companies, decide whether QuickBooks automated sales tax recalculates tax or receives Odoo’s tax amount as an override.

Check QuickBooks plan and settings

Confirm the QuickBooks Online plan (inventory, classes and locations start at Plus), home currency and multicurrency, transaction numbering, and whether Odoo analytic accounts should become QuickBooks classes or locations.

Agree tests, cut-off and support

Pick test cases for each document type, a cut-off date, who approves the first posted batch and who receives alerts. Include a month-end comparison of receivables and payables in both systems.

Data flows

What moves between Odoo and QuickBooks

  1. 01CustomersOdoo QuickBooksOdoo customer contacts create QuickBooks customers. Display names must be unique across customers, vendors and employees, so the QuickBooks ID is stored on the Odoo contact.
  2. 02VendorsOdoo QuickBooksOdoo vendor contacts create QuickBooks vendors. A company that is both customer and vendor in Odoo becomes two QuickBooks records with distinct display names.
  3. 03Products and servicesOdoo QuickBooksOdoo products become QuickBooks items with income and expense accounts. When Odoo tracks stock, we create non-inventory items and post stock value from Odoo, so inventory is valued in one place.
  4. 04Customer invoices and credit notesOdoo QuickBooksPosted Odoo invoices and credit notes create QuickBooks invoices and credit memos with the Odoo number as DocNumber, lines, tax and due date.
  5. 05Vendor bills and refundsOdoo QuickBooksPosted Odoo vendor bills and vendor credit notes create QuickBooks bills and vendor credits, coded to the mapped expense or asset accounts.
  6. 06PaymentsOdoo QuickBooksCustomer payments recorded in QuickBooks mark Odoo invoices paid; payments registered in Odoo can post to QuickBooks instead. One side owns cash for each payment type.
  7. 07Chart of accounts, taxes and termsOdoo QuickBooksOdoo accounts, taxes and payment terms are matched to QuickBooks accounts, tax codes and terms in a mapping table. New accounts on either side are flagged until someone maps them.
  8. 08Journal entries and classesOdoo QuickBooksOdoo journal entries such as stock valuation and cost of goods sold post as QuickBooks journal entries, with Odoo analytic accounts mapped to classes or locations where your plan has them.

Field mapping

Odoo and QuickBooks field mapping

The records, match keys and triggers most implementations start from. Your scope confirms each row against your editions, custom fields and business rules.

Odoo and QuickBooks field mapping
SourceTargetMatch keyDirectionTriggerNotes
Odoo res.partner (customer)QuickBooks CustomerQuickBooks customer ID stored on the partner; DisplayName unique across customers, vendors and employeesOdoo → QuickBooksFirst posted invoice, then partner changesBilling and shipping addresses, email and terms. Names cannot contain colons, tabs or line breaks.
Odoo res.partner (vendor)QuickBooks VendorQuickBooks vendor ID stored on the partnerOdoo → QuickBooksFirst posted bill, then partner changesA partner that is also a customer gets a distinct vendor display name.
Odoo product.productQuickBooks ItemItem Name (unique, up to 100 characters) or SKU; QuickBooks ID storedOdoo → QuickBooksOn product changeService or non-inventory item with income and expense accounts. Quantity tracking, once switched on in QuickBooks, cannot be switched off.
Odoo account.accountQuickBooks AccountMapping table: Odoo account code and company to QuickBooks account IDOdoo ↔ QuickBooksSet up once; new accounts on either side flaggedMatched by purpose and type. From Odoo 18, one account can serve several companies with a code per company.
Odoo account.taxQuickBooks TaxCodeMapping tableOdoo ↔ QuickBooksSet up once; reviewed when tax rates changeFor US automated sales tax, the invoice carries Odoo’s total tax and a tax code, which QuickBooks honors.
Odoo account.move (out_invoice)QuickBooks InvoiceDocNumber = Odoo invoice number (up to 21 characters)Odoo → QuickBooksWhen the invoice is postedLines, taxes, terms and due date. Unique requestid on create; query by DocNumber before any retry.
Odoo account.move (out_refund)QuickBooks CreditMemoDocNumber = Odoo credit note numberOdoo → QuickBooksWhen the credit note is postedApplied against the original invoice through a QuickBooks payment when the credit is used.
Odoo account.move (in_invoice, in_refund)QuickBooks Bill or VendorCreditOdoo bill number and vendor reference; QuickBooks ID storedOdoo → QuickBooksWhen the bill is postedExpense or asset account per line from the mapping.
QuickBooks PaymentOdoo payment and invoice payment statusLinkedTxn invoice ID mapped to the Odoo invoiceQuickBooks → OdooPayment webhook, plus a daily change data capture catch-upA payment applied to several invoices is split per linked invoice. Payments registered in Odoo can flow the other way instead.
Odoo journal entry with analytic accountQuickBooks JournalEntry with Class or DepartmentOdoo entry reference stored as DocNumberOdoo → QuickBooksDaily or at period closeStock valuation, cost of goods sold and accruals. Classes and locations need Plus or Advanced.

Download this mapping as a CSV worksheet · no email required

Editions and APIs

Odoo and QuickBooks: editions, hosting and APIs

The edition, hosting model and API on each side decide what the integration can do and how it is built.

Editions, hosting and APIs
Odoo CommunityInvoicing, Sales, Purchase and Inventory, but not full Accounting, which is an Enterprise app. A separate ledger such as QuickBooks Online fills that gap.
Odoo EnterpriseFull Accounting on Odoo Online, Odoo.sh or on-premise. On Odoo Online, external API access needs the Custom plan and custom modules are not allowed; on Odoo.sh and on-premise, a connector module can run inside Odoo.
Odoo API by versionJSON-2 from Odoo 19; XML-RPC or JSON-RPC before that. The older endpoints are scheduled for removal in Odoo 22 (fall 2028) and Odoo Online 21.1 (winter 2027).
QuickBooks Online plansFree, Simple Start, Essentials, Plus and Advanced. Inventory tracking and classes and locations (up to 40) come with Plus; Advanced allows unlimited classes and locations. Multicurrency is not available on Simple Start.
QuickBooks Online Accounting APIREST with OAuth 2.0. 500 requests per minute and 10 per second per company, webhooks for most accounting entities, and change data capture over the last 30 days with up to 1,000 objects per response. Minor versions below 75 are no longer supported.
Intuit App Partner ProgramEvery app starts in the free Builder tier: 500,000 CorePlus calls a month, then blocked. Paid Silver, Gold and Platinum tiers add credits and per-call fees. The program covers developers in the US, UK, Australia and Canada (excluding Quebec).

Options, cost and timeline

Ways to deliver Odoo and QuickBooks integration

A prebuilt connector is sometimes enough. This comparison shows when each route fits, what it typically costs and how long it takes.

Delivery options, cost and timeline
ApproachTypical costTypical timeFits whenWatch for
Odoo Apps Store connectorOne-time license per Odoo major version. Many QuickBooks Online connectors for Odoo 19 list at a few hundred US dollars (Odoo Apps Store list prices, checked Sep 2026). Add setup time.Days to a few weeks to configure and testOdoo.sh or on-premise, one company, standard invoices, bills and payments.Cannot be installed on Odoo Online. Check automated sales tax handling, duplicate protection and which side owns payments.
iPaaS workflowPlatform subscription plus build time. Check the vendor’s current plan page.A few weeksLow volumes, few document types, and a team that already runs the platform.Account, tax and duplicate rules still need design and testing. Odoo Online still needs the Custom plan for API access.
Custom sync serviceQuoted after a short discovery of document types, companies and volumes.Usually a few weeks for a standard scope including testing; typically two to three months for multi-company or multicurrencyOdoo Online, several companies, US automated sales tax, strict duplicate control or month-end reconciliation reports.The QuickBooks company authorizes the app over OAuth and must reconnect it if the refresh token expires. Name who reviews held records.
One-time migration to Odoo AccountingQuoted separately; no ongoing sync or connector license.Planned around a fiscal-year or tax-period cut-offCompanies retiring QuickBooks for Odoo Enterprise Accounting.Bring opening balances and open items through clearing accounts, and keep access to QuickBooks history for audits.

Vendor prices are list prices from their public pages on the date shown; confirm current pricing with each vendor.

Migration or ongoing sync: choosing the model

An ongoing sync makes sense when QuickBooks stays the ledger. Odoo runs sales, stock and invoicing; QuickBooks receives each posted document and stays where the accountant closes the month. The integration owns a mapping of accounts, taxes, contacts and items, and every posted Odoo document has one QuickBooks counterpart.

A migration makes sense when Odoo Accounting replaces QuickBooks. It runs once: master data, open invoices and bills, and an opening trial balance at the cut-over date. Odoo’s guidance calls a fiscal year end the easiest switch point, advises against switching in the middle of a tax period, and brings opening balances through clearing accounts so receivables and payables are not counted twice.

Some companies need both: a sync during a transition quarter, then a migration. It costs more than either model alone, so it fits only when a single cut-over date is not possible.

Chart of accounts, tax and numbering rules

Map accounts by purpose, not by name. QuickBooks classifies each account by type and detail type; Odoo uses types such as Receivable, Current Assets, Income and Cost of Revenue. Receivable, payable and bank accounts need one-to-one matches, while income and expense accounts can map many-to-one.

Odoo 18 changed accounts: one account can serve several companies, with a code per company. Mappings for multi-company databases therefore key on both account and company.

  • Receivables and payables: in QuickBooks each account holds one currency, so plan one receivable and one payable account per currency.
  • Taxes: each Odoo tax maps to one QuickBooks tax code; for US automated sales tax, Odoo’s total is sent as an override.
  • Numbering: Odoo invoice numbers must fit the 21-character DocNumber, so long prefixes are shortened.
  • Names: item names are unique and limited to 100 characters, and customers, vendors and employees share one display-name space.
  • Classes and locations: mapped from Odoo analytic accounts, on QuickBooks Plus or Advanced.
  • Closed periods: postings dated before your agreed closing date are held for the accountant, not forced.

Reconciliation, failure handling and acceptance tests

QuickBooks webhooks say which record changed, not how, so each notification triggers a read. Intuit expects a response within three seconds, retries on a schedule that stretches to every six hours, may deliver events out of order and may hold back later events until the failed one is acknowledged. It recommends change data capture calls to recover missed events, and those look back 30 days at most, so a longer outage needs a full comparison.

Each night the integration compares open receivables and payables per contact in both systems and lists documents that exist on one side only. Before go-live we run these cases on a QuickBooks sandbox company and an Odoo test database.

  • Invoice sent twice after a network error: one QuickBooks invoice.
  • US invoice with Odoo-calculated tax: the same total in both systems.
  • Partner who is both customer and vendor: two QuickBooks records, no name clash.
  • Payment applied in QuickBooks to two invoices: both Odoo invoices marked paid.
  • Credit note applied to an invoice: balances match on both sides.
  • Foreign-currency invoice: currency and exchange rate carried over.
  • Refresh token revoked: sync pauses, alert sent, nothing lost.
  • Webhook endpoint down for a day: change data capture restores every change.

Outcomes

Why teams connect Odoo and QuickBooks

  • Invoices and bills reach QuickBooks once, carrying the Odoo number, so nobody re-keys them and duplicates are caught.
  • Sales and operations see which invoices are paid in Odoo, without a QuickBooks login.
  • Month-end starts from matched receivables and payables instead of a spreadsheet comparison.
  • A move from QuickBooks to Odoo Accounting lands with correct opening balances and no double-counted receivables.

Odoo QuickBooks Integration FAQs

Should we migrate from QuickBooks to Odoo Accounting or keep both?

Keep both when your accountant or reporting depends on QuickBooks, or when you run Odoo Community, which has Invoicing but not full Accounting. Migrate when you want one system, because an ongoing sync needs upkeep. Odoo calls a fiscal year end the easiest switch point and advises against switching mid tax period, because splitting a tax period across two systems complicates filing.

How do you migrate QuickBooks data into Odoo?

We load the chart of accounts first, renaming and recoding Odoo’s standard accounts rather than deleting them. Customers, vendors and products follow, with their QuickBooks IDs as External IDs so reloads update instead of duplicating. Then open invoices and bills, and the opening trial balance through clearing accounts. Without clearing accounts, receivables would count twice: once in the balance and once in the open invoices.

Which QuickBooks API do you use, and how does authorization work?

The QuickBooks Online Accounting API, a REST API authorized with OAuth 2.0. Access tokens last 60 minutes. Refresh tokens have a rolling 100-day expiry and a hard five-year lifespan, after which the company must reconnect. We always store the latest refresh token securely and alert you well before a reconnect is due.

What are the QuickBooks API limits?

Intuit allows 500 requests per minute per company and 10 per second per company and app, and throttles batch requests at 40 per minute. A throttled call returns HTTP 429, and Intuit asks apps to wait 60 seconds before retrying. A query returns at most 1,000 records. We queue writes per company, batch where it helps and back off on 429.

Does the Intuit App Partner Program affect the cost?

It can. Every QuickBooks app starts in the free Builder tier, which allows 500,000 CorePlus calls a month and blocks calls beyond that. Core calls, mostly creating and updating records, are not metered; CorePlus calls, mostly reads, queries and reports, are. Intuit’s own example prices the Silver tier at $300 a month with 1,000,000 CorePlus calls included (checked Sep 2026). We design reads around webhooks and change data capture to keep CorePlus use low.

How do you handle sales tax between Odoo and QuickBooks?

US QuickBooks companies created after November 10, 2017 use automated sales tax, which calculates tax from addresses. If the integration sends a total tax amount with a tax code, QuickBooks honors it and prorates it across the code’s rates. We send Odoo’s tax amount so both systems show the same invoice total, and map each Odoo tax to a QuickBooks tax code. Non-US companies use a different QuickBooks tax model, mapped during design.

How do you prevent duplicate invoices and payments?

Three ways. The Odoo invoice number becomes the QuickBooks DocNumber, up to 21 characters, and we query for it before retrying a failed create, as Intuit recommends. Every write carries a unique requestid, so QuickBooks returns the original response instead of creating a second record. Updates send the latest SyncToken, so a stale update fails rather than overwriting newer data.

Can we use QuickBooks classes, locations and multiple currencies?

Yes, within your plan. Classes and locations need Plus, which allows 40, or Advanced, which is unlimited; we map them from Odoo analytic accounts or companies. Multicurrency is not available on Simple Start, is switched on only in the QuickBooks interface and cannot be turned off. Each customer or vendor holds one currency, so an Odoo contact invoiced in two currencies needs two QuickBooks records.

Can AI assistants work with Odoo and QuickBooks data?

Yes. Intuit publishes a QuickBooks connector for Claude, and Odoo 20 includes its own MCP server. Each works inside one system. For questions that span both, such as which Odoo orders are invoiced in QuickBooks but still unpaid, AIONDATA can build a custom MCP server that uses the sync’s mappings, read-only first, with any write action approved by a person.

How long does an Odoo QuickBooks integration take?

A standard sync of customers, vendors, products, invoices, bills and payments usually takes a few weeks including testing against a QuickBooks sandbox company and an Odoo test database. Multi-company setups, several QuickBooks companies, multicurrency or heavy customization typically take two to three months. A one-time migration is scoped separately around your cut-over date.

Ready to connect Odoo and QuickBooks?

Share your objects, volumes, and timing needs — we'll come back with a written scope.

Please share the systems and workflow—not credentials or customer records. We’ll confirm API access, scope and next steps.

NVIDIA Inception

NVIDIA Inception member

Part of NVIDIA’s program for startups building with AI and accelerated computing.

About the program
Pravin BansalSravan Modugula

Bay Area roots. Enterprise experience.

Pravin’s experience includes Google and SmartBear. Sravan previously held leadership roles at JPMorgan Chase and First Republic Bank.

Meet the founders

San Francisco Bay Area, California

9110 Alcosta Blvd Ste H345, San Ramon, CA 94583

US-led delivery, with engineering in India. Supporting US and international organizations.
Prefer email? info@aiondata.io

Let’s scope your integration.

Just your name and email to get started. Your details are handled under our Privacy Policy.