GuideJanuary 2025 · 8 min read

Akeneo Data Enrichment Without Code: Custom Enrichers Explained

Raw Akeneo data often needs transformation before it's useful in your application. SyncPIM's enricher system lets you compute slugs, resolve entities, merge fields, and apply conditional logic — all without writing code, and all running inline during the export pipeline.

What data enrichment means in a PIM export context

Akeneo stores data as it was entered — raw attribute values, category codes, reference entity IDs. What your application actually needs is often different:

Raw: Category code: 'mens_shirts'

Enriched: Category label: 'Men's Shirts'

Raw: Name: 'Blue Classic T-Shirt'

Enriched: URL slug: 'blue-classic-t-shirt'

Raw: Color entity ID: 'color_001'

Enriched: Color object: { label: 'Navy Blue', hex: '#1F3A5F' }

Raw: Price: [{ amount: '29.99', currency: 'EUR' }]

Enriched: price_eur: 29.99

Enrichers run as a transform step between Extract (Akeneo API) and Load (your database). The enriched document is what lands in your database — not the raw Akeneo payload.

10 built-in enrichers

Slug Generator

Converts a product name (or any text field) into a URL-safe slug. Example: 'Blue Classic T-Shirt' → 'blue-classic-t-shirt'.

Category Label Resolver

Replaces category codes with human-readable labels. Example: 'mens_shirts' → 'Men's Shirts'.

Reference Entity Resolver

Joins reference entity records to product attributes. Example: resolves a color code to the full color object with hex value and label.

Field Concatenator

Merges multiple fields into one. Example: combine name + variant label for a display title.

Field Splitter

Splits a delimited field into an array. Example: split 'S,M,L,XL' into ['S', 'M', 'L', 'XL'].

Text Transform

Uppercase, lowercase, trim, capitalize — apply text transforms to any string field.

Price Formatter

Extracts and formats a specific currency from Akeneo's price array. Example: get EUR price as a plain number.

Boolean Mapper

Maps attribute values to booleans. Example: 'in_stock' attribute 'yes'/'no' → true/false.

Conditional Enricher

If-then-else logic. Example: if weight > 5kg, set shipping_class = 'heavy'; else set 'standard'.

Custom Template (Mustache)

Full template-based enrichment using Mustache syntax. Access any product field with {{field_name}}.

Building custom enrichers with conditional logic

The Conditional Enricher is the most powerful built-in type. It evaluates a set of conditions against product attributes and applies different values based on the result.

Example: compute a shipping_class field based on the product's weight attribute:

IF weight > 10 → shipping_class = "freight"
ELSE IF weight > 2 → shipping_class = "heavy"
ELSE → shipping_class = "standard"

No code needed — this is configured through a visual builder in the SyncPIM dashboard. Conditions support: equals, not equals, greater than, less than, contains, starts with, is empty, is not empty.

Field transforms: uppercase, concat, split, slugify

Common field transforms you can chain in SyncPIM:

// Input product:
{
  sku: "TSHIRT-BLUE-M",
  name: { en_US: "Blue Classic T-Shirt" },
  category_codes: ["mens", "shirts", "summer"]
}

// After enrichers:
{
  sku: "TSHIRT-BLUE-M",
  name: { en_US: "Blue Classic T-Shirt" },
  category_codes: ["mens", "shirts", "summer"],

  // Slug enricher:
  slug: "blue-classic-t-shirt",

  // URL enricher (Mustache template):
  url: "/products/blue-classic-t-shirt",

  // Category label resolver:
  categories: ["Men's", "Shirts", "Summer Collection"],

  // SKU uppercase (already uppercase, but for demo):
  sku_display: "TSHIRT-BLUE-M"
}

Real example: generating product URLs from SKU + category path

A common requirement for headless storefronts: each product document in your database needs a canonical URL computed from the category path and product slug. With SyncPIM's Mustache enricher:

// Mustache template enricher for URL field:
// Template: /{{category_path}}/{{slug}}

// Input:
{
  category_path: "men/shirts",    // resolved by Category Path enricher
  slug: "blue-classic-t-shirt",  // resolved by Slug enricher
}

// Output:
{
  url: "/men/shirts/blue-classic-t-shirt"
}

Enrichers run in order — you can chain them. The Slug enricher runs first and produces slug, then the Mustache enricher uses {{slug}} in its template.

Build your first enricher

10 free exports include full enricher access. No code, no configuration files.

Related