Odoo's Point of Sale app runs in a browser tab, keeps selling when the internet drops, and posts straight into the same database as your stock and accounting. It's included in Odoo Community, so there's no per-till licence and no upgrade gate for the basics. Below is the order I'd set things up in for an Australian shop, café or market stall, plus the parts of the free edition that genuinely don't do what people expect.
Do the accounting groundwork before you touch POS
POS sessions post journal entries when you close them. If your tax setup is wrong on day one, you'll be fixing entries later, so get this out of the way first.
- Set the Australian localisation. Go to Accounting → Configuration → Settings → Fiscal Localization and choose the Australia package. This installs an Australian chart of accounts and the GST taxes (GST 10%, GST Free, Input Taxed). Do it before any entries exist — Odoo won't let you swap packages once the books have transactions.
- Put your ABN on the company record. Settings → Users & Companies → Companies, open your company and fill the Tax ID field with your ABN, plus your trading address. That's what flows onto invoices.
- Decide tax-inclusive or tax-exclusive. Retail shelf prices in Australia must be GST-inclusive. Open Accounting → Configuration → Taxes, edit GST 10% (sales) and tick Included in Price. A $22.00 product then records $20.00 revenue and $2.00 GST. If you also quote B2B ex-GST, don't flip this globally — keep prices inclusive and use a separate pricelist for trade, or you'll confuse every quote you send.
Set up 5c cash rounding
This is the step most overseas guides skip. Australia has no 1c or 2c coins, so the convention is that cash totals round to the nearest 5c while card payments are charged to the cent. Odoo handles this, but you have to switch it on in two places:
- In Accounting → Configuration → Settings, enable Cash Rounding.
- Under Accounting → Configuration → Cash Roundings, create "AU 5 cents" with Rounding Precision 0.05, Rounding Method Half-Up, and Rounding Strategy Add a rounding line (pointing at a small expense/income account) or Modify tax amount if your accountant prefers.
- In Point of Sale → Configuration → Point of Sale, open your till, enable Cash Rounding and select that method. There is a separate Only apply rounding on cash option on the same screen — tick it, or the rounding applies to the order total no matter how the customer pays, and your card takings will be 1–2c out all day.
Confirm the rounding account and strategy with your bookkeeper before you go live, because every cent of the difference lands in whatever account you nominate.
Products and categories
On each product, the Point of Sale tab has an Available in POS checkbox — nothing appears on the till screen without it. Set Product Type to Goods with "Track Inventory" on if you want stock to move on every sale; leave it as a service or consumable for things like a corkage fee. Fill the Barcode field so a cheap USB scanner (which behaves like a keyboard) just works. Then build POS Product Categories — these are separate from the internal product categories and drive the button layout on the till, so keep them shallow: Coffee, Food, Retail, Gift Cards.
Payment methods and the EFTPOS reality
Under Point of Sale → Configuration → Payment Methods, you'll have a Cash method tied to a cash journal (that's your drawer, with opening float and closing count) and you add a bank-journal method for card.
Before you buy hardware, understand how Odoo talks to terminals. The IoT Box — Odoo's hardware bridge for pushing amounts to a terminal and driving printers and scales — is an Enterprise product and is not part of what we host. Direct terminal connectors for providers like Adyen, Stripe and Viva have moved between the Community and Enterprise addon lists across Odoo versions, so don't take anyone's word for it: open Apps on your own instance, clear the filter and search "pos" to see exactly what's installable on the version you're running. On a demo build that takes two minutes.
The setup that works regardless: key the amount into your standalone EFTPOS terminal, tap the matching amount on the card payment button in Odoo, and the two agree because the cashier read the same number twice. Plenty of Australian shops run this way. It just means no automatic push of the amount to the terminal, and no automatic reconciliation of the tender. We'd rather say that up front than let you find out at go-live — see Community vs Enterprise for the wider split.
Receipts print through the browser print dialog to a printer installed on that machine. If you want the drawer to pop open on sale, you need a cash drawer plugged into the receipt printer (the socket is usually called a kick port) and a printer model that triggers it on print — check your specific model's documentation, and test it on the actual hardware during setup rather than on go-live morning.
Running a session, and what it does to your books
Open the till, enter the opening float, sell, then close the session and count the drawer. Odoo shows the variance between counted cash and expected cash, and posting the session creates the journal entry: revenue by tax, GST collected, cash to the POS cash account, card takings to the bank journal. Two Australian habits worth building:
- Reconcile card settlements net of merchant fees. Your bank feed shows one deposit the next business day, slightly less than the day's card total. Reconcile it against the POS entry and add a line for the merchant fee expense rather than fudging the sales figure.
- Issue a proper tax invoice when asked. A standard POS receipt is fine for small sales, but under the ATO's rules a supplier must provide a tax invoice for a taxable sale of $82.50 or more including GST when the customer asks for one, within 28 days of the request. On the till, set a Customer on the order, then use the Invoice option — Odoo generates an invoice carrying your ABN and the GST amount.
BAS and the honest limits
At quarter end, Accounting → Reporting → Tax Report gives you GST on sales and GST on purchases for the period, which maps to G1 and 1A/1B on your BAS. Odoo Community will not lodge your BAS. There's no electronic lodgement to the ATO and no Single Touch Payroll in the free edition — you read the figures off the tax report and key them into ATO Online services for business, or hand them to your accountant or registered BAS agent. You can also keep Xero or MYOB as the lodging ledger and push a daily sales summary across from Odoo, running POS and stock in Odoo while the compliance side stays where it is.
Practical notes on running it
POS loads products into the browser at session start and keeps trading if the connection drops, syncing when it returns — but don't close that tab while offline, or unsynced orders go with it. Cashiers don't need to be Odoo users: the POS employee feature lets staff log into the till with a PIN against their HR record, which matters for casuals on a weekend roster. And decide early whether a till session closes daily or spans a trading day across midnight, because your daily sales reporting follows the session, not the calendar.
What it costs to run this with us
Per-user licensing isn't a pressure point here, because ERPForge pricing is flat AUD +GST — $29/month up to 5 users or $79/month up to 15 users, never per user, with every Community app included on both plans. Hosting runs on AWS in Sydney (ap-southeast-2), so your data stays in Australia and the till talks to a server in the same country. SSL is included and nightly backups are kept for 7 days. More detail at Odoo hosting in Australia.
To try it against your own product list, the homepage chat builds a live demo instance in about five minutes. If you need something POS doesn't do out of the box — a loyalty rule, a specific receipt layout, an integration with your EFTPOS provider's API — that's custom development, quoted fixed-price with the scope agreed in writing before anyone starts. Start a scope here, or browse more guides in Learn.
See your Odoo running in five minutes. No card, no sales call — a chat, a verified email, and a live instance.
Start the demo →