Skip to content
CMS Max Documentation

POS Sync

Connect a supported point-of-sale system and keep products, categories, prices, and inventory synchronized with CMS Max.

POS Sync imports products and inventory from a connected point-of-sale system into CMS Max. It can also keep product information updated automatically.

Connect a POS system

  1. Install and activate Ecommerce, Liquor Max when applicable, and RMH (Retail Management Hero), NCR, or KORONA POS from Plugins. Only one POS connector can be installed at a time.
  2. Open eCommerce > POS Sync > Settings.
  3. Enter the credentials supplied for your POS connector on the Credentials tab.
  4. Save the settings before fetching products or editing mappings.

The Automation tab controls the product-and-inventory schedule, the inventory-only schedule, and supported order exports independently. Disable both schedules to pause automatic imports; manual sync actions remain available. KORONA order export is not available yet, so CMS Max keeps it disabled even though catalogue and inventory synchronization can run normally.

For KORONA, follow the complete KORONA setup and first sync guide. On the first credential save, CMS Max loads all active Price Groups and chooses the most likely standard retail group. Combine All Locations is the default inventory mode, but you can instead use one warehouse location or disable stock tracking.

Check the POS setup

Open eCommerce > POS Sync > Dashboard and select Check POS Setup in the Connection section. For RMH and NCR, the check confirms that the login domain and credentials work and that the POS has enabled the product, inventory, category, and department change feeds CMS Max expects. For KORONA, it checks the saved credentials, Products, Commodity Groups, selected Price Group, organizational units, selected inventory mode, and stock permission.

The check runs in the background so the dashboard remains responsive while the POS answers. The result remains visible in the Connection section as Ready, Action needed, or Unavailable. Select View Details to see the individual checks. Before the first import, the product check notes that the catalog assignment will be confirmed by the first product sync. If a completed product sync receives no products, the check warns that the default catalog assignment needs attention. The details also note when no positive inventory has been received, but zero stock alone does not make an otherwise working inventory feed unhealthy.

The setup check is read-only. It does not reset or acknowledge change feeds, advance KORONA revision cursors, or update POS data. Run it manually after configuring a connection or changing its POS permissions or inventory location.

Configure mappings

Open Product Mappings to choose how POS fields populate CMS Max products. Category Mappings appears when Enable Categories is on under Sync Rules.

  1. Fetch products if no sample records are available yet.
  2. To create a starting point automatically, select Suggest with AI. Your POS connector queues an analysis of field names and sample values from up to 10 products spread evenly across the imported catalogue using the configured AI provider. You can leave the page while it runs; the suggestions load when the analysis finishes or when you return. KORONA uses documented connector-aware mappings instead, so AI suggestions are not shown on its mapping screen.
  3. Select a sample POS product or category to preview the mapped CMS Max values.
  4. For a sample product, select View Raw POS Record to inspect every imported field and its dot-notation field path.
  5. Review the AI Mapping Suggestions box to see the chosen POS path, confidence, reason, and real source examples for each field. Only medium- and high-confidence suggestions are shown. Fields owned by a connector's separate inventory feed are not suggested as product mappings. Existing mappings remain unchanged during this review.
  6. Leave the suggestions you want checked, then select Apply Suggested Mappings to update those fields in the editable mappings below. Existing mappings for other fields are kept. Adjust the source and fallback fields as needed.
  7. Save the settings before starting a sync. Applying an AI proposal to the form does not save it automatically.

Changing saved mappings marks affected imported products for another update. The dashboard will show when updates are waiting to be applied.

The imported products table shows each configured product mapping in its own column. If no mappings have been saved, it shows the connector's default mapping columns and values instead. Use the column manager to show, hide, or reorder those columns. RMH and NCR do not include Quantity in their default product mappings because bLoyal supplies authoritative stock through its separate inventory feed.

When the category and department change feeds are enabled, routine product syncs also receive taxonomy changes. With category updates enabled in Sync Rules, changing a POS category or department name updates the linked CMS Max category, its mapped content, and the public URLs beneath it. CMS Max creates redirects from existing category and product URLs to their new locations. A disabled category or department feed falls back to the classifications included with each product.

Choose product rules

Use the Sync Rules tab to control new and existing products separately. These rules determine visibility, inventory handling, category creation, and which POS-owned fields may overwrite CMS Max values.

Under Category Rules, turn Enable Categories off to stop creating, assigning, updating, or source-archiving CMS Max categories. Products are not archived merely because their POS category hierarchy is deleted while category management is off, and products previously archived with a deleted category hierarchy remain archived. This also hides the category-specific controls, Category Mappings tab, and POS Sync > Categories navigation. Existing imported category records, mappings, and category preferences remain available if categories are enabled again. Newly configured connections default to not creating missing POS categories; when creation is enabled, new CMS Max categories default to Draft. Existing connections retain their previous category-creation behaviour until the setting is saved.

Linked Category Details controls whether CMS Max or the POS owns category names, mapped content, URLs, and parents. CMS Max ownership preserves editorial changes while products and category links continue syncing. POS ownership updates POS-created and manually linked CMS Max categories whenever their POS category changes.

For existing products, Category Assignment defaults to Sync, keeping each product assigned to the CMS Max category linked to its current POS category. Connections configured before this release also adopt Sync on their next sync unless Don't change is selected. Choose Don't change only when manual CMS Max product-category assignments should persist even if the POS category changes. This setting does not rename or move the categories themselves.

For RMH and NCR, Product Availability includes Only Sync Web-Enabled Products. Leave it on to archive products that bLoyal marks as unavailable for the web. Turn it off to sync all products regardless of their Web Enabled value. After changing this setting, run Re-fetch All Products & Inventory to restore any products that were previously archived. KORONA does not expose this bLoyal flag, so the setting is not shown for KORONA.

When Liquor Max is active, Name can update all products, only non-liquor products, or no existing products. New KORONA connections default to Non Liquor Products so Liquor Max names remain intact while ordinary product names continue updating from the POS. A POS-owned name change also updates the public URL during product follow-up and creates a redirect from the previous URL.

Missing Categories has the same Non Liquor Products scope when Liquor Max is active. It creates categories only for POS categories marked Excluded from LiquorMax; liquor products retain the taxonomy supplied by the Central catalogue. New KORONA connections with Liquor Max active use this scope by default. This is separate from archiving a POS category, which excludes its products from synchronization entirely.

Products with a zero price are always kept as drafts, including during later updates. Add a valid price in the POS before publishing the product.

Imported products and categories can be linked to a different CMS Max record from the imported catalog pages. In an RMH hierarchy, a department is the parent and a category is its child. Filter categories by type to show only departments, or select a department to inspect its categories. The Products count includes and links to products anywhere beneath that hierarchy level, while Direct Products counts and links to only the products assigned exactly there; both include archived products. Liquor Max policy confirmations use those same totals. Excluding a POS category archives its imported child categories and affected imported products after confirmation.

For KORONA, CMS Max imports the complete Commodity Group ancestry and assigns each product to its leaf group. Subsequent runs request only products and Commodity Groups newer than their saved revisions; groups deleted from KORONA are returned as inactive and archived in CMS Max. The mapping screen describes the automatic KORONA behavior while retaining its editable source paths: Automatic GTIN from Product Codes scans the available product codes for a recognizable GTIN, and Current Price from Selected Price Group selects the newest price in the configured Price Group whose start date has arrived. If a different field is required, save a custom mapping. From an imported KORONA product's action menu, select Open in KORONA to edit that source record in KORONA Studio.

KORONA scheduled prices update the CMS Max regular price. CMS Max does not infer a sale from an older price or automatically translate KORONA promotions, because the product price timeline does not identify a reliable regular-price/sale-price pair. Existing CMS Max sale prices and dates are preserved by default. Only enable Sale Price and Dates ownership when an intentional custom mapping supplies those fields.

CMS Max uses the first recognizable UPC/EAN/GTIN from KORONA's product-code list rather than assuming the first code is a barcode. A KORONA product with Track Inventory disabled also remains untracked and sellable in CMS Max, even when the selected location returns a zero stock record. KORONA typed descriptions are not copied into CMS content by default, and KORONA's Listed and Sales Lock flags are not treated as website visibility controls; configure an intentional custom mapping or manage those website fields in CMS Max when needed.

KORONA sectors and sales-tax rates do not correspond to TaxJar product tax-category codes. During onboarding, configure CMS Max's default tax behavior and assign any exempt or specially categorized products in CMS Max. A KORONA sector named “Tax Free” is not automatically trusted as a CMS Max exemption.

Run a sync

Open eCommerce > POS Sync > Dashboard and select Sync Products & Inventory for routine use. This fetches available POS changes, applies them to CMS Max, updates inventory, and performs any required follow-up work.

KORONA routine product, Commodity Group, and inventory syncs request only records newer than the last successfully imported revision. Inventory keeps a separate revision for every warehouse location so single-location and combined-location stock remain accurate. No acknowledgement is sent to KORONA. If a request fails before all pages are safely applied, CMS Max keeps the previous revision and safely replays the records on the next attempt. Each routine sync also re-evaluates already-stored scheduled prices, so a future KORONA price becomes active after its start time even when merely reaching that time does not create another product revision.

When the POS reports that a product has been deleted, the next product sync archives its linked CMS Max product. If the POS later returns that product, CMS Max restores the same linked product unless it was manually excluded from synchronization.

The More sync options menu also provides narrower maintenance operations:

  • Fetch Product Changes from [POS] Only downloads POS changes without applying them. Before the first import, its label is Fetch All Products from [POS].
  • Apply Fetched Products to Site applies previously fetched changes and appears only when work is waiting.
  • Sync Inventory from [POS] refreshes inventory without running a product import.
  • Re-fetch All Products & Inventory performs a complete re-import and should be reserved for recovery or configuration changes that require every record to be reconsidered.

Do not start another sync while saved settings have changed. Save the settings first so the run uses the values shown on screen.

Monitor a sync

The dashboard shows the current or latest run in ordered stages: fetching from the POS, updating products, updating beverage data when Liquor Max is active, and product follow-up. Narrow operations such as Fetch products retain the full stage layout but mark stages that are outside that operation as Not included. A completion notification appears when an active run finishes while the dashboard is open.

While inventory is being synchronized, the dashboard also shows whether CMS Max is requesting inventory, updating linked product stock, confirming receipt with the POS, verifying an uncertain confirmation, or checking for another page. These steps include the inventory batch number and may repeat when the POS returns inventory in more than one page. The total number of batches is not known in advance, but an increasing batch number confirms that processing is continuing. bLoyal feeds require an acknowledgement for each batch; if that response is lost, CMS Max checks whether the feed advanced before retrying. KORONA advances its server-issued stock revision only after the returned inventory has been applied and requires no acknowledgement.

If the POS is not ready to provide another data sync, the current run shows Waiting for POS and the time until CMS Max tries again. The sync resumes automatically from its unfinished step, so completed product fetching is not repeated; no manual action is required.

Temporary POS request failures appear as a warning on the active run. The warning shows how many requests have failed, confirms that CMS Max is continuing to retry, and includes a short description of the latest issue. An inventory warning clears after the POS accepts the affected batch. These request failures do not mean the overall sync has failed.

For KORONA, temporary connection failures, service failures, and rate limits retry automatically. A daily API limit waits for the normal queued retry rather than holding a worker open. Authentication, permission, missing-account, and other permanent failures appear with a safe action-oriented message in the sync activity.

Use Recent Runs for totals and the outcome of each run. Products or categories that could not be matched or updated appear under Imported POS Catalog > Needs Attention with the recorded reason.

Open the products processed during a run and select View Changes to compare every captured CMS Max product value before and after that sync. Price and sale-price changes are displayed as currency. Newly created products are recorded without repeating all of their initial values, so they do not show this action. Older events created before change tracking was introduced continue to show their changed field names but do not have a before-and-after comparison.

Schedule automatic updates

Open Settings > Automation to configure two schedules:

  • Products & Inventory processes product changes and refreshes inventory. Choose an interval that fits the POS provider's request allowance and how quickly catalogue changes need to appear.
  • Inventory Only refreshes stock more frequently without processing the product catalog.

Schedules use the site's configured timezone. The dashboard shows when each automatic run is due next.

Recover from a problem

  1. Open the failed run on the dashboard and review its summary.
  2. Resolve any credential, mapping, or matching issue shown under Needs Attention.
  3. Run Sync Products & Inventory again. Successfully completed records are not duplicated.
  4. Use Re-fetch All Products & Inventory only when a complete source re-import is required.

Contact CMS Max support before clearing imported data on a production site.