Odoo Exact Online integration: options and costs

Short answer: an Odoo Exact Online integration sends customers, sales invoices and credit notes from Odoo to Exact, and brings payment status back into Odoo. Try a ready-made connector from the Odoo Apps store first (Callista's starts at €708 a year); it is often enough for one company with ordinary VAT. Custom work pays off with several administrations, cost centers, Dutch and Belgian entities side by side, or lots of exceptions. Then plan on 6 to 10 developer days for one direction (roughly $3,500 to $6,500) and 12 to 20 days for two directions (roughly $7,000 to $13,000). This article goes deep on Exact Online only. For the overview of every accounting package, read our guide to Odoo accounting integrations.
Why companies run Odoo next to Exact Online
The pattern is nearly always the same. A company outgrows its invoicing tool and picks Odoo for sales, inventory, purchasing, projects or a webshop. But the accountant works in Exact Online, for you and for dozens of other clients, with their own checks, reports and VAT returns. They are not moving to Odoo. Exact Online is big in the Netherlands and Belgium, so your accounting firm may well run on it.
That gives a clean split: Odoo is the source of truth for customers and goods, Exact is the source of truth for the general ledger. The integration has to guard that line. Agree who may change what, and in which system, before anyone writes code.
What syncs, in which direction, and when
This is the split we build most often. The resource names come from Exact Online's REST documentation.
| Data | Direction | When |
|---|---|---|
| Customers and relations (Accounts) | Odoo to Exact; Exact code stored back on the Odoo record | On the first invoice to that customer, and when name, address or VAT number changes |
| Sales invoices | Odoo to Exact | As soon as the invoice is confirmed in Odoo, through a queue |
| Credit notes | Odoo to Exact, linked to the original invoice | On confirmation in Odoo; never edit a posted invoice |
| Payments and reconciliation status | Exact to Odoo | Hourly or nightly, based on open items in Exact |
| VAT codes (VATCodes) | Exact to Odoo (read only, for mapping) | Once at the start, and again at every rate change |
| General ledger accounts (GLAccounts) | Exact to Odoo (read only) | Once, and when the chart of accounts changes |
| Cost centers (Costcenters) | Exact to Odoo, as analytic accounts | Once, and when the accountant adds one |
| Items | Odoo to Exact, only if Exact must report per item | On create or change; often unnecessary |
Two decisions shape the rest. First: if your accountant books supplier invoices directly in Exact (often with Exact's own scanning), you don't need to send them from Odoo. Second: do you only need "paid or not" in Odoo, or partial payments and the matching bank line too? The first is a few days of work; the second belongs to the two-way version.
The Exact Online API: what to know before you start
Whoever builds should check the points below in your own Exact environment.
Register an app in the App Center
Every integration is an app registered in the Exact Online App Center. You get a client ID and client secret and set a callback URL. According to Apideck, an app Exact has not yet reviewed can only connect to users of the Exact environment that created it; a public app needs Exact's review. For an integration that only runs for your company, we therefore usually register the app in your own Exact environment.
OAuth2 with short-lived tokens
Exact uses OAuth2 with an authorization code. An access token is valid for 600 seconds. According to Maesn you may only request a new one after 570 seconds, and each refresh token works once: every refresh returns a new one, and the old one then gives a 401. A refresh token that goes unused for 30 days expires. If your integration is down for a month (summer shutdown, server off), someone has to log in to Exact again. Two processes refreshing at once lock each other out, so keep one central token store.
Per administration (division)
Every API call includes the administration number, as /api/v1/{division}/.... Three legal entities in Exact means three administrations, each with its own relations, ledger and VAT codes. The integration must know which administration each Odoo company maps to.
Minute and daily limits
Exact's documented limits are 60 calls per minute and 5,000 per day, per app and per administration. Above that you get HTTP 429. Exact asks for calls to run one after another, not in parallel. Exact Online Premium can raise the daily cap; sources mention up to 30,000 but disagree on the exact rules, so check with Exact. Maesn and Barcode Scan also describe an error limit: about ten errors per endpoint per hour, after which Exact blocks you for a while.
Do the maths. An invoice for a new customer easily costs three or four calls (look up relation, create relation, invoice, check). A thousand invoices at month-end is 3,000 to 4,000 calls, and at 60 per minute at least an hour. The bulk and sync endpoints return up to 1,000 records per call instead of 60.
Webhooks
Exact has webhooks, but not for everything. The resource list marks them for, among others, relations, sales invoices, GL accounts and items, and not for VAT codes or cost centers. A webhook carries no data, only which record changed; you fetch the data with an extra call. Subscriptions are per administration, and your Odoo side needs a public HTTPS address.
Exact Online Netherlands and Belgium are separate worlds
Exact Online runs a separate environment and base URL per country (start.exactonline.nl and start.exactonline.be). A Belgian administration has a different chart of accounts and different VAT codes, because the VAT return is different: Dutch returns use boxes such as 1a (21% domestic) and 3b (supplies to businesses in other EU countries), Belgian returns use grids such as 01 to 03 (6, 12 and 21%), 44 and 46 (services and goods to EU businesses) and 45 (Belgian co-contractor). A mapping that works for your Dutch entity cannot be copied to your Belgian one. If you invoice Belgian businesses, also decide which system sends the Peppol e-invoice: Exact runs its own Peppol access point and so does Odoo, and you don't want the customer to receive it twice.
Ready-made connector or custom integration?
Honestly: a standard connector is often enough. In October 2026 the Odoo Apps store lists, among others, the Exact Online Connector by Callista (€708 a year Standard, €948 a year Advanced with payments back into Odoo, plus a sync queue with a retry button) and one by Mainframe Monkey (about $1,060, Odoo Enterprise only, fetches VAT codes and journals, no multi-company yet). There are also a few smaller modules from other vendors.
A connector fits if you have one legal entity, one Exact administration, ordinary domestic and EU VAT, and invoices plus payment status are all you need. Test it for a month on a copy of your Odoo and have your accountant check the VAT return.
Custom fits if you have several entities or administrations (especially Dutch and Belgian together), want cost centers or projects per invoice line, need partial payments and reconciliation detail in Odoo, are on Odoo Online where the connector doesn't run (Callista states its app is not compatible with Odoo Online), or the connector doesn't support your Odoo version. Note that, according to Odoo's pricing page, an integration that talks to Odoo from outside needs the Custom plan.
Where an Odoo Exact integration breaks
- VAT mapping. Odoo works with taxes and fiscal positions, Exact with VAT codes per administration. Reverse charge, intra-EU supplies, export and the Belgian co-contractor each need an explicit rule. Miss one and Exact rejects the invoice or books it in the wrong box.
- Rounding differences. Odoo can round per line or on the total; Exact sometimes recalculates VAT. One cent off and the open item no longer matches Odoo. Send the VAT amounts explicitly and set rounding the same in both systems.
- Multi-company and multiple administrations. An invoice from entity A landing in entity B's books is worse than one that never arrives. Fix one administration per Odoo company, and test each one.
- Duplicate relations. The customer already exists in Exact because the accountant created it by hand. Without matching on VAT or company registration number, the integration creates a second one. Store the Exact code on the Odoo contact.
- Expired tokens. A server that was off for a month, a second environment using the same refresh token: the integration stops silently. Get warned before it happens.
- Rate limits at month-end. Exactly when everyone invoices, the daily budget runs out. A queue that waits out the 429 and continues tomorrow beats a script that crashes.
- The error queue nobody reads. Closed period, blocked relation, unknown VAT code: these errors need a human. Without an alert, the accountant finds out at the quarterly VAT return.
How we build an Odoo Exact Online integration
- Mapping workshop with your accountant. One session where we put every Odoo tax, fiscal position, journal and revenue account next to the Exact codes. The result is a table your accountant signs off.
- Test administration. We build and test against a separate test administration in Exact and a copy of your Odoo, never against your live books.
- A queue with limits and token handling. Each invoice becomes a job with a status. Calls run one after another, within 60 per minute, with a daily budget per administration and one place where tokens are refreshed.
- Error queue with alerts. Temporary errors are retried; content errors are not. Those land on a list in Odoo, and you or your accountant get an email saying what needs fixing.
- A parallel test month. One month of real invoices through the integration, after which the accountant compares the VAT return and open items.
- Handover. The mapping table, a guide to the error queue, and the code in your repository. You own it.
What it costs and how long it takes
| Option | Scope | Days | Estimate excl. VAT |
|---|---|---|---|
| Ready-made connector | Install, configure, test month | A few days, partly your own time | €708 to €948 a year licence (Callista), plus your time |
| Custom, one direction | Relations, invoices and credit notes to Exact, VAT and ledger mapping, error queue | 6 to 10 | Roughly $3,500 to $6,500 |
| Custom, two directions | Plus payments and reconciliation back, cost centers, multiple administrations or NL and BE together | 12 to 20 | Roughly $7,000 to $13,000 |
We bill a senior day rate of $575 excl. VAT and run this as a day-rate project. A custom integration is usually live in 3 to 6 weeks, depending on how fast the mapping is agreed with your accountant. After go-live, small changes come in: a new VAT code, an extra journal, a new Odoo version. A strip card handles those: 14 hours for $1,050, and we start within 24 hours.
When to call a specialist
Doing it yourself works if a connector supports your Odoo version, you have one administration and the test month adds up. Get help if your accountant corrects invoices by hand every month, relations are duplicated in Exact, the integration stops silently and nobody knows why, or you want a Belgian and a Dutch administration on one Odoo.
Want to know whether a ready-made connector will do or you need custom work? Look at our Odoo integrations, or send us your situation: Odoo version and plan, number of entities and Exact administrations, Netherlands or Belgium, and invoices per month. You get honest advice and an estimate in days.
Frequently asked questions
Is there a ready-made Odoo connector for Exact Online?
Yes. The Odoo Apps store lists, among others, Callista's Exact Online Connector (€708 or €948 a year) and one by Mainframe Monkey (Enterprise only). Both send relations and invoices to Exact; Callista's Advanced plan brings payments back.
Does an Odoo Exact integration work with Exact Online Belgium?
Technically yes, but a Belgian administration runs on its own environment with different VAT codes and a different chart of accounts. Ask the connector vendor explicitly whether Belgium is supported, and build a separate VAT mapping.
How many API calls can an integration make in Exact Online?
According to Exact's documentation, 60 per minute and 5,000 per day, per app and per administration. Exact Online Premium can raise that; confirm the exact limit with Exact.
Why does my Exact integration suddenly stop?
Usually an expired or reused refresh token, an exhausted daily limit, or an error that is retried over and over. A good integration alerts you immediately instead of stopping silently.
What does a custom Odoo Exact Online integration cost?
One direction usually takes 6 to 10 days, roughly $3,500 to $6,500. With payments back, cost centers or several administrations it is 12 to 20 days, roughly $7,000 to $13,000, excl. VAT.
Related articles

Odoo and Peppol: e-invoicing in Belgium
Belgian e-invoicing in Odoo: what the 2026 Peppol rules require, what Odoo's free access point covers, when to connect Billit or Silverfin, and the cost.


Odoo accounting integration: Exact Online, Yuki, Twinfield
Connecting Odoo to Exact Online, Yuki, Twinfield, SnelStart, AFAS, Billit or Silverfin: which connectors exist, what syncs, Peppol rules and what custom costs.


Best Software Development Companies in Thailand (2026): A Buyer's Shortlist
Nine software development companies in Thailand compared on public facts: location, team, services, prices and what each is best for. Written by WDDW.

