> How to raise PIM data quality with LLMs: ETIM and ECLASS classification, unit and language normalization, duplicate detection and a stewardship queue.
>
> Web page: https://balazscsorba.com/blog/pim-data-quality-llm · Language: English · Also available in: [Deutsch](https://balazscsorba.com/de/blog/pim-data-quality-llm.md) · [Magyar](https://balazscsorba.com/hu/blog/pim-data-quality-llm.md)
> Author: Balázs Csorba · Published: 2026-10-12 · Keywords: PIM data quality, ETIM classification LLM, eCl@ss classification automation, product data normalization, duplicate detection product data, product data deduplication embeddings, product data stewardship queue, ETIM vs eCl@ss, attribute normalization units, golden set product data evaluation

[Blog](https://balazscsorba.com/blog)/Web engineering

# PIM data quality with LLMs: ETIM classification, normalization and dedup

How to raise PIM data quality with LLMs: ETIM and ECLASS classification, unit and language normalization, duplicate detection and a stewardship queue.

[Balázs Csorba](https://balazscsorba.com/about)·October 12, 2026·8 min read

-   PIM
-   Data quality
-   ETIM
-   ECLASS
-   Deduplication

![A table of rows with a magnifying glass over the one incomplete row.](https://balazscsorba.com/images/blog/pim-data-quality-llm/cover.webp?v=a259cbf833)

## Key takeaways

-   PIM data quality comes down to four machine-checkable jobs: classify into a standard, normalize attribute values, detect duplicates, and steward every change with an audit trail.
-   LLMs work best as rankers over a retrieved shortlist of ETIM or ECLASS classes, with a confidence that routes uncertain records to a human queue.
-   Normalize values into a canonical unit and value tuple at import, and keep the original string and the mapping version for audit.
-   Deduplicate with a cascade of blocking keys, embedding candidates and LLM adjudication; on the WDC Products benchmark even strong matchers score F1 between 0.64 and 0.89.
-   Gate every prompt, model and standard-release change on a golden set reviewed by two annotators; ETIM 11.0 is planned for 1 December 2026.

On this page

1.  [What does good product data look like?](https://balazscsorba.com/#what-good-product-data-looks-like)
2.  [How do you classify products into ETIM or ECLASS with an LLM?](https://balazscsorba.com/#classifying-into-etim-eclass-unspsc)
3.  [How do you normalize units and languages?](https://balazscsorba.com/#normalizing-attributes-units-and-languages)
4.  [How do you detect duplicate products?](https://balazscsorba.com/#deduplicating-with-blocking-embeddings-llm)
5.  [What belongs in the stewardship queue?](https://balazscsorba.com/#stewardship-queue-and-audit-trail)
6.  [How do you evaluate it with a golden set?](https://balazscsorba.com/#golden-set-evaluation)
7.  [What is better product data worth?](https://balazscsorba.com/#what-it-is-worth)
8.  [When should you not use an LLM for product data?](https://balazscsorba.com/#when-not-to-use-llms)
9.  [A checklist for LLM-assisted PIM data quality](https://balazscsorba.com/#checklist)
10.  [Sources](https://balazscsorba.com/#sources)

Listen to this article

0:000:00

**PIM data quality** is the state in which every product record is classified into the right standard class, carries attribute values in canonical units, exists only once, and changes only through a traceable process. Large language models help with exactly the parts that used to stall in a backlog, ranking classes, interpreting messy values and judging near-duplicates, as long as deterministic rules run first and a person approves what the model proposes.

This article covers the four quality jobs, classification into ETIM, ECLASS and UNSPSC, unit and language normalization, duplicate detection, the stewardship queue, evaluation with a golden set, and the business case. Generating product copy is a different job and not covered here.

## What does good product data look like?

Good product data passes four machine-checkable jobs: it is classified into a standard, its attribute values are normalized, it is unique, and every change is stewarded with an audit trail. Each job gets its own precision and recall target before any model is involved, because “better data” without a number cannot be accepted or rejected.

![PIM data quality pipeline Five stages from left to right, applied to records arriving from the ERP and suppliers: deterministic checks for format, GTIN check digits and reference lists; LLM classification into a standard with confidence; normalization of units and values; duplicate detection; and a stewardship queue where people approve changes before the catalog is published. A golden set gates every change to prompts, models or standard releases.](https://balazscsorba.com/images/blog/pim-data-quality-llm/diagram-4.webp?v=e810c23921)

The data quality pipeline: deterministic rules first, LLM steps in the middle, and a human stewardship gate before anything reaches the published catalog.

Classification decides which facets and filters a product appears in. Normalization decides whether “230 V”, “230V AC” and “0,23 kV” compare as equal. Deduplication decides whether demand for one item is split across three SKUs. Stewardship decides whether anyone can explain, a year later, why a record changed. In more than ten years of Spryker and Pimcore work I have seen these four jobs become the backlog nobody owns; LLMs change the cost of the review queue, not the need for one.

## How do you classify products into ETIM or ECLASS with an LLM?

Treat the model as a ranker over a shortlist, not as a classifier over the whole standard. Retrieve ten or so candidate classes with search over class names and synonyms, give the model each candidate’s definition and feature list, let it pick one or none with a confidence, and route anything uncertain to a person.

```
// Classification (sketch): retrieve a shortlist, let the model rank, route by confidence
const shortlist = await classIndex.search(`${product.title} ${product.attributeText}`, { k: 10 })  // BM25 + vectors
const ranked = await llm.rank({
  product,
  candidates: shortlist.map((c) => ({ code: c.code, name: c.name, definition: c.definition, features: c.features })),
  schema: { classCode: 'one candidate code or NONE', confidence: 'low | medium | high', reason: 'string' },
})

if (ranked.classCode !== 'NONE' && !shortlist.some((c) => c.code === ranked.classCode))
  return queue(product, 'model answered outside the shortlist')
if (ranked.confidence !== 'high') return queue(product, 'needs review', ranked)
return propose(product, ranked)          // still a proposal; publishing follows stewardship rules
```

The standards themselves are designed for this. In ETIM every class, feature, value and unit has a language-independent identifier, features are typed as alphanumeric, logical, numeric or range, and numeric and range features always require a unit ([ETIM model](https://www.etim-international.com/classification/model-information/)). ECLASS went further with generated text: for Release 16.0 it created around 23,300 class definitions with GPT-4o mini and marks each one as machine-generated in the standard itself ([ECLASS](https://eclass.eu/en/eclass-standard/releases)). That is a useful signal for your own pipeline: label model output as such, permanently.

Set the confidence threshold per class family, not globally. In a family where classes differ by one feature, such as cable types by cross-section and insulation, the model will be confidently wrong more often than in a family with clearly separated classes. Measure accuracy per family on the golden set, auto-propose only where it holds, and let the threshold rise or fall with the evidence. The shortlist step also tells you something: if the right class is often missing from the top ten, fix retrieval and synonyms before touching the prompt.

Standard

Current release

Typical scope

German and Hungarian

Exchange

ETIM

10.0 (Dec 2024); 11.0 planned for 1 Dec 2026

electrical, HVAC, building technology

national membership required

ETIM xChange 1.1, BMEcat mapping

ECLASS

16.0 (28 Nov 2025)

cross-industry, 31 languages

both 100% translated

CSV, XML, JSON, REST

UNSPSC

owned by UNDP since January 2025

procurement and spend analysis

code-based

code lists

BMEcat

2005.2

catalog exchange in DACH B2B

carries any classification

XML

Sources for the table: [ETIM 10.0](https://www.etim-international.com/new-release-etim-10-0-available/), [ETIM 11.0 timing](https://ketenstandaard.nl/nieuws/etim-11-0-komt-eraan-tijd-om-voor-te-sorteren/), [ETIM licences](https://www.etim-international.com/classification/license-info/), [ECLASS language versions](https://eclass.eu/en/eclass-standard/licenses/language-versions), as of October 2026. A new standard release is a mapping project with its own golden set, not a prompt change.

## How do you normalize units and languages?

Normalize into a canonical tuple of unit and value at import, and keep the original string and the mapping version next to it. Units come first: ETIM requires a unit on every numeric and range feature, so “2,5 mm²”, “2.5mm2” and “2,5 qmm” must all become the same value in the same unit before anything else can compare them.

Language comes second, and licensing matters here. ETIM’s English master is open to all, but the German, German-Austrian and Hungarian language versions require national membership ([ETIM licences](https://www.etim-international.com/classification/license-info/)); ECLASS ships German and Hungarian fully translated. Tooling coverage is uneven too: Akeneo’s spell check covers German but not Hungarian ([Akeneo](https://help.akeneo.com/serenity-understand-data-quality)). The pattern is the one I used for translating my own site with an LLM pipeline, described in [an LLM translation pipeline for i18n](https://balazscsorba.com/blog/llm-translation-pipeline-i18n): the model proposes, a glossary and a review step decide.

Values that cannot be mapped need a defined home. Instead of letting the model invent the nearest allowed value, store the raw string, flag the attribute as unmapped, and send it to the queue with the candidate values the model considered. Over time the unmapped strings show which supplier formats or synonyms the rules are missing, and fixing a rule removes a whole category of queue items at once.

## How do you detect duplicate products?

Use a cascade that removes most pairs cheaply before any model sees them. Comparing every record with every other does not scale: 100,000 records already form about 5 billion pairs. Blocking on normalized keys, embedding shortlists and LLM adjudication for the hard remainder bring that down to something people can review.

![Duplicate detection cascade Four narrowing stages from top to bottom: all pairs, where 100,000 records already form about 5 billion pairs; blocking on normalized manufacturer part number, GTIN prefix or brand plus first tokens; an embedding shortlist of the most similar records; and LLM adjudication with a strict schema of same, different or unsure. The output splits into automatic merges only where an exact identifier and the model agree, which favors precision, and a stewardship queue for everything else, which favors recall.](https://balazscsorba.com/images/blog/pim-data-quality-llm/diagram-19.webp?v=875ea2dcf2)

The duplicate cascade: each stage removes most pairs cheaply, the LLM only sees the hard remainder, and only identifier-backed matches merge without a person.

Set expectations from published results. On the realistic WDC Products benchmark, 11,715 offers for 2,162 products from 3,259 shops, state-of-the-art matchers score F1 between 0.64 and 0.89, and precision collapses on corner cases and unseen products ([Peeters et al., EDBT 2024](https://arxiv.org/html/2301.09521v2)). An earlier study found ChatGPT reached 82.35% F1 zero-shot on a product matching task where a fine-tuned RoBERTa needed 2,000 training examples for similar quality ([Peeters and Bizer, 2023](https://arxiv.org/abs/2305.03423)). Good, not good enough to merge unattended.

A probabilistic model is a serious alternative to an LLM for the adjudication step. Splink implements the Fellegi-Sunter model with unsupervised training and term-frequency adjustments, links about a million records per minute on a laptop and 100 million or more on Spark or DuckDB, and is used by the UK Office for National Statistics and the European Medicines Agency; its documentation is explicit that records must be standardized first ([Splink](https://moj-analytical-services.github.io/splink/)). That is the normalization step again.

## What belongs in the stewardship queue?

Everything the pipeline is not sure about: low-confidence classifications, merge and split decisions without an exact identifier, and unit conflicts. The queue is where the LLM’s speed turns into published data, so it needs the same care as any user-facing screen.

PIMs provide parts of this. Pimcore’s Data Quality Management computes a quality score per data object from configurable rules and shows it in the editor, grid and tree ([Pimcore](https://docs.pimcore.com/platform/Data_Quality_Management/)), and Pimcore Copilot runs multi-step background jobs with a job overview. Akeneo’s Data Quality Insights grades products from A to E on enrichment and consistency ([Akeneo](https://help.akeneo.com/serenity-understand-data-quality)). Neither replaces an audit record per decision:

```
{
  "record": "SKU-118274",
  "job": "classify",
  "proposal": { "standard": "ETIM", "release": "10.0", "classCode": "…", "confidence": "high" },
  "model": "provider/model-id@2026-10-01",
  "promptVersion": "classify-v14",
  "inputHash": "sha256:9f2c…",
  "decision": "approved",
  "decidedBy": "steward:k.mayer",
  "decidedAt": "2026-10-12T09:41:07Z"
}
```

Design the queue for throughput. Group items by type and class family so a steward reviews twenty similar cable records in a row instead of jumping between topics, show the evidence next to each proposal, and make accept, correct and reject single keystrokes. Every correction is training data for the next round: it becomes a synonym, a mapping rule or a golden-set example. A queue that only grows is a sign that the thresholds or the rules are wrong, not that people are slow.

## How do you evaluate it with a golden set?

Build a golden set of 300 to 1,000 records per catalog slice, labeled independently by two people, and gate every change to the prompt, the model or the standard release on precision and recall thresholds against it. Two careful annotators can get close to the quality of published benchmarks: the WDC Products team estimated 4.00% and 4.17% label noise with a Cohen’s kappa of 0.91 in its manual check ([WDC Products](https://arxiv.org/html/2301.09521v2)).

**Include a negative check**

Add records that must stay rejected: an obviously wrong class, a pair that looks alike but differs in one critical attribute, a value in the wrong unit. A change that improves average accuracy but lets one of these through should fail the gate. The same idea is behind the evaluation approach in [LLM evals for product features](https://balazscsorba.com/blog/llm-evals-for-product-features).

## What is better product data worth?

Search and filters are the revenue lever and duplicates are the cost lever. Published numbers exist for both sides, mostly from vendors and adjacent markets, so present them as direction rather than promise.

-   **Findability:** in a vendor-published SQLI case, an industrial-goods retailer with 45,000 SKUs and an 18% zero-result rate moved search-user conversion from 23% to 47% and average cart size up 23% after a data-quality audit plus AI search ([SQLI](https://www.sqli.com/int-en/insights/commerce-search-first-strategy-impact)). Clean attributes are what [semantic product search for B2B](https://balazscsorba.com/blog/semantic-product-search-b2b) and agents reading your catalog, see [agentic commerce readiness](https://balazscsorba.com/blog/procurement-agent-buyer-side), depend on.
-   **Returns:** a GS1 India and Kanvic study released in March 2026 estimates that poor product data costs Indian e-commerce about ₹5,000 crore a year, around ₹1,900 crore of it in return-related costs ([BW Retail World](https://bwretailworld.com/sector/e-commerce-marketplaces/poor-product-data-costs-indian-ecommerce-rs-5000-cr-every-year-study)). Wrong-part orders in B2B are the same failure: a spec that did not match.
-   **Duplicates:** no credible public figure exists for the cost of duplicate SKUs. The mechanics are clear: duplicates inflate the catalog, split demand signals and reorder points, and break assortment reporting. Count them before and after.

For a head of e-commerce or a PIM manager, the measurable baseline is zero-result rate, attribute completeness per class and duplicate count. A fixed-scope data-quality sprint, audit, golden set, classification and dedup jobs with confidence gates, a stewardship view and a CI gate, can show the before and after on exactly those numbers.

## When should you not use an LLM for product data?

Never for anything a rule can decide. Formats, GTIN check digits and membership in a reference list are deterministic checks and must run before any model. LLMs are for ambiguous ranking and interpretation, not for validating digits. And migrating to a new standard release, such as ETIM 11.0 in December 2026, is a mapping project with its own tests, not a prompt you adjust. If master data arrives inconsistently from the ERP, fix the import first; [the Pimcore ERP delta sync](https://balazscsorba.com/blog/pimcore-erp-delta-sync) is where that happens.

## A checklist for LLM-assisted PIM data quality

1.  Define precision and recall targets for classification, normalization and dedup separately.
2.  Run deterministic checks first: formats, GTIN check digits, reference lists.
3.  Classify with a retrieved shortlist and reject answers outside it.
4.  Store canonical unit and value plus the original string and mapping version.
5.  Auto-merge only where an exact identifier and the matcher agree; queue the rest.
6.  Write an audit record for every decision with model, prompt version and input hash.
7.  Gate changes on a two-annotator golden set, including negative checks, in CI.
8.  Plan standard-release migrations as projects with their own mapping tests.

If you want a baseline for your catalog or help setting up the pipeline in Pimcore or Akeneo, see my [B2B e-commerce work](https://balazscsorba.com/expertise/b2b-ecommerce-developer).

## Sources

1.  [ETIM International: new release ETIM 10.0 (10 Dec 2024)](https://www.etim-international.com/new-release-etim-10-0-available/)
2.  [ETIM International: model information](https://www.etim-international.com/classification/model-information/)
3.  [ETIM International: licence information](https://www.etim-international.com/classification/license-info/)
4.  [Ketenstandaard: ETIM 11.0 is coming (3 Feb 2026)](https://ketenstandaard.nl/nieuws/etim-11-0-komt-eraan-tijd-om-voor-te-sorteren/)
5.  [ECLASS: releases (Release 16.0, 28 Nov 2025)](https://eclass.eu/en/eclass-standard/releases)
6.  [ECLASS: language versions](https://eclass.eu/en/eclass-standard/licenses/language-versions)
7.  [Peeters and Bizer: Using ChatGPT for entity matching (ADBIS 2023)](https://arxiv.org/abs/2305.03423)
8.  [Peeters et al.: WDC Products, a multi-dimensional entity matching benchmark (EDBT 2024)](https://arxiv.org/html/2301.09521v2)
9.  [Splink: probabilistic record linkage](https://moj-analytical-services.github.io/splink/)
10.  [Pimcore: Data Quality Management](https://docs.pimcore.com/platform/Data_Quality_Management/)
11.  [Akeneo: understand data quality](https://help.akeneo.com/serenity-understand-data-quality)
12.  [SQLI: commerce search-first strategy (vendor case study)](https://www.sqli.com/int-en/insights/commerce-search-first-strategy-impact)

## Frequently asked questions

What does PIM data quality mean in practice?

It means records that are classified into the right standard class, carry attribute values in canonical units and formats, exist only once, and change only through a traceable process. Copywriting and images are enrichment, a separate job. Each of the four quality jobs can be measured with precision and recall on a golden set.

Can an LLM classify products into ETIM or ECLASS?

Yes, as a ranker. Retrieve a shortlist of candidate classes with search over class names and synonyms, give the model the class definitions and features, ask it to pick one or none, and send anything below a confidence threshold to a person. Do not expect a fixed accuracy figure; measure it on your own golden set.

How do you find duplicate products in a PIM?

Use a cascade. Blocking keys such as normalized manufacturer part number, GTIN prefix or brand plus first tokens cut the number of pairs; embeddings shortlist similar records; an LLM or a probabilistic model such as Splink decides the remaining pairs; and people review merges that are not backed by an exact identifier.

ETIM or ECLASS: which classification should a B2B shop use?

It depends on the sector and the trading partners. ETIM is common in electrical, HVAC and building technology wholesale; ECLASS is broader and ships in 31 languages, including German and Hungarian. Many PIMs carry both, mapped to an internal taxonomy.

How do you evaluate product data quality changes?

Build a golden set of a few hundred to a thousand records per catalog slice, labeled by two annotators who agree on most cases, and require every change to the prompt, model or standard release to pass precision and recall thresholds on it, including a negative check that an obviously wrong record stays rejected.

Written by Balázs Csorba

Senior fullstack & AI engineer in Styria, Austria – 10+ years of Vue, Nuxt, Node.js and PHP, now building tooling for AI agents.

[B2B e-commerce & PIM →](https://balazscsorba.com/expertise/b2b-ecommerce-developer)[About me →](https://balazscsorba.com/about)

## More articles

-   [Schema.org structured data for B2B shops: prices behind logins, units and variants](https://balazscsorba.com/blog/schema-org-structured-data-b2b-shop)
-   [An AI assistant for B2B shop support: tools, permissions and the human handoff](https://balazscsorba.com/blog/ai-assistant-b2b-shop-customer-support)
-   [Streaming AI chat in Vue and Nuxt: accessible by design](https://balazscsorba.com/blog/vue-ai-chat-ui-streaming-accessibility)
-   [An LLM translation pipeline for i18n: glossary, placeholders and review](https://balazscsorba.com/blog/llm-translation-pipeline-i18n)

## Sounds like what you need?

Tell me about your project or role – I’d love to hear from you.

[Get in touch](mailto:contact@balazscsorba.com) [Connect on LinkedIn](https://www.linkedin.com/in/balazs-csorba)
