PIMvendors

Knowledge Base · Core ·

Core · Guide

How to Migrate from One PIM to Another Without Losing Data (2026)

Last updated: 7 November 2026.

You migrate from one PIM to another without losing data by inventorying and freezing the source, mapping the old data model to the new one attribute by attribute, and running at least one full rehearsal migration before the real one. After each rehearsal you reconcile counts and values per attribute against the frozen baseline, and you keep the old PIM read-only until the new one has published cleanly to every channel. Two or three rehearsals are safer than one for a catalog with many variants, languages or relations.

This guide is for teams that already run a PIM and are moving to another one: Akeneo to Pimcore, Salsify to inriver, an in-house PIM to SaaS, or any other pair. It covers what typically gets lost, the inventory and mapping work, the cutover choice, how to prove nothing is missing and what each of the big platforms documents about exporting your data. If this is your first PIM, start with the PIM implementation guide instead, because a first implementation starts from spreadsheets and an ERP, not from another data model.

What gets lost in a PIM migration, and why?

A PIM-to-PIM migration is a translation between two data models. The product rows usually arrive. What goes missing is the structure around them, because no two PIMs model it the same way. Our guide to the product data model explains the building blocks; these are the ones that break.

What gets lostHow it happensWhat to check
AttributesA field has no target in the new model, or two old fields merge into one without a ruleEvery source attribute has a mapped target, an explicit "drop" or an archive decision
Option lists and unitsCodes become labels, labels change, units are mixed in one fieldAllowed values and units match per attribute after load
VariantsMulti-level variant structures get flattened, or the axis that defines a variant is lostParent and child counts, variant axes and inherited values per family
RelationsAssociations, cross-sells, accessories, bundles and spare-part links point to identifiers that changedRelation count per type, and no relation pointing to a missing product
Assets and their linksFiles move but the link to the product, the role (main image, data sheet) or the order is lostAsset count per product, asset role, sort order, and files that open
TranslationsLocales that are only partly filled are skipped, or fallback rules differFill rate per attribute per locale, before and after
Channel rulesCompleteness rules, channel-specific values and export mappings live in the old PIM's configuration, not its dataA written list of rules per channel, rebuilt and tested in the new PIM
Workflow states"In review" or "approved" has no equivalent, so products arrive with the wrong statusStatus per product, and open tasks restarted on purpose
HistoryVersion history and audit logs are rarely exportable in a form the new PIM can loadAn archived, readable copy kept for audit

Two causes sit behind most of these rows. First, the identifiers change: if the new PIM generates its own internal IDs, every relation, asset link and integration that referred to the old ID has to be remapped. Agree one stable business identifier, such as the SKU or a GTIN, that exists in both systems and drives every lookup. Second, the configuration is not data. Completeness rules, channel mappings and workflow definitions are often the result of years of small decisions, and they do not come out of an export.

What should you inventory before you move anything?

Start with a list of everything the old PIM holds, who owns it and whether it moves. Then take a baseline export and freeze it: a read-only copy of the source at a known moment. Every later check compares against that baseline, so it must not change.

Data objectWhere it usually livesOwnerMigrate?
Products and SKUsPIM coreProduct data teamYes, active products; decide on discontinued ones
Product models, families and variant structuresPIM data modelPIM administratorYes, remodelled for the target
Attributes, option lists and unitsPIM data modelPIM administrator with category ownersYes, after profiling
Categories and channel taxonomiesPIM, sometimes the commerce platformCategory or e-commerce managerYes, own tree; channel mappings rebuilt
Relations, bundles and spare-part linksPIM relationsCategory ownersYes
Assets and their metadataPIM, built-in DAM or a separate DAMMarketing or content teamYes, with links and roles
Translations per localePIM valuesLocalisation ownerYes, with fill rates measured first
Supplier data and onboarding mappingsPIM or supplier portalPurchasing or data onboarding teamMappings: rebuild; raw files: archive
Completeness and validation rulesPIM configurationPIM administratorRebuild and test; not exportable as data in most PIMs
Channel exports, feeds and connectorsPIM configuration or integration layerE-commerce and ITRebuild per channel
Workflow states and open tasksPIM workflowData stewardsRestart in the new PIM
Version history and audit logPIMCompliance or ITArchive, rarely migrate
Users, roles and permissionsPIM administrationPIM administratorRecreate, do not copy blindly

Discontinued products deserve a decision of their own. Migrate them only if a process needs them in the PIM, such as spare-part lookups, warranty or a B2B portal that still shows them. Everything else can go to an archive that someone can read without the old system.

Profile before you map

Before you design the mapping, measure the source. Per attribute: how often it is filled, which formats and units appear, how many duplicates and orphan relations exist and how complete each locale is. A field that is filled for a handful of products in a large catalog is a decision, not a mapping. Profiling turns the "clean before or after" question below into a list with names on it.

How do you map the old data model to the new one?

Write the mapping down, attribute by attribute, and give every line an owner. A spreadsheet is fine, as long as it has these columns:

ColumnWhat it holds
Source object and attributeThe code in the old PIM, not the label
Target object and attributeThe code in the new PIM, or "drop" or "archive"
Transformation ruleUnit conversion, split, merge, code to option, text to number
Locale and channel scopeWhether the value is per locale, per channel or global, in both systems
Default or fallbackWhat happens when the source is empty
OwnerThe business person who decides what the field means
Test caseOne real product that proves the rule works

Map the structure before the values. Decide first how the new PIM represents families, variant levels, relations and asset roles, because those decisions change the shape of every product. Then map attributes inside that structure. Use codes, not labels, on both sides: labels change with language and editing, codes stay stable.

Three mapping decisions cause most of the rework later:

  1. Variant levels. If the old PIM has two variant levels (for example model, colour, size) and the new one models variants differently, decide where each attribute lives before the first load, because moving values between levels later means reloading.
  2. Scope. An attribute that is per channel in one system and global in the other forces a choice: keep one value, or create channel-specific attributes. Make that choice explicitly.
  3. Relations. Load parents before dependents: reference data, then categories, then products, then relations and assets. A relation that points to a product not yet loaded fails silently in many importers.

Clean before or after the move?

Both, split by type of problem. This keeps the migration finite and the new PIM clean.

Type of problemWhen to fix itWhy
Duplicates, invalid identifiers, retired productsBefore extraction, in the sourceThey multiply every later step and break relations
Mixed units, free text that should be an option list, inconsistent formatsDuring the migration, with written transformation rulesThe rule documents the decision and runs the same way in every rehearsal
Missing enrichment: new attributes, better descriptions, extra imagesAfter go-live, in the new PIMIt is new work, not migration, and it would keep the cutover date moving

The migration is the cheapest moment to fix structure, as our implementation guide notes for first projects too, but it is the wrong moment to start an enrichment programme. Resist cleaning everything. For the ongoing rules after go-live, see product data quality and governance.

Big bang or phased cutover?

Big bangPhasedParallel run
What it isAll data and all channels move in one cutover windowOne product family, brand, market or channel at a timeBoth PIMs run, the new one feeds channels while the old one is kept as reference
Fits whenOne source, a moderate catalog, few channels, a fixed contract end dateSeveral sources, many channels or markets, or a team that cannot pause for longRisky channels, or when the business wants proof before switching
Main riskEverything fails at once; the rollback has to be completeTwo systems feed channels for a while; someone must own which product lives whereEditors update both systems, or the wrong one
Must haveFull rehearsals, a tested rollback, a short content freezeA clear split per slice and an integration that can read from bothThe old PIM strictly read-only, and an end date

Most PIM-to-PIM moves land on a phased approach with a short parallel run per slice: move one product family or channel, reconcile, switch it, then move the next. Whatever you choose, cut over with the same sequence every time: freeze edits, run the final load, run a delta for anything changed since the last rehearsal, reconcile, then switch the channels in a fixed order. Decide the go/no-go criteria and the rollback path before the cutover weekend, not during it.

How do you prove nothing was lost?

With a reconciliation table that you agree before the first rehearsal and run after every load. Compare the new PIM against the frozen baseline, not against the live old PIM, which keeps changing.

CheckMethodPass rule
Record counts per object typeCount products, product models, variants, categories, assets in baseline and targetEqual, or every difference explained by a written migrate/drop decision
Fill rate per attributeShare of products with a value, per attributeEqual to the baseline, or higher where a default was agreed
Fill rate per localeThe same, per locale for localisable attributesNo locale lower than in the baseline
Option and unit valuesDistinct values per attribute, mapped through the ruleNo value outside the allowed list; no unmapped source value
Variant structureParents, children and variant axes per familySame number of children per parent; axes match the mapping
RelationsCount per relation type; relations pointing to missing productsCounts equal; zero broken relations
Asset linksAssets per product, role and order; files that openCounts equal; zero broken links; sample of files opens
Exact values on hard casesField-by-field comparison for a fixed set of difficult products100% match, or each difference traced to a transformation rule
Channel outputExport from the new PIM to each channel, compared with the last export from the old oneNo rejected products the old export did not have
Business sign-offCategory owners review their sample in the new PIMSigned per rehearsal

The hard-case set is the most useful part. Pick a few dozen products that represent the difficult corners of your catalog: the most variants, the most relations, the longest texts, partly translated locales, products with many assets and a few with known data problems. If those come through intact, the easy products almost always do.

How many rehearsals? At least two full ones, and three for a complex catalog, each ending with a signed reconciliation. A falling number of differences over the rehearsals is the signal that you are ready. Our sister site pimselection.com describes the same profile, cleanse, map, rehearse and cutover sequence in its data migration guide, and PIM Atlas has a step-by-step PIM data migration overview.

What changes when you leave Akeneo, Salsify, inriver or Pimcore?

The export side decides how much work the extraction is. The table shows what each vendor's own documentation states, checked on 7 November 2026. It covers leaving each platform; when one of them is your target, read its import documentation the same way.

Source PIMDocumented export routesWhat to watchSource
AkeneoExport profiles for products, product models, families, categories and attributes as CSV or XLSX, with an option to include media files in an archive; asset families export as CSV or XLSX with an optional archive of the files; a REST API covering products, product models, family variants, attributes, options, association types, categories, reference entities, assets and rule definitionsExports with labels instead of codes cannot be re-imported, so export codes. Association columns only appear when at least one exported product has an association. The combined product and product model export is listed for the Advanced and Premium editions. Assets stored as media links export as URLs, not files. We found no history exportAkeneo Help Center, Akeneo API
SalsifyExport runs through the API for all data, products, digital assets, attributes and attribute values; products as XLSX, CSV or JSON, the full export as JSON or JSONLAPI access depends on your licence type. Product exports default to leaf products; request the hierarchy explicitly. The documented digital asset export gives asset records, not a bulk download of the files, so plan how you fetch the binariesSalsify developer docs: export overview
inriverNot verified: inriver's documentation portal did not open for our tools on 7 November 2026Ask inriver or your partner which export covers all entity types, how links between entities and specifications are exported, and how resources (assets) are exportedNot documented on the pages we could open
PimcoreDatahub File Export writes data objects to CSV, XML or JSON; the Datahub's default endpoint is GraphQL; for custom import and export Pimcore recommends its PHP APIA File Export configuration covers one data object class. Asset fields export as a path or thumbnail, not the file. The export needs the object ID as a column if you want to update later. We found no documentation on exporting version historyPimcore Datahub File Export, External system interaction

On the import side the same documentation is useful. Salsify's JSON import expects a fixed order (header, attributes, attribute values, digital assets, products), with assets referenced by URL and relations inside the product record. Pimcore's Data Importer reads CSV, JSON, XML, XLSX and SQL sources and writes to data objects through a mapping with create or update strategies, and its documentation does not say that it imports asset files. If you are moving to Akeneo, its import profiles expect codes, which is another reason to export codes from your source.

Two practical rules follow. Export with codes and identifiers, never with display labels. And treat assets as a separate stream: list the files, their links to products and their roles, and check after load that the files open.

If you are still choosing the target, our alternatives pages compare the options per starting point: Akeneo alternatives, Salsify alternatives and Plytix alternatives.

Contract and timing: notice periods and overlap

A migration plan that ignores the contract ends with a cutover under pressure. Work backwards from three dates:

  1. The notice date of the old PIM. Check the notice period and the renewal date in the subscription. If notice must be given months before renewal, the decision to leave has to be made before the new system is proven.
  2. The overlap you need. The old PIM has to stay available, read-only, through the last rehearsal, the cutover and at least one clean publication cycle on every channel. Price that overlap in, either as a short extension or as part of the notice period.
  3. The export window. Confirm in writing that you can export all data, including assets, until the last day of the contract, and in which format. Some SaaS contracts limit access after the end date.

Also check who owns the connectors and custom code built on the old PIM. Integrations built by a partner may need to be rebuilt, and that work belongs in the budget next to the licence of the new system. Our PIM RFP guide has questions for the new vendor about migration support, and the KatanaPIM podcast on PIM migration covers scoping, ownership and phasing from practice.

How we evaluated

This guide combines the migration steps PIMvendors uses in selection and implementation projects with each vendor's own documentation. We opened the export and import documentation of Akeneo, Salsify and Pimcore on 7 November 2026 and recorded what it states. inriver's documentation portal did not open for our tools that day, so the inriver row lists questions instead of facts. We aligned the steps with the migration guides on our sister sites pimselection.com, PIM Atlas and pimsysteem.nl, which follow the same sequence of profiling, mapping, rehearsal, reconciliation and cutover. We give no durations, failure rates or costs, because they depend on your catalog and no source we could check states them in a way that would transfer to your project.

PIMvendors is an independent PIM selection platform. Export options change with releases, so confirm the current options with the vendor before you plan the extraction.

Sources

Where to go from here

Both tools are free and independent of any vendor.

Not sure you need a PIM yet?

A short check that shows whether a dedicated PIM helps your catalog, or whether spreadsheets and ERP still do the job.

Check if a PIM fits

Ready to compare vendors?

Answer questions about your scale, sector and must-haves and get a ranked shortlist.

Build my vendor shortlist

Frequently asked questions

How do I migrate from one PIM to another without losing data?

Inventory everything the old PIM holds and freeze a read-only baseline export. Map the old data model to the new one attribute by attribute, with a written rule for every field. Run at least two full rehearsal migrations, three for a complex catalog, and reconcile counts and values per attribute after each one. Cut over with a freeze and a delta load, and keep the old PIM read-only until the new one has published cleanly to every channel.

How long does a PIM-to-PIM migration take?

It depends on the number of products, attributes, languages, assets and integrations, and above all on how clean the source data is. Plan the calendar around rehearsals rather than around the final load: each rehearsal needs time to load, reconcile and fix. Ask the new vendor or integrator for a reference migration of a similar size and how many rehearsals it took.

Should I clean product data before or after the migration?

Split it by type of problem. Remove duplicates, invalid identifiers and retired products at the source, before you extract. Fix structural issues such as mixed units or free text that should become option lists with rules during the migration. Leave enrichment, such as new descriptions or attributes the old PIM never had, for after go-live, or the migration never ends.

How do I know nothing was lost in the migration?

Reconcile, do not eyeball. Compare record counts per object type, fill rates per attribute and locale, relation and variant counts, asset links and a checksum or exact match of values for a sample of hard cases, between the frozen baseline and the new PIM. Agree the pass rule for each check before the first rehearsal, and let the business owner sign off the result.

When can I switch off the old PIM?

Only when every channel has run from the new PIM through at least one normal publication cycle without errors, reconciliation has passed, and the go/no-go criteria agreed before cutover are met. Until then keep the old PIM read-only, so nobody edits two systems, and check the notice period so the contract does not end before the switch-off date.

Can I migrate version history and workflow states?

Usually not in a usable form. Version history and audit logs are not among the export options that Akeneo, Salsify and Pimcore document, and workflow states rarely map one to one because each PIM models workflow differently. Archive the history from the old PIM in a readable format for audit purposes, and restart open workflows in the new one.

Is a PIM-to-PIM migration different from a first PIM implementation?

Yes. In a first implementation the data comes from spreadsheets and the ERP, and much of it is still unstructured. In a PIM-to-PIM migration the source already has a data model, so the work is translating one model into another: families, variants, relations, assets, locales and channel rules. That translation is where data gets lost, because the two systems rarely model these things the same way.

Diagnostic

Do you actually need a PIM?

Run the complexity index before you budget software or hire an SI.

Start assessment

Budget

Model a first-pass TCO

Translate catalog shape into a three-year cost range in under ten minutes.

Open cost calculator