Skip to content
SystemSyncer
Menu

Guide · Catalog

How to Map Ecommerce Products to ERP Articles and SKUs

Design product and variant mapping between an ecommerce platform and an ERP — SKU strategy, variants, bundles, units of measure, cross-references, and validation.

Last reviewed:
Reading time
4 min read
Intermediate

Short answer

Pick one stable identifier that both systems share — usually the SKU — and make it unique and immutable on both sides. Map each ecommerce variant (not product) to one ERP article, store platform IDs in a cross-reference table, define explicit rules for bundles, units of measure, and non-stock items, and validate the mapping continuously so an unmapped SKU is caught before a customer can buy it.

Data flow Variant-level mapping
  1. Product T-shirt (parent)
  2. Variant Red / XL · SKU TS-RED-XL
  3. Cross-reference Variant ID ↔ SKU ↔ article
  4. ERP article 100245 · unit EA

The cross-reference table links platform IDs to the ERP article, keyed by a shared SKU.

Product mapping is the quiet foundation of every other workflow. Orders cannot post without it, inventory cannot sync without it, and reporting cannot reconcile without it. Most “integration bugs” reported as order or stock problems turn out to be mapping problems.

Map variants, not products

Ecommerce platforms model a sellable item as a product with variants (size, color). In Shopify, inventory is tracked per variant through its inventory item. WooCommerce has variable products with variations; BigCommerce has products with variants, each with its own SKU.

ERPs usually model each sellable, stockable thing as an article (or item, material, part). The correct mapping is almost always:

one ecommerce variant ↔ one ERP article

A product with three sizes and four colors is twelve ERP articles. If your ERP uses a “matrix item” or “style” concept, map the ecommerce product to that, and still map each variant to its child article.

Choose the shared identifier

Pick one identifier present in both systems that will act as the join key. The SKU is the natural candidate, provided you enforce three properties:

  1. Unique. No two variants share a SKU, across all products and stores feeding the same ERP. Most platforms allow duplicate or empty SKUs, so uniqueness is your responsibility.
  2. Stable. It does not change after orders exist.
  3. Present. Every sellable variant has one. An empty SKU should block publication.

If the ERP’s article number is the master, consider using it directly as the ecommerce SKU. If marketing needs readable SKUs and the ERP uses numeric articles, keep both and map through a cross-reference.

Build a cross-reference table

Even with a shared SKU, store the platform’s internal IDs. They are faster and more reliable for API calls, and they survive SKU typos being corrected.

CREATE TABLE product_xref (
  channel             TEXT NOT NULL,      -- e.g. 'shopify:store-a'
  sku                 TEXT NOT NULL,
  erp_article         TEXT NOT NULL,
  platform_product_id TEXT,
  platform_variant_id TEXT NOT NULL,
  platform_inventory_item_id TEXT,        -- Shopify tracks stock per inventory item
  uom_factor          NUMERIC NOT NULL DEFAULT 1,
  active              BOOLEAN NOT NULL DEFAULT true,
  updated_at          TIMESTAMPTZ NOT NULL DEFAULT now(),
  PRIMARY KEY (channel, platform_variant_id),
  UNIQUE (channel, sku)
);

Populate it when products are created (if the ERP publishes products) or by a matching job (if products are created in the platform), and keep it in sync on every catalog change.

Define rules for the hard cases

Units of measure

An ERP may stock a product by the box of 12 while the store sells single units, or the reverse. Store a conversion factor per mapping and apply it in both directions: order quantities into the ERP, stock quantities out of it. Round stock down when converting to sellable units, never up.

Bundles and kits

Options:

  • ERP-defined kit. The bundle is an article with a bill of materials; the ERP explodes it into components for picking and stock. The store sells the bundle SKU. Stock published to the store must be calculated from component availability.
  • Platform-defined bundle. The store sells a bundle made of component SKUs; the integration posts the components to the ERP. Revenue allocation between components must be defined.

Choose one per bundle type and document it; mixed approaches produce stock and revenue errors.

Non-stock items

Gift cards, warranties, gift wrapping, shipping insurance, and digital products need ERP service items or explicit exclusion rules.

Variants without inventory tracking

If a platform variant does not track inventory (made-to-order products, for example), the integration should skip inventory sync for it but still map it for orders.

Discontinued and replacement items

When an article is discontinued and replaced, keep the old mapping active for returns and historical orders, mark it inactive for new sales, and add the replacement as a new mapping.

Decide who creates products

Model Flow Good for
ERP-first ERP or PIM creates articles; integration creates platform products and variants Businesses where purchasing and pricing live in the ERP
Platform-first Merchandisers create products in the store; integration creates or matches ERP articles Fast-moving catalogs managed by ecommerce teams
Matched Both exist independently; a job matches them by SKU Migrations and existing operations

ERP-first gives the strongest guarantees. Platform-first needs a gate that prevents publishing a product until its ERP article exists.

Validate continuously

Run a catalog check at least daily, and before every major launch:

  • Active variants with no SKU.
  • SKUs duplicated within a channel.
  • Active variants with no ERP mapping.
  • Mapped ERP articles that are blocked, discontinued, or missing.
  • Unit-of-measure factors that are zero or missing.

Publish the result as a report owned by the catalog team. A product that cannot be mapped should not be buyable.

Error handling in order and stock flows

  • Order with unmapped SKU: do not drop the line. Move the order to review with a precise message.
  • Stock update for an unmapped article: log and skip; include in the daily catalog report.
  • SKU changed in the platform: detect through product update events, update the cross-reference, and alert if the new SKU collides with an existing one.

Testing

  • Order containing every special case: bundle, gift card, non-stock item, unit-of-measure conversion.
  • Product with variants added after launch.
  • Duplicate SKU introduced on purpose to confirm the check catches it.
  • SKU edit in the platform after orders exist.

Common mistakes

  • Mapping at product level and ignoring variants.
  • Allowing duplicate or empty SKUs.
  • Rounding converted stock quantities up.
  • Matching on product title.
  • Deleting mappings for discontinued items that still appear in returns.

Summary

Map each ecommerce variant to one ERP article through a unique, stable, shared SKU, and store platform IDs in a cross-reference table. Define explicit rules for units of measure, bundles, non-stock items, and discontinued products, decide which system creates products, and validate the catalog daily. Clean mapping is what makes every other workflow reliable.

Frequently asked questions

Should the SKU be the same in the ERP and the ecommerce platform?

Ideally yes. A shared SKU makes orders, inventory, and support simpler. If the ERP uses internal article numbers that cannot be exposed, keep a cross-reference table and make the ecommerce SKU unique and stable anyway.

Can I change a SKU after products are live?

Treat SKUs as immutable once orders exist. If a change is unavoidable, update the cross-reference first, keep the old SKU as an alias for historical orders and returns, and change both systems in a coordinated window.

How do I handle products that exist only online?

Decide explicitly. Either create them in the ERP as non-stock or service items so orders post cleanly, or exclude them from export with a documented rule. Silently dropping them distorts revenue.

Where should the cross-reference table live?

In the integration layer's database, or in an ERP field if the ERP supports external identifiers per channel. It should be queryable by either side's ID.

Sources and further reading

Platform-specific statements on this page were checked against these sources on . Vendor APIs change; confirm details in the current documentation before you build.

  1. [1] Shopify ProductVariant object — Shopify
  2. [2] Shopify InventoryItem object — Shopify
  3. [3] BigCommerce catalog variants — BigCommerce
  4. [4] WooCommerce REST API — product variations — WooCommerce