Odoo Point of Sale is a full retail register that shares its data with the same database as your inventory, accounting, and e-commerce. A sale at the counter decrements stock instantly, posts the journal entry automatically, and updates the customer's purchase history — without any sync job. For a multi-channel retailer, that integration is the entire reason to choose Odoo POS over a standalone tool like Shopify POS or Square.
This guide walks through the setup of Odoo POS for a retail store from a fresh install. The configuration takes about 2–3 hours per store; the rest of the rollout is hardware, training, and operational discipline.
What you get with Odoo POS
Odoo POS handles the standard retail transaction set out of the box:
- Scan, search, or browse products — barcode-driven for speed, search for fallback, category browsing for impulse layout.
- Multiple payment methods per sale — split cash + card, gift card + cash, etc.
- Discounts and pricelists — percentage, fixed amount, member pricing, happy hour, B2B vs B2C.
- Customer accounts — loyalty points, purchase history, tax exemptions.
- Returns and exchanges — full and partial returns with refund or store credit.
- Gift cards and vouchers — issued, redeemed, and tracked.
- Offline operation — sales continue if the connection drops; sync when reconnected.
- Receipts — printed, emailed, or both.
- Cash management — float, cash-in, cash-out, end-of-day count.
The POS UI is browser-based. It runs on any device with a modern browser — tablets, all-in-one POS terminals, or repurposed PCs. There is no native installation step.
Step 1: Install and configure the POS app
Install the Point of Sale app from Apps. It will install the necessary dependencies (Sales, Inventory if not present, Account).
Then create your first POS configuration:
- Navigate to Point of Sale ‣ Configuration ‣ Point of Sale.
- Click New and name the configuration after the register — for example, "Store-Front-Counter-1". Each register is a separate configuration.
- Set the Stock Location. For a single-store, single-warehouse setup, this is your main stock. For a back-room+front-shelf model, this is the front-of-house location.
- Set the Default Pricelist. Pricelists are configured separately at Point of Sale ‣ Configuration ‣ Pricelists.
- Configure Receipt Header / Footer with the legally required information for your country (VAT number, fiscal codes, return policy).
Step 2: Set up payment methods
Every POS needs at minimum a cash and a card payment method. Configure them at Point of Sale ‣ Configuration ‣ Payment Methods.
Cash
Create a Cash payment method linked to your cash journal. The journal is what ties POS cash to your accounting. Verify the journal at Accounting ‣ Configuration ‣ Journals.
Card (terminal-integrated)
Card payments via terminal are preferred over manual card entry — they reduce errors and keep the receipt aligned with the actual amount charged. Odoo integrates natively with:
- Adyen — global, used heavily in EU retail.
- Stripe Terminal — North America + selected EU countries.
- SumUp — small EU retail.
- Worldline / Ingenico (via Six Payment Services) — DACH region.
- Mercado Pago — Latin America.
To configure a terminal, choose the appropriate provider, enter the API credentials from the provider's dashboard, and assign the terminal to the POS configuration. The handshake completes when you open a session and run a €1 test transaction in test mode.
Other methods
For gift cards, store credit, vouchers, or bank transfer payments, create a payment method per type linked to the appropriate journal. The POS UI shows all enabled methods on the payment screen.
Step 3: Hardware checklist
The hardware Odoo POS needs is standard retail equipment. Avoid Odoo-specific hardware vendors — anything ESC/POS-compatible (printers) or HID-compatible (scanners) works.
POS terminal
Any device with a modern browser (Chrome, Firefox, Edge, Safari). Common choices:
- iPad or Android tablet (10+ inches), works for low-volume registers.
- All-in-one POS terminal (HP Engage, Elo Touchcomputer, Squirrel) — purpose-built for retail.
- Repurposed Windows PC or Mac mini with touchscreen monitor — cost-effective.
Receipt printer
Thermal, ESC/POS compatible. Well-tested models:
- Epson TM-T20III (USB or Ethernet)
- Star TSP143III (USB or Ethernet)
- Bixolon SRP-330II (budget option)
Connect via USB to the POS terminal or via Ethernet to your local network. Network printers can serve multiple POS configurations.
Barcode scanner
Any USB or Bluetooth scanner that emits keystrokes works. The scanner should be configured to append a carriage return (Enter) after each scan — this is the default for most retail scanners. Recommended:
- Honeywell Voyager 1450g (corded, reliable)
- Zebra DS2208 (corded, budget)
- Datalogic QuickScan Lite QW2400 (cordless, Bluetooth)
Cash drawer
Driven by a kick signal from the receipt printer. The drawer connects to the printer with an RJ-11/RJ-12 cable; the printer triggers the drawer when commanded by Odoo. Any standard ESC/POS-compatible drawer works.
Card reader
Country-specific, dictated by your acquirer. Verifone, Ingenico, and PAX terminals are the most common in Europe. Adyen and Stripe Terminal sell directly.
Step 4: Configure customer management
Customer accounts in POS unlock loyalty programs, purchase history, tax exemptions, and member pricing. Configure at Point of Sale ‣ Configuration ‣ Settings ‣ Customer.
Capture mode
Two modes:
- Optional — cashiers may attach a customer to a sale; nothing forces it.
- Required for receipt — customers entering loyalty programs or B2B accounts must be selected.
Most retailers use optional for B2C and rely on email-capture or loyalty-card workflows to incentivize the customer to identify themselves.
Loyalty programs
Configure at Point of Sale ‣ Configuration ‣ Loyalty Programs. The standard model: X points per €1 spent, Y points = €Z discount. Variants include tier-based programs (silver/gold), promotional campaigns (double points on category Z), and gift card programs.
Customer-specific pricing
Pricelists support customer assignment. A B2B customer with a 10% discount has the discount applied automatically when their account is selected. This is the cleanest way to handle wholesale customers using the same POS as retail traffic.
Step 5: Run your first session
Once configuration is done, open a session:
- Navigate to Point of Sale ‣ Sessions.
- Click New Session on the POS configuration.
- Enter the Opening Cash Float — the cash in the drawer at start of day.
- The POS interface opens. The cashier can ring up sales.
End-of-day close
At end of day:
- Click Close in the POS interface.
- The system shows a summary: total sales, breakdown by payment method, expected cash, expected card receipts.
- The cashier counts the physical cash and enters the actual amount. Any variance is recorded.
- Closing posts all session transactions to accounting and inventory.
Step 6: Train staff for the floor
Two training sessions cover what cashiers and managers need.
Cashier training (60 minutes)
- Open a session with a starting float.
- Scan a product, search for a product, browse the menu.
- Apply a percentage discount, a fixed-amount discount, a manager-approved discount.
- Add a customer to the sale; verify loyalty points accrual.
- Process payment with cash, with card, with split cash + card.
- Void a line, void an entire sale.
- Process a return — full and partial.
- Close the session.
Have every cashier do the full sequence twice. The first time is exploration; the second time is competence.
Manager training (45 minutes)
- Review session reports — sales by hour, by category, by cashier.
- Handle a refund that exceeds the cashier's approval threshold.
- Adjust inventory after a count.
- Run end-of-day reports and reconcile with the accountant's expectations.
- Reopen a closed session (within the same day) for a missed transaction.
Common pitfalls in retail POS rollouts
1. Card terminal not tested in production conditions
Test mode works; live transactions fail. The cause is usually network firewall rules, terminal firmware version, or acquirer settings. Test live transactions a week before go-live.
2. Receipt printer printing slowly or skipping characters
Often a USB cable issue, sometimes a paper feed sensor problem. Test print 100 receipts in a row before opening to customers.
3. Cashiers using product search when barcodes exist
Search is materially slower than scanning. Cashiers default to search if scanning hasn't been their habit. For the first week, audit scan rates and coach cashiers who default to search.
4. Loyalty program rolled out without pricing impact analysis
10% off all repeat customers sounds good until you realize 60% of your traffic is repeat customers. Model the program against last quarter's sales before launching.
5. Sessions left open
Already covered. Worth repeating: the most common operational mistake. Make end-of-day close a non-negotiable closing checklist item.
Reference notes
Sources verified against Odoo 19.0 documentation and standards bodies. Use these to confirm anything before applying it to your environment.
- Odoo Point of Sale — Odoo 19.0 documentation — POS configuration, sessions, payments
- Odoo POS payment terminals — Odoo 19.0 documentation — supported terminal providers per region
- Adyen for Platforms — terminal API — Adyen terminal integration reference
- Stripe Terminal documentation — Stripe Terminal hardware and SDK
- GS1 GTIN Management Standard — EAN-13 / UPC-A for retail product barcodes
Frequently Asked Questions
Can Odoo POS work offline?
Yes. Once a session is open, the POS UI runs from local browser storage. Sales continue when the network drops; payments via card terminal still work because the terminal communicates directly with the acquirer. When connectivity returns, sales sync to the Odoo server. The only operations that require connectivity during a session are looking up customers not previously cached and adding new products — both of which are rare during normal trading.
How does Odoo POS handle returns and refunds?
From the POS interface: select the original sale (by receipt number, customer, or date), choose Refund, select which lines to refund. The refund posts a reverse inventory move (stock back into the location) and a refund payment. Refunds via card return to the original card; cash refunds come from the drawer. Store credit can be issued instead of refund for return-without-receipt scenarios.
Can multiple POS terminals share the same hardware (printer, scanner)?
Network-attached hardware (Ethernet receipt printers, network barcode scanners) can be shared by multiple POS terminals. USB hardware is per-terminal. The most common setup is one Ethernet receipt printer serving 2–4 POS terminals — works well in small store layouts.
Does Odoo POS support Apple Pay, Google Pay, and contactless payments?
Yes — through the card terminal. Apple Pay and Google Pay are tap-to-pay methods at the card reader. They appear as standard card transactions in Odoo. The POS UI does not have to know they're contactless; the acquirer's terminal handles the protocol.
How do I configure VAT/tax for POS receipts?
Taxes are configured at the product level under Inventory ‣ Products ‣ <Product> ‣ Sales ‣ Customer Taxes. The POS uses the configured tax automatically. For multi-rate scenarios (different rates by country, customer type, or product category), use fiscal positions at Accounting ‣ Configuration ‣ Fiscal Positions — they remap the tax based on customer location or category.
Can I use Odoo POS in multiple stores with different layouts?
Yes. Each store can have its own POS configuration, stock location, payment methods, pricelist, and receipt format. Configurations share the product catalog and customer database but are otherwise independent. For multi-store retailers, this lets each store reflect its local pricing, taxes, and operational preferences.