The size you actually sell is the thing you actually track.
A product is a group. The variant is what you sell, scan, price and count — so a shampoo that comes in two sizes is two stock positions, not one number you divide by eye. Brands, categories and suppliers sit alongside, and a full catalogue can be imported from a spreadsheet.
- Variants carry their own price, barcode and stock level
- Attributes you define yourself — size, flavour, colour, whatever you sell by
- Brands, categories and suppliers maintained per shop

How the catalogue fits the day
Built so a shop can go from an empty catalogue to a scannable one without a consultant.
One product, many sellable units.
The parent product groups the thing you order and talk about; every variant underneath it is what a client actually takes home, with its own price and its own stock.
Attributes you define, not a fixed template.
Every shop sells different things, so the axes that split a product into variants are yours to name rather than a preset list you have to work around.
Barcodes belong to the unit.
A barcode resolves to one variant, so a scan at the till, on a delivery or during a count always lands on the right stock line instead of a parent you then have to disambiguate.
A large catalogue in one sitting.
Products can be imported from a spreadsheet, with variants, categories and suppliers maintained per shop — so moving from a price list you already have does not mean retyping it.
A catalogue that stays honest at size level.
Every one of these exists because parent-level stock is where counts start going wrong.
Variant-first
Pricing, stock and movements resolve against the variant, never the parent product.
Your own attributes
Split products by the axes you actually sell on, rather than a fixed template.
Price per variant
Each unit carries its own price without maintaining separate products per size.
Barcode per unit
Scanning resolves straight to one variant across the till, receiving and counts.
Brands, categories, suppliers
The fields shops actually sort and order by, kept per shop.
Spreadsheet import
Bring an existing catalogue across instead of retyping it line by line.
Size-level detail is the difference between stock you trust and stock you guess.
One product per size, duplicated
- The same shampoo listed three times
- Prices drifting apart between duplicates
- Reports that need de-duplicating by hand
- Nobody sure which listing is the real one
Stock tracked at parent level
- One number shared across every size
- Counts that disagree with the shelf
- Barcodes that do not resolve uniquely
- Margins averaged across different costs
PawFora
- Variants are the sellable, priced, counted unit
- Barcode resolves to exactly one variant
- Brands, categories and suppliers per shop
- Catalogue importable from a spreadsheet
Common questions about products & variants
Do I have to use variants for everything?
Can I import my existing catalogue?
What if two variants share a barcode?
Products & Variants is one part of Retail.
Every capability shares the same catalogue, stock, suppliers and numbers.
Inventory management
Stock held per variant, with every movement traceable to a document and low stock flagged from live counts.
Read more →Stock counts
Counting as a real document with its own states, an inventory freeze, and approval separated from counting.
Read more →POS & checkout
Services, retail, coupons and loyalty on one ticket — priced server-side, with stock checked before the sale completes.
Read more →Retail reporting
What sold, what is quietly dying, and margin based on weighted landed cost rather than retail price.
Read more →Stop guessing which size is actually on the shelf.
Variant-level pricing, barcodes and stock — alongside the till you already use. Seven days free, no credit card.
Start free trial or see pricing first