Skip to content
User Manual · Chapter 6 — Products, pricing, and costs

6.14 Product families — variants that belong together

Some products are really one product in several versions: the same rice in 5kg, 10kg and 25kg bags; the same shirt in red and blue. Each version still needs its own stock, its own cost and its own price — so in BlossomERP every variant is a full product, with its own SKU, exactly as in §6.2. What a product family adds is the link between them: the family groups its variants under one name, declares the attributes they vary by, and carries the storefront profile they share.

Products → Product Families is the family's home. A family has a name, an optional code (used to build variant SKUs), and up to three attributes — for example Size: 5kg, 10kg, 25kg and Colour: Red, Blue. The family's page lists its variants with their stock per warehouse, and rolls the family's stock up per unit of measure.

Joining a family. On the product form, the Family & variants section (under Basic info) chooses the family; the form then asks for that variant's value of each attribute, chosen from the family's declared lists. Two rules keep the family coherent, and both refuse by name rather than failing silently: each combination of values may appear once in a family, and a variant's values must be exactly the family's attributes — no extras, no gaps. Clearing the family clears the values with it; the product itself is untouched.

Renaming and removing attributes is safe. Rename Size to Weight on the family and every variant's value follows. Removing a value — or an attribute — that a variant still uses is refused, naming the variant in the way; add values freely at any time.

Generating the grid. A family's Generate variants action lays out every combination of its declared values as a table you can edit — names, SKUs and prices — before anything is created. Combinations that already exist are named and skipped, never duplicated; a SKU another product already holds is named and refused. A base price can seed every blank row.

The family's category. The family form's Category field names the one product category the family belongs to — the single place the family's accounting is set. Variants the grid generates are born with that category's default accounts, and when a Shopify store import creates a family it links it to the category named by the store's product type (creating that category, empty of defaults, if none stands), so an imported family's variants take their accounts from the same one place. An account a variant already carries is never overwritten by its category's.

One shared storefront profile. The family carries a storefront profile (the same Media, Content, Discovery, Fulfilment and Publication sections as §6.13) and every variant inherits it whole until a variant is given a profile of its own — its own wins, completely; there is no mixing. A variant's E-commerce tab says which profile is in force, and while the family's governs, the product form stands the profile sections down and offers two doors instead: Edit a copy for this variant (the family's content becomes the variant's own, ready to diverge) and Edit the family profile. Discard a variant's own profile at any time to fall back to the family's. Prices and compare-at prices always stay per variant.

On Shopify, a family is one listing: the family's profile and images, with every variant you have switched on for Shopify as a variant of that listing, each with its own price and stock. Pushing any variant — by the hourly sync or with Push to Shopify now — pushes the whole family listing, and the result message says so. Products without a family push exactly as before, one product per listing.

Reports and Ask can group by Product Family wherever products appear, so the family's sales and stock read together while every figure still traces to a real variant product.

Snapshot: portal-v0-2026-11-10