Skip to main content

Product Sync

Admin Manager

Brother POS provides two-way product synchronization with WooCommerce. Products created or updated in your WooCommerce store are pulled into Brother POS, and products from Brother POS appear in your online store.

Two ways products reach your website
  • Plugin push / pull (recommended, default): the Brother POS plugin pulls the catalog out of Brother POS and writes each product into WooCommerce locally. This is the firewall-proof path — see Catalog Pull below.
  • Legacy pull: Brother POS reaches into WooCommerce over the REST API to read products during the initial import. The rest of this page describes both.

How Product Sync Works

Product sync operates in two distinct phases:

1. Initial Import

The first sync after connecting WooCommerce performs a full import of your entire catalog:

  • All WooCommerce product categories are synced first.
  • Every published product is imported with its full details.
  • Variable products and their variations are imported as parent-child relationships.
  • Cannabis attributes are extracted from product metadata.
  • Images are downloaded and associated with each product.

The initial import is automatically marked as complete once products have been successfully created. After that, Brother POS switches to incremental sync.

2. Incremental Sync

After the initial import, Brother POS performs periodic sync at the interval you configured (default: every 15 minutes):

  • New products added to WooCommerce are created in Brother POS.
  • Updated products have their cannabis attributes refreshed.
  • Stock levels are updated for products with managed stock.
  • A change detection system identifies discrepancies and an auto-corrector resolves them.

What Gets Synced

Product Fields

WooCommerce FieldBrother POS FieldNotes
NameNameOnly updated during initial import for existing products
SKUSKU / BarcodeSKU is used for barcode scanning. Auto-generated as WOO-{id} if blank.
Regular / Sale PricePriceSale price takes priority if set
DescriptionDescriptionHTML tags are stripped automatically
Status (publish/draft)ActivePublished = Active, Draft = Inactive
Stock QuantityCurrent StockOnly when "Manage Stock" is enabled in WooCommerce
WeightWeight ValueConverted to grams based on your configured weight unit
ImagesPrimary Image / GalleryFirst image becomes primary; all images stored as gallery
CategoriesCategoriesMulti-category support with primary category detection

Cannabis-Specific Fields

Brother POS extracts cannabis data from WooCommerce product metadata and attributes:

Data SourceFields Extracted
Product metadataTHC content and unit
Product metadataCBD content and unit
Product metadataStrain type (Indica, Sativa, Hybrid)
Product metadataBrand name
Product metadataEffects profile
Product metadataFlavour profile
Product attributesFallback extraction from WooCommerce attributes (THC %, CBD %, Strain Type)
Product metadataTerpene associations
Product metadataFlavor associations
Product metadataMedical benefit associations
Cannabis data sources

Brother POS checks product meta first (more reliable), then falls back to product attributes. If your WooCommerce store uses a cannabis plugin that stores data in custom meta fields, Brother POS will pick it up automatically.


Category Sync

Categories are synced before products to ensure proper categorization:

  • WooCommerce categories are matched to Brother POS categories by name.
  • If a matching category does not exist in Brother POS, it is created automatically.
  • Parent-child category hierarchies are preserved.
  • Products can belong to multiple categories (many-to-many relationship).
  • Brother POS selects the most specific (deepest) non-marketing category as the primary category.

Marketing categories like "Staff Picks", "ON SALE", and "Mix & Match" are recognized and deprioritized when selecting the primary category.

Product Format Mapping

Brother POS automatically maps your WooCommerce category names to product formats:

Category Name ContainsProduct Format
flower, bud, strainflower
pre-roll, jointpre_roll
edible, gummy, chocolateedible
oil, extract, concentrateoil
vape, cartridgevape
topical, cream, balmtopical
accessory, tool, pipeaccessory

Variable Products and Variations

WooCommerce variable products are fully supported:

  1. The parent product is imported first with its base attributes.
  2. Each variation is imported as a child product linked to the parent.
  3. Variation names are built from their attributes (e.g., "3.5g - Premium").
  4. If a variation has no SKU in WooCommerce, Brother POS auto-generates one as WOO-{parent_id}-{variation_id}.
  5. Variations inherit their parent's categories automatically.
  6. Variations without their own images inherit the parent product's images.

Stock for Variable Products

  • Individual variation stock levels are synced from WooCommerce.
  • The parent product's stock is calculated as the sum of all variation stock levels.
  • If the parent has no price set, Brother POS calculates a weighted average price from in-stock variations.

Tiered and Quantity Pricing

Brother POS supports two types of advanced pricing from WooCommerce:

Weight-Based Tiered Pricing

For weight-based products (typically cannabis flower), tiered pricing data is extracted from the weight_pricing metadata:

  • Pricing template assignment (AA, AAA, AAAA, AAAA+)
  • Price-per-gram tiers
  • Tiered pricing matrices

Unit-Based Quantity Pricing

For unit-based products, quantity pricing is extracted from the _quantity_pricing_data meta field. Brother POS validates the pricing structure to ensure all quantities and prices are positive numbers.


Catalog Pull (Plugin Mode)

In the recommended plugin push / pull mode, Brother POS is the source of truth and the plugin writes your catalog into WooCommerce. This is how products reach your website without any REST API keys or firewall exceptions.

  • Paginated and incremental. The first full import pulls the catalog in batches of 100. After that, only products changed since the last pull are sent, so large catalogs stay fast.
  • Matched by SKU. Products are found or created by SKU. Re-running a sync never creates duplicates, and a timed-out import can be safely resumed by clicking Sync all products now again.
  • Publish vs. draft is automatic. Active products publish; inactive products become drafts. If you turn on Hide out-of-stock from WooCommerce, an out-of-stock product is drafted so it drops off the storefront, then re-publishes on its own once restocked.

Category Icons

Category icons in Brother POS are carried through and set as the WooCommerce product category image. Only the handful of shared icons are imported (once each), so there is no bulk-import timeout, and the native term image renders on both classic and block themes.

Weight Presets and $0 Tiers

For weight-priced flower, Brother POS sends the exact weight buttons to show (for example 1g, 3.5g, 7g, 14g, 28g). This prevents WooCommerce from falling back to a default that shows phantom 56g/112g options.

Any weight priced at $0 in your pricing matrix — a placeholder or a tier you don't actually offer — is dropped before syncing. Left in, the smallest $0 tier would drag your storefront's price range down to "$0.00 – $X". A weight-priced product with no flat price also falls back to its smallest priced tier so the listing never shows $0.00.

Per-Category Sync Control

You can stop an entire category from reaching your website. Categories have a Sync to WooCommerce flag; products whose categories are all sync-disabled (for example mushrooms or nicotine lines) are excluded from the catalog. Products in at least one enabled category — and uncategorized products — still sync.


The plugin offers two ways to handle product images, chosen with the Image handling setting:

ModeBehaviorBest for
Upload (default)The image is downloaded into your WordPress media library once, if the product has no image yet.Sites with plenty of resources and no image-import trouble.
Link to URLsThe plugin stores the Brother POS image URLs and renders them directly — no download, no thumbnail resizing.Weaker hosts where a full catalog would otherwise time out importing images.
Use "Link to URLs" if image imports time out

On budget hosts, side-loading hundreds of images can stall the import. Switch to Link to URLs so the whole catalog imports in one pass. Images update automatically whenever a URL changes in Brother POS.

Only absolute, public image URLs are sent — broken relative paths and inline data: values are filtered out so they never surface as import failures.


Pushing Products to WooCommerce

In legacy pull mode, Brother POS can push individual products to WooCommerce over the REST API:

  1. Navigate to Admin > Products and open a product.
  2. If the product has a WooCommerce product ID, changes can be pushed.
  3. The WooCommerce Product Push job handles sending updates.
  4. Fields pushed include name, price, description, stock, and status.
Plugin mode skips the REST push

In plugin push / pull mode, the plugin pulls the catalog itself, so the separate REST push (and REST inventory push) is switched off. This also avoids mass failures after a WordPress site rebuild, where the old WooCommerce product IDs no longer exist.

Some Hosts Block Product Updates and Deletes

A few hosts and firewalls block the HTTP PUT and DELETE methods at the server level, so legacy REST updates and deletes come back 403 even with a valid Read/Write key (while creates still succeed). When Brother POS sees a 403 on a PUT or DELETE, it automatically retries the request tunneled through a POST with an X-HTTP-Method-Override header, which WordPress accepts. This is silent and only kicks in on hosts that block those methods.

Force-Deleting Products

When Brother POS removes a product from WooCommerce, it force-deletes it rather than moving it to the trash, so the SKU is freed immediately and a later re-sync can recreate it cleanly.

One-way fields

Some fields are only synced in one direction. Cannabis attributes (THC, CBD, strain type, terpenes, effects) always sync from WooCommerce to Brother POS during a legacy import. In plugin mode, Brother POS is the source of truth and sends these attributes out to your website instead.


Change Detection and Auto-Correction

Brother POS includes a built-in change detection system that:

  1. Detects discrepancies between WooCommerce and Brother POS product data.
  2. Logs detected changes for review.
  3. Auto-corrects certain discrepancies based on your configuration.

This ensures data consistency over time, even if manual edits are made on either side.


Monitoring Sync Status

Every product imported from WooCommerce has a sync status:

StatusMeaning
syncedProduct is up to date
pendingProduct has changes waiting to sync
errorLast sync attempt failed

You can view sync status and recent sync logs on the Health Monitor page.


Common Questions

What happens if I delete a product in WooCommerce?

The product is not automatically deleted in Brother POS. A separate Product Deletion Job handles cleanup based on your configuration. By default, deleted WooCommerce products are deactivated (not deleted) in Brother POS to preserve sales history.

Can I edit synced products in Brother POS?

Yes. After the initial import, Brother POS does not overwrite product names, prices, or SKUs during regular sync. Cannabis attributes (THC, CBD, strain type) continue to sync from WooCommerce.

What if a product has no SKU in WooCommerce?

Brother POS generates a unique SKU using the pattern WOO-{woocommerce_id}. For variations without SKUs, the pattern is WOO-{parent_id}-{variation_id}.

Why are some products missing after import?

Check the Health Monitor for failed records. Common causes include validation errors (missing required fields), duplicate SKUs, or products without categories.


What's Next?