Skip to content

E-Commerce — Product Standardisation

OWNER: aimee (scoping) ALSO_USED_BY: anna (spec), urszula, maxim (backend), eric (invoicing link), ALL dev agents LAST_VERIFIED: 2026-03-26 SCOPE: product classification standards, barcodes, structured data, Peppol product codes


Overview

Product standardisation is what separates amateur webshops from enterprise-grade platforms. When a client's product catalog uses internationally recognised identifiers and classification codes, they unlock marketplace interoperability, procurement integration, Peppol e-invoicing compliance, and structured SEO — all without retrofitting.

This page covers the standards GE agents must understand and when to apply each one. Cross-reference with Product Catalog for data model patterns and Peppol E-Invoicing for invoice line items.


UNSPSC — United Nations Standard Products and Services Code

What It Is

UNSPSC is a global taxonomy of products and services maintained by the United Nations Development Programme (UNDP). It provides a standardised vocabulary for classifying goods and services in procurement, spend analysis, and B2B commerce.

CURRENT_VERSION: v26.0801.1 (March 2025) CODES: 150,000+ active codes across all industries LANGUAGES: 14 languages including Dutch, German, French, English COST: free download (account required) at undp.org/unspsc MANAGED_BY: UNDP (returned from GS1 US management in 2024)

Hierarchy — Four Levels (Plus Optional Fifth)

UNSPSC uses a 10-digit hierarchical code. Each pair of digits adds specificity.

Segment  (2 digits)  — Logical aggregation of families (e.g., 44 = Office Equipment)
Family   (4 digits)  — Group of related categories (e.g., 4410 = Office machines)
Class    (6 digits)  — Common use or function (e.g., 441031 = Printer supplies)
Commodity(8 digits)  — Substitutable products (e.g., 44103103 = Toner cartridges)
Business (10 digits) — Optional: rental, lease, repair, wholesale, retail

EXAMPLE: 44103103 = Segment 44 (Office Equipment) → Family 10 (Office Machines) → Class 31 (Printer Supplies) → Commodity 03 (Toner Cartridges).

When to Use UNSPSC

USE_FOR: - B2B platforms with procurement workflows - Marketplace projects with diverse, multi-category catalogs - Spend analysis and supplier management features - Public sector / government procurement portals - Peppol invoice line item classification (UNCL7143 scheme STI)

DO_NOT_USE_FOR: pure consumer e-commerce with a narrow product range — GS1/GTIN + GPC is more appropriate there.

Lookup Tools


GS1 / GTIN — Product Identification and Barcodes

What It Is

GS1 is the global standards organisation behind barcodes, product identification, and supply chain data exchange. GTIN (Global Trade Item Number) is the umbrella term for all GS1 product identifiers, including EAN-13 (the European barcode), UPC-A (North America), and GTIN-14 (logistics units).

Every product sold through retail or major marketplaces (bol.com, Amazon, Albert Heijn) needs a GTIN. It is not optional — it is the cost of doing business.

GTIN Variants

Format Digits Use Case
GTIN-8 8 Small items with limited label space
GTIN-12 12 UPC-A, primarily North America
GTIN-13 13 EAN-13, standard for Europe and most of world
GTIN-14 14 Logistics units, cases, pallets

GTIN-13 (formerly EAN-13) is the standard for all GE client projects targeting EU retail.

Structure of a GTIN-13

┌─────────────────┬──────────────────┬───────────┐
│ GS1 Prefix (3)  │ Company Prefix   │ Item Ref  │ Check
│ (country/region) │ (variable len)   │ + Check   │ Digit
└─────────────────┴──────────────────┴───────────┘
  • GS1 Prefix 871 = GS1 Nederland
  • Company prefix length varies (7-11 digits) — shorter prefix = more item numbers available
  • Check digit is calculated via modulo-10 algorithm

GS1 Nederland

Dutch clients obtain their company prefix through GS1 Nederland. Annual renewal is required to keep prefix active.

WEBSITE: gs1.nl COST: varies by company size and number of codes needed REQUIREMENT: business registration (KvK number)

ADVISE_CLIENTS: apply for a GS1 company prefix before development starts. The prefix determines how many unique GTINs they can create. Typical SME clients need a prefix supporting 1,000-10,000 items.

GS1 DataMatrix

GS1 DataMatrix is the next-generation barcode format — a 2D matrix code that encodes GTIN plus additional data (batch number, expiration date, serial number). Required for pharmaceuticals (EU Falsified Medicines Directive) and increasingly used in food and cosmetics.

USE_WHEN: client products require batch traceability, expiration dates, or serialisation.

GS1 Digital Link embeds GTINs in web URIs, enabling a single QR code to serve both supply chain scanning and consumer-facing web content.

FORMAT: https://id.gs1.org/01/{GTIN}/10/{batch}/21/{serial}

RELEVANCE: Google introduced the Universal Commerce Protocol (UCP) in January 2026, built on Schema.org + GS1 Digital Link. Products with Digital Link QR codes are discoverable by AI agents for autonomous commerce.

Product Data Model with GTIN

-- Drizzle schema pattern for GTIN integration
export const products = pgTable('products', {
  id: uuid('id').defaultRandom().primaryKey(),
  name: text('name').notNull(),
  slug: text('slug').notNull().unique(),
  sku: text('sku').notNull().unique(),           -- internal SKU
  gtin: text('gtin'),                             -- GTIN-13 (EAN)
  gs1CompanyPrefix: text('gs1_company_prefix'),   -- client's GS1 prefix
  brand: text('brand'),
  manufacturer: text('manufacturer'),
  unspscCode: text('unspsc_code'),                -- 8-digit UNSPSC
  gpcBrickCode: text('gpc_brick_code'),           -- GPC brick code
  eclassCode: text('eclass_code'),                -- eCl@ss IRDI
  hsCode: text('hs_code'),                        -- customs: 6-10 digits
  status: text('status').default('draft'),
  createdAt: timestamp('created_at').defaultNow(),
  updatedAt: timestamp('updated_at').defaultNow(),
});

VALIDATION: GTIN check digit must be validated on input. Use modulo-10 algorithm. Never trust client-provided GTINs without validation.


GPC — Global Product Classification

What It Is

GPC is GS1's own product classification standard, designed for retail and consumer goods. It classifies products at the "brick" level — the most granular unit — and adds attribute-value pairs for precise differentiation (e.g., colour, size, material).

GPC is mandatory for products exchanged through GS1's Global Data Synchronisation Network (GDSN) and is the preferred classification for marketplace product taxonomy.

Hierarchy

Segment  → e.g., "Food/Beverage/Tobacco"
Family   → e.g., "Confectionery/Sugar Sweetening Products"
Class    → e.g., "Chocolate/Chocolate Substitutes"
Brick    → e.g., "Chocolate Tablets/Slabs (Solid)"
  └─ Attributes → e.g., flavour=Dark, format=Bar, organic=Yes

BROWSER: gpc-browser.gs1.org — official GPC lookup tool UPDATES: biannual releases

GPC vs UNSPSC

Dimension GPC UNSPSC
Maintained by GS1 UNDP
Focus Consumer/retail products All products AND services
Granularity Brick + attributes Commodity (no attributes)
Ecosystem GDSN, GS1 standards Procurement, ERP, spend analysis
Services coverage No Yes (50% of codes are services)
Typical users Retailers, FMCG, marketplaces Procurement, government, B2B

INSIGHT: GPC and UNSPSC are complementary, not competing. Some enterprises use UNSPSC internally for procurement and GPC externally for product listings. At the commodity/brick level they are roughly equivalent.

When to Use GPC

USE_FOR: - Marketplace platforms where sellers list consumer goods - Projects requiring GDSN data synchronisation - Retailer integration (Albert Heijn, Jumbo, Spar use GPC via GS1) - Product taxonomy design for multi-vendor catalogs


eCl@ss — EU Industrial Product Classification

What It Is

eCl@ss (ECLASS) is the ISO/IEC-compliant product classification standard dominant in European manufacturing, engineering, and industrial sectors. It provides feature-based classification with standardised properties — critical for Industry 4.0 and IoT.

CURRENT_VERSION: ECLASS 16.0 (November 2025) CODES: ~50,000 classes, ~23,000 properties LANGUAGES: 31 (all EU official languages) WEBSITE: eclass.eu

Structure

eCl@ss uses a 4-level hierarchy similar to UNSPSC but adds structured properties (key-value pairs with units, data types, and value lists) at every class level.

Segment   → e.g., 27 = Electrical Engineering
Main Group → e.g., 27-01 = Low Voltage Switchgear
Group     → e.g., 27-01-01 = Circuit Breaker
Class     → e.g., 27-01-01-01 = Miniature Circuit Breaker
  └─ Properties → rated current (A), breaking capacity (kA), poles (count)

Industry 4.0 and IoT Integration

eCl@ss is the semantic backbone for the Asset Administration Shell (AAS) — the digital twin standard for Industry 4.0. Properties from eCl@ss are mapped directly into AAS submodels, enabling machine-readable product data across entire supply chains.

RELEVANCE_TO_GE: clients building B2B platforms for technical/industrial products (electrical, mechanical, building materials) should use eCl@ss for product classification and property definitions.

ETIM — Building Materials and Installation

ETIM (European Technical Information Model) is a related classification standard focused specifically on electrical, HVAC, plumbing, and building materials.

CODES: 5,500+ classes ORIGIN: Netherlands (Dutch electrical wholesale association, 1999) WEBSITE: etim-international.com

ETIM and eCl@ss are harmonising — a joint effort with VDMA, ZVEI, and DIN is aligning the two standards. For GE projects, recommend eCl@ss as the primary standard and map to ETIM where building material wholesale integration is needed.

EU Digital Product Passport (DPP)

The EU Digital Product Passport initiative (effective from 2026 for batteries, expanding to textiles, construction products, and electronics) requires machine-readable product data. eCl@ss is positioned as the semantic standard for DPP compliance.

IMPACT_ON_GE: clients selling products covered by DPP regulations will need eCl@ss-compatible product data structures. Start designing for this now — retrofitting is expensive.

When to Use eCl@ss

USE_FOR: - B2B platforms for technical/industrial products - Manufacturing and engineering catalogs - Projects requiring Industry 4.0 / IoT integration - Clients in construction, electrical, HVAC sectors - Digital Product Passport compliance


Schema.org Product Markup

What It Is

Schema.org provides structured data vocabularies that search engines (Google, Bing) use to understand web page content. For e-commerce, Product markup enables rich results in search (price, availability, reviews, ratings) and is required for Google Merchant Center and Google Shopping.

Why It Matters in 2026

  • Google AI Overviews appear for 50-60% of US search queries; schema-compliant pages are cited 3.1x more frequently
  • Google's Universal Commerce Protocol (UCP, January 2026) enables AI agents to autonomously find, compare, and purchase products — Schema.org is the foundation
  • Partners: Shopify, Wayfair, Walmart already connected to UCP

RULE_FOR_GE: every e-commerce project MUST implement Schema.org Product markup. It is not optional. No exceptions.

Required Properties

For Google Merchant Center rich results (merchant listings on product pages):

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Product Name",
  "image": ["https://example.com/photo.jpg"],
  "description": "Product description",
  "sku": "ABC123",
  "gtin13": "8710400000001",
  "brand": {
    "@type": "Brand",
    "name": "Brand Name"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product",
    "priceCurrency": "EUR",
    "price": "29.95",
    "availability": "https://schema.org/InStock",
    "seller": {
      "@type": "Organization",
      "name": "Shop Name"
    },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "NL"
      },
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "4.95",
        "currency": "EUR"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "d" },
        "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "d" }
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "NL",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 14
    }
  }
}

Product Variants

Google supports product variant structured data linking colour, size, and material variants to a parent product. Use isSimilarTo or isVariantOf to connect variants.

Implementation in Next.js

Use JSON-LD in the <head> of product pages via Next.js metadata API or a dedicated <script type="application/ld+json"> tag. Never use Microdata — JSON-LD is the preferred format and easier to maintain.

VALIDATION: Google Rich Results Test REFERENCE: Google Product Structured Data Docs


Peppol Product Codes — E-Invoicing Integration

What It Is

Peppol BIS Billing 3.0 (November 2025 release) supports product classification codes on invoice line items. When a client's product catalog uses standardised codes, invoice generation can automatically include item classification — required for B2G invoicing and increasingly for B2B under EU ViDA.

Item Classification on Invoice Lines

Peppol uses two mechanisms for product identification on invoice lines:

ITEM_STANDARD_IDENTIFIER: identifies a specific product instance - Scheme from ISO/IEC 6523 ICD list - Example: GTIN 0160 scheme → 8710400000001

ITEM_CLASSIFICATION_IDENTIFIER: classifies the product into a taxonomy - Scheme from UN/CEFACT code list UNCL7143 - Example: UNSPSC STI scheme → 44103103 - Example: GPC scheme → applicable brick code

Linking Product Catalog to Invoicing

// When generating a Peppol UBL invoice line, pull classification from product
function buildInvoiceLine(product: Product, quantity: number, unitPrice: number) {
  return {
    invoicedQuantity: quantity,
    lineExtensionAmount: quantity * unitPrice,
    item: {
      name: product.name,
      sellersItemIdentification: { id: product.sku },
      standardItemIdentification: product.gtin
        ? { id: product.gtin, schemeID: '0160' }  // GS1 GTIN
        : undefined,
      commodityClassification: product.unspscCode
        ? [{ itemClassificationCode: { value: product.unspscCode, listID: 'STI' } }]
        : undefined,
    },
  };
}

CROSS_REFERENCE: see Peppol E-Invoicing for full invoice structure, access point setup, and ViDA compliance timeline.


HS Codes — Customs Classification

What It Is

Harmonised System (HS) codes are 6-digit (international) or 10-digit (EU TARIC) codes that classify products for customs, duties, and international trade. Required for any e-commerce project shipping outside the EU or receiving goods from non-EU suppliers.

USE_WHEN: - Cross-border shipping (EU to UK, CH, US, etc.) - PostNL / DHL international shipments require HS codes on customs declarations (CN23) - Peppol invoices for cross-border B2B trade

LOOKUP: EU TARIC database

STORE_AS: hs_code TEXT on product table. Minimum 6 digits, up to 10 for EU TARIC.


Implementation Patterns

Product Data Model — Standardised Fields

Every e-commerce product table in a GE project should include these standardised fields from day one, even if not all are populated initially:

Field Type Standard When Required
gtin text GS1 GTIN-13 Retail, marketplace, structured data
sku text Internal Always
unspsc_code text UNSPSC 8-digit B2B, procurement
gpc_brick_code text GPC Marketplace, GDSN
eclass_code text eCl@ss IRDI Industrial B2B
hs_code text HS/TARIC International shipping
schema_org_type text Schema.org SEO (default: "Product")

Taxonomy Integration in PostgreSQL

For projects requiring browsable classification hierarchies (marketplace category trees, procurement catalogs):

-- Classification taxonomy table (works for UNSPSC, GPC, eCl@ss)
CREATE TABLE product_classifications (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  standard TEXT NOT NULL,           -- 'unspsc', 'gpc', 'eclass'
  code TEXT NOT NULL,               -- the classification code
  label TEXT NOT NULL,              -- human-readable label
  level INTEGER NOT NULL,           -- hierarchy depth (1=segment, etc.)
  parent_code TEXT,                 -- parent classification code
  attributes JSONB DEFAULT '{}',    -- GPC/eCl@ss attribute definitions
  UNIQUE(standard, code)
);

-- Product ↔ classification many-to-many
CREATE TABLE product_classification_mappings (
  product_id UUID REFERENCES products(id) ON DELETE CASCADE,
  classification_id UUID REFERENCES product_classifications(id),
  is_primary BOOLEAN DEFAULT false, -- one primary per standard
  PRIMARY KEY (product_id, classification_id)
);

-- Index for category browsing
CREATE INDEX idx_class_parent ON product_classifications(standard, parent_code);
CREATE INDEX idx_class_level ON product_classifications(standard, level);

Search and Filter by Classification

Use the classification hierarchy to build category navigation:

// Get all products in a UNSPSC family (e.g., 4410 = Office Machines)
async function getProductsByClassification(standard: string, codePrefix: string) {
  return db.query.products.findMany({
    where: and(
      eq(productClassificationMappings.standard, standard),
      like(productClassificationMappings.code, `${codePrefix}%`),
    ),
  });
}

GE Recommendation — Which Standard for Which Project

Project Type Primary Standard Also Include
Consumer e-commerce GS1/GTIN-13 Schema.org, GPC
B2B platform UNSPSC + eCl@ss GS1/GTIN, Peppol codes
Marketplace (multi-vendor) GPC GS1/GTIN, Schema.org
Industrial B2B eCl@ss UNSPSC, HS codes
Building materials eCl@ss + ETIM GS1/GTIN
Public procurement UNSPSC Peppol codes
All projects Schema.org (always include)
International shipping HS codes (when cross-border)

PRINCIPLE: always implement Schema.org Product markup regardless of project type. Add GS1/GTIN fields to the product data model even if the client does not have a GS1 prefix yet — they will need one eventually, and retrofitting is painful.


Sources