Nearly every company that connects Amazon Seller Central to Odoo goes through the same arc: everything works fine in testing during the first month, and a few weeks into real volume the same symptoms start showing up. Stock counts that don't add up, orders that get duplicated, tracking that reaches Amazon late, the API suddenly throwing 429 errors, or a token that just stops working one Monday morning with no warning.
Key point: almost none of these errors are a problem with Amazon or with Odoo on its own. They show up in the sync layer, when the connector doesn't respect the SP-API's asynchronous model (real-time notifications, per-endpoint rate limits, short-lived OAuth tokens) and instead does simple polling every few minutes and hopes everything arrives on time.
Why the Amazon-Odoo integration breaks (and it's not always obvious)
Amazon's SP-API isn't a simple request-response REST API. It combines synchronous calls with an asynchronous notification system (the Notifications API, delivered via SQS or EventBridge), a reports model where documents are generated in the background and have to be polled until they're ready, and a requests-per-second limit that's different for every single operation, not one global cap for the whole account. Authentication runs through Login With Amazon (LWA): the access token expires every hour and needs refreshing with the refresh_token before it does.
A lot of integrations, especially the ones built on generic automation tools like Zapier, Make or an iPaaS with no Amazon-specific logic, flatten all of that down to a cron job that checks for orders every few minutes and calls it a day. That shortcut is the direct root cause of most of the errors in the table below.
Table: symptom, likely cause, and how to prevent it
Eight real symptoms we keep seeing in operations selling on Amazon through Odoo, with the most likely technical cause for each and the fix a connector built to actually run in production applies, not just one built to survive a demo.
| Symptom | Likely cause | How to prevent it |
|---|---|---|
| Stock drift / overselling on Amazon | Sync runs on a 30-60 minute poll; the real-time inventory Notifications API isn't consumed at all | Subscribe to inventory notifications and push updates immediately after every stock move in Odoo, plus a configurable safety buffer |
| Duplicate orders in Odoo | Connector retries without idempotency; AmazonOrderId isn't used as the unique key | Idempotent upsert keyed on AmazonOrderId, backed by a real uniqueness constraint at the database level |
| Tracking reaches Amazon late (Late Shipment Rate climbs) | Tracking is pushed through an overnight batch cron instead of firing when the delivery is validated | An automated action calls the Shipping API the instant the delivery is validated in Odoo |
| 429 errors / "Request throttled" | The per-operation rate limit isn't respected (every SP-API endpoint has its own bucket, not a shared one) | A job queue with exponential backoff and its own rate limiter per endpoint, not one global limit |
| Expired OAuth token or invalid refresh_token | No automatic renewal of the LWA access token, or consent was revoked in Seller Central without anyone noticing | Automatic renewal with a safety margin, plus an alert when the refresh itself fails (not when a real order fails downstream) |
| Prices don't match between Amazon and other channels | No single source of truth; price gets edited by hand directly in Seller Central | Odoo as the price source of truth, with explicit conflict rules whenever a manual edit is detected on Amazon |
| Refunds and returns don't reconcile in accounting | Only orders get processed; Amazon's Returns/Refunds reports are never imported | Automatic import of Returns Reports into credit accounting entries, not just into stock |
| Works fine in testing, breaks with multiple accounts or marketplaces | Credentials and sync state are hardcoded for a single seller account | A credentials-per-company/marketplace model built into the data model from day one, not bolted on later |
Checklist: what a well-built Amazon-Odoo connector should have
Before signing off on an Amazon-Odoo connector, yours or one you're evaluating buying, run it through this list. It's not theory: these are the exact points where we've watched real integrations break.
- Consumes Amazon's Notifications API (SQS/EventBridge) instead of relying only on periodic polling
- Imports orders idempotently using AmazonOrderId as the unique key
- Sends tracking to Amazon the moment the delivery is validated, not in an overnight batch
- Applies a rate limiter and exponential backoff per endpoint, not one rough global limit
- Refreshes the OAuth (LWA) token automatically, with an early alert if the refresh fails
- Logs every API call with its response code and payload, not just a generic "sync OK"
- Supports multiple accounts and marketplaces from the data model itself, not as an afterthought
How we do it at FlexigoTech: our Amazon Connector for Odoo
Our Amazon Connector for Odoo runs FBA and FBM in real production over the SP-API, built specifically to avoid every one of the eight failure points in the table above: idempotent order import keyed on AmazonOrderId, tracking sent the moment the delivery is validated, and automatic token renewal, among others. It isn't a generic automation layer bolted onto the API, it's a native Odoo module built to handle real volume, not just to survive a demo.
If you already run Odoo but your current connector, in-house or third-party, is showing you one of these symptoms, the fix is often not swapping connectors but reviewing how it's actually deployed inside your instance. That usually gets sorted out as part of a proper Odoo 19 implementation project, with marketplace sync scoped in from day one instead of bolted on as a patch afterward.
Useful links within FlexigoTech
Frequently asked questions
Why does stock go out of sync between Amazon and Odoo even though I have a connector installed?
Almost always because the connector syncs by polling on a fixed interval instead of reacting to Amazon's real-time inventory notifications. Between one pass and the next there's a window where Amazon and Odoo disagree, and on a fast-moving catalog that window is enough to sell something you no longer have.
How do I stop duplicate orders when Amazon resends the same notification?
Amazon can and does resend the same order notification more than once, that's a normal part of its delivery model. The fix isn't filtering resends by hand, it's making the connector treat the AmazonOrderId as a unique key and perform an idempotent upsert: update the order if it already exists, create it if it doesn't. It never inserts the same order twice.
What is a 429 error on the Amazon SP-API and how do you fix it from Odoo?
It's a throttling error: you've exceeded the requests-per-second limit for that specific operation (every SP-API endpoint has its own bucket, there's no single global limit). The fix is a job queue that respects each endpoint's rate limit and retries with exponential backoff, instead of hammering the same call again a few seconds later.
What happens if my Amazon OAuth token expires in production?
Amazon uses Login With Amazon (LWA): the access token expires every hour and has to be refreshed with the refresh_token before it does. If the connector doesn't automate that renewal, or if the seller revoked consent in Seller Central without telling anyone, calls start failing with authorization errors until someone reconnects the account by hand.
Does late tracking to Amazon actually hurt my account?
Yes. Amazon tracks your Late Shipment Rate, and if it climbs past the threshold it can affect account health and listing visibility, on top of the direct hit to buyer experience. If tracking is pushed through an overnight batch cron instead of the moment the delivery is validated in Odoo, that delay is on the connector, not on Amazon.
Want us to look at your Amazon integration?
Tell us which symptom you're seeing, stock, duplicate orders, tracking or tokens, and on the first call we'll tell you whether it's a quick fix or the connector needs a real overhaul. Email us at comercial@flexigobe.com or call +34 639 913 105.
