# Multistore Duplication of a Full Category — PrestaShop 8 & 9

> This module adds a back-office wizard that duplicates a whole category — with all its products, combinations, images, attributes, specific prices and stock — from one shop to one or…

- Page: <https://www.datafirefly.com/en/documentation/multistore-category-duplication/>
- Language: en
- Last updated: 2026-07-15
- Other languages: [fr](https://www.datafirefly.com/documentation/duplication-multiboutique-categorie/index.md), [es](https://www.datafirefly.com/es/documentation/duplicacion-multitienda-categoria/index.md), [de](https://www.datafirefly.com/de/documentation/multishop-kategorie-duplizieren/index.md), [it](https://www.datafirefly.com/it/documentation/duplicazione-multinegozio-categoria/index.md), [pl](https://www.datafirefly.com/pl/documentation/duplikacja-kategorii-multistore-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/duplication-multiboutique-categorie/index.md), [nl](https://www.datafirefly.com/nl/documentation/duplication-multiboutique-categorie/index.md)
- Index: <https://www.datafirefly.com/en/documentation/llms.txt>

This module adds a back-office wizard that duplicates a **whole category** — with all its products, combinations, images, attributes, specific prices and stock — from one shop to one or several other shops within the same multistore PrestaShop. This documentation covers installation, how it works internally, and step-by-step use of the wizard.

## Requirements

- PrestaShop 8.0 to 9.x.
- **Multistore mode must be enabled** (Advanced Parameters then Multistore), with at least two shops.
- An employee profile with write access to the catalog.

If multistore is disabled or a single shop exists, the wizard shows a message and does not allow duplication: there would be no target shop.

## Installation

1. In the back office, open Modules then Module Manager.
2. Click "Upload a module" and drop the ZIP file.
3. Once installed, a tab appears under Catalog, named "DF Shop Duplicator".

## How it works

Unlike a plain product duplicator, the module does not create new product entities. It builds on PrestaShop's native **multistore association** mechanism: a product stays a shared entity, and only shop-specific data is copied to the target shop.

Concretely, for each duplicated product the module copies the per-shop rows: product_shop, product_lang, image_shop, product_attribute_shop, stock_available, specific_price (shop-scoped, cart excluded), plus carrier associations and the required lookup tables (attributes, attribute groups, features, manufacturer, supplier, tax rule group).

Direct consequence: no duplicated product reference, no image re-copied on disk, and a product's future global changes keep propagating to every shop that shares it.

**Categories**, on the other hand, are handled differently. Because a category's parent id (id_parent) is global, you cannot simply "associate" a tree under another parent. The module therefore creates new categories under the target parent you designated — or reuses those that already exist, depending on the chosen option.

## Using the 3-step wizard

### Step 1 — Source shop and category

Select the starting shop, then the category to duplicate in the tree. Tick "include sub-categories" if you want to process the whole branch and not just the selected category. The number of affected products is shown to help you.

### Step 2 — Target shops and mapping

Tick one or several destination shops. For each ticked shop, a category tree appears: designate the **destination category** under which the products (and optionally the tree) will be placed. By default, the target shop's root is preselected.

### Step 3 — Options and execution

Set the copy options (see the next section), review the summary, then start the duplication. A progress bar and a live log show progress product by product, along with any warnings.

## Options in detail

- **Copy the tree**: re-creates sub-categories under the target category, keeping the hierarchy. Unticked, all products are placed directly under the target category ("flatten" mode).
- **Reuse existing categories**: instead of re-creating categories, the module finds those already present under the target parent by matching their URL rewrite. This is what makes duplication **idempotent**.
- **Copy quantities**: duplicates stock to the target shop (see stock handling below).
- **Specific prices**: copies shop-scoped specific prices.
- **Pack products (recursive)**: also associates the child products of packs included in the selection.
- **Search re-indexing**: re-indexes each copied product for front-office search. Useful but slower on large volumes.
- **Batch size**: number of products processed per AJAX pass (20 by default, up to 200). Lower it on constrained hosting, raise it to go faster.

## Re-creating and reusing categories

When "Reuse existing categories" is enabled, the module looks under the target parent for a category whose URL rewrite matches the source. If it finds one, it uses it; otherwise it creates a new one. You can therefore **re-run the duplication as many times as needed** without piling up duplicate categories — for example after adding new products to the source.

For a first "flat" sync where all products should land under a single target category, untick "Copy the tree" and leave "Reuse existing categories" ticked.

## Stock handling and sharing across shops

Stock copying respects the shop group's **stock sharing** setting. If the source and target shops already share the same stock pool, the copy is skipped: duplicating quantities would create inconsistencies. Otherwise, quantities are copied to the target shop. These decisions are traced in the execution log.

## Pack products

If the selection contains packs and the matching option is enabled, the module recursively associates each pack's child products to the target shop, so the pack stays sellable. A guard prevents loops with nested packs.

## Large catalogs and resume

Execution runs as successive **AJAX batches**: the browser chains the calls until completion, which avoids any PHP timeout even on several thousand products and combinations. The job is **persisted in the database** (dedicated table), with a position pointer: if processing is interrupted (tab closed, network drop), it can resume where it stopped instead of restarting from scratch.

## Troubleshooting

### The wizard says multistore is unavailable

Check that multistore mode is enabled and that at least two shops exist. The wizard needs a source shop and at least one distinct target shop.

### Some products seem "missing" in the target shop

Make sure the destination category is correctly mapped in step 2 and that products are active. In "flatten" mode, products are placed under the single target category, not under a re-created tree.

### Stock was not copied

This is the expected behavior if both shops share the same stock pool. The execution log flags it with a warning.

### After a second run, I see duplicate categories

Enable "Reuse existing categories". Without this option, every run re-creates new categories under the target parent.
