Every field, badge, filter, and permission on the products list and the product form — what each one means and where its value comes from.
On this page
Was this helpful?
Real help from real food people
Chef Diego runs a real food plant. If this page didn't get you there, tell us — a person reads every message.
You open Products to check whether the chicken thighs are running low. The row
reads Needs Reorder in amber, wears a Frozen tag, and carries a small
clock icon you'd half-forgotten setting. Every badge, column, and field on this
screen stands for something exact — this page is the map to all of them. A
is
described here, not counted; the lots you receive and make hold the stock. Open
Products under
Inventory to read along.
The products list
The list holds every product in the company you're working in, one per row. Four
controls sit above it:
Search by name or code — filters the list as you type, matching both the
product name and its code.
Product type, Category, and Storage type filters — narrow the list
to one product type (Goods, Service, or Combo), one category from
your own catalog, or one storage type (Dry, Frozen, or
Refrigerated). A product nobody has placed carries none of the three, so no
storage-type filter reaches it.
Odoo sync filter — In sync or Out of sync, shown only alongside a
connected Odoo account.
Sort — by name, category, product type, or storage type, with a direction
toggle for ascending or descending.
A Clear all link appears once any filter, search, or sort is active and
returns the list to its default. When nothing matches, the list reads No
products found. Two actions sit in the top corner: New, to add a product by
hand, and Sync all with Odoo, to reconcile on-hand against a connected Odoo
account. Each shows only if your role carries the matching permission.
What each row shows
Reading a row left to right:
Name, with an Inactive badge beside it when the product has been
switched off. Its code and category read underneath, separated by a
dot.
Attribute icons — a muted row of hints for the product's settings: a
clock when it has a shelf life, an hourglass when it tracks expiry, a
shield when it needs QC approval, and a thermometer when it's
temperature-controlled. Point at any icon to read what it stands for.
Stock status — a badge and unit count that link to the product's stock by
location.
Odoo sync — the product's sync state, when it's linked to Odoo.
Product type — Goods, Service, or Combo.
Storage tags — one tag per storage type the product carries: Dry,
Frozen, or Refrigerated. A product can hold more than one, and a
product nobody has placed reads No storage type in their place.
A product row carries, on the right, its live stock-status badge, its product type, and a tag for each storage type.
Stock status
The stock-status badge reads the product's on-hand quantity against the minimum
stock level you set, and links to a panel listing every
on hand with its location, quantity, and
expiry. Three states:
In Stock — above the minimum. The normal, healthy state.
Needs Reorder — at or below the minimum. Shown only when you've set a
minimum stock level above zero.
Out of Stock — no units on hand, with no minimum pulling it into
Needs Reorder first.
Set a minimum to get a reorder flag
With no minimum stock level, a product only ever reads In Stock or Out of
Stock — it drops to zero without warning. Set a Min stock level on the
product's Stock & Control tab to earn the amber Needs Reorder badge
while there's still stock to reorder against.
Odoo sync status
When a product is linked to a connected Odoo account, its row shows how the two
systems compare; when it isn't, the column reads a plain dash.
In sync — Bettr's on-hand matches Odoo's.
Divergence — the two disagree, and the amount has drifted apart.
Not checked — the product is linked but hasn't been compared yet.
Running Sync all with Odoo rechecks every linked product; each row's badge
carries the time it was last checked. Without a connected Odoo account the
action says so instead of pretending to start. The sweep itself — how far it has
got, and any product it could not compare — shows under Stock checks on the
Odoo page. Connecting Odoo is a company setting — see
Connect Odoo.
A product's fields
Selecting a product — or New — opens a form of four tabs. Most fields are
optional; the six you must fill in yourself are marked (required) below. A few
others are required too but open with a sensible default you can keep.
General
Product name(required) — what the product is called; searchable.
Product code(required) — your own code for it; searchable, and shown
under the name on the list.
Category — a free label used by the category filter.
Product type — Goods for anything you physically make or buy,
Service or Combo for the rest. Opens on Goods.
Unit price (USD)(required) — the price you sell a unit for.
Unit barcode and Case barcode — the codes the product ships under: the
one a retail scanner reads off a single pack, and the one the warehouse scans
off a case. Bettr keeps each exactly as you type it, so an in-house code that
is not a sits here just as well.
Leave them empty on anything you buy rather than sell.
Description — free text.
Active — on by default; switch it off to retire a product without deleting
it.
Specifications
Net weight per case(required) and Weight unit(required) — the
measure behind a case, in Gram (g), Kilogram (kg), Ounce (oz), or
Pound (lb).
Net weight per unit and Unit weight unit — what one sellable unit
promises on its label. Optional, and typed rather than divided out of the case:
it is the number a recipe's own arithmetic gets checked against on that
recipe's Products tab, so leave it empty until somebody knows it.
Units per case, Case type — Box, Pallet, Bag, Roll, or
Other — and Cases per pallet: the pack breakdown, each opening with a
default you can adjust.
Case description, Width, Length, Height, and Dimension
unit — the physical pack; a dimension needs its unit.
Ingredient list, Organic summary, Certifications, Sales taxes,
Country of manufacture, and Country of origin — the label and
provenance details, all optional. Every recipe this product goes into reads the
ingredient list back out: it's what a purchased ingredient contributes, in
parentheses, to the ingredient statement on a spec sheet, and a sheet can't be
approved while an ingredient it reaches is missing one.
Stock & Control
Cost (USD) — what a unit costs you.
Lead time (days) — how long an order of it takes to arrive.
Shelf life (days) and Shelf life at dock (days) — total shelf life and
the minimum you'll accept at receiving.
Min stock level (cases) and Max stock level (cases) — the reorder point
and the ceiling; the minimum drives the Needs Reorder badge.
Inventory tracking — By Quantity or By Lot Number.
Kitchen display unit — LB or Unit, the measure the kitchen weighs
it in.
Expiration tracking, Requires QC approval, and Requires certificate
of analysis — switches that decide whether lots carry expiry dates, pass
through QC, and need a
on file.
Allergens & Storage
Allergens — a checkbox for each of the nine major allergens: Milk,
Eggs, Fish, Crustacean shellfish, Tree nuts, Peanuts,
Wheat, Soybeans, and Sesame. Check every one the product contains.
Storage type — Dry, Frozen, or Refrigerated, and more than one
where the product fits more than one. Each becomes a tag on the list. A record
can stand without any: the tab says so where the boxes are, the row wears No
storage type, and the pack's spec sheet can't be approved until somebody
says where it is stored.
Max temperature and Temperature unit — the ceiling for a
temperature-controlled product; a temperature needs its unit.
Every save is a new version
Products are never overwritten. Each time you save, Bettr records a new version
of the product and keeps the old one, so the full history stays intact. See
How inventory works in Bettr for why the
catalog is kept this way.
Documents
Below the form, a product carries two independent document slots — an Organic
Certificate and a Safety Data Sheet. Each holds one current file, uploaded
on its own with no separate save step:
Upload File attaches a file; the button reads Replace File once the
slot is filled.
Each slot accepts a PDF, Word, Excel, image (JPG, PNG, or GIF), or text file of
up to 10 MB.
View opens the current file; Remove clears the slot back to empty.
A product that carries a spec sheet somebody uploaded in the past keeps it below
those two, under a line reading Kept as history: View opens it, and
there's nothing else to do with it. A spec sheet is now written out of the recipe
the product sells — see Approve and print a product spec
sheet.
Below the documents sits Photos and artwork: six slots for the files a spec
sheet for this product is made of, each one supplied by you rather than drawn by
Bettr.
Product photo and Pallet photo — how the pack looks, and how a finished
pallet of it should look. Each takes a JPG, PNG, GIF, or WebP of up to 50 MB.
Nutrition panel, Case label, Master case label, and Pallet
schematic — the artwork the pack, the case, the master case, and the pallet
carry. Each takes a PDF as well as those image formats, up to 25 MB.
Unlike a document slot, a slot here holds any number of files — two case labels
when two customers take different artwork. Each file keeps a name you can edit
where you read it, opens in a new tab, and comes off with the trash button beside
it. A file of a kind its slot doesn't take is refused as you offer it.
Who can view and change products
Access to products is set per role, under Warehouse & Inventory in the
permission catalog:
View products — open the list and read any product. Without it, the page
redirects to an unauthorized notice.
Create products — shows the New button and lets you add products.
Edit products — lets you change fields and manage the product's files.
Without it, the form, the document slots, and the photo and artwork slots open
read-only, with no Save.
Check Odoo stock sync — shows Sync all with Odoo and the per-row sync
action.
There is no delete
A product can't be deleted — there's no such permission, because removing one
would erase the lots and movements that point back to it. Switch Active
off instead: the product drops out of the pickers and pages you'd reach for it,
and its history stays whole.