Accentra
Back to Case Studies
DeliveredRetail Ongoing (phased delivery)

A 30+ store Australian kitchenware and homewares retailer with a complex multi-channel operation

Connecting a National Retailer's ERP to a Headless Commerce Platform

7 integration domains, real-time sync

NetSuiteCommerceToolsCeligoCustom APISystem IntegrationArchitecture DesignERP Optimisation

The Challenge

This retailer operates 30+ physical stores alongside a growing eCommerce channel. NetSuite is the ERP and source of truth for products, inventory, pricing, and orders. The business was migrating from a legacy eCommerce platform to CommerceTools to gain flexibility and performance.

The integration challenge was significant. The catalogue includes thousands of SKUs with rich attribute data - colours, materials, dimensions, brand, product manuals, and marketing copy. All mastered in NetSuite, all needed in CommerceTools in a structured format. Stock availability needed to reflect real-time quantity across 30+ store locations and distribution centres. Product images were stored across multiple systems. Pricing including standard, sale, promotional, and customer-group pricing all needed to flow from NetSuite within minutes.

The legacy integration was tightly coupled and brittle. Any change to NetSuite custom fields or the commerce data model required code changes to the integration layer.

Our Approach

We designed a pub/sub-style integration architecture using Celigo, broken into six independently deployable domains:

1. Product Core Sync — Event-driven from NetSuite item changes. Celigo pulls the full record, transforms to CommerceTools product draft format, uses CT Import API for upsert. Field mapping is configuration-driven via a NetSuite custom record so new attributes don't require code changes.

2. Availability Sync — Scheduled on short intervals. Queries NetSuite for inventory across all active locations, calculates available-to-promise, pushes to CommerceTools inventory entries per channel. Each store is a CT supply channel enabling "Available at Store X" on the frontend.

3. Image Sync — Event-driven on image additions/updates. Downloads assets, validates dimensions, pushes to CommerceTools with correct ordering and alt text.

4. Offer and Pricing Sync — Pushes pricing from NetSuite price levels to CommerceTools prices. Handles embedded variant prices, promotional prices with date ranges, and customer-group pricing for B2B.

5. Colour and Variant Sync — Transformation logic mapping NetSuite matrix items to CommerceTools product variants, ensuring swatches and display names stay consistent.

6. Integration Governance — Every flow has structured error handling with categorised error types, dead letter queues, a monitoring dashboard, and Slack notifications on critical failures.

Key Metrics

Product sync latency

Before

24 hours (overnight batch)

After

Minutes (event-driven)

Integration domains

Before

1 monolithic sync

After

6 independent flows

Locations with live inventory

Before

DC only

After

30+ stores + DCs

Error rate

Before

Unmonitored

After

< 0.5% with auto-retry

New attribute lead time

Before

Code deployment

After

Configuration (~1 hour)

The Outcome

Product data changes in NetSuite appear on the webstore within minutes (previously overnight). Inventory accuracy reflects real store-level availability across all locations, enabling reliable click-and-collect. The modular architecture means adding a new product attribute takes configuration, not a code deployment. Error rates run below 0.5% with auto-retry resolving most transient failures.

The integration architecture gave us confidence to move fast on the commerce platform without worrying about whether the data would keep up. It just works.

Head of Technology

Have a similar challenge?

Book a Free Consultation