Smart Wholesaler Feed Sync: setup and help

Quick start

  1. Upload the module ZIP through Modules > Module Manager and install MPR Feed Sync. Click Configure to open Feed Sync.
  2. In multistore, select the individual shop you want to update.
  3. Open Feeds > Add new feed. Enter Name, Feed URL / path, and Source type. Use Test connection to check access.
  4. For a Corsan XML feed, keep Adapter set to Corsan XML. For another format, save the feed, open its Mapper action, fetch a sample, map the fields, preview the products, and save a profile linked to the feed.
  5. Edit the feed and review Sync, Pricing, Gone-from-feed, Catalog, and Safety. Stock and availability default to Yes. Price, name, description, images, brand, and categories default to New products only. Enable Create missing products only if you want to add unmatched items.
  6. Enable Apply enabled for this feed when ready to allow writes, then save. Run Dry-run from the feed row.
  7. Review the planned changes in Workbench and Runs > Details. Resolve ambiguous matches and review any new products, stock reductions, image removals, or exclusions. Run another Dry-run after changing settings or overrides.
  8. Click Apply on the feed and accept the confirmation. Open the resulting run and check its applied, skipped, and failed rows. Open an affected product in the back office. Newly created products start inactive and hidden unless you change the creation policy.
  9. For recurring feed checks, copy Cron URL from Settings > Configuration into your server scheduler. This URL parses feeds; it does not apply catalog changes.

Setup manual

Install and open the module

Install the ZIP in your shop's module manager, then click Configure. The module adds Feed Sync under the selling menu. Its dashboard shows the last run, match rate, active feeds, managed products, unread alerts, and recent runs.

Use Feeds for feed configuration and execution, Dry run for the mapping studio and parse-only checks, Workbench for item review and overrides, and Runs for execution details and rollback. Mappings, Category Mapping, Brand Mapping, and Stock Locations manage the corresponding relationships.

Wholesalers is a read-only list. Installation adds a shared Corsan wholesaler. You can select a wholesaler in a feed or leave it unassigned; this screen does not add or edit wholesalers.

Choose one shop before working in multistore. Feed configuration, product overrides, run details, and credentials belong to the selected shop. The runtime form is also shop-specific, except for the retention settings and Ignore Omnibus price history during rollback, which apply across the module.

The server needs readable source files and writable temporary storage. XML parsing needs XMLReader; XLSX also needs ZipArchive. FTP, FTPS, and SFTP need PHP cURL with support for the selected protocol. Content template HTML processing needs DOMDocument.

Set shop pricing and lifecycle defaults

Open Feed Sync > Settings > Configuration.

In Default pricing policy, use Add step to build an ordered formula. Operations are Multiply by, Add, Subtract, Divide by, and Add percent. The default is an empty formula, so the normalized wholesaler price passes through unchanged. For example, multiplying 100 by 1.2 and adding 5 produces 125 before rounding.

Round final price defaults to No rounding. The other choices round to 0.01, 0.10, or 1.00. Click Save default pricing policy. Removing every step and rounding clears the default policy. A policy using options this editor cannot represent is displayed without an editable save form.

In Default image and gone-from-feed policies, every control initially inherits its system default:

Setting Effective system default Behavior
Image strategy Append Choose Append, Replace, or Augment as the inherited image policy. Image sync permissions still decide whether a product's images can change.
Gone policy enabled No Enable handling of products that disappear from a feed.
Gone action Report only Choose Report only, Unavailable, Unavailable and zero stock, or Disable.
After runs 3 Minimum number of consecutive missing runs before an item qualifies.
After days 2 Minimum time since the item was last seen. Both the run and day thresholds must be met.
Show storefront notice No Show the gone-from-feed notice on qualifying product pages.
Hide price No Hide the price for products in the gone state.
Notice text mode Inherit Select Custom, including empty to supply your own text or an explicit empty value.
Notice text Empty Custom notice text when the custom mode is selected.

Click Save default image and gone policies. Feed, category, and product policies can override individual fields. Inherit keeps the broader decision in control; it does not turn the feature off. Run a new dry-run after saving policies.

Configure runtime limits and history retention

The Runtime settings form on Settings > Configuration contains these controls. Click Save after editing.

Setting Default Behavior
Enable apply in this shop No Shop-wide permission to apply changes. A feed with its own apply switch enabled can also authorize apply; these two switches are alternatives. Confirmation and dry-run checks still apply.
Ignore Omnibus price history during rollback Yes When considering deletion of a product created by Feed Sync, changes confined to mpromnibus price history do not block deletion. The history is retained. Other product changes can still prevent deletion.
Fetch timeout seconds 20 Total download timeout; saved values have a minimum of 2 seconds.
Fetch connect timeout seconds 8 Connection timeout; minimum 1 second.
Fetch max bytes 33554432 Download and decompression limit, initially 32 MB. Accepts 1048576 to 268435456 bytes, equivalent to 1 to 256 MB. A feed can override it.
Sync lock TTL seconds 600 Lifetime used for feed operation locks. The form accepts at least 60 seconds.
Product create max count 20 Default cap on potential product creates in an apply run.
Combination create max count 100 Default cap on potential combination creates.
Create max percent 2 Default creation limit of 2% of planned feed rows. The creation count caps also apply.
Image max count 5 Default number of feed images considered in Append mode. Replace and Augment have separate behavior described below.
Image max bytes 26214400 Maximum download size per image, initially 25 MB.
Image timeout seconds 10 Total image download timeout; minimum 1 second.
Image connect timeout seconds 4 Image connection timeout; minimum 1 second.
Diff retention days 7 Age limit for disposable run details.
Detailed runs per shop and feed 48 Count limit for disposable details per shop and feed. Age or count can cause expiry. Zero keeps only protected details.
Compact apply runs after days 2 Age at which disposable details of apply runs can be compacted. Write journals remain available.
Run header retention days 180 Retention for disposable run summaries. Apply and rollback summaries and write journals are always retained.
Cron token Generated per shop Read-only credential for the public cron endpoint.
Cron URL Generated for the shop Read-only parse endpoint containing the shop's cron token.

Retention settings accept whole numbers from 0 to 1000000. Pinned runs, unfinished runs, rollback journals, the latest feed run, reviewed details, the latest dry-run, and maintenance owners receive protection from cleanup. Busy feeds are skipped by retention.

Use Regenerate token to replace the selected shop's cron token, then update the scheduler with the new URL. The old cron URL stops authorizing requests. The apply confirmation credential is separate from the cron token.

Add a feed and configure its Source tab

Open Feeds > Add new feed, or use Edit on an existing row. Save changes with Save.

Setting New feed default Behavior
Name Empty Required name used in lists and run history.
Wholesaler -- None -- Optional wholesaler association.
Feed URL / path Empty Required source URL, Google Sheets URL or ID, or absolute local file path.
Source type URL (HTTP / HTTPS) Choose URL, FTP, FTPS, SFTP, Local file, or Google Sheets (published CSV).
Compression Auto-detect Choose Auto-detect, Gzip, or None for source decompression. XLSX uses its own spreadsheet package reader.
Maximum feed size (MB) Blank Blank or 0 inherits the shop limit. A whole number from 1 to 256 overrides it for downloaded and decompressed data.
Source settings JSON Empty Advanced transport options. Google Sheets supports gid and range, for example {"gid":"0","range":"A1:K500"}.
Username Empty FTP, FTPS, or SFTP login.
Password Empty Login password. Leaving this field blank on an existing feed keeps its stored password.
SFTP private key path Empty Optional absolute server path to a readable private key.
SFTP key passphrase Empty Optional key passphrase. Blank preserves the stored value on an existing feed.
FTP passive mode Yes Saved with the feed, but this release's FTP transport does not use the switch.
Verify TLS peer Yes Controls certificate verification for the cURL FTP/FTPS transport. HTTP and Google Sheets downloads always use certificate verification regardless of this field.
Verify TLS host Yes Controls host verification for the cURL FTP/FTPS transport. HTTP and Google Sheets downloads always verify the host regardless of this field.
Adapter Corsan XML Use the built-in Corsan reader or Generic mapping profile. The generic adapter requires a mapping profile.
Mapping profile -- Adapter preset -- Select a saved profile or supplied preset. A selected profile takes precedence over adapter parsing.
Match priority ean,sku,supplier_id Ordered comma-separated identifiers used to find catalog products or combinations.
Priority 0 Higher-priority active feeds take precedence when feed identities overlap. Equal priorities favor the lower feed ID.

Use Test connection to download the source and see its byte count and initial content. This does not apply catalog changes.

For local files, place the file inside the shop's var/modules/mprfeedsync/import/ directory and enter its absolute path. Paths outside the configured import directory, including symlinks resolving outside it, are rejected.

Google Sheets must expose a public CSV export. Private spreadsheets requiring an interactive Google login are not supported by this source type.

Map source fields to products

Use Mapper on a saved feed or open Dry run > Feed mapping studio. The studio reads a sample and stores a reusable mapping profile.

  1. Enter Feed URL. The studio does not preload the saved feed URL or include its feed ID in sample and preview requests. A source needing stored credentials can therefore fail in the studio even when the feed's Test connection succeeds.
  2. Choose Format, initially auto, or select XML, CSV, JSON, XLSX, or Google Sheets. Optionally select Preset. Supplied presets cover Corsan XML, Google Shopping XML, Ceneo XML, and generic CSV and JSON.
  3. For XML, set Record element to the repeated item element, such as o or item, or leave it empty for detection. For CSV, Delimiter can be left empty for detection. For JSON, Array pointer selects the product array, such as products.
  4. For XLSX, Sheet selects a sheet by name or number and Header row selects the header row. Blank uses the reader's automatic choices. The initial Fetch sample request does not forward these two overrides in this release; re-enter them after sampling, then use Preview mapped products and save the profile to use them.
  5. Click Fetch sample, then review Source fields and their examples. The studio initially leaves fields unmapped and suggests mappings after sampling.
  6. Select the source for each field under Map to product fields, then click Preview mapped products.
  7. Click Save profile and supply a name. When the studio is opened for a feed, the saved profile is linked to that feed. Otherwise select it later in the feed's Mapping profile field.

Map EAN, SKU / Manufacturer code, and Supplier ID carefully. EAN and SKU are the main catalog identifiers; supplier IDs can change. Duplicate, ambiguous, ignored, and low-confidence rows are not ordinary writable matches.

The other mapping targets include Name, Price, Stock, Location quantities, Availability, Category, Brand, Images, Features, and Raw attributes. Raw attributes can supply content template values. Location quantities can contain pairs such as PL=5;DE=2.

Variant mapping targets include Variant group key, Variant key, Variant attributes, Combination EAN, Combination reference, Combination price impact, Combination stock, and Combination images. Mapping these fields supplies variant data; it does not enable combination or attribute synchronization. This release's feed editor has no controls for those two permissions, which default to off.

For ordinary fields, transforms run in their displayed order. trim removes surrounding whitespace, digits_only removes non-digits, decimal_normalize converts a price to a decimal value, and lower and upper change case. map_values uses the field's value map. In the availability value map, choose available (1) or unavailable (7) for each supplier value.

The studio also offers prefix, suffix, regex_replace, split, concat, and default_if_empty, with an arguments box. This release does not translate that box into the parameters expected by the transform processor. Do not rely on entered arguments to produce those transformations; inspect the mapped preview before saving.

The sample preview shows up to eight mapped records and a sample match estimate. Run a full Dry-run from Feeds before applying.

Import physical measurements

The mapper supports Length, Width, Height, Depth, Absolute weight, Volume, Area, package dimensions, package weight and volume, unit length, area, weight, volume, and count.

For each mapped measurement, choose its value field and either enter Source unit, select Unit source field, or use a value containing its unit, such as 25 cm. Unit fields initially use Unit in the value, and no fixed source unit is supplied. A bare number needs an explicit unit. Conflicting or invalid units cause the offer to be refused.

Measurement fields do not use ordinary price or text transforms. Map source length to Height only when it actually represents height. The preview shows source and effective values, including units and inheritance. Missing measurements preserve previously stored values; they do not clear them.

Imported width, height, depth, and weight can also update the corresponding native product values in shop units. Absolute weight means the full physical weight of the variant; the module calculates the native combination weight impact relative to its parent. Other measurements remain in the shared measurement storage.

Review measurements in the mapper, Workbench previews, and the native product page. The product's measurements lock prevents feed changes. Apply requires the reviewed measurement plan to remain current. Conflicts between shops or changes made since the dry-run require another review.

Choose what the feed may synchronize

Open the feed's Sync tab.

Setting New feed default Behavior
Sync stock Yes Update quantities from feed stock, or from location quantities when location sync is enabled. Choices are Inherit, Yes, and No.
Sync availability Yes Apply the supplier availability policy to ordering and related product state. Choices are Inherit, Yes, and No.
Prevent ordering when the supplier marks the item unavailable Yes With availability sync enabled, unavailable items become non-orderable while their pages remain visible. Availability returning can restore ordering. Existing feeds without this policy flag show No.
Sync price New products only Set price on creation and preserve it on later synchronization.
Sync name New products only Set the name on creation and preserve it later.
Sync description New products only Set descriptions on creation and preserve them later.
Sync images New products only Import images on creation and preserve them on later synchronization.
Sync brand New products only Assign the brand on creation and preserve it later.
Sync categories New products only Assign categories on creation and preserve them later.
Scoped image strategy Inherit shop default Select Append, Replace, or Augment for this feed.
Image max count override 0 Append inherits Image max count at 0. Replace and Augment consider all feed images at 0; a positive value caps their desired image count.
Sync features No Import non-variant product features, reusing existing names and preserving manually assigned features.
Remove features that leave the feed No Remove features previously managed by this feed when the feed stops supplying them. Manually assigned features are preserved.
Sync location stock No Maintain stock by location in addition to the aggregate shop quantity.
Stock aggregation Sum all locations Choose Sum all locations, Highest location quantity, Primary location, or Specific location.
Warehouse settings JSON Empty Advanced location mappings and aggregation settings.

The six New products only controls also offer Off, Always, and Inherit. Off prevents the field's feed synchronization; Always permits creation and later updates. Inherit uses the broader policy. With no broader override, system permissions allow price, stock, brand, and availability, and block name, description, images, and categories. Product field locks can still veto writes.

Available items with positive stock can update quantity and remain orderable without changing activation or visibility. Available items with zero stock remain orderable, while the shop's out-of-stock behavior applies unless overridden. Unavailable items plan zero stock; ordering is disabled only when the relevant policy is enabled. Unknown availability leaves product state unchanged. Stock and availability permissions can independently preserve their respective fields.

For mapped combinations, one available sibling can keep the parent product orderable when another combination is unavailable.

Build content templates and exclude manufacturers

Use Content templates and manufacturer exclusions in the feed's Sync tab, or open the same panel from Workbench.

For each language and Name, Short description, or Description, enable Use this template and enter the template. Templates are initially absent. Unchecked language templates inherit the shop default language's template. Feed sync permissions and product value locks still determine whether rendered content is written.

Available tokens are:

{wholesaler_name}
{wholesaler_description}
{wholesaler_short_description}
{wholesaler_reference}
{wholesaler_brand}

Enter additional source field names in Selected feed fields (one per line) to make tokens such as {feed:material} available. Use Insert token to insert a token. {{ and }} produce literal braces. Tokens read mapped supplier input; they do not execute PHP or Smarty. Names become plain text and description HTML is sanitized.

Use Preview content to inspect the source and rendered result. In the standalone Workbench panel, click Save import settings. In the feed form, save the feed.

Excluded manufacturers and Excluded supplier brands initially have no selections. Choose shop manufacturers to exclude, or enter one supplier brand per line. Supplier-brand matching ignores case and repeated whitespace. Excluded items and their variant groups remain unchanged and are also protected from gone-from-feed processing.

Automatic maintenance during apply, in the feed's Safety tab and standalone import panel, defaults to No. When enabled, the selected shop closes during catalog writes and the module restores its previous maintenance setting afterward. Parse-only and dry-run operations keep it open. The panel displays Maintenance ownership and recovery status, active run IDs, and the last transition.

Set feed, category, and product pricing

Open the feed's Pricing tab. All pricing policies initially contain no rules. The calculation starts with the supplier price, converts currency if configured, and normalizes gross prices when requested by Policy JSON. The resulting base is tax-excluded.

The calculation follows shop default, feed, category, then product policies. Use the formula editor's ordered arithmetic steps. Continue from the price so far applies the formula to the previous stage's result. Restart from the original base discards earlier stage results and starts again from the normalized wholesaler price.

Setting Default Behavior
Feed pricing policy Empty, Continue Apply a feed-wide formula, optionally with ordered price bands. Band limits are compared with the normalized wholesaler price, not the result of earlier markups. The first matching band is used; the catch-all handles prices outside the bands.
Category pricing No category rules Select a shop category and add its formula. Descendants can inherit it. When several categories qualify, category precedence and specificity choose the applicable rule.
Specific products No selected products or formula Select products from this feed and apply an extra formula to that set. An exact product policy from Workbench takes precedence over this set policy.

Rounding in a rule applies at that rule's stage. Remove a rule or clear its formula to return to inheritance where supported by the editor. Save the feed and run a new Dry-run.

In Workbench, expand an existing product to edit Product pricing policy. It defaults to Use inherited pricing. Select Apply a product formula, then choose on top of the price so far or starting over from the wholesaler price, enter steps, and click Save policy. A fixed custom price with its value lock enabled takes precedence over the formula chain. Fixed prices are absolute tax-excluded catalog prices. A hard field freeze still blocks changes.

Use Explain price to inspect the source price, conversion, formulas, and final result. Pricing rules do not override Sync price by themselves: with New products only, an existing product keeps its price unless a permitted product override applies.

Handle products that disappear from a feed

Open the feed's Gone-from-feed tab. These rules concern previously mapped products absent from subsequent runs, rather than records whose availability value says unavailable.

Setting New feed default Behavior
Min feed size ratio 0.5 Skip gone handling when the parsed feed is too small relative to the recent average. This feed-wide guard is not overridden by category or product policies.
Scoped gone policy mode Inherit shop default Choose Override selected fields to supply feed-level values.
Scoped gone enabled Inherit Override whether gone handling is enabled. System default is No.
Scoped gone action Inherit Override the action. System default is Report only.
Scoped gone after N runs Blank, inherit 3 Minimum missing-run count.
Scoped gone after N days Blank, inherit 2 Minimum days since last seen. Both thresholds must be met.
Scoped storefront notice Inherit Override display of the notice. System default is No.
Scoped hide price Inherit Override price hiding for gone products. System default is No.
Scoped notice text mode Inherit Choose Custom, including empty to replace inherited notice text.
Scoped notice text Empty Custom notice text when custom mode is selected.

Report only leaves the catalog unchanged. Unavailable turns ordering off. Unavailable and zero stock also sets quantity to zero. Disable deactivates the product and turns ordering off.

Gone changes are planned in dry-run and written during apply. When an item reappears, the module plans restoration of the state it recorded when marking the item gone. Review the restoration rows before applying.

For narrower rules, use Category image and gone policies in the feed's Sync tab. Click Add category policy, choose Category, and set Image strategy or the gone fields: Enabled, Action, After runs, After days, Notice, Hide price, Text mode, and Notice text. They initially inherit, with blank thresholds and text. Precedence starts at 0; a higher value ranks ahead of a lower value.

Product-specific image and gone policies are available on expanded Workbench rows. Their controls initially inherit. An explicit No or empty custom text overrides a broader value just as an explicit Yes does. Product policy takes precedence over category, feed, and shop defaults.

In Product image and gone-from-feed policy, choose Image strategy and click Save image policy. For disappearance handling, set Policy, Action, After runs, After days, Notice, Price, Text mode, and Notice text, then click Save gone policy. Blank thresholds inherit; custom text mode allows an explicit empty notice.

Configure catalog creation and currency

Open the feed's Catalog tab.

Setting New feed default Behavior
Create missing products No Allow safe unmatched items to be planned for creation. Duplicate, ambiguous, excluded, and unsafe identities are not ordinary create candidates.
Category strategy Use default category Choose Use default category, Manual feed category maps, or Auto-create/map path under root.
Default category -- None -- Fallback category. New products can fall back to the shop home category when none is configured. This fallback is not a reason to recategorize existing products.
Category root -- None -- Root for automatic category paths; falls back to the resolved default category.
Source currency Empty ISO code of supplier prices, such as EUR. Empty means prices are already in the shop currency.
Currency rate source None Choose None, Manual, or NBP. A different source currency requires a usable rate provider before apply.
Manual currency rate Empty Positive multiplier from source currency to shop currency when Manual is selected.
Rate margin % 0 Percentage added to the rate before converting prices. Effective rate is rate × (1 + margin / 100).
Currency settings JSON Empty Optional rate expiry, locking, and provider request settings.
Policy JSON Empty on a new form Advanced creation, tax, availability, and category policies. Dedicated controls also store their related flags here when the feed is saved.

Manual rates normally expire after 24 hours and can be refreshed from the configured value. For an intentionally fixed rate, Currency settings JSON accepts {"manual_locked":true}. It also accepts effective_date, expires_at, ttl_seconds, or ttl_hours. NBP uses table A rates, calculating cross-currency conversion through PLN, and caches rates for 24 hours by default. nbp_ttl_seconds or nbp_ttl_hours changes that lifetime, with a minimum of five minutes. nbp_timeout defaults to 10 seconds and nbp_connect_timeout to 5 seconds. Missing or stale rates can block apply.

New products default to inactive with visibility none. You can review and activate them in the normal product editor. For deliberate automatic activation, Policy JSON supports:

{
  "activate_created_products": true,
  "create_visibility": "both"
}

Creation visibility accepts both, catalog, search, or none. Other supported policy keys include id_tax_rules_group for a new product's tax rules, feed_price_tax_mode with gross to remove included tax during price calculation, and allow_backorders for available items with zero stock. The default price interpretation is net, with no explicit backorder override.

deactivate_when_unavailable and hide_when_unavailable default to false. Set them only when you want supplier unavailability to change activation or visibility. The dedicated ordering switch controls disable_order_when_unavailable. Auto-category policies can use category_max_depth, initially 8, and category_max_creates, initially 20.

Set feed safety limits

Open the feed's Safety tab. Save these settings before the dry-run you intend to apply.

Setting New feed default Behavior
Apply enabled for this feed No Authorize apply for this feed even if the shop-wide apply switch is off. Turning this off does not block apply while the shop-wide switch remains on.
Max disable ratio 0.05 Fraction used for the stock-zero and disable safeguard when no absolute action limit is set. The resulting limit has a minimum of 10 actions.
Max disable actions Blank Optional absolute limit replacing the ratio-derived disable threshold.
Product create max count Blank, inherit 20 Override the shop's product creation count cap.
Combination create max count Blank, inherit 100 Override its combination creation count cap.
Create max percent Blank, inherit 2 Override the percentage cap on potential product and combination creates.
Image delete max actions Blank, effective 10 Limit planned image removals.
Image delete max ratio Blank, no ratio cap Optional fraction of current images in the dry-run image plans that may be removed.
Match-rate drop threshold 0.20 Block a sufficiently large drop in match rate against the previous successful baseline.
Advanced safety JSON Empty Additional safety options, including max_location_zero_actions or max_location_zero_ratio for per-location stock. The corresponding normal form fields take precedence when saving.
Schedule every:3600 Stored and displayed on the dashboard. This release does not use it to skip feeds that are not yet due. Control frequency through your scheduler.
Active No Include this feed in runs of all active feeds. Explicit actions on a particular feed can still run it while inactive.
Automatic maintenance during apply No Temporarily close the selected shop during catalog writes and restore its previous maintenance setting.

The creation percentage accepts ratios up to 1 or percentages above 1. For example, 0.02 and 2 both mean 2%; 1 means 100%. Both the count and percentage safeguards apply. An explicit product scope can adjust the percentage allowance to at least the product count cap. A write limit does not automatically remove other potential creates from the creation safeguard.

Apply also requires a configured feed, a valid confirmation credential, and a prior successful or warning dry-run matching the current configuration. Changes to policies, safety limits, pricing, content settings, or overrides can require a new dry-run. Destructive image operations additionally depend on the reviewed feed content and gallery state.

Map categories and brands

Open Category Mapping, select Feed, then click Open. Use Scan feed sample to collect values from a configured generic mapping feed, or run a dry-run first.

Strategy defaults to the feed's Category strategy. Choose the default-category, automatic-path, or manual-map strategy and click Save strategy. For each Feed category, select Target category and click Save category maps. Initially no maps exist.

Product category overrides take precedence, followed by active feed-value maps. These maps can apply even when the overall strategy is not manual. Without a map, manual strategy falls back to the default category. Automatic-path strategy resolves or creates categories beneath Category root, subject to its depth and creation limits. Category writes still follow Sync categories and field locks.

Open Brand Mapping, select a feed, and use Scan feed brands after a dry-run or apply has collected brand values. Choose Manufacturer for each Feed brand. Create if missing defaults to No; enable it to create a manufacturer from the supplier brand name when no manufacturer is selected. Click Save brand maps. Brand matching normalizes case and whitespace.

Brand assignment follows product overrides and feed brand maps, then existing manufacturer-name matching. Creation requires the map's creation permission. Sync brand still controls ordinary writes. The list also lets you remove an unwanted brand map with Delete.

Maintain stock locations

Open Stock Locations to pre-create or edit locations. New feed location codes can also create locations during apply.

Setting Default Behavior
Code Empty Required feed location code, such as PL, DE, or WH1.
Name Empty Display name; a blank name is filled from the code when saved.
ASM warehouse id Empty Shown when native Advanced Stock Management is available. Blank uses a virtual module-managed location; a warehouse ID maps it to ASM.
Active Yes Enable the location for reconciliation.

Click Save location. The list shows location mode, linked warehouse, feed-map count, product count, quantity, and activity. Delete also removes that location's module stock ledger rows.

Enable Sync location stock in the feed and map Location quantities. Stock aggregation determines the shop quantity: sum, maximum, a primary location, or a specific location. Warehouse settings JSON can supply feed_location_map, warehouse_map, primary_location_code, specific_location_code, and country_location_map.

Primary location first considers the country-to-location map, then the configured primary code, then the first supplied location. Specific location uses the configured code; if that code is missing from the supplied quantities, its aggregate is zero.

For example, to use only the supplier's PL location, select Specific location and enter:

{"specific_location_code":"PL"}

When no location quantities are supplied, reconciliation uses the aggregate feed quantity. When a previously recorded location disappears from a nonempty set of location quantities, its recorded quantity is planned as zero. The per-location mass-zero safeguard can block unexpectedly large reductions.

Review items and save product overrides

Open Workbench, select Feed, and click Reload feed to generate a fresh matching dry-run. Search by name, EAN, SKU, or category, or use Status filters such as Matched, New, Excluded, Excluded manufacturer, and Ambiguous.

The grid shows source identity, price, category, match state, exclusion, and actions. Product overrides initially have no custom values, no value locks, and no exclusion. Enter a custom title or price and keep its value lock enabled to use it during apply. Choose a category for an override that takes precedence over normal category resolution. Edits are saved automatically; wait for the saved message.

Use Expand to edit localized Custom title, Short description, and Description, inspect resolved changes, and set product pricing or image and gone policies. Variant groups can expand into their member rows where variant data is present. Use Explain price for the calculation and source details.

Exclude defaults to off. When enabled, Skip leaves the item unchanged; Deactivate plans deactivation of an existing product. Selected rows can be changed with Exclude selected, Deactivate selected, or Clear overrides. Deactivation is applied through the normal dry-run and apply workflow, not immediately when the override is saved.

Mappings lists product associations, confidence, ignored state, frozen fields, and category overrides. Ignore prevents a mapping from being used for normal synchronization; Unignore reverses it. Category opens the Override category selector; click Save override to save the preference, or Clear category on the mapping to remove it. Freeze locks stock, price, availability, name, description, and images for the product in that shop. Unfreeze clears its product field freezes.

Use Remap to correct an existing association. Product ID defaults to its current target and Combination ID to its current combination, or 0 for a product-level target. Enter valid targets belonging to the selected shop and click Save mapping. Remapping does not copy the source product's freezes to the destination product.

The native product editor also marks fields managed by Feed Sync and exposes field locks. A frozen field keeps the merchant's current value, including against ordinary value overrides. Unlocking it allows the effective synchronization policy to control it again. Locks on shared catalog fields can affect writes from another shop that shares the same product data.

After changing overrides or locks, run a new Dry-run, inspect it, and apply from Feeds.

Synchronize images and keep your own photos

Set Sync images to Always if you want ongoing gallery synchronization for existing products, then choose the effective Scoped image strategy or inherited policy.

Strategy Behavior
Append Add feed images without removing the existing gallery. Uses the shop image count limit unless the feed supplies an override.
Replace Treat the reviewed feed gallery as authoritative, planning additions, ordering, cover changes, and permitted removals. Review the deletion plan before applying.
Augment Synchronize the feed-managed part of the gallery while preserving merchant photos and protected images. Supports keep and position controls.

Open Images on a Workbench row to see the product gallery, which feed supplied each image, protected counts, and planned additions or removals. In Augment mode, Keep protects an image from feed removal. Position choices are Auto (feed order), Cover (first), Position…, and Last. A pinned position also protects the image. Returning it to automatic order can release the automatically added protection.

Upload your own images through the normal product editor. Use Augment when you want to preserve and pin these images. The Workbench image panel manages existing images; it is not an upload form.

Gallery changes, position rules, and protection changes can make the reviewed plan stale. Click Reload feed for a fresh dry-run before applying. Shared products can share gallery ordering between shops, so the last shop to synchronize can determine that order.

Run a dry-run and apply catalog changes

Use Dry-run on a Feeds row to fetch the configured feed, match items, and build planned changes without writing the catalog. Review the result in Workbench and Runs > Details.

The separate Parse-only dry run form under Dry run takes Configured feed, or Feed URL and Adapter. Click Run dry run to collect parsing metrics. This parse-only operation does not replace the matching dry-run required for apply.

Before applying, check matched, unmatched, duplicate, ambiguous, ignored, create, update, and skipped rows. Review stock and availability reductions, prices, category assignments, content, measurements, and image removals. Resolve source and mapping problems, then generate another dry-run after changes.

Click Apply on the feed and confirm the prompt. The admin action supplies the shop's apply confirmation credential. Either Apply enabled for this feed or Enable apply in this shop must be enabled. The module fetches the feed again, plans changes, evaluates safeguards, and performs allowed writes.

Runs on the same feed are serialized. A conflicting run can finish with status locked. A safeguard refusal produces blocked. A completed run can contain skipped, deferred, or failed rows, so use the row reasons and applied totals to understand the outcome.

Ordinary writes may proceed when feed content has changed since the dry-run if configuration and other safeguards still permit them. Destructive image changes require a matching reviewed feed and image plan. Measurement writes and reviewed content or brand operations can also require a fresh review when their inputs change.

Inspect run history and roll back an apply

Open Runs and click Details. The list shows mode, status, planned and applied counts, circuit-breaker state, duration, date, pin state, and detail storage. Details include summary counts, metrics, and before-and-after rows. Use Action and Status under Diff filters to narrow the rows.

Use Pin run to protect details from retention and Unpin run to release that protection. Under Run history retention, Preview retention shows the cleanup plan and protected reasons. Execute retention performs a bounded cleanup. If it reports Retention budget reached. Execute again to continue., repeat it to process remaining candidates. Expired details display Details compacted/expired under the retention policy.

To undo an apply, use Rollback this run in its details, or Rollback in the list. The feed row's Rollback action targets its latest eligible apply run. Confirm the prompt, then inspect the new rollback run.

Rollback uses the recorded write journal. It can restore supported changed fields and remove products or combinations created by the apply only when deletion guards permit it. Later catalog changes, changed images, or ownership conflicts can prevent restoration or deletion. Already rolled-back rows are skipped. Partial and deferred rows remain visible with their reasons; a successful rollback request does not mean every original change was reversed.

The default Ignore Omnibus price history during rollback setting allows an otherwise unchanged Feed Sync-created product to be deleted when only mpromnibus history changed. It does not discard that history or bypass other product-change guards.

Schedule recurring jobs

Copy Cron URL from Settings > Configuration for the selected shop. For example, replace this sample with the actual URL:

0 * * * * curl -fsS "https://your-shop.example/module/mprfeedsync/cron?action=sync&token=YOUR_CRON_TOKEN"

action=sync and action=parse run parse-only operations. action=dryrun builds matching dry-run details. Add id_feed=123 to target a configured feed; without it, the endpoint runs active feeds. Each call processes the chosen feeds immediately. Schedule does not enforce per-feed intervals in this release.

The public endpoint also supports action=status, action=prune_run_history, and action=dropship_maintenance. Retention previews by default; add execute=1 to execute it. Read the returned JSON and per-feed results to distinguish completed, blocked, and failed operations.

action=apply requires the separate shop apply confirmation credential as confirm or apply_token, together with the cron token, a configured feed, apply permission, and a matching prior dry-run. The visible Cron token alone cannot authorize catalog writes. For routine reviewed writes, use Apply in the back office; server administrators can configure the apply endpoint or the supplied CLI tools with the separate credential.

The module registers shared scheduler tasks for parsing feeds hourly, recovering import maintenance every five minutes, retaining run history hourly, and maintaining dropship tickets every fifteen minutes. Their execution depends on the shop's shared scheduler running.

Server administrators can run a matching dry-run directly from the shop root:

php modules/mprfeedsync/bin/match-diff-dry-run.php --id-shop=1 --id-feed=123 --show-diffs

The corresponding apply tool is bin/apply.php, with explicit --id-shop, --id-feed, and --confirm arguments. These tools also support product and feed-key scopes. Configure limits and scope before generating the dry-run intended for that apply.

Configure supplier profiles and work with dropship tickets

Open Dropship Orders > Supplier profile to add a supplier, or choose an existing supplier's button to edit it.

Setting Default Behavior
Supplier key Empty Required permanent identifier, up to 96 characters, using lowercase letters, digits, underscores, or hyphens and starting with a letter or digit. It cannot be changed after creation.
Supplier name Empty Required display name.
Enabled No Allow the profile to participate in ticket creation and maintenance.
Adapter Manual B2B Manual B2B keeps fulfillment manual. Other offered choices are Private file export, Email CSV, Email XML, and HTTP POST.
Reference prefix Empty Optional prefix before the native order ID in the copied ticket title, up to 32 characters.
Company Empty Supplier billing block company.
Address Empty Billing street address.
Address line 2 Empty Optional billing address continuation.
Postal code Empty Billing postal code.
City Empty Billing city.
Country Empty Billing country.
Tax ID Empty Billing tax identifier.
Supplier carrier Empty Carrier information saved with the supplier profile.
Source bindings No feeds selected Each offered feed has a Yes/No selection. Assigning it to this supplier replaces any prior supplier binding for that source.

Click Save supplier profile. The profile form does not expose the order-status trigger, email recipients, HTTP endpoint, or adapter options required for automatic dispatch. Selecting an automatic adapter here alone does not configure it to send orders. Manual B2B is usable through the ticket workflow below.

Order creation and order-status hooks collect lines from bound feed mappings into supplier tickets. Maintenance can repair missed ticket creation. Feed synchronization being inactive does not itself remove a supplier binding. Tickets for mixed orders include only the lines resolved to the supplier.

The supplier ordering code comes from the mapped supplier SKU. Missing or ambiguous codes remain warnings instead of being replaced with a shop reference or supplier ID. Review warnings about supplier code, delivery, phone, billing, currency, or conflicting sources before placing the supplier order.

Open a ticket from Dropship Orders or the order's dropship panel. Copy individual values or use Copy whole ticket for manual entry into the supplier's system. Then enter Supplier order number and click Mark placed.

Use Tracking numbers (one per line) and Shipment confirmation before Save shipment. Choose Add parcels; keep ticket placed for a partial shipment, or I confirm the entire ticket has shipped for completion. Cancel ticket requires a Cancellation reason. Reopen ticket and Correct ticket are available where the current ticket state permits them.

For an unplaced ticket, use Preview refresh before placement to compare the stored snapshot with current order and source data, then Apply displayed changes if appropriate. Placed snapshots are frozen and their comparisons are read-only. Reload when the page says another operation changed the ticket.

When mprwarehouserevolution is enabled for the same shop, Feed Sync collects its dropship source alongside feed mappings. Shared source resolution detects overlapping lines and conflicts. Feed Sync owns the combined native order panel.

Dropship maintenance also expires recipient data for closed tickets after the shared default of 180 days. Tickets with erased recipient data have restricted editing.

Troubleshoot feeds and blocked runs

Start with the run's Details, row Reason, dashboard Open alerts, and the source Test connection result. Use Settings > Integrity for required component and database checks. Settings > License, Support, and Update open the module's corresponding management screens.

Message or state What to do
Feed URL is required. or Feed URL is empty. Enter a source in the feed or parse form and save it.
Generic mapping adapter requires a mapping profile. Save a mapping profile and assign it to the feed.
Feed exceeds the configured ... byte limit. Inspect the source and its compression, then choose an adequate Maximum feed size (MB) or Fetch max bytes within the supported range.
Local feed file is outside the configured import directory. Move it inside the import directory and use its real absolute path.
Local feed file does not exist or is not readable. Check the filename and the PHP process's read access.
Configured SFTP private key file is not readable. Correct SFTP private key path and file permissions.
FTP, FTPS, and SFTP feeds require the PHP cURL extension with libcurl protocol support. Ask the host to enable the required cURL protocol.
The ZipArchive PHP extension is required to read XLSX feeds. Enable ZipArchive. XMLReader is also required.
MEASUREMENT_SOURCE_UNIT_REQUIRED or MEASUREMENT_SOURCE_UNIT_CONFLICT Supply a matching measurement unit in the value, fixed unit, or unit-source field. Review the mapped offer again.
MEASUREMENT_MAPPING_INVALID Remove ordinary transforms from measurement mappings and correct the source and unit configuration.
MEASUREMENT_REVIEW_STALE Run another matching dry-run after the measurement or native product change, then review it.
Apply mode is disabled. Enable it explicitly before testing writes. Enable the feed's or shop's apply switch, save, then run a fresh dry-run.
Apply confirmation token is missing or invalid. Use the current admin Apply action, or correct the separate apply credential in an automated request.
A dry run is required after the current feed configuration, policy, safety thresholds, or price rules changed. Run Dry-run from the feed row after saving all changes. A parse-only check is insufficient.
Mass-create circuit breaker tripped, Mass-disable circuit breaker tripped, Per-location mass-zero circuit breaker tripped, or Image-delete circuit breaker tripped Review the planned changes and source completeness. Correct mistakes before changing limits; changing a limit requires a new dry-run.
Manual currency rate is not configured. Enter a positive manual rate or choose the appropriate provider.
currency_rate_required or currency_rate_stale Correct currency configuration or restore access to the rate provider, then regenerate the dry-run.
locked or The feed is busy. Try again after its current operation. Wait for the other operation to finish, then retry.
Automatic maintenance recovery failed; resolve the recovery status before running an import. Check Maintenance ownership and recovery status and the shop's maintenance setting. Resolve recovery before another import.
Content templates, manufacturer exclusions or brand mapping changed; run a new dry-run. Save the intended settings, reload the feed, and review the new plans.
Your session token is invalid. Reload the page and try again. Reload the dropship page before submitting another action.
This ticket changed. Reload it before trying again. Reload the current ticket revision and repeat the intended action.

A low match rate often needs corrected EAN or SKU mappings. Repeated supplier keys can create duplicate rows; several catalog candidates can create ambiguous matches. Inspect these identities rather than applying them as ordinary updates.

If a field remains unchanged, inspect its Sync permission, New products only mode, product freezes, custom value locks, exclusions, and feed priority. For missing images, also inspect the image plan, effective count cap, download limits, and whether a fresh reviewed plan is required.

Disable or uninstall

Set Active to No to remove a feed from all-active-feed processing. Also remove any scheduler request or CLI job explicitly targeting that feed, since explicit feed actions can still run it. To prevent catalog apply, turn off both the feed-level and shop-wide apply permissions and stop automated apply jobs.

Disable the module in the module manager to stop its normal hooks. Remove external scheduler entries when you stop using it. Disabling does not reverse catalog changes already applied.

Before uninstalling, finish active imports and resolve automatic maintenance recovery. Uninstall refuses while these conditions remain unresolved, with Maintenance recovery must complete and active imports must finish before uninstalling.

Uninstall removes module configuration, menus, registered cron tasks, feed definitions, mappings, run history, rules, alerts, and locks. It removes Feed Sync's bindings from the shared dropship system, while shared dropship tables and history are preserved. Uninstall does not roll back imported catalog products or other catalog changes. Perform any required rollback before removing the module and its journals.

Compatibility

Requires PrestaShop 1.6.1.0 or later and PHP 7.1 or later.

Questions

8

Which feed formats and sources can I use?

  • Formats: XML, CSV, JSON and XLSX, plus Google Sheets CSV exports.
  • Sources: HTTP/HTTPS, FTP, FTPS, SFTP and readable local files inside the configured import directory. FTP, FTPS and SFTP require PHP cURL with the relevant protocol support.
  • Google Sheets uses published or accessible CSV export links or sheet identifiers. The reader rejects Google Sheets API and OAuth modes.

Can a feed track stock at more than one location?

Yes. With location-stock synchronization and stock updates enabled, the importer can keep per-location quantities and calculate the shop quantity using the selected aggregation strategy, such as sum or maximum. Locations can remain virtual. Writing to a mapped Advanced Stock Management warehouse additionally depends on an available, compatible warehouse bridge; a virtual location does not itself create a native warehouse.

Can the feed create new products or combinations?

Yes. New products require create_missing. Combinations also require sync_combinations and a valid parent and variant plan; this release’s feed editor does not expose combination or attribute sync controls. Review a dry run, then apply within the configured creation limits.

What happens if a feed would disable or zero many products?

Apply mode checks configured limits for mass disabling, product and combination creation, match-rate drops and location-stock zeroing. It also rejects plans that would zero or hide available items with positive stock. If one of these gates fails, the run is recorded as blocked and an alert is added before the catalogue write executor runs. These checks depend on the configured thresholds and the proposed changes.

How can I protect selected products from feed changes?

Use mapping controls to ignore a map or freeze selected fields. Product overrides can also lock fields, supply a custom price or category, or exclude an item. For an exclusion that should preserve an existing product, use the skip action; the alternative exclusion action can deactivate it. Review the resulting dry run before applying.

How does the feed match existing products and combinations?

The matching engine uses EAN, SKU/reference and supplier reference in the configured match_priority, normally ean,sku,supplier_id. It first checks duplicate feed keys and coherent existing maps. Duplicate keys are blocked, unresolved multiple candidates are ambiguous, and a supplier-reference-only match is marked low confidence. Review the dry-run matches before applying changes.

Does saving a feed immediately change my catalogue?

No. Parsing and dry runs are separate from applying catalogue changes. Apply mode requires explicit apply enablement, a valid shop confirmation token and a successful dry run matching the current feed configuration, policy, safety thresholds and price rules. A dry run can save module records and proposed changes without applying those catalogue writes.

What can the dropshipping forwarding feature send?

Adapters support manual B2B handling, private file export, email CSV, email XML and HTTP POST. The supplier profile form does not expose the status trigger, recipients or endpoint needed for automatic dispatch. Manual B2B sends nothing automatically; a queued ticket does not confirm supplier receipt or acceptance.

Known Issues

18

Scoped creation used the wrong items and counters

ResolvedUpdated:
Fixed in: 1.10.0
A limited import could count products outside its selection or ignore the feed's synchronization switches when creating products.

Security hardening

ResolvedUpdated:
Fixed in: 1.10.0
Security hardening.

Dropship Orders kept redirecting on PrestaShop 9.2

ResolvedUpdated:
Fixed in: 1.10.0
Opening the dropship order screen could enter a redirect loop on PrestaShop 9.2.

Multistore administration showed an error

ResolvedUpdated:
Fixed in: 1.10.0
Opening administration in all-shops or shop-group context could fail instead of asking the employee to select a shop.

Deferred rollback could not be retried correctly

ResolvedUpdated:
Fixed in: 1.10.0
Rollback work explicitly deferred for later could become non-retryable before the relevant data changed.

Partial rollback could run again

ResolvedUpdated:
Fixed in: 1.10.0
Repeating an already partial rollback could replay work that should have been treated as finished.

Rollback could claim changes it had not restored

ResolvedUpdated:
Fixed in: 1.10.0
A rollback report could mark fields as restored without sufficient evidence that restoration had occurred.

Administration failed on PrestaShop 9.2

ResolvedUpdated:
Fixed in: 1.10.0
Opening Feed Sync administration could fail on PrestaShop 9.2.

Image rollback failed on PrestaShop 9

ResolvedUpdated:
Fixed in: 1.10.0
Rollback could fail to locate product images on PrestaShop 9.

Save and stay did not behave correctly

ResolvedUpdated:
Fixed in: 1.10.0
Saving feed settings while staying on the page could bypass validation or leave the expected page.

Unchanged names caused unnecessary address changes

ResolvedUpdated:
Fixed in: 1.10.0
A synchronization could rewrite a product address even when its name had not changed.

Imported addresses lost letters on PrestaShop 9

ResolvedUpdated:
Fixed in: 1.10.0
Generating product and category addresses could remove letters on PrestaShop 9.

Restart pricing policies could not be saved

ResolvedUpdated:
Fixed in: 1.6.1
Saving a feed could reject a pricing policy explicitly configured to restart from the supplier price.

Availability changes were lost during import

ResolvedUpdated:
Fixed in: 1.5.2
Updating a product category could overwrite availability settings applied by the import.

Large supplier images were rejected

ResolvedUpdated:
Fixed in: 1.5.2
Supplier images larger than the earlier limit could fail to import.

Supplier cover images were missed

ResolvedUpdated:
Fixed in: 1.5.2
The main image inside a supplier image collection could be skipped or not chosen as the cover.

Imports replaced manually assigned categories

ResolvedUpdated:
Fixed in: 1.5.2
Synchronizing an existing product could overwrite categories curated by the merchant.

Unchanged products caused import errors

ResolvedUpdated:
Fixed in: 1.5.2
An update that already matched the catalog could be reported as an error instead of completing normally.

Feature Requests

21

Implemented

Multi-format feeds and field mapping

Implemented
Import XML, CSV, JSON, spreadsheets and Google Sheets with configurable field mappings.

Feed transport options

Implemented
Read web, FTP, FTPS, SFTP and local feeds, including compressed files.

Reviewed imports and rollback

Implemented
Preview catalog changes in a dry run, apply approved updates and roll back imported changes.

Product and combination creation

Implemented
Create products and combinations from supplier data and map their categories and brands.

Stock by location

Implemented
Synchronize stock quantities for multiple warehouse locations.

Supplier order forwarding

Implemented
Optionally forward supplier-owned order lines by email or web delivery, or generate an order export, with retry and administration controls.

Currency conversion and markups

Implemented
Convert supplier currencies and apply fixed or percentage price markups.

Image replacement and ordering

Implemented
Replace or extend product galleries and control individual image positions.

Missing-product policies

Implemented
Choose how to handle products that disappear from supplier feeds.

Composite pricing formulas

Implemented
Build ordered calculations and choose different formulas by category or price range with a live preview.

Scoped pricing and synchronization

Implemented
Configure pricing and synchronization permissions for shops, feeds, categories and individual products.

Composed pricing chains

Implemented
Stack pricing formulas across configuration levels or restart from the supplier price, with a step-by-step explanation.

Scoped image and missing-product policies

Implemented
Configure image handling and missing-product policies at different catalog levels.

Omnibus price history integration

Implemented
Report completed catalog price changes for Omnibus history.

Multilingual content templates

Implemented
Generate product names and descriptions from mapped supplier fields with language-specific templates and previews.

Manufacturer and brand exclusions

Implemented
Exclude selected manufacturers and supplier brands from imports and missing-product handling.

Automatic import maintenance mode

Implemented
Optionally use maintenance mode during imports and restore the earlier shop state afterwards.

Feed limits and unavailable-product policy

Implemented
Set a feed size limit and choose whether unavailable products can be ordered.

New-products-only field permissions

Implemented
Allow selected fields to be populated on newly created products while preserving those fields on existing products.

Run history retention

Implemented
Retain and compact older import history while keeping evidence needed for rollback.

Corsan dropship tickets

Implemented
Create supplier tickets from order lines, manage them in administration and view ticket details on the order page.

Changelog

v1.5.22025-11-10

  • Initialpublic release
  • InitialImport wholesaler feeds in XML, CSV, JSON, XLSX and Google Sheets over HTTP, FTP, FTPS, SFTP or local file
  • InitialIdentity-first matching: EAN, then manufacturer code / SKU, supplier id only as last resort
  • InitialDry-run with full line-by-line diff before every apply; recorded runs with rollback
  • InitialBelow-cost price guard quarantines implausible price drops with the reason recorded
  • InitialGraceful gone-from-feed retirement with configurable action and automatic restore
  • InitialCircuit breakers against truncated feeds, mass-disable and mass-create
  • InitialVariant feeds become real PrestaShop combinations with per-variant stock, price impact and images
  • InitialImage sync strategies: append, replace, augment - manual, locked, pinned and cover images are never deleted
  • InitialPer-field locks on the product page (name, description, price, stock, availability, images, category)
  • InitialPer-image keep locks and position rules in the Workbench image manager
  • InitialCategory, brand and currency mapping with NBP or fixed exchange rates
  • InitialMulti-warehouse stock aggregation and optional dropship order forwarding

Demo

Test the full module before you buy

Buy a licence later and keep your settings.

  • Your 30-day demo Test it on your own shop for 30 days from the first install.
  • Ready demo shop Explore a ready demo shop in your browser.
  • No registration No account, email or store domain needed.
Launch demo shop

By downloading, you accept the demo terms and privacy policy.

By opening this demo you accept the demo terms and the privacy policy.

Loading...
Back to top