When an eCommerce Catalogue Has to Run Itself - A Custom WooCommerce Integration Built for Scale

Managing a large product catalogue manually is not a growth strategy. Our client needed their WooCommerce store to stay in sync with their supplier platform automatically - products, pricing, stock, images, and orders - without a team member touching it between imports. We built a custom plugin to make that happen.

The Brief

Our client operates a WooCommerce-based eCommerce store carrying products from multiple suppliers. Their fulfilment and catalogue management runs through a third-party supplier platform that holds the product data, stock levels, pricing, and order records. The gap between that platform and their WooCommerce store was being bridged manually – a process that was neither scalable nor reliable as the business grew.

RubyWeb was brought in to design, build, and deliver a custom WordPress integration plugin that would close that gap entirely. The objective was a fully automated, two-way sync between WooCommerce and the supplier platform – covering product imports, stock and pricing updates, image synchronisation, and order flow from checkout through to confirmed supplier order.

The Challenge

The core problem was a data pipeline that didn’t exist. Product records lived in the supplier platform. The WooCommerce store needed them – accurately, reliably, and without manual intervention every time a price changed or a product went out of stock.

The complexity compounded quickly. This wasn’t a simple product feed. The catalogue included variable products with size, colour, and weight variants. Images were mapped per colour variant, not just per product. Pricing needed to update on a schedule short enough to prevent customers purchasing at stale prices. And when a customer checked out, that order needed to flow back into the supplier platform as a confirmed purchase order – automatically, not via email.

A further operational risk existed around supplier filtering. The platform could surface products from multiple suppliers, and without proper controls, an unconfigured import could pull through the entire supplier catalogue indiscriminately – creating product management chaos on the live store.

  • The product catalogue included variable products with multiple attribute dimensions - size, colour, and weight - requiring a structured variant mapping approach rather than a simple product import
  • Product images were mapped at the colour-variant level, not the product level, requiring a separate image sync layer that could assign gallery images to the correct variation
  • Stock and pricing updates needed to happen frequently enough to prevent overselling or customer purchases at outdated prices - a full catalogue re-import every time was not viable
  • The order flow from WooCommerce checkout to confirmed supplier order had no automation - orders required manual processing after every purchase
  • Token-based API authentication with an unspecified token lifespan created a risk of silent sync failures on long-running import operations
  • Large catalogue imports risked PHP timeout failures without a batched processing approach

Our Approach

We scoped this as a plugin architecture project before writing a line of code. The integration touched five distinct operational areas – authentication, product import, image sync, stock and pricing updates, and order flow – each with its own data structure, schedule, and failure mode. Treating it as a single build without clear separation of concerns would have produced something fragile and difficult to maintain.

The plugin was architected as a set of independent, single-responsibility classes – one per operational area – so that a failure or change in one layer could not cascade into others. Each class was scoped with its own error handling, logging, and retry logic.

Phased delivery was agreed from the start. Phases covering product import, image sync, stock updates, and the admin interface could begin immediately. Phases requiring live API test credentials – authentication testing, checkout integration, and end-to-end QA – were sequenced to follow once access was confirmed from the supplier platform.

Architecture & UX Decisions

Two sync schedules were designed to serve different operational needs. A full product import runs daily at 2:00 AM – pulling complete product records, creating or updating WooCommerce products, re-attaching images, and refreshing categories and variants. A lightweight delta sync runs every 30 minutes, pulling only stock levels and pricing and matching updates back to existing WooCommerce products by SKU. This separation kept the frequent syncs fast and the overnight imports comprehensive without competing for server resources.

SKU was chosen as the primary matching key across all sync operations – ensuring that updates to existing products never created duplicates and that orphaned variations could be identified and handled cleanly.

The order flow was designed around WooCommerce’s native checkout hooks. On order placement, a quote is created in the supplier platform from the cart data. On payment confirmation, that quote is converted to a confirmed order. The supplier platform reference is stored in WooCommerce order meta, giving both systems a shared record of the transaction.

Supplier filtering was resolved at the platform level rather than in the plugin code – the supplier platform controls which suppliers are active, and the API only returns products from active suppliers. This kept the plugin clean and meant supplier management required no code changes.

The Build

The core deliverable was a standalone WordPress plugin – built on PHP 8.1 and above, requiring WordPress 6.0 or later and WooCommerce 8.0 or above – delivered across eight sequential phases with a total estimated scope of 57 hours. The full scope of delivery included:

  • Token-based API authentication with automatic re-authentication on 401 responses, preventing silent sync failures on long-running operations
  • Full product import engine pulling complete product records from the supplier API – creating and updating WooCommerce products, variable products, attributes, size and colour and weight variants, categories, and brand taxonomy
  • Image sync layer pulling product images mapped to colour variants, sideloading to the WooCommerce media library, and assigning to the correct product gallery per variation
  • Stock and pricing delta sync running every 30 minutes via WP-Cron, matching records by SKU and updating WooCommerce stock quantity and price without touching other product data
  • Checkout integration mapping WooCommerce customers to supplier platform customer records, creating a supplier quote on order placement, converting to a confirmed order on payment, and storing supplier references in WooCommerce order meta
  • Batch processing architecture with configurable batch size and progress storage in wp_options, allowing interrupted syncs to resume without restarting from scratch
  • Admin settings page covering API credentials, sync frequency controls, manual sync triggers with AJAX progress feedback, and a sync log dashboard showing the last 50 events
  • Structured logging to a dedicated log table with admin email notification on sync failure
  • Custom product meta fields maintaining the link between WooCommerce and supplier platform records across all sync operations
  • Full risk mitigation for large catalogue imports, token expiry, orphaned product variations, and customer mapping at checkout

The Outcome

The client’s WooCommerce store now operates with an automated data pipeline that handles what previously required manual effort across two systems. Product data stays current. Stock levels update every 30 minutes. Orders flow from checkout to confirmed supplier order without anyone in between.

Specific outcomes include:

  • A fully automated product catalogue – new and updated products from active suppliers appear in WooCommerce on the next daily import without manual intervention
  • Stock and pricing accuracy maintained on a 30-minute cycle, reducing the risk of overselling or customer purchases at outdated prices
  • Order automation from WooCommerce checkout to confirmed supplier order, eliminating the manual processing step between a customer paying and a supplier receiving the order
  • A clean, maintainable plugin architecture with separation of concerns across every operational layer – authentication, product import, image sync, stock updates, and order flow each managed independently
  • An admin interface that gives the client full visibility of sync status, last run times, error logs, and the ability to trigger manual syncs when needed
  • A batched import architecture that handles large catalogues without PHP timeout failures and can resume interrupted syncs from where they stopped

The business now has the infrastructure to scale its supplier relationships and catalogue size without the operational overhead growing in proportion.

Frequently Asked Questions

Through a scheduled, automated sync plugin that runs on two tracks - a full product import daily and a lightweight stock and pricing update every 30 minutes. Each sync pulls from the supplier API, matches records by SKU, and updates WooCommerce automatically. No manual intervention required between runs.
By building the variant mapping logic into the import engine before any products are created. Each attribute dimension is mapped to a WooCommerce product attribute, and variations are created or updated against existing records using SKU as the primary key - ensuring no duplicates and no orphaned variations.
The plugin hooks into WooCommerce's checkout flow. On order placement, a quote is created in the supplier platform using the cart data. On payment confirmation, that quote converts to a confirmed order. The supplier platform reference is stored against the WooCommerce order record - both systems share a linked record of every transaction.
Batch processing. The import engine breaks the catalogue into configurable batches and stores progress in the database between runs. If a sync is interrupted, it resumes from where it stopped rather than restarting from scratch. This makes large imports reliable regardless of server configuration.
The plugin implements automatic re-authentication on any 401 Unauthorized response before retrying the failed request. Token expiry mid-sync is handled silently without stopping the operation or requiring manual intervention.
Yes - but that control sits in the supplier platform, not the plugin. The API only returns products from suppliers the client has marked as active in their account. Removing a supplier from the active list means their products stop appearing on the next sync. This keeps supplier management clean and requires no code changes.