This guide is for a small Australian trading business setting up Odoo Inventory for the first time — a few thousand product lines, one warehouse or shed, some goods arriving from overseas, and a bookkeeper who needs the numbers to hold up at BAS time. Work through it in order and you'll finish with products that actually track quantity, an opening stock count you can defend, a costing method that suits imports, and reorder rules that stop you running out. You'll also know, up front, which pieces the free edition doesn't include.
What "stock" means in Odoo
There's no menu item called Stock — it's the Inventory app (the underlying module is named stock, which is why you'll see the word everywhere in the technical docs). Everything physical flows through it: purchase orders create receipts, sales orders create delivery orders, manufacturing consumes components, and every movement writes a stock move that can post an accounting entry. Get the foundations right in the first week and the rest of Odoo behaves. Get them wrong and you'll spend months arguing with negative quantities.
Step 1: Turn on only the settings you need
Go to Inventory ▸ Configuration ▸ Settings. Resist the urge to tick everything. For a first go-live:
- Storage Locations — on, if you have more than one physical area (racking, mezzanine, quarantine, or goods sitting at a third-party warehouse that packs and ships for you). Off if you have one shed.
- Multi-Step Routes — leave off initially. One-step receipts and one-step delivery are far easier to train staff on. You can switch to two-step (receive → put away, pick → ship) later without reloading data.
- Lots & Serial Numbers — on only if you genuinely need traceability (food, batteries, electrical, anything with a recall risk or warranty by serial number).
- Units of Measure — on if you buy by carton and sell by each. It's much easier to enable this before you import your product list than to retrofit it afterwards.
Step 2: Set products up so they actually track
In Inventory ▸ Products ▸ Products, a product only holds a quantity if its type is Goods with Track Inventory ticked (older versions call this a Storable Product). Services and consumables never show an on-hand figure. Check your imported data carefully — if you exported a product list out of MYOB or Xero and the type came in as consumable, your stock report will read zero forever.
On the Purchase tab, set the vendor and the purchase unit of measure. On the Accounting tab, confirm the taxes: your Australian chart of accounts should give you GST 10% on sales and purchases, plus GST-free codes for exports and the occasional exempt line. Install the Australian localisation (Settings ▸ Accounting ▸ Fiscal Localisation → Australia) before you enter any transactions — swapping charts of accounts later is painful.
Step 3: Load opening stock properly
Use Inventory ▸ Operations ▸ Physical Inventory (called Inventory Adjustments in some versions). Filter to your stock location, enter the Counted Quantity on each line, then Apply. Odoo posts the difference against an Inventory Adjustment location so there's an audit trail. Never fudge opening balances by editing the database directly or by backdating fake receipts.
Do the count on a day you're closed, or freeze picking for an hour. Put the count date in the adjustment reference so your accountant can tie the stock valuation back to a point in time.
Step 4: Costing method and valuation
Costing is set on the Product Category, not on individual products. Open Inventory ▸ Configuration ▸ Product Categories and choose:
- Average Cost — Odoo blends each new purchase into one running average cost per unit. The sensible default for imported goods where the landed cost changes with every container and every exchange rate.
- FIFO (first in, first out) — Odoo keeps each purchase batch at its own cost and consumes the oldest first. Better if you need the cost of a sale matched to the specific batch it came from.
- Standard Price — one fixed cost you maintain by hand. Only worth it if you actually review the differences against real purchase prices.
Then choose Manual or Automated inventory valuation. Manual means stock value doesn't hit your profit and loss until you invoice, and you post a stock adjustment journal at period end — close to how a lot of small businesses already work in Xero. Automated posts accounting entries on every receipt and delivery, including a temporary holding account between "goods received" and "bill entered", which is more accurate but needs your accounts configured before the first receipt. Both options are in Odoo Community.
Step 5: Landed costs on imports — and where GST doesn't belong
Community includes Landed Costs (enable it in Inventory settings). Create a landed cost record, link it to the receipt, and spread sea freight, customs duty, quarantine fees and cartage across the products by value, weight or volume. Your cost per unit then reflects what the goods really cost to land in Sydney or Melbourne.
Be careful with import GST. As a general principle, GST paid at the border through your customs broker is a tax you claim as a credit, not part of the cost of the goods — so it usually belongs as a tax-only line on the broker's vendor bill rather than inside a landed cost record. Treating it as a landed cost quietly inflates both your inventory value and your cost of sales all year. We're not tax agents: confirm the correct treatment and BAS labels with your accountant or BAS agent before you set the pattern, because whatever you do on the first container you'll repeat on the next fifty.
Step 6: Reordering rules
Open Inventory ▸ Operations ▸ Replenishment. Set a minimum and maximum quantity per product, and set the vendor lead time on the product's purchase line. If you import, be honest about lead time — 45 days on the water plus 10 days clearing and carting is 55, not 45. Odoo then forecasts demand and proposes purchase orders. Start with your fifty fastest-moving lines rather than every product you sell.
What the free edition won't do
Straight answers, because these bite people at week three:
- The Barcode app — the tablet-friendly scanning screen for receipts, picks and counts — is an Enterprise feature and is not part of what we host. You can still scan into ordinary form fields with a USB or Bluetooth scanner set up to behave like a keyboard, which is enough for many small warehouses, but it isn't the same experience.
- The packaged BAS report and the polished accounting reports are Enterprise. Community gives you the Australian chart of accounts and GST tax codes, and you can pull tax totals from journal items grouped by tax. You can keep Xero or MYOB for BAS and use Odoo for stock, purchasing and fulfilment — that's a workable setup we're happy to support, not a failure.
- Label printing and tracking for Australia Post, StarTrack or a courier aggregator isn't part of Odoo Community, so connecting one would be custom development — scope written down and agreed before any work starts.
- Studio isn't available, so layout and field changes are made in code as a small module rather than dragged around in a browser.
More detail on the split in Community vs Enterprise.
The weekly rhythm that keeps it accurate
Count a slice of the warehouse each week using Physical Inventory rather than attempting one heroic stocktake in June. Deal with backorders deliberately — when a delivery ships short, Odoo asks whether to create a backorder, and answering "no" cancels the remainder. Review the Forecasted Inventory report before you place orders. And check that nothing has been sitting in an Input or Transit location for weeks.
If you'd rather test this on your own data than read about it, the homepage chat can build you a live Odoo Community instance to play with — hosted on AWS in Sydney, data staying in Australia, SSL and nightly backups (kept 7 days) included, on flat pricing of $29 or $79 per month (AUD +GST, never per user), with every Community app included on both plans. Load fifty products, run a receipt, run a delivery, and see whether the flow matches how your warehouse actually works. More guides at Learn, background on the hosting at Odoo hosting in Australia, or start a scoped custom build if you already know where the gaps are.
See your Odoo running in five minutes. No card, no sales call — a chat, a verified email, and a live instance.
Start the demo →