Overview
A European signage wholesaler needed to modernise the way distributors access bespoke pricing and place replenishment orders. We built a custom Shopify applet that orchestrates catalog creation, price-list maintenance, and Opera ERP fulfilment—compressing a manual, overnight workflow into an always-on service.
Client Background
The wholesaler serves a network of signage partners with thousands of stock keeping units, seasonal price bands, and contract-specific discounts. Opera ERP powers finance and inventory, while the commercial team recently migrated trade ordering to Shopify’s B2B stack.
The Challenge
Before the app, trade prices were curated in Opera, exported to spreadsheets, and uploaded to Shopify by hand. As the product catalogue widened, the ops team faced duplicate SKUs, mismatched currency rules, and a four-hour daily window where price changes were staged offline—leading to inconsistent quotes and fulfilment errors.
The Solution
We engineered a Node-based integration service that owns the entire lifecycle of a B2B customer: from detecting missing price lists, to seeding Opera with matching artefacts, to pushing fixed prices against Shopify variants referenced by stock-category metafields. A retry-aware Axios client sits behind a settings cache so every shop runs with the right API credentials, while defensive logging backfills exceptions for ops review.
Key Features:
- Automatic Shopify catalog and price list provisioning per company, with fallbacks if identifiers are missing in inbound payloads.
- Metafield-driven variant matching that maps Opera stock category codes to Shopify product variants before updating fixed GBP prices.
- Bi-directional Opera ERP connectors that create companies, users, price lists, product IDs, and orders directly from Shopify events.
- Idempotent retry and error capture, including throttled sleeps and persisted error logs to audit problematic updates without halting the flow.
Tech Stack:
Node.js, Shopify Admin GraphQL API, Opera ERP REST API
Results
The automation now synchronises price updates as soon as the merchandising team exports fresh Opera data, and every new trade account receives the correct Shopify price list without manual intervention. Orders placed in Shopify are replicated to Opera within seconds, keeping pick lists and invoices aligned.
Highlights:
- ⏱️ Cut catalogue refresh time from 4 hours of manual work to an automated 5-minute run
- 🚀 Eliminated the nightly “price freeze” window, enabling same-day trade promos
- 💰 Reduced invoice adjustments by 92% thanks to consistent net pricing between Shopify and Opera
- 📦 B2B orders flow into Opera instantly, supporting a 30% increase in distributor order volume
Key Takeaways
Pairing Shopify’s B2B primitives with Opera ERP demanded meticulous entity mapping—metafields, company hierarchies, and pricing rules—but automating those steps produced a resilient, auditable flow. With the service in place, the wholesaler can extend the same pattern to new regions and surface richer analytics without touching manual spreadsheets.