Mon – Sat: 9:00 AM – 7:00 PM IST
iDempiere · Open-Source ERP

How to Integrate iDempiere ERP with Shopify and WooCommerce: A Practical Guide

Proven patterns for integrating iDempiere ERP with Shopify, WooCommerce, BigCommerce and WinxCommerce — what to sync, how to sync it, the edge cases nobody tells you about, and monitoring that catches failures before customers complain.

By SCM Software Lab Published 2026-04-23 10 min read iDempiere · Open-Source ERP
iDempiere Shopify WooCommerce eCommerce Integration
0
Entities synced between store and ERP
0
Source of truth for stock and price
0
Storefront platforms we integrate
0
Orders re-keyed by hand after go-live
On This Page

Everything in this guide

Grouped by the decision each section supports. Jump straight to the part you need.

One Source of Truth

Why integrate iDempiere with your storefront?

If your eCommerce store lives in Shopify (or WooCommerce, BigCommerce, WinxCommerce) and your accounting, inventory, and fulfillment live in iDempiere, you are either double-keying orders or living with stale data. Neither scales.

A well-designed integration makes iDempiere the single source of truth for master data (products, prices, inventory) and the system of record for financial transactions (orders → invoices → payments → GL). Your storefront becomes a sales channel, not a data island.

Scope That Works

What actually gets synced

The integration scope we recommend for 95% of clients:

EntityDirectionFrequency
Products (catalog)iDempiere → ShopifyOn change + daily full sync
Prices / price listsiDempiere → ShopifyOn change
Inventory / stockiDempiere → ShopifyNear real-time (every 5 min)
OrdersShopify → iDempiereWebhook (real-time)
CustomersBi-directional (Shopify → iDempiere primary)On order creation
Fulfillment statusiDempiere → ShopifyOn shipment confirmation
InvoicesGenerated in iDempiere, emailed / displayed to customerOn invoice
Side By Side

Shopify, WooCommerce and the rest

The ERP side of the integration barely changes between platforms. What changes is how you authenticate, how orders reach you, and who is responsible when the store goes down.

AspectShopifyWooCommerceBigCommerce
Hosting modelFully hosted SaaSSelf-hosted on your WordPressFully hosted SaaS
APIAdmin API, REST and GraphQLREST API, versionedREST and GraphQL
AuthenticationApp access tokenConsumer key and secret over HTTPSOAuth access token
Order notificationWebhooks, reliableWebhooks, dependent on your own site being upWebhooks
Multi-warehouse stockNative Locations, map one-to-one to iDempiere warehousesNeeds a plugin; behaviour varies by pluginNative multi-location
Rate limitsEnforced and documented; design for themBounded by your own serverEnforced and documented
Who fixes an outageThe platformYou, or your hosting providerThe platform
Integration effortLowest — consistent, well-documented behaviourVaries with your plugin stackLow

WinxCommerce and other platforms follow the same pattern. Where a platform exposes a documented REST API and webhooks, the iDempiere side is unchanged and only the adapter differs. Storefront APIs are versioned and do change — confirm the current contract before scoping a build.

Under the Hood

Integration architecture

We build this as an OSGi plugin inside iDempiere plus a thin middleware layer (a Spring Boot service or serverless functions) depending on volume. Key components:

  • Shopify Admin API (REST + GraphQL) for catalog / inventory / order operations
  • Shopify Webhooks for order create / order update / order cancel events
  • iDempiere REST Web Services (Adaxa REST or Dev-mode REST) for ERP-side operations
  • A message queue (Redis Streams, RabbitMQ, or SQS) for async processing and retries
  • An audit table in iDempiere logging every sync event with payload, status, and retry count
Catalog Flow

Products & pricing sync

Product master lives in iDempiere. When a product changes, a model validator fires an outbound message and the middleware maps ERP fields onto storefront fields.

iDempiereStorefrontNotes
M_Product.Valueproduct handle and variant SKUThe join key for everything else. Never let it change after go-live.
M_Product.Nameproduct titleMerchandising teams often want a different title online — decide who wins before you build.
M_Product.Descriptionproduct body / descriptionHTML from the ERP needs sanitising before it reaches the storefront.
M_PriceList pricevariant priceCurrency-specific. One price list per storefront and currency keeps this unambiguous.
M_Attachment imagesproduct imagesPush order matters; the first image is usually the one the store shows in listings.
Attribute Sets (size, colour)product options and variantsRequires attribute discipline in the ERP. Without it, variant sync falls apart within weeks.
M_StorageOnHand per warehouseinventory level per locationMap warehouses to store locations one-to-one and send absolute quantities.

The single most common cause of a failed catalogue sync is inconsistent product coding in the ERP. Fix that before the integration, not during it — it is cheaper and it improves the ERP regardless of what you connect to it.

The Spicy Part

Inventory / stock sync

Inventory is the spicy part. iDempiere's M_StorageOnHand is your source of truth per warehouse. Shopify has inventory_levels per Location. Map iDempiere warehouses to Shopify locations 1:1.

Two modes:

  • Event-driven: every M_Transaction triggers a partial sync. Low latency (~30s) but spiky.
  • Scheduled: every 5 minutes push a delta. Simpler and more resilient.

Always send absolute quantities, not deltas. Delta-based syncs drift; absolute-quantity syncs self-heal.

Order To Cash

Orders, fulfilment & invoices

A webhook fires the moment a customer checks out. Within seconds the order exists in the ERP as a real document, not a staging record.

01

Business partner

A customer record is created if this is a new buyer, or matched to an existing one. This is the step where duplicates are prevented rather than cleaned up later.

02

Sales order

A standard sales order against the correct sales channel, so web revenue can always be separated from trade and retail in reporting.

03

Order lines and tax

Product, quantity and price per line, with tax recomputed by the ERP's own rules rather than carried across from the storefront.

04

Payment allocation

Where the order was paid at checkout, the payment is recorded and allocated, so the receivable never appears open for an order that is already settled.

05

Shipment, invoice, and back to the store

When the warehouse ships, the ERP generates the shipment and invoice, posts to the ledger, and sends the fulfilment update with carrier and tracking number back to the storefront so the customer sees it.

Clean Master Data

Customer master & addresses

Deduplication is the hardest problem. We match on email first, then phone, then name + pincode. New customers get a C_BPartner record with a generated customer code. Existing customers get their address list merged, not overwritten.

B2B customers with GSTIN / VAT-ID on the storefront need special handling — we validate the tax ID against the official registry (GSTN, HMRC, etc.) before creating the tax-included invoice.

Learned The Hard Way

Common pitfalls and how to avoid them

Every one of these is cheap to design around and expensive to discover in production.

Flash sales saturate the queue

Hundreds of orders in a minute will overwhelm a naive listener. Acknowledge the webhook immediately, process asynchronously, raise worker concurrency for the event, and make sure nothing is lost if a worker dies mid-order.

Tax drift between store and ERP

Never post the storefront's calculated tax straight to the invoice. Let the ERP recompute with your own place-of-supply and registration rules, and reconcile the difference rather than inheriting it.

Partial fulfilments

Ship eight of ten items and the fulfilment payload must match the shipment lines exactly, or the customer is told the wrong things have shipped. Model partial shipments properly from the start.

Refunds edited onto the original order

Returns belong in their own documents: authorisation, return shipment, credit note. Editing the original order destroys the audit trail and makes any historical financial position impossible to rebuild.

Multi-channel added as an afterthought

If a second storefront or marketplace is even possible, make sales channel a first-class dimension on day one. Retrofitting it across orders, stock and reporting after go-live is a project in its own right.

Delta-based stock sync

Sending adjustments rather than absolute quantities means one missed message silently corrupts the figure forever. Absolute quantities self-heal on the next sync; deltas drift until somebody notices an oversell.

Trust, Then Verify

Monitoring & reconciliation

Build the dashboard before you go live. Minimum KPIs:

  • Orders received vs. orders booked in iDempiere (hourly)
  • Inventory sync lag per SKU (p50 / p95 / p99)
  • Failed webhook queue depth
  • Daily reconciliation: Shopify orders total vs. iDempiere sales journal total

We wire these into Grafana or Power BI and alert on anomalies. Customers notice inventory-sync failures faster than you do — don't let them tell you first.

Need a robust iDempiere ↔ eCommerce integration?

We've built and run these integrations in production for 50+ clients. Get a free architecture review and a fixed-price proposal.

Get a Fixed-Price Quote

Frequently Asked

Storefront integration questions

What operations and finance teams ask before an eCommerce integration starts.

The ERP. iDempiere knows about goods receipts, transfers, reservations, damages and returns; the storefront only knows about orders it has taken. If the store owns stock you will oversell the moment anything moves outside the web channel. Push absolute quantities from the ERP rather than adjustments, so that any missed message self-corrects on the next sync instead of drifting.
Near real time for anything you can oversell, which in practice means every few minutes rather than every second. Event-driven syncing gives the lowest latency but goes spiky during bulk goods receipts; a short scheduled delta is simpler and more resilient. Most operations are best served by a scheduled push with event triggers reserved for fast-moving lines.
Yes, and it is common when a business runs a retail brand and a trade store. The important decision is to make sales channel a first-class dimension in iDempiere from day one, so orders, stock allocation and reporting can be split by channel later without rework. Retrofitting that after go-live is genuinely painful.
Use the storefront's figure to show the customer a total at checkout, but let iDempiere recompute tax on the invoice that actually gets posted. The store applies simple rules; your ERP holds place-of-supply logic, registration status and the rates your accountant signed off. Where the two disagree, the ERP is the one that has to be right.
Match on email first, then phone, then name with postcode, and merge address lists rather than overwriting them. Guest checkouts are the usual source of duplicates because the same person buys three times without an account. Getting this wrong is expensive later, because deduplicating business partners after they carry transaction history is far harder than preventing it.
Model them as their own documents in iDempiere - a return authorisation, a return shipment and a credit note - rather than editing the original order. Editing the original destroys the audit trail and makes the financial position at any past date impossible to reconstruct, which is exactly what an auditor will ask for.
Order volume arrives faster than a naive integration can process it. Orders should land on a queue and be acknowledged immediately, then be turned into ERP documents by workers you can scale up for the event. The failure mode to design against is not slowness but silent loss, so every message needs a retry and a visible dead-letter queue.
Reconcile counts, not uptime. Orders received on the storefront against orders booked in iDempiere for the same period, and store revenue against the sales journal, checked daily. Sync latency and failed-queue depth are worth alerting on too. Customers usually notice a stock-sync failure before any dashboard does, which is the case for checking daily rather than at month-end.
More on iDempiere

Continue across our iDempiere pages

Six pages cover iDempiere here, each answering a different question — the practice, choosing a partner, what it costs, and the three integrations clients ask for most. Whichever you landed on, the rest are one click away.

Ready to roll out iDempiere for your business?

Get a free Proof of Concept — we build a working iDempiere environment with your data, modules, and integrations in 2–3 weeks. Zero upfront cost, zero obligation.