A product with a sales price of 0.000 can sit on your Odoo 19 till and nobody notices until a cashier sells it for nothing. Here is how to find those products in a few clicks, and a short pre-opening checklist for every POS shop.
On a recent project, a business with two POS shops restored its database for go-live and was about to open the tills. A last check showed several products that were still available in the Point of Sale with a sales price of 0.000. They were test and placeholder items from the setup phase. Nobody had removed them from the POS, and nobody had given them a price.
Nothing was broken. Odoo was doing exactly what it was told: these products were marked for the Point of Sale, so they appeared on the till. The fix took minutes. Finding the problem after a week of sales would have taken much longer.
This note describes standard Odoo 19 behaviour, checked against the Odoo 19 source code. Custom modules, Studio changes or POS add-ons in your database can change it.
Which products appear on your till in standard Odoo 19
A product shows up in a POS session when all of these are true:
- The Point of Sale checkbox is ticked on the product form (next to Sales). Ticking Point of Sale ticks Sales for you, and unticking Sales also unticks Point of Sale.
- The product can be sold (the Sales checkbox).
- The product is active. Archived products are not loaded on the till.
- The product belongs to the shop's company (or to no company).
- If the shop uses Restrict Categories, the product must be in one of the POS categories allowed for that shop.
Notice what is not on that list: the price. Odoo does not check whether the sales price is zero before it puts a product on the till.
What happens when a cashier sells a zero-priced product
- The product is added at 0.000. In the standard POS code we checked, there is no warning or block for a product with a zero price. It behaves like any other product.
- A zero total needs no payment. If the whole order comes to zero, the POS does not ask the cashier to choose a payment method before validating it.
- Stock still moves. If the product is tracked in stock, the sale still takes it out of stock, so you lose the goods and record no revenue.
The price on the till comes from the product's Sales Price, adjusted by the shop's pricelist if you use one, plus any extra price on a product variant. So a product with a zero sales price is usually sold at zero, unless a pricelist rule or a variant extra gives it a price.
How to find zero-priced POS products in a few clicks
- Go to Point of Sale > Products > Products. The Point of Sale filter is already on, so you only see products that are available in the POS.
- Switch to the list view.
- Click the Sales Price column header to sort from lowest to highest. Every product at 0.000 is now at the top. (You can also use Custom Filter... in the search options to filter on Sales Price = 0.)
- If the product should be sold, enter the correct sales price, and check its tax and barcode while you are on the form.
- If it should not be on the till, untick Point of Sale. If it is a leftover test item, archive it.
- If you use product variants, open Point of Sale > Products > Product Variants as well, because a variant's price is the sales price plus its extra price.
- Optionally, add the Archived filter and check archived products too. They are not on the till today, but if someone restores one later, it comes back with its zero price.
Some products are meant to be zero. The POS uses helper products for tips, discounts and down payments, and you may have a free carrier bag or a sample item on purpose. Keep those, but make sure each one is a decision, not a leftover.
Do this clean-up before you open the sessions. Standard Odoo 19 does not let you delete a POS product while any POS session is open, and it does not let you archive a product that is on an open order.
For technical readers: the same check in SQL
If you have read-only database access, this query lists the same products (Odoo 19 stores the product name as translations, so it reads the English name):
SELECT id, name->>'en_US' AS name, list_price FROM product_template WHERE available_in_pos AND sale_ok AND active AND list_price = 0 ORDER BY id;
The UI route above is the one we recommend for most teams. It shows the same products, and you can fix them in the same screen.
Why this happens at go-live
- Test products are created during setup to try out receipts, barcodes, taxes or kitchen printing, and they are created with the Point of Sale box ticked.
- Placeholder products are created first and priced later, and "later" never comes.
- Imports and scripts can leave prices empty. Our post on product imports and default prices shows how products created by import or script can end up with prices and taxes you did not expect.
- A restore brings everything back. If you restore a database from the setup or test phase for go-live, every test product comes with it.
Pre-opening POS checklist
Run this before the first session in every shop, and again after any restore or large product import:
- Price: no POS product at 0.000 unless it is zero on purpose.
- Tax: every POS product has the right sales tax (in Oman, normally 5% VAT, or the correct zero-rated or exempt tax where it applies). See our POS setup guide for Omani retail.
- Barcode: scan a few real items from each shelf and check that the right product and price come up.
- POS category: products sit in the right POS categories, and Restrict Categories is set correctly for each shop.
- Available in POS: only products you actually sell at the counter are ticked. Test and placeholder items are unticked or archived.
- Payment methods: each shop has the payment methods it really uses (cash, card terminal, and so on), linked to the right journals.
- Receipts: print a test receipt and check the company details, VAT number and Arabic text.
- Closing: run a test session open and close, so the team knows how cash counting and the closing entry work. Our guide on POS sales and the VAT return explains why the closing date matters.
If you run more than one shop, do the checklist per shop. Our post on multi-store POS in Oman covers what changes between branches. Restaurants should also check their floor plans and kitchen printers; see Odoo POS for Omani restaurants.
Want a second pair of eyes?
If you are about to open the tills on Odoo 19, or you have just restored a database for go-live, I can go through your POS products, taxes and payment methods with you before the first customer arrives. See how I work on Odoo implementation in Oman, or book a free 30-minute review.
Related guides
- Odoo implementation services in Oman
- Odoo POS for Omani retail: setup guide for VAT receipts, barcode scales and Arabic
- Odoo POS for Oman retail stores: multi-store inventory sync and VAT control
- Odoo POS sales and the VAT return in Oman
- Odoo product imports: default taxes and prices
- Odoo POS for Omani restaurants
- Contact Ata Khadivi
Book a Free 30-Minute Odoo Review
Before you open the tills, we can go through your POS products, prices, taxes and payment methods together.