Integrating ERP with E-Commerce: Common Pitfalls and How to Avoid Them

Last updated: · By Namtech Pte Ltd

Abstract network diagram of glowing red-copper hexagonal nodes joined by thin lines on a black background, suggesting connected systems exchanging data

ERP and e-commerce integrations usually fail because of missing decisions, not missing code. The common pitfalls are undefined data ownership, assuming real-time sync is needed, unmapped order statuses, failures that nobody is alerted to, and tax data handled in the wrong system. Each is avoided by agreeing a written field-mapping specification before any development starts.

Why integration projects fail

Most ERP-to-e-commerce integration failures are governance failures, not technical failures. Connecting two APIs is well-documented work; the hard part is deciding, field by field, which system is allowed to change what, how often, and what happens when something goes wrong.

Projects that start without formal field-mapping documentation, agreed data ownership rules and defined error handling tend to produce integrations that pass a demo with clean test orders and then break on real ones: partial refunds, split shipments, offline payments, bundles and returns. The five pitfalls below are the ones we see most often in Namtech's integration work, and each maps to a decision that belongs in the specification.

Pitfall 1: Undefined data ownership

The most common failure point is letting two systems act as the source of truth for the same data. When stock levels, prices or customer records can be edited in both the ERP and the online store, the integration has no rule for which edit wins, and conflicts compound with every sync cycle.

The fix is to name one master system for each data type and make the other system read-only for that data. A typical split for a business running Odoo or a similar ERP alongside Shopify or WooCommerce looks like this:

Data typeUsual master systemDirection of syncWhy
Product master (SKU, cost, weight, barcode)ERPERP to storePurchasing, costing and warehouse operations depend on it
Marketing content (descriptions, images, SEO fields)StoreNot synced, or store to ERPEdited by the marketing team, not needed for fulfilment
Stock on handERPERP to storeReceipts, transfers and counts happen in the warehouse
OrdersStore (creation), ERP (fulfilment)Store to ERP, then status backThe customer places the order online; the warehouse ships it
Invoices, credit notes and GSTERPERP onlyAccounting and tax reporting must come from one ledger
Price lists and promotionsAgree explicitlyOne direction onlyOften contested between finance and marketing; decide before build

The exact split varies, but the rule does not: every field in the mapping has exactly one owner. Inventory deserves particular care because platforms model stock in more than one state. Shopify, for example, distinguishes available stock from committed stock, and its documentation explains that when an order is placed it decrements the available quantity and increments the committed quantity (Shopify inventory states). If the ERP pushes an on-hand figure into a field the store treats as available, unfulfilled orders get counted twice.

Pitfall 2: Real-time sync assumptions

Real-time bi-directional sync is rarely necessary, and assuming it is adds cost and failure points without a matching business benefit. Real-time sync multiplies API calls, increases the error surface and makes failures harder to diagnose, because problems appear as intermittent mismatches rather than a single failed batch.

In our experience, most SME operations are well served by scheduled sync at 15–60 minute intervals (Namtech guidance) with defined conflict-resolution rules, reserving near-real-time updates for the few flows where minutes matter, such as stock on fast-selling SKUs during a campaign.

Where event-driven updates are used, design for imperfect delivery. Shopify's documentation says it does not guarantee ordering within a webhook topic or across topics for the same resource, recommends using timestamps to organise events, and advises apps not to rely on receiving every webhook, using reconciliation jobs that periodically fetch data instead (Shopify webhooks overview). APIs are also rate-limited: Shopify enforces most limits with a leaky bucket algorithm, and if the bucket fills the app receives a throttle error and must wait (Shopify API limits). A large initial product or stock load therefore needs batching and retry logic, not a single loop.

ApproachBest forMain riskMitigation
Scheduled batch syncProducts, prices, stock on most SKUs, settled ordersData is minutes oldPick an interval the business can live with; show last-sync time
Event-driven (webhooks)New orders, cancellations, refundsMissed, duplicated or out-of-order eventsIdempotent handlers, timestamp checks, periodic reconciliation
Hybrid (webhooks plus nightly reconciliation)Most growing online retailersTwo mechanisms to maintainReconciliation report reviewed by a named owner

Pitfall 3: Order status mapping gaps

E-commerce order statuses do not map one-to-one to ERP fulfilment and accounting steps, so the mapping has to be written down explicitly. Labels such as "processing" or "refunded" carry platform-specific meanings and side effects that an ERP will not infer.

WooCommerce is a good illustration. Its documentation defines Processing as payment received with stock already reduced, On hold as awaiting payment confirmation with stock reduced, and Failed as a declined payment, at which point previously reduced stock is returned to inventory (WooCommerce order statuses). If the ERP also deducts stock on order import, every order is deducted twice. Shopify, by contrast, exposes separate financial and fulfilment status fields on the order rather than one combined status (Shopify Order object), so a mapping has to consider both.

An example mapping for WooCommerce to an ERP sales flow (illustrative; adjust to your own fulfilment process):

WooCommerce statusPlatform meaningExample ERP action
pendingOrder received, no payment yetDo not create a sales order, or create it as a draft quotation
on-holdAwaiting payment confirmation; stock reducedCreate sales order but block delivery until payment is confirmed
processingPaid; stock reduced; awaiting fulfilmentConfirm sales order and create the delivery; do not deduct stock a second time
completedFulfilledUsually set by the ERP once the delivery is validated, then pushed back to the store
cancelledCancelled by admin or customer; stock returnedCancel the sales order and any open delivery
refundedPayment refundedIssue a credit note; decide whether goods return to stock
failedPayment declined; stock returnedNo sales order, or cancel the draft

The edge cases are where integrations break: partial refunds, partial shipments, orders edited after payment, and exchanges. Each needs a row in the specification, even if the agreed answer is "handled manually and flagged to the operations team".

Pitfall 4: Silent failures and missing alerts

An integration without monitoring fails silently, and the business usually discovers it from a customer complaint or a month-end reconciliation. Error handling is a requirement, not a later improvement.

Platform behaviour makes this concrete. WooCommerce automatically disables a webhook after more than five consecutive delivery failures, where 4xx or 5xx responses count as failures (WooCommerce webhooks). A short ERP outage can therefore stop order delivery entirely until someone re-enables the webhook. Shopify recommends verifying signatures and ignoring duplicate deliveries using the X-Shopify-Webhook-Id header (Shopify webhooks overview), which means handlers must be idempotent so a resent order does not create a second sales order.

A minimum error-handling design includes:

  • a log of every inbound and outbound message with its status;
  • automatic retries with a cap, then a queue of failed records for human review;
  • an alert to a named person, by email or chat, when failures exceed an agreed threshold;
  • a daily reconciliation report comparing order counts, totals and stock between systems; and
  • a documented procedure for replaying failed records after an outage.

Pitfall 5: Tax and invoice data in the wrong system

Invoices, credit notes and GST should be produced by the ERP, not by the online store, because the ERP is where accounting and tax reporting live. When the store generates its own invoices and the ERP generates another set, the two rarely reconcile cleanly once refunds and discounts are involved.

For Singapore businesses this matters more each year. IRAS states that all GST-registered businesses must submit invoice data to IRAS using InvoiceNow-Ready Solutions, rolled out in phases: from 1 November 2025 for companies registering voluntarily within six months of incorporation, from 1 April 2026 for any business applying for voluntary GST registration, and from 1 April 2028 onwards for newly compulsory registrants and existing registrants by turnover band (IRAS GST InvoiceNow Requirement). An integration that keeps invoicing in the ERP puts the business in a better position to meet this from one system. Check whether your accounting software is on IMDA's accredited InvoiceNow-Ready Solutions list, which the IRAS page links to.

The correct approach to integration architecture

An ERP-to-e-commerce integration should begin with a formal data-mapping workshop whose output becomes the integration specification. Development, testing and acceptance are then measured against that document rather than against verbal expectations.

Specification sectionWhat it must define
Field mapEvery synchronised field, its source and target field names, and any transformation
OwnershipThe master system for each data type, and which system is read-only
Direction and frequencySync direction per field; batch interval or event trigger per flow
Status mappingEvery platform order status and edge case, mapped to an ERP action
Error handlingRetries, failure queue, alert recipients and thresholds, replay procedure
ReconciliationWhich totals are compared, how often, and who reviews the report
Tax and invoicingWhich system issues invoices and credit notes, and how GST is calculated
Test casesRealistic scenarios: partial refund, split shipment, offline payment, bundle, return

Two technical choices are worth settling in the same workshop. First, use the API the platform intends for new work: Shopify describes its REST Admin API as legacy and requires new public apps to use the GraphQL Admin API (Shopify REST Admin API reference). Second, confirm how the ERP side will be accessed; Odoo, for instance, documents external access to its models over XML-RPC (Odoo External API), and connector modules build on that layer.

Namtech Pte Ltd, a Singapore AI transformation consultancy, runs this workshop as the first step of its Odoo ERP implementations and e-commerce builds. If you are still choosing an ERP, our guide to ERP for Singapore SMEs covers the selection stage.

Integrations that work in testing and fail in production are almost always missing a written specification of who owns each field, when it moves and what happens when it fails.

FAQ

Questions this article answers

Why do ERP and e-commerce integrations fail?

Most fail because of governance gaps, not technology. Projects started without a field-mapping document, agreed data ownership, order-status mapping and defined error handling tend to pass tests with clean orders and then break on refunds, split shipments and offline payments in production.

Do I need real-time sync between my ERP and online store?

Usually not. In Namtech's experience, most SME operations are well served by scheduled sync every 15–60 minutes with conflict-resolution rules, plus webhooks for new orders and a periodic reconciliation job, since platforms such as Shopify do not guarantee webhook delivery or ordering.

Which system should be the source of truth for stock levels?

The ERP, in most cases. Receipts, transfers and stock counts happen in the warehouse, so the ERP should own stock on hand and push it to the store, which treats that data as read-only. Take care to map the right stock state, because platforms such as Shopify separate available from committed stock.

Should invoices come from the online store or the ERP?

The ERP. Accounting and GST reporting should come from one ledger. For Singapore businesses this also simplifies the IRAS GST InvoiceNow Requirement, which is being phased in for GST-registered businesses from November 2025 onwards.

What should an ERP integration specification contain?

It should list every synchronised field and its owner, the sync direction and frequency, a mapping of every order status and edge case to an ERP action, error handling and alerting, reconciliation checks, which system issues invoices, and realistic test cases.

Talk to Namtech

Discuss how this applies to your business

Book a consultation with a Namtech consultant. Tell us where you are today and we will come back within one business day.

All insights

We reply within one business day. Your details are handled under our Privacy Policy.