Odoo Sales, Explained for SME Order-to-Cash Teams
From the first quotation to the final invoice — how the Odoo Sales app handles quotes, sales orders, pricelists, and invoicing policy, and how it compares to Microsoft Dynamics 365 Sales for SMEs evaluating ERP.
What Is Odoo Sales?
Odoo Sales is the order-to-cash application inside the Odoo business suite. It runs the commercial sales process from quotation through sales order to delivery and invoicing. Any product with the Sales checkbox ticked on its product form can be sold through the Sales app.
It is distinct from Odoo CRM, which handles leads, the pipeline, and opportunities. CRM answers "who are we talking to and where are they in the funnel?"; Sales answers "what did they agree to buy, at what price, and how do we bill it?" This guide covers the Sales app. If you want the pipeline, lead scoring, and forecasting, see our dedicated Odoo CRM guide.
For SMEs in Canada, the UK, and the USA, Odoo Sales is one of two leading order-to-cash platforms Flectic implements — the other being Microsoft Dynamics 365 Sales. Both model the same quote-to-invoice lifecycle; the differences are architecture and licensing, covered below.
- Quotations and sales orders on a single record (the sale.order), differentiated by state
- Quotation templates, optional products, margins, and a PDF quote builder
- Pricelists that fit pricing strategies but can always be overridden
- Invoicing policy per product: ordered quantities or delivered quantities
- Native handoff to Inventory for delivery and to Invoicing/Accounting for billing
From Quotation to Odoo Sales Order
The core Odoo Sales flow is: Quotation, then Sales order, then Delivery (if the product is physical), then Invoice, then Payment. A quotation (or quote) is a document sent to a customer outlining estimated costs and terms. When the customer accepts, the quotation is converted into a sales order that confirms the sale.
The same database record — sale.order — serves both. A draft quotation has state "draft"; once confirmed it becomes a sales order with state "sale." This single-record design means there is no separate quote object to keep in sync, and the audit trail from quote to order to invoice is continuous.
Quotations can also originate from other Odoo apps: an opportunity won in CRM can be converted into a quote, a Helpdesk ticket can generate a quote, and a Subscription can spawn a recurring quote before automatic billing begins. In every case the downstream Sales app behaviour — pricing, terms, invoicing policy — is identical.
- Quotation = draft sale.order; Sales order = confirmed sale.order (same record, different state)
- On acceptance, a sales order is created and the sale is confirmed
- Optional quotation templates pre-fill lines, terms, and signature/payment steps
- Online signatures and online payment can be required to confirm a quotation
- Quotation deadlines and delivery-vs-invoice addresses are supported per order
Quotation Templates, Margins, and Optional Products
Odoo Sales includes a quotation template feature that lets teams pre-configure a reusable quote skeleton: a set of product lines, default terms and conditions, and required confirmation steps (signature, payment). Quoting from a template speeds up standard deals and enforces consistency across reps.
Each quotation line shows a margin computed from the product cost and the sales price, so sales reps and managers can see profitability while building the quote — not only after the fact. Margins are visible per line and at the order total.
Optional products let a quote present upsell choices the customer can accept or decline directly on the online quote view. Combined with the PDF quote builder, this turns a standard quote into an interactive proposal rather than a static price list.
- Quotation templates pre-fill lines, terms, and confirmation steps for repeatable deal types
- Per-line and order-level margin visibility from cost vs. sale price
- Optional products for customer-selectable upsells on the online quote
- PDF quote builder for branded, printable proposals
- Product variants supported on both quotations and sales orders
Pricelists and Pricing Strategy in Odoo Sales
Odoo Sales ships a pricelist feature that can be tailored to fit most pricing strategies. Pricelists can be rule-based (computed from a base price with discounts or surcharges) or list-based (a fixed price per product), and they can be currency-specific.
A pricelist suggests a price on a quotation line, but it can always be overridden manually — Odoo documents this explicitly. That balance of automation and manual control is what makes pricelists practical for SMEs that run both standardized list pricing and negotiated deals.
Pricelists are commonly segmented by customer group, sales team, or geography, and a default pricelist can be set per customer so the correct pricing appears automatically when that customer is selected on a quote.
- Rule-based pricelists (discount/surcharge from a base price) or list-based (fixed price)
- Pricelists suggest a price; reps can override on the line
- Foreign currency support with per-pricelist currency
- Customer-level default pricelist for automatic correct pricing
- Discounts, returns, refunds, eWallets, gift cards, and loyalty programs integrate with Sales pricing
Invoicing Policy: Ordered vs Delivered Quantities
Every product in Odoo Sales carries an invoicing policy with two options. "On ordered quantities" means the customer is invoiced based on what was ordered on the sales order. "On delivered quantities" means the customer is invoiced based on what was actually delivered. Per Odoo 19.0 documentation, "Invoice what is ordered" is the default mode.
The policy is set on the product form and flows through to every sales order containing that product. For a software licence or a service sold upfront, "ordered" is typical — you bill on order confirmation. For physical goods or metered services, "delivered" is typical — you bill against actual delivery or usage.
This single setting is the most consequential configuration in Odoo Sales for finance, because it determines whether an invoice is generated on order confirmation or waits for delivery. Getting it wrong is a common cause of billing disputes and revenue-recognition headaches, so it should be decided product-by-product during implementation, not at go-live.
- 01Set the policy on the product
On each sellable product form, choose "On ordered quantities" or "On delivered quantities" under the Invoicing section. This is the source of truth — it cannot be set per order without an extension.
- 02Confirm the quotation
When the customer accepts, confirm the quotation to create the sales order. For "ordered" products, an invoice can be created immediately.
- 03Deliver (if applicable)
For "delivered" products, the invoice is generated against what was actually shipped or rendered — tying revenue to fulfilment.
- 04Invoice and reconcile
The invoice is created from the sales order (or delivery), posted to Invoicing/Accounting, and reconciled against the incoming payment.
Down Payments, Milestones, and Pro-Forma Invoices
Beyond the two base policies, Odoo Sales supports several billing patterns that SMEs commonly need. Down payments let you invoice a percentage or fixed amount of an order before delivery, with the balance invoiced later — useful for large orders or custom builds.
Milestone invoicing splits an order into multiple invoiceable events, and pro-forma invoices let you send a commercial document that looks like an invoice but is not yet posted to the ledger — handy for advance review without affecting accounting. Time-and-material invoicing is supported where applicable.
These options mean Odoo Sales can model most B2B billing scenarios without custom development: fixed-price, milestone, subscription, and deposit-based deals can all be configured through standard product and order settings.
- Down payments: invoice a percentage or fixed amount before delivery
- Milestone invoicing for multi-stage project and service deals
- Pro-forma invoices for pre-billing review without posting to the ledger
- Time-and-material invoicing where applicable to the product type
Subscriptions: Recurring Revenue Under the Sales Umbrella
Odoo Subscriptions is a separate application that sits under the Sales umbrella and manages recurring revenue. It supports automated invoicing, renewal management, and the full customer subscription lifecycle. A sales order that contains a product with a defined recurring plan automatically becomes a subscription.
Recurring plans define the billing window before renewal. Odoo ships common plans — Monthly and Yearly — by default. Notably, the Days unit of measure cannot be used as a billing period for subscription products; it is reserved for rentals, which prevents accidental daily invoicing.
Subscriptions include self-service options that customers can use directly: closable (a customer can close their own subscription), upselling (customer-driven add-products that generate upsell quotations), renewal (the customer creates a renewal quotation), and plan switching (the customer moves between optional plans). Subscription products sold on the eCommerce site are confirmed as subscription quotations in the back end automatically.
- Sales orders with a recurring plan become subscriptions automatically
- Default plans: Monthly and Yearly (Days reserved for rentals)
- Self-service: close, upsell, renew, and switch plan by the customer
- Integrates with Invoicing, CRM, Sales, and Helpdesk for end-to-end recurring billing
- eCommerce-purchased subscription products confirm as subscription quotations in the back end
The Dynamics 365 Sales Equivalent
Microsoft's equivalent is Dynamics 365 Sales. Like Odoo Sales, it models the transaction as a single item moving through states: in Dynamics 365, quotes, orders, and invoices are considered the same item in different states of transition. A sale typically starts with a draft quote inside an opportunity; once accepted, an order is generated from the quote; after the order ships, an invoice is generated.
Dynamics 365 quotes move through explicit stages. A new quote is automatically set to Draft with revision ID 0. Before it is sent, it must be set to Active (which makes it read-only). Revising increments the revision ID, and closing a quote offers Lost, Canceled, or Revised. Pricing behaviour is governed by one of two settings: "Use Current Pricing" (the price comes from the product catalog and floats if the catalog changes) or "Prices Locked" (the agreed price is frozen on the open order or invoice even if the catalog changes).
Dynamics 365 Sales is sold in three tiers: Sales Professional (core automation), Sales Enterprise (lead-to-cash automation with forecasting and customization), and Sales Premium (Enterprise plus AI-driven conversation and relationship intelligence). It is positioned by Microsoft as a CRM-centric platform — vendor positioning language worth noting when you read it.
The architectural difference matters for SMEs. Odoo ships Sales, Invoicing, Inventory, and Subscriptions natively integrated in one suite. Dynamics 365 Sales is CRM-centric: heavy fulfilment and accounting typically live in Dynamics 365 Business Central or Supply Chain Management, and recurring billing has no first-party equivalent to Odoo Subscriptions — it is usually handled through Dynamics 365 Billing, a Stripe integration, or third-party ISV software.
| Dimension | Odoo Sales | Dynamics 365 Sales |
|---|---|---|
| Transaction model | Single sale.order record, state differentiates quote vs order | Quote, order, invoice as one item in different states |
| Quote stages | Draft quotation confirmed into a sales order | Draft (rev 0) to Active (read-only); Lost/Canceled/Revised on close |
| Pricing | Pricelists suggest; lines overrideable; per-customer defaults | 'Use Current Pricing' (floats) vs 'Prices Locked' (frozen) |
| Invoicing policy | Per product: ordered vs delivered quantities | Invoice generated after order ships; fulfilment often in Business Central |
| Recurring billing | Native Odoo Subscriptions app under the Sales umbrella | No first-party equivalent; ISV/integration-based |
| Fulfilment + accounting | Inventory and Invoicing/Accounting in the same suite | Typically Business Central or Supply Chain Management |
When Each Fits an SME
Neither platform is universally better — the right choice depends on your existing stack, your billing complexity, and where your team already works. As a platform-neutral implementer of both, Flectic helps SMEs in Canada, the UK, and the USA choose based on fit, not preference.
Odoo Sales tends to fit SMEs that want one integrated suite for quoting, invoicing, inventory, and recurring billing with no separate fulfilment system — especially those running subscription or hybrid recurring/one-off models. The native Subscriptions app and per-product invoicing policy are decisive when billing is non-trivial.
Dynamics 365 Sales tends to fit SMEs already invested in the Microsoft stack (Microsoft 365, Teams, Copilot) and especially those whose fulfilment and accounting run in Business Central. The tiered Professional/Enterprise/Premium model lets a growing SME start light and add AI-driven insight later without re-platforming.
- Choose Odoo Sales when you want quoting, invoicing, inventory, and subscriptions in one suite
- Choose Dynamics 365 Sales when you are already on Microsoft 365 and bill through Business Central
- Pick Odoo Subscriptions if recurring revenue is a core model — there is no first-party D365 equivalent
- Pick D365 Sales Premium if AI-driven conversation and relationship intelligence are a priority
Frequently asked questions
Is Odoo Sales the same as Odoo CRM?
No. Odoo CRM handles leads, the pipeline, opportunities, and forecasting. Odoo Sales handles the commercial order-to-cash flow: quotations, sales orders, pricelists, and invoicing policy. They are separate apps that hand off to each other — a won CRM opportunity converts into an Odoo Sales quotation. This guide covers Sales; see our Odoo CRM guide for the pipeline.
What is the difference between a quotation and a sales order in Odoo?
They are the same database record (sale.order) in different states. A quotation is a draft proposal sent to a customer with estimated costs and terms. When the customer accepts, the quotation is converted into a sales order, which confirms the sale and unlocks delivery and invoicing. The single-record design keeps the audit trail continuous from quote to invoice.
What are the two invoicing policies in Odoo Sales?
Per Odoo 19.0 documentation, each product carries one of two policies: 'On ordered quantities' (invoice based on what was ordered on the sales order, and the default mode) or 'On delivered quantities' (invoice based on what was actually delivered). The policy is set on the product form and determines whether the invoice is generated on order confirmation or against actual delivery. It is the most consequential billing setting in the Sales app.
Can a sales order become a recurring subscription in Odoo?
Yes. If a sales order contains a product with a defined recurring plan, it automatically becomes a subscription managed by the Odoo Subscriptions app. Default plans include Monthly and Yearly. The Days unit of measure cannot be used as a billing period for subscriptions — it is reserved for rentals to avoid daily invoicing. Customers can self-service close, upsell, renew, and switch plans.
How does Odoo Sales compare to Dynamics 365 Sales?
Both model the same quote-to-invoice lifecycle. Dynamics 365 treats quotes, orders, and invoices as one item in different states, with explicit Draft to Active stages and 'Use Current Pricing' vs 'Prices Locked' behaviour. Odoo ships Sales, Invoicing, Inventory, and Subscriptions natively integrated; Dynamics 365 Sales is CRM-centric and typically relies on Business Central for fulfilment and accounting, and on third-party tools for recurring billing. Flectic implements both and helps SMEs choose on fit.
Choosing Between Odoo Sales and Dynamics 365 Sales?
Whether you lean toward Odoo Sales with its native quoting, invoicing policy, and Subscriptions app, or the CRM-centric Dynamics 365 Sales model that hands off to Business Central, the right choice depends on your existing stack, your billing complexity, and where your team works. Flectic implements both platforms and is platform-neutral — we help SMEs in Canada, the UK, and the USA choose and roll out the right one, with AI-accelerated delivery designed to deliver up to 3x faster than a traditional ERP project.
Sources
- The Odoo Sales application is used to run the sales process (from quotation to sales order) and deliver and invoice what has been sold. Any product with the Sales checkbox ticked on its product form can be sold with the Sales app. — https://www.odoo.com/documentation/19.0/applications/sales/sales.html (verified 2026-06-28 — Odoo 19.0 official documentation, Sales overview page)
- A sales quotation is a document sent to a customer outlining estimated costs and terms; once accepted it can be converted into a sales order, which serves as the final agreement before delivery and invoicing. The typical flow is Quotation to Sales order to Delivery to Invoice to Payment. — https://www.odoo.com/documentation/19.0/applications/sales/sales/sales_quotations.html (verified 2026-06-28 — Odoo 19.0 official documentation, Quotations page)
- Quotations in Odoo can be generated from other apps: CRM (convert opportunities into quotes), Helpdesk (generate quotes from tickets), and Subscriptions (offer recurring services before automatic billing). — https://www.odoo.com/documentation/19.0/applications/sales/sales/sales_quotations.html (verified 2026-06-28 — Odoo 19.0 official documentation, Quotations page)
- Odoo Sales quotation features include quotation templates, margins, optional products, online signatures for order confirmation, online payment order confirmation, quotation deadlines, deliveries and invoices to different addresses, product variants, and a PDF quote builder. — https://www.odoo.com/documentation/19.0/applications/sales/sales.html (verified 2026-06-28 — Odoo 19.0 official documentation, Sales overview page)
- Odoo Sales pricelists can be tailored to fit any unique pricing strategy; they suggest certain prices but can always be overridden. — https://www.odoo.com/documentation/19.0/applications/sales/sales/products_prices/prices/pricing.html (verified 2026-06-28 — Odoo 19.0 official documentation, Pricing page)
- Odoo invoicing policy has two options per product: 'On ordered quantities' (invoice based on what was ordered on the sales order, and the default mode) or 'On delivered quantities' (invoice based on what was actually delivered). — https://www.odoo.com/documentation/19.0/applications/sales/sales/invoicing/invoicing_policy.html (verified 2026-06-28 — Odoo 19.0 official documentation, Invoicing policies page (confirmed via web search: 'Invoice what is ordered' is the default mode))
- Odoo Subscriptions manages recurring revenue with automated invoicing, renewal management, and customer lifecycle tracking; sales orders with a defined recurring plan automatically become subscriptions. — https://www.odoo.com/documentation/19.0/applications/sales/subscriptions.html (verified 2026-06-28 — Odoo 19.0 official documentation, Subscriptions page)
- Default recurring plans include Monthly and Yearly; the Days unit of measure cannot be used as a billing period for subscription products (reserved for rentals) to avoid daily invoices. Self-service options include closable, add products (upsell), renew, and optional plans (switch). — https://www.odoo.com/documentation/19.0/applications/sales/subscriptions.html (verified 2026-06-28 — Odoo 19.0 official documentation, Subscriptions page)
- In Dynamics 365 Sales, quotes, orders, and invoices are considered the same item in different states of transition; a sale typically starts with a draft quote, becomes an order on acceptance, and an invoice after shipment. — https://learn.microsoft.com/en-us/dynamics365/sales/sales-transactions (verified 2026-06-28 — Microsoft Learn, Manage quote, order, and invoice (confirmed via web search))
- A new Dynamics 365 quote is automatically Draft with revision ID 0; before being sent it must be set to Active (read-only); closing offers Lost, Canceled, or Revised. Pricing behaviours are 'Use Current Pricing' (catalog-driven, floats) or 'Prices Locked' (frozen on open order/invoice). — https://learn.microsoft.com/en-us/dynamics365/sales/sales-transactions (verified 2026-06-28 — Microsoft Learn, Manage quote, order, and invoice)
- Dynamics 365 Sales is offered in three tiers: Sales Professional (core automation), Sales Enterprise (lead-to-cash automation, forecasting, customization), and Sales Premium (Enterprise plus AI-driven conversation and relationship intelligence). — https://learn.microsoft.com/en-us/dynamics365/sales/overview (verified 2026-06-28 — Microsoft Learn, Dynamics 365 Sales overview; tier definitions cross-confirmed via Microsoft pricing page and Microsoft Learn license upgrade doc)