Skip to main content
Architecture · Odoo 19

Odoo 19 vs middleware connectors: when direct integration makes sense

A comparison between a native Odoo connector and a middleware platform for marketplaces, carriers and logistics: what each option costs in daily work, where traceability breaks and why "native" guarantees nothing either without a real install.

Odoo 19 vs middleware connectors: when direct integration makes sense

A native connector in Odoo 19 makes sense when Odoo is in charge of stock, orders, shipments and invoices: every status lives once, on the record where the team works. Middleware makes sense when you only need to move data without taking operational decisions, or when nobody is going to maintain code inside Odoo. Connecting an API once was never the problem: the problem is keeping orders, stock, errors and traceability under control as the operation grows.

Key idea: the question is not "native" or "middleware", but where each status lives and who checks it when the numbers disagree.

The real difference is not in the API

Amazon's, Mirakl's or a carrier's API is the same whoever calls it. What changes is who stores the result and where the person preparing the order sees it: that is the difference, not the API.

If Odoo has to reserve stock, prepare orders, generate delivery notes, create labels and send the tracking back to the channel, native integration keeps traceability where the team works. With an intermediate layer, each step exists twice and the two copies only match if somebody checks.

When to choose a native connector in Odoo

It makes sense when Odoo is the master system for product, stock, orders, logistics and invoicing. Also when you need your own rules: multi-warehouse, validations before sending, retries, per-order call logs and errors the user sees on their own screen.

In our marketplace connectors, the record of every call is an Odoo model with method, endpoint, parameters, request body, response status and body, attempt and duration in milliseconds, with configurable purging. It filters like any Odoo list, with no external panel involved.

When middleware can work

If you only move simple data between two systems, with no complex operational decisions, middleware can speed up the launch. Also if several ERPs sell on the same channels and the published stock has to be the sum of them. And above all, if nobody, in-house or an Odoo partner, is going to maintain code inside the ERP.

The risk appears when the team checks three panels to know whether an order is sold, reserved, shipped or failed: that day the middleware has stopped transporting and started holding state.

What middleware costs in daily work

The figure that matters is not the monthly fee: it is the tasks that appear as soon as there is an intermediate layer and nobody budgets for. There are four.

  1. The double master. The product is created in Odoo and, on top, mapped in the middleware: SKU, channel category, mandatory attributes. Every new product, every EAN change and every new variant is two edits. With a native connector, the channel mapping is one more field on the product in Odoo.
  2. Status reconciliation. A marketplace order has three truths: the channel's, the middleware's and Odoo's. When they disagree —an order cancelled on the channel that still reserves stock in Odoo— somebody finds out by hand. With a direct connection there are two, and the remote status is stored exactly as the API returns it next to the sale order, with the time of the last sync.
  3. Who reads the log. A failed call lives in the provider's panel, with its own login and retention. Whoever sees the order stuck in Odoo rarely has access to that panel. If the log is an Odoo model, the person with the problem sees it, on the same screen.
  4. The version upgrade. When Odoo moves from 18 to 19, the middleware promises its side does not change. The one that does change is Odoo's: the provider's bridge module, the fields it reads and the webhooks it expects. You do that migration anyway, at the provider's pace and not yours; we publish for 19, 18 and 17 at once, as explained in maintaining a module on three versions.

If you already pay for an intermediate layer and suspect it is surplus, the channel-by-channel cut-over plan is in from middleware to a native Odoo connection, told from our own Amazon migration in production.

Where traceability gets lost

The exact point is the delivery. In Odoo, the delivery (stock.picking) inherits from mail.thread and its state is tracked, so every move to "done" is recorded with date and user. With the delivery module, the carrier's tracking number is a field on the delivery itself (carrier_tracking_ref). All of that is standard.

What Odoo does not know out of the box is whether that tracking reached the marketplace. With middleware, the chain order → delivery → tracking → confirmation to the channel splits in two: the first two links in Odoo, the last two in the provider's panel. The delivery chatter says "done", and the proof that the buyer saw their number sits in another system.

A native connector closes the chain in the same place. In our Mirakl connector, validating the delivery triggers the tracking push if the instance has it enabled, and the result is written into the chatter: one note if it was sent, another with the error if it failed, and a different one if the delivery had no tracking number and nothing was sent.

A Mirakl order record in Odoo 19: Leroy Merlin instance, remote status SHIPPED, Odoo status Shipped, linked sale order S00509, last sync time and buttons to cancel and refund on Mirakl
The other half of the chain, seen from the order: our Mirakl connector in Odoo 19 on a Leroy Merlin instance. The remote status exactly as the API returns it (SHIPPED), the Odoo status, the linked sale order S00509 and the time of the last sync. Cancelling or refunding on the marketplace are two buttons on the same record.

Native is not magic either: 32 defects with green tests

The uncomfortable part is ours: "native" means the code lives in Odoo, not that it works. We audited one of our own marketplace connectors before putting it in front of a real seller. The suite gave 236 of 236 green, on real Odoo.sh builds for 19, 18 and 17. Underneath there were 32 real defects: 20 in the API contract and 12 in Odoo version handling.

The contract ones were parameters the API required and were not sent, and response fields read under the wrong name, which return None and raise nothing. Four only surfaced by calling: the pagination header arrived relative and from page one onwards no order was imported; a 403 for quota did not come in the documented format and was read as missing permissions, stopping the whole sync. The version ones were Odoo's own: a cron that on 17 runs once and switches itself off, a groups field spelled differently from 19 on, a list view that 17 rejects. Half of them gave no error: they gave silence.

The full case —including a second connector with 163 of 163 green that had never written a single log line— is in the tests were green and the connector was broken. The conclusion for anyone comparing: ask the native connector the same you ask the middleware. That it is actually installed on your version, not just that it compiles; that it has been checked against the provider's specification, not its own mocks; and that it has made at least one real call per endpoint family. If you inherit it, the list is in auditing an inherited Odoo connector.

Decision checklist

  • Where is stock reserved, and how many systems keep a copy of the available quantity?
  • Who creates the delivery note and the label?
  • Where does the error show when an API call fails, and does the same person who sees the order see it?
  • Does tracking flow back to the channel automatically, and is it recorded on the delivery that it did?
  • Can you retry without duplicating orders or shipments?
  • Who migrates the connector when the next Odoo version ships, and how soon?
  • Has it actually been installed on your version and tested against the provider's sandbox?

The order in which several channels are connected depends on which one publishes the stock: we cover it in selling on several marketplaces from a single Odoo. The connectors that already talk to Amazon, Mirakl, ManoMano, AliExpress and the carriers are in the catalogue and in Odoo integrations and automation; if it is for your own software, see Odoo connector for your software.

Frequently asked questions

Is a native connector always better?

Not always. It is better when Odoo is the operational hub and you need business rules, traceability and control from the ERP. If Odoo only receives a file at the end of the process, or nobody is going to maintain code inside Odoo, middleware is the sensible option.

Can I combine both approaches?

Yes, but you should define which system has the final say over stock, orders, logistics and errors, and leave no status that exists in both at once without a daily comparison.

How do I check a native connector works before trusting it?

Actually install it on your Odoo version, compare what it sends and reads against the provider's specification and make one real sandbox call per endpoint family. A connector of ours with 236 of 236 tests green had 32 defects that only surfaced that way.

What happens to the native connector when a new Odoo version ships?

It has to be migrated, and it is worth knowing who will do it before deciding. On Odoo 17 an ir.cron without numbercall takes the value 1 and deactivates itself after the first run; that field no longer exists on 18 or 19, and the change gives no warning at install time. Our connectors are published for 19, 18 and 17.

Useful links inside FlexigoTech

The tests were green and the connector was broken32 defects the suite could not see, with numbersFrom middleware to a native Odoo connectionWhen to move and the channel-by-channel cut-over planAuditing an inherited Odoo connectorWhat to check in one afternoon before touching a lineSelling on several marketplaces from a single OdooCatalogue, stock and orders without parallel panelsOdoo connector for your softwareHow we do it with technology partnersOdoo 17, 18 and 19 modules and connectorsAmazon, Mirakl, ManoMano, AliExpress and carriers

What we do about this

Custom integrationsWhat it does, screenshots, versions and price.

Want us to review your case?

We look at your channels, stock, carriers and Odoo version to propose the cleanest path, and we tell you plainly if the middleware should stay. Email comercial@flexigobe.com or call +34 616 809 504.

Talk to an engineer