Way4Tech
๐Ÿ”—Core

Odoo Integration

Integrations are easy to demonstrate and hard to run. The work is not the connection, it is what happens on the day one side is down.

Integrate Odoo with payment gateways, shipping carriers, e-commerce platforms, banking APIs, WhatsApp, and any custom REST/GraphQL service.

Any competent developer can move a record from one system to another. What separates an integration that lasts from one that quietly corrupts your data is everything around that: deciding which system is right when the two disagree, making sure a retried message cannot be applied twice, and knowing within minutes when the flow has stopped rather than at month end.

So we design the failure behaviour before the happy path. Every flow gets a direction, a master of record, an idempotency key, a retry policy and a log entry that a support person can search without reading code. Anything that cannot be retried safely gets a queue and a human review step instead of an automatic one.

There is a reconciliation step too, and it is the part clients most often skip. A scheduled comparison of both sides catches the slow drift that silent failures cause. Finding a two-record gap on a Tuesday is a ticket. Finding a two-thousand-record gap at year end is a project.

What is included

  • โœ“ Payment gateways (Stripe, HyperPay, PayTabs, Mada, Razorpay)
  • โœ“ Shipping carriers (Aramex, DHL, FedEx, local couriers)
  • โœ“ E-commerce (Shopify, WooCommerce, Magento, Amazon)
  • โœ“ WhatsApp Business API
  • โœ“ Banking, ERP-to-ERP, EDI
  • โœ“ Power BI / Metabase / Tableau connectors
  • โœ“ Real-time webhook pipelines
  • โœ“ Retry, idempotency, and audit logging

How the engagement runs

  1. 1

    Data flow mapping

    Agree what moves, in which direction, and who wins a disagreement.

    • List each object that crosses the boundary and give it one direction, or state clearly that it is two-way
    • Name the master of record per field, not per object, because the answer is usually mixed
    • Decide the matching key between systems, and what happens when it is missing
    • Agree the update frequency each flow genuinely needs, since real-time is expensive and rarely required everywhere

    You end up with: A written flow map with direction, master, key and frequency per object.

  2. 2

    Interface and access setup

    Get credentials, environments and limits settled before code.

    • Separate test and live credentials, with a staging instance that cannot touch live data
    • Read the rate limits and pagination rules of the other system, and design inside them
    • Confirm which events the other side can push and which have to be polled
    • Establish the error format the other side returns, because that decides what can be retried

    You end up with: Working sandbox access on both sides, with limits and error behaviour documented.

  3. 3

    Build with failure handling

    Write the flow so that the failure case is ordinary, not exceptional.

    • Idempotency on every inbound message so a replay cannot double-post
    • Retry with backoff for transient errors, and a dead-letter queue for the rest
    • Signature or token verification on every inbound webhook
    • An audit log recording payload, outcome and reference, searchable by a support person
    • Field-level mapping applied in one place, so a change to it is one change

    You end up with: A working connector with a visible queue, a retry policy and a searchable log.

  4. 4

    Testing the unhappy paths

    Prove the behaviour when things go wrong, which is the only test that matters later.

    • Duplicate delivery, out-of-order delivery and partial payloads
    • The other system offline for an extended period, then back
    • Currency, rounding and unit mismatches, which are the quiet data-corruption cases
    • Volume test at a realistic peak, not at an average day
    • Cancellations, refunds and returns, which most integrations handle worse than creations

    You end up with: A test record covering each failure case with the observed behaviour.

  5. 5

    Go-live and reconciliation

    Cut over without a backlog of half-synced records, then keep it honest.

    • Backfill historical records where needed, with the matching key applied first
    • Run both systems in parallel briefly where the process allows it
    • Schedule a recurring reconciliation that compares counts and totals on both sides
    • Alerting on queue depth and on age of the oldest unprocessed message

    You end up with: A live integration with monitoring and a scheduled reconciliation report.

What you need to provide

The schedule slips on these more often than on anything technical.

  • โ†’ API credentials for both systems, plus sandbox or test access on the third-party side
  • โ†’ A technical contact at the other vendor who will answer questions during the build
  • โ†’ The documentation for any in-house system, and someone who knows the parts the documentation gets wrong
  • โ†’ A decision on the master of record per object, which is a business call and not ours to make
  • โ†’ Sample payloads from real traffic, including the messy ones
  • โ†’ Agreement on what happens to records that fail validation and need a human

Decisions you will be asked to make

Which system is master

The most consequential decision in the whole engagement, and it is usually mixed: one system owns the price, another owns stock, a third owns the customer address. Deciding per field prevents the loop where two systems overwrite each other forever.

Real-time or scheduled

Real-time costs more to build, more to run and more to debug. Orders usually justify it. Product descriptions almost never do. We ask for the business consequence of a delay before agreeing to push a flow to real-time.

How to handle records that fail validation

Silently skipping is what produces the gap you find at year end. The options are a queue with a human review, an automatic hold, or a rejection back to the source, and the right answer differs per flow.

How much history to backfill

Backfilling everything is slow and often unnecessary. Backfilling nothing leaves reports that start mid-year. This is a reporting decision, so we ask the person who runs the reports.

Where this goes wrong

The failure modes we plan around, and what the plan does about each one.

No idempotency

The other side retries, the message applies twice, and you have a duplicate order or a doubled stock move. Every inbound message carries a key, and applying the same key twice is a no-op.

Errors that go nowhere

A flow that logs failures to a file nobody reads is a flow that has stopped, and you will find out from a customer. Failures go to a queue with an owner and an alert.

Two-way sync with no owner

Both systems write, both trigger the other, and the record ping-pongs until somebody turns the integration off. Ownership per field breaks the loop.

Ignoring rate limits until production

It works at test volume and throttles on the first busy day. Limits and pagination are designed for at the start, not patched in after an incident.

No reconciliation

Small silent gaps compound. A scheduled count-and-total comparison catches drift while it is still a ticket rather than a quarter of manual correction.

Mapping scattered through the code

When the mapping lives in five places, one change is five edits and one of them gets missed. Mapping is defined once and applied everywhere from there.

Testing only the creation path

Refunds, cancellations, partial shipments and returns are where integrations really break, because they are rarer and were never tested. They go on the test plan explicitly.

Not included

Stated up front so the proposal has no soft edges.

  • ร— Fees, subscriptions and transaction charges of the third-party service
  • ร— Changes to the other system, unless we are engaged on that side too
  • ร— Guaranteed uptime of an external API, and outages caused by the other vendor
  • ร— Reworking a flow after the other vendor changes their API without notice, which is quoted when it happens
  • ร— Certification or partner approval processes run by the third party
  • ร— Historical data correction for records that were already wrong before the integration existed

How this is priced

Integrations are quoted per flow, so a scope can be reduced by dropping a flow rather than by cutting quality on all of them. A first connector plus reconciliation is usually fixed-price. Continuing maintenance against a third-party API that changes belongs in a support agreement.

See the published bands โ†’

Modules that come up on this work

Ready-built modules from our own catalogue. Where one of these covers the requirement, installing it beats writing it.

WT Shopify Connector

Production-grade Odoo โ†” Shopify connector. Multi-store, two-way sync of orders/customers/products/inventory, webhook + scheduled updates, queue with retry/error visibility, fulfillment + tracking, returns/refunds, payouts, metafield mapping, abandoned-checkout recovery, KPI dashboard.

Why here: Where the requirement is a storefront rather than a bespoke API, a maintained connector is cheaper than building and keeps you off a private fork.

Sales/Commerce

WhatsApp Connector

Send invoices, quotations and reminders on WhatsApp from Odoo Community, through the official Meta WhatsApp Cloud API, with templates, a two-way inbox and delivery receipts.

Why here: Messaging requests usually arrive as an integration ticket, and this covers the common ones without a custom build.

Marketing

Gulf and South Asia Shipping Carriers

Aramex, SMSA, Naqel, Leopards and TCS shipping connector: rates, waybills, labels, cancellation and tracking, with a simulation mode and a full call log.

Why here: Carrier work is repetitive and regional. Starting from an existing connector saves rebuilding label and tracking handling per carrier.

Inventory/Delivery

Bank Statement Import (OFX, QIF, CAMT.053, CSV)

Import bank statements from OFX, QIF, CAMT.053 and CSV files, with duplicate protection, journal matching and partner matching, for Odoo Community.

Why here: Bank feeds are often the first integration a finance team asks for, and file-based import covers it without a banking API project.

Accounting/Accounting

Audit Log & Access Tracking

Track who created, changed or deleted records - full audit trail with field-level history and access-rights tracking.

Why here: When two systems disagree, the first question is which side wrote last. A change log answers it in seconds.

Productivity

PWA Mobile App + Real-Time Push Notifications

Install Odoo as a mobile app (PWA) and send real-time web push notifications to phones & desktops - branded app icon, one-click setup, reusable push API. No Enterprise, no app store.

Why here: Integration work often ends with a notification requirement, and a reusable push route beats another one-off email.

Productivity

Odoo API integration to the systems you already run, whether that is a REST endpoint, a file drop or a database view.

Where we deliver this

Payment and shipping options differ by market. The country pages set out what applies where you operate.

๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia (KSA) Odoo partner in Riyadh, Jeddah, Dammam. ZATCA Phase 2 certified. ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates Odoo partner in Dubai, Abu Dhabi, Sharjah. UAE VAT & FTA ready. ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar Odoo partner in Doha. Qatar tax & payroll localization. ๐Ÿ‡ต๐Ÿ‡ฐ Pakistan Odoo partner in Karachi, Lahore, Islamabad. FBR & SECP compliant. ๐Ÿ‡ฎ๐Ÿ‡ณ India Odoo partner in Mumbai, Bangalore, Delhi. GST & IRN ready. ๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom Odoo partner in London, Manchester. MTD VAT & RTI payroll. ๐Ÿ‡บ๐Ÿ‡ธ United States Odoo partner in New York, LA, Chicago. Sales Tax & 1099 ready. ๐Ÿ‡ฆ๐Ÿ‡บ Australia Odoo partner in Sydney, Melbourne. GST & STP Phase 2. ๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait Odoo partner in Kuwait. PIFSS & WPS payroll. ๐Ÿ‡ด๐Ÿ‡ฒ Oman Odoo partner in Muscat. VAT 5% & Omanization compliance. ๐Ÿ‡ง๐Ÿ‡ญ Bahrain Odoo partner in Manama. NBR VAT & SIO payroll. ๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh Odoo partner in Dhaka, Chattogram. NBR VAT compliance. ๐Ÿ‡ช๐Ÿ‡ฌ Egypt Odoo partner in Cairo, Alexandria. ETA e-invoicing ready. ๐Ÿ‡ฏ๐Ÿ‡ด Jordan Odoo partner in Amman. ISTD e-invoicing & SSC payroll. ๐Ÿ‡น๐Ÿ‡ท Turkey Odoo partner in Istanbul, Ankara. GIB e-Fatura integration. ๐Ÿ‡ฉ๐Ÿ‡ช Germany Odoo partner in Berlin, Munich. GoBD & SKR03/SKR04. ๐Ÿ‡ซ๐Ÿ‡ท France Odoo partner in Paris, Lyon. FEC & PEPPOL compliant. ๐Ÿ‡จ๐Ÿ‡ฆ Canada Odoo partner in Toronto, Vancouver. GST/HST/PST localized.
All 18 countries โ†’

Odoo Integration: common questions

How long does a typical integration take?

A single well-documented flow with sandbox access on both sides is a short piece of work. What extends it is nearly always outside the code: waiting for credentials, discovering the other API is undocumented in the area you need, or finding that nobody has decided which system owns the customer record.

Can you integrate a system that has no API?

Often, through file exchange, database access or scheduled exports, and the result works. It is less immediate and needs stricter reconciliation because there is no acknowledgement to rely on. We would rather do that properly than pretend a scraped interface is an integration.

What happens when the other system is down?

Messages queue and retry with backoff, and after a defined number of attempts they go to a dead-letter queue with an alert. Nothing is dropped. When the other side returns, the queue drains in order and the reconciliation confirms nothing was lost.

Who fixes it when the third party changes their API?

Under a support agreement, we do, and we watch for deprecation notices. Without one it is quoted when it happens. Third-party APIs change more often than most buyers expect, which is the main argument for holding integrations under support rather than treating them as finished.

Do we need real-time sync?

Less often than people assume. Orders and payments usually do. Product data, customer records and reporting rarely justify the cost, and a scheduled flow every few minutes is easier to debug and cheaper to run. We ask what a delay actually costs before deciding.

How do we know it is still working?

Queue depth and oldest-message age are monitored and alerted, and a scheduled reconciliation compares both sides and reports differences. Silence from an integration is not evidence that it is running.

Read next

Tell us what you are trying to fix

A 30-minute call is usually enough to tell you whether this is a small piece of work or a project, and to say so before anyone writes a proposal.