Products you load from a spreadsheet or an API get Odoo's defaults for every field you leave out. In Odoo 19 that means a sales price of 1.0 and your default VAT. Here is what to set, what to check and how to find the products that already slipped through.
On a recent project, an online shop selling electronics and home appliances added new products through a small script instead of typing them in. It saved hours. A few days later some of those products were on the website at a price of 1.000, with the company's default VAT on items that needed a different tax. In the same week, a purchase order in a foreign currency came out with an exchange rate that was years old.
Nothing was broken in Odoo. The script simply did not send some fields, and Odoo filled them with its defaults. The same thing happens when you import a product spreadsheet without certain columns. If you are an importer, trader or shop in Oman loading hundreds of products before go-live, this is worth ten minutes.
This note describes standard Odoo 19 behaviour, checked against the Odoo 19 source code and documentation. Custom modules or Studio changes in your database can change these defaults.
What Odoo 19 fills in when you leave a field out
When a product is created and a field is not given, Odoo uses the field's default. In standard Odoo 19 these are the ones that matter:
- Sales Price: 1.0. The default sales price of a new product is 1.0 in your company currency. For an Omani company that is 1.000 OMR.
- Sales Taxes: your default sales tax. Odoo takes the Default Taxes set in Accounting ‣ Configuration ‣ Settings ‣ Taxes. With the Oman chart of accounts this is normally the 5% VAT sales tax.
- Purchase Taxes: your default purchase tax, from the same setting.
- Cost: 0. Margins and cost of goods sold will be wrong until a real cost arrives. We wrote about the zero-cost effect in 11 Odoo 19 problems from real projects.
- Product Type: Goods, with Track Inventory switched off. Stock quantities are not tracked unless you switch it on or send it.
- Sales and Purchase (can be sold, can be bought): ticked.
- Available in POS: not ticked, so new products do not appear on the till until you tick it.
- Published on the website: not published. New products stay off the online shop until someone publishes them.
So the 1.0 price only reaches customers when the product is also published, either by the script, by the import file or by a colleague who publishes it before the price is fixed. In our case the script published the products in the same step.
Import files: a missing column and an empty cell are not the same
The Odoo 19 import documentation is clear on this, and it catches many teams:
- If a column is missing from your file, Odoo gives every product the default value for that field. No Sales Price column means every product gets 1.0. No Sales Taxes column means every product gets the default sales tax.
- If the column is there but a cell is empty, Odoo sets the field to empty, not to the default. An empty Sales Taxes cell gives a product with no tax at all.
Both are easy to miss in a file with hundreds of lines. Zero-rated or exempt items that silently get 5% VAT, and standard-rated items that end up with no tax, both show up later in your VAT return. If you are still setting up taxes, start with our Odoo VAT setup checklist for Oman.
Multi-company: the default tax of every company
If you run more than one company in the same Odoo database, there is one more trap. The default sales tax is taken from all the companies active for the user at the moment the product is created. A script that connects as a user who belongs to several companies, without saying which company it works in, can create products carrying the default sales tax of each of those companies. Tell the script which company it works in, and set the product's company and taxes explicitly. Our multi-company setup guide explains how companies and shared products work.
The fields to set every time
Whether you use a spreadsheet or a script, send these fields for every product, even when the value looks obvious:
- Name and Internal Reference (and Barcode if you scan).
- Product Type and Track Inventory.
- Product Category, because income and expense accounts and stock valuation rules usually come from the category.
- Unit of measure.
- Sales Price, never left to the default.
- Cost, or a clear plan for how cost will arrive (first purchase, landed costs).
- Sales Taxes and Purchase Taxes, written out for every line, including zero-rated and exempt items.
- Sales, Purchase and Available in POS, as you intend them.
- Published: leave it off. Publish only after price, tax, images and category have been checked.
- Company, if you have more than one.
For developers, the matching Odoo 19 field names on the product template are `list_price`, `standard_price`, `taxes_id`, `supplier_taxes_id`, `type`, `is_storable`, `categ_id`, `uom_id`, `sale_ok`, `purchase_ok`, `available_in_pos`, `is_published` and `company_id`.
A safe import, step by step
- Start from Odoo's own template. In the Products list, open the import screen and download the product import template, so the column names match.
- Add the columns you need, at least Sales Price, Cost, Sales Taxes, Purchase Taxes, Product Category and Track Inventory, and fill every cell.
- Keep an External ID column. It lets you re-import the same file later to correct values instead of creating duplicates.
- Import into a copy of your database first. A staging or test database costs nothing compared with cleaning a live shop.
- Click Test before Import. Odoo checks the file and lists the errors before anything is created.
- Import with Published off. Then review, and publish in batches.
- Check the result with the filters below before you announce the products.
If you are moving a whole catalogue from another system, our data migration guide covers the wider plan.
How to find the products that already slipped through
You do not need a developer for this. In Sales ‣ Products ‣ Products (or Inventory), switch to the list view and:
- add a custom filter Sales Price = 1 to find placeholder prices;
- group by Sales Taxes to see which products have the default tax, a different tax or none;
- filter on Published to see which of those are live on the website, and unpublish them until they are fixed;
- filter on Track Inventory for goods that should be stock-tracked.
Changes to the Sales Price are logged in the product's chatter, so you can see when the price was changed and by whom.
The exchange rate on your purchase orders
The old rate in our example had the same root: something nobody set. A purchase order in a foreign currency uses the latest exchange rate dated on or before the order date. If the only rate in the database is years old, Odoo uses that one.
Before buying in a foreign currency:
- open Accounting ‣ Configuration ‣ Currencies and check the date of the latest rate for each active currency;
- turn on Automatic Currency Rates in Accounting ‣ Configuration ‣ Settings (Currencies section), choose the service and set the interval to Daily, or enter the rate yourself before each order;
- pay most attention to currencies that move against the rial. The Omani rial is pegged to the US dollar, but euro, yuan or rupee rates do move.
More on this in our guide to multi-currency accounting for Oman importers.
Before go-live
- Agree the default sales and purchase tax with your accountant, and check it in the Accounting settings.
- Run every product file through a test database and the Test button first.
- Keep new products unpublished until price, tax and category are checked. If you sell online, add this to your e-commerce launch checklist.
- Check the exchange rates of every foreign currency you buy in.
- After the import, run the Sales Price = 1 filter and the Sales Taxes grouping once more.
Want a second pair of eyes?
If you are about to load your product catalogue into Odoo 19, or you suspect some products went live with the wrong price or tax, I can review your import file, default taxes and currency rates with you. See how I work on Odoo implementation in Oman, or book a free 30-minute review.
Related guides
- Odoo implementation services in Oman
- Odoo data migration in Oman: moving to Odoo 19 without losing data
- Odoo VAT setup for Oman SMEs: checklist before go-live
- 11 Odoo 19 problems we hit on real projects
- Multi-currency accounting in Oman for importers
- How to launch an e-commerce store in Oman with Odoo 19
- Odoo multi-company setup for Oman businesses
- Contact Ata Khadivi
Book a Free 30-Minute Odoo Review
Bring your product import file or a list of products that look wrong, and we will check prices, default taxes and currency rates together.