Multi-Store Synchronization — Installation and Configuration Guide
Install, connect two PrestaShop stores and configure catalog synchronization in push or pull mode, with cron and conflict management.
This guide covers installing the Multi-Store Synchronization module, connecting two PrestaShop installations and fully configuring catalog synchronization.
Requirements
- Two PrestaShop 8.0 to 9.x installations (databases and hosting may be separate).
- The PHP cURL extension enabled on the store that drives the synchronization.
- The webservice enabled on the remote store, with a dedicated access key.
The module is only installed on the store that drives the synchronization. The remote store simply needs its webservice enabled — no module to install there.
Installing the module
- In the back office of the driving store, open Modules > Module Manager.
- Click Upload a module and send the
dfmultisync.zipfile. - Once installed, the module adds the Advanced Parameters > DF Multi-Store Sync menu.
Enabling the webservice on the remote store
On the store to be connected:
- Open Advanced Parameters > Webservice.
- Set Enable PrestaShop’s webservice to Yes and save.
- Click Add new webservice key, generate a key, then grant
GET,POST,PUTandDELETEpermissions on:categories,products,images,combinations,stock_availables,specific_pricesandlanguages. - Save and copy the generated key.
Without DELETE permission on specific_prices, specific price synchronization will fail: the module mirrors the remote set through delete-and-recreate.
Adding a remote site
- Go to DF Multi-Store Sync > Remote sites then Add remote site.
- Enter a name, the remote store’s root URL (e.g.
https://store-b.example.com) and the webservice key copied earlier. - Save, then click Test in the list to verify the connection.
The Test button actually queries the remote webservice. If it fails, check the URL (with the https:// protocol), the key, and that the webservice is enabled on the remote side.
Creating a sync profile
A profile describes what to synchronize, in which direction and how to arbitrate conflicts.
Direction: push or pull
- Push — the current store is the source and sends its data to the remote site.
- Pull — the remote site is the source; the current store receives its data.
Entities
Select the entities to synchronize. They are always processed in this order to respect dependencies: categories → products → stock → specific prices.
Options
- Sync images — on push, new local images are sent; on pull, images are downloaded when the product is created.
- Sync specific prices — available in push mode only.
- Batch size — number of entities processed per cycle (1 to 25). Lower it if the remote server is slow.
Conflict strategies
A conflict occurs when both stores have edited the same record since the last sync. Four strategies are available:
- Source wins — the source always overwrites the target.
- Target wins — conflicting entities are skipped.
- Newest wins — modification dates are compared.
- Manual — conflicts are queued for arbitration.
Running a first synchronization
- Open the module Dashboard.
- On the profile row, click Run now.
- Synchronization runs in batches: the progress bar shows live counts of created, updated, skipped, conflicting and errored entities.
Synchronization works within a time budget (25 seconds by default) and automatically resumes where it stopped. On a large catalog, several cycles chain together without intervention.
Automating with cron
- Enable the Cron option on the relevant profiles.
- Copy the cron URL shown on the dashboard (secured by a token).
- Add it to your server’s crontab, for example every fifteen minutes:
*/15 * * * * wget -q -O /dev/null "https://your-store.com/module/dfmultisync/cron?token=YOUR_TOKEN"
The cron URL token is confidential: it authorizes triggering synchronizations. Do not share it or expose it publicly.
Resolving conflicts
With the Manual strategy, conflicts accumulate in the Conflicts tab. For each pending row:
- Keep local — forces the push of the local version.
- Keep remote — forces the pull of the remote version.
- Ignore — marks the conflict as handled without transferring anything.
Logs and monitoring
The Logs tab keeps a history of operations (info, warning, error), filterable by level and date. Logs are purged automatically after 30 days.
Troubleshooting
The connection test fails
Check that the webservice is enabled on the remote side, that the key is correct and that its permission profile covers the resources listed above. Make sure the URL includes https://.
Some products are skipped
The module matches products and combinations by reference. A product without a reference, or whose reference differs between the two stores, cannot be matched for stock. Set consistent references.
Specific prices do not sync
Specific price synchronization is push only and requires the DELETE permission on specific_prices on the remote side.
Synchronization seems slow
Lower the profile’s batch size and let cron chain the cycles. The first run is always the longest; subsequent runs only transfer entities that actually changed.