Skip to content
TAQNIX
Odoo ModulesWordPress PluginsWordPress ThemesShopify ThemesApp TemplatesScripts & UtilitiesBlogSell on TAQNIX

Inventory Import from Excel / CSV for Odoo 19 Community documentation

A guide to the import: the file, the options, the check, the adjustments, the history and the limits.

Documents version 1.0.0Updated Oct 23, 2026

Start here

In plain words: The warehouse counted the shelves and sent a spreadsheet. Typing 400 quantities into Physical Inventory one by one is slow, and a typo moves your stock. Inventory Import loads the spreadsheet in Odoo Community: it finds each product by reference, barcode or name, checks every row first (with the on-hand quantity and the difference), and only then applies the adjustments, with a history of what each file did.
A file that is checked, an import that was applied, and the same screen in Arabic.
A file that is checked, an import that was applied, and the same screen in Arabic.
Tip: Nothing moves until you click Import: the check shows each row as ready, warning or error, with the reason.

What you get

FeatureWhat it does
Excel and CSV.xlsx, .xls and .csv files; headers in English or Arabic, in any column order.
Finds the productBy internal reference, barcode or name; several matches are reported, not guessed.
LocationsA Location column (name or full name) with a default location for the rows that have none.
Lots and serial numbersExisting ones are used; missing ones can be created. A serial number takes the quantity 0 or 1.
Two modesSet the counted quantity (a physical count) or add to the on-hand quantity (a receipt or a correction).
The checkOn-hand, file quantity, new quantity and difference for each row, with a message for every problem.
Apply or count onlyApply the adjustments now, or only set the counts to review in Physical Inventory.
HistoryEach file is kept with its rows, who imported it and the stock moves it made.
TemplateA ready-to-fill Excel template to download.
ArabicEverything is translated and works right to left.

Requirements

ItemDetails
Odoo19.0 (Community or Enterprise)
Apps neededInventory (stock)
LicenseOPL-1 (Odoo Proprietary License v1.0)

Install

  1. Unzip the package. Inside is taqnix_inventory_import.zip; unzip it to get the folder taqnix_inventory_import.
  2. Copy the folder into one of the addons_path folders of your Odoo server and restart Odoo.
  3. Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
  4. Remove the “Apps” filter, search Inventory Import and press Install.
# or from the command line
./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_inventory_import --stop-after-init

Prepare the file

In plain words: A header row and one row per product (and location, lot). Only two things are required: a column that tells the product and a Quantity column.
Column (any of these names)Meaning
Internal Reference, SKU, CodeThe product reference.
Barcode, EANThe product barcode.
Product, ItemThe product name.
Quantity, Counted quantity, QtyThe quantity (required).
LocationThe location name or full name, for example WH/Stock/Shelf A. Optional.
Lot, Serial, Lot/Serial NumberThe lot or serial number, for the tracked products.
Tip: Click Download the template on a new import to get a file with the right headers.

Import

In plain words: Open Inventory → Operations → Adjustments → Import inventory and click New. Choose the file, the default location and the mode, then Check the file.
OptionMeaning
Set the counted quantityThe quantity of the file is the new on-hand quantity (a physical count).
Add to the on-hand quantityThe quantity is added to the stock; a negative quantity takes stock out.
Apply the adjustments nowUntick it to only set the counts and review them in Physical Inventory.
Create the missing lotsA lot or serial number that does not exist yet is created.
If a row has an errorImport the valid rows and skip the others, or import nothing.
The check: every row is ready, a warning or an error, with the reason.
The check: every row is ready, a warning or an error, with the reason.

Read the check

StateMeaning
ReadyThe row is fine.
WarningIt will be imported, with a remark: a lot that will be created, a lot ignored for a product without tracking, or a product that appears twice (the quantities are added together).
ErrorIt will be skipped: an unknown product or location, a quantity that is not a number, a negative count, a lot missing, a serial number with a quantity other than 0 or 1, a product that does not track its stock.
In plain words: On hand is the current quantity, New quantity is what the stock will be, and Difference is the adjustment. Correct the file and click Check again as many times as you want.

Apply

In plain words: Import creates the inventory adjustments: each changed product gets a stock move named after the import, and the rows that already match are left alone. The import is then Imported, and the Stock moves button lists what it did.
An import that was applied, with its history.
An import that was applied, with its history.
Tip: With Apply the adjustments now unticked, the quantities are only set as counts: open Inventory → Operations → Physical Inventory to review and apply them.

The history

In plain words: Every import stays in the list with its file, the number of rows, the products changed and who did it. An applied import cannot be deleted: it is the history of your stock.
The imports.
The imports.

Who can do what

WhoCan
Inventory administratorsImport, check and apply.
Other usersNo access: changing stock quantities in bulk is for administrators.

Arabic and right to left

The check in an Arabic interface, with the messages in Arabic.
The check in an Arabic interface, with the messages in Arabic.

Limits

LimitDetail
One sheetOnly the first sheet of an Excel file is read.
SizeUp to 10,000 rows per file.
Packages and ownersNot handled: the quantities are on the products, the locations and the lots.
The other products of a locationThey are left alone: only the rows of the file change.
CostThe adjustments use the cost of the product.

For developers

In plain words: Skip this chapter if you only use the module.
imp = env['taqnix.inventory.import'].create({'file': base64.b64encode(csv_bytes), 'filename': 'count.csv',
    'location_id': stock.id, 'mode': 'set', 'apply': True})
imp.action_check()
imp.action_import()
imp.state, imp.changed_count

Troubleshooting

ProblemWhat to do
The file needs a column that tells the productAdd a header such as Internal Reference, Barcode or Product.
This product does not track its stockTick Track Inventory on the product.
The row needs a lotThe product is tracked by lot or serial number: fill the Lot column.
No internal location matchesWrite the location as it is in Odoo, for example WH/Stock/Shelf A.
Nothing movedThe rows already matched the on-hand quantity: Unchanged.

Updating and removing

Replace the folder with the new version, restart Odoo and run -u taqnix_inventory_import. Your imports and the stock moves they made are kept.

Support

Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.