Documentation

Running Your First Export

Execute your first product export and monitor its progress in real-time.

Prerequisite: You need a saved configuration. See Creating Your First Configuration.

Overview

Exports run asynchronously in the background. Monitor progress in real-time or return later.

🔌Connect

Akeneo PIM

📥Fetch

Products

Enrich

Transform

💾Write

Database

📊Track

Progress

1

Find Your Configuration

Locate the configuration you want to export from any of these locations:

🏠Dashboard

Configuration cards on the home page

📋Configurations List

All configurations in sidebar menu

⚙️Configuration Page

Individual configuration detail view

2

Click "Run Export"

Each configuration has a Run Export button. Click it to open the export mode selector.

Run ExportThis button uses all settings from your saved configuration (source, destination, enrichers, filters).

3

Choose Export Mode

A dialog appears with two options. Click one to start the export immediately.

📦

Full Export

Exports all products matching your filters using upsert operations.

✓ First-time export

✓ After configuration changes

✓ Database reset/refresh

✓ Data consistency check

Incremental Export

Exports only products modified since last export.

✓ Regular sync (daily/hourly)

✓ Large catalogs (10-100x faster)

✓ Minimal API load

✓ Scheduled automation

Tip: Use Full for your first export, then Incremental for ongoing updates.

4

Export Starts Automatically

The export begins immediately and you're redirected to the progress page.

🔄
Status: Pending → Running

Job queued then processing begins

📊
Real-time Progress

Live updates every 3 seconds

🚀
Background Processing

Navigate away safely, check back later

Monitoring Progress

The export details page auto-refreshes every 3 seconds. Navigate away safely — exports run in the background.

Export Status

pending

Queued

running

Processing

completed

Success

failed

Error

cancelled

Stopped

Real-time Metrics

📊
Progress Bar

Visual percentage (0-100%)

📦
Products Processed

1,234 / 1,500 products

⏱️
Duration

Time elapsed (real-time)

Performance

Products/sec, memory, CPU

Error Count

Failed products with details

📜
Live Logs

Streaming operations output

Example export statistics
{
  "status": "completed",
  "progress": { "total": 1500, "processed": 1500, "percentage": 100 },
  "duration": "2m 34s",
  "enrichersApplied": 3,
  "errors": 0
}

Verify Export Results

Connect to your database and verify products were written successfully.

Product count matches
Attributes populated
Categories enriched
No null critical fields
Locales present
Enrichers applied
🍃

MongoDB

Verify in MongoDB
// Count products (should match export stats)
db.products.countDocuments()

// View sample product structure
db.products.findOne({}, {
  code: 1, family: 1, enabled: 1,
  categories: 1, attributes: 1, locale: 1
})

// Check reference data
db.reference_categories.countDocuments()
db.reference_attributes.countDocuments()
db.reference_entity_records.countDocuments()

// Find products by family
db.products.find({ family: "your_family" }).limit(5)

// Check localized data
db.products.find({ "locale.fr_FR": { $exists: true } }).limit(3)
🐘

PostgreSQL

Verify in PostgreSQL
-- Count products (should match export stats)
SELECT COUNT(*) FROM products;

-- View sample product structure
SELECT code, family, enabled, categories, attributes, locale
FROM products LIMIT 1;

-- Check reference data
SELECT COUNT(*) FROM reference_categories;
SELECT COUNT(*) FROM reference_attributes;
SELECT COUNT(*) FROM reference_entity_records;

-- Find products by family
SELECT code, family FROM products
WHERE family = 'your_family' LIMIT 5;

-- Check localized data
SELECT code, locale FROM products
WHERE locale IS NOT NULL LIMIT 3;

Export Completed! Your products are now in your database.

Working with Localized Data

Products with multiple locales separate localizable and non-localizable attributes.

🌍Root attributes

Non-localizable: SKU, color, price, dimensions

Shared across all locales

🗣️locale[code]

Localizable: name, description, meta_title

Language-specific content

Product structure with locales
{
  "code": "product-001",
  "family": "clothing",
  "attributes": {
    "sku": "TSHIRT-BLU-001",
    "color": "blue",
    "price": { "value": 29.99, "currency": "EUR" }
  },
  "locale": {
    "en_US": {
      "attributes": { "name": "Blue T-Shirt", "description": "Comfortable blue t-shirt" }
    },
    "fr_FR": {
      "attributes": { "name": "T-Shirt Bleu", "description": "T-shirt bleu confortable" }
    }
  }
}

Merge Strategy: Combine root attributes + locale[code].attributes to get complete product in a specific language.

Retrieve Product in a Specific Locale

Get product in specific locale
function getProductInLocale(product: Product, localeCode: string) {
  const localeData = product.locale?.[localeCode]
  if (!localeData) return product

  return {
    ...product,
    attributes: { ...product.attributes, ...localeData.attributes },
    locale: undefined,
  }
}

// Usage
const productFR = getProductInLocale(product, 'fr_FR')
console.log(productFR.attributes.name)  // "T-Shirt Bleu" (from locale)
console.log(productFR.attributes.color) // "blue" (from root)

Database Queries

🍃MongoDB Aggregation
Merge locale in DB
db.products.aggregate([
  { $match: { enabled: true } },
  { $addFields: {
      attributes: {
        $mergeObjects: [
          '$attributes',
          { $ifNull: ['$locale.fr_FR.attributes', {}] }
        ]
      }
    }
  },
  { $unset: 'locale' }
])
🐘PostgreSQL View
Create locale view
CREATE VIEW products_fr AS
SELECT
  code, family, enabled,
  attributes || COALESCE(
    locale->'fr_FR'->'attributes', '{}'
  ) AS attributes
FROM products;

-- Query the view
SELECT * FROM products_fr;

Tip: Create database views for frequently used locales to keep application code clean.