Skip to Content

Odoo Community's Purchase Module: No More Purchase Orders by Email

Purchase orders, approvals, supplier tracking, and accounting integration: everything you need to know about Odoo Community's Purchase module.
TL;DR: Odoo Community's Purchase module gives you structured purchase orders, centralized supplier tracking, purchase agreements, and direct integration with Inventory and Accounting. All of it free, open source. Basic approvals and bill control on received quantities are included. Enterprise adds advanced dashboards and automated three-way matching. The supplier portal is already in Community.


In this article

In a lot of SMBs, purchasing still looks like a mix of emails, Excel files, and Word purchase orders sent as attachments. The supplier replies "looks good," you order, the delivery shows up three weeks later, and when it's time to match the invoice with what was ordered and received: good luck.

The worst part is that it works. Until the day it doesn't. A supplier invoices a different price than what was agreed. An order falls through the cracks because nobody knew someone else had already placed it. Or simply: you have zero visibility on how much you're spending, with whom, and how fast.

Odoo Community's Purchase module is built for exactly this. Not a complex procurement system for a multinational: a structured tool to make your purchases traceable, approvable, and integrated with the rest of your operations.

Diagram: the purchase order list and the state of each one Diagram of a purchase order list. Five rows, each with its supplier and its state: draft, request for quotation sent, order confirmed awaiting receipt, received and ready to bill, closed. The state is written out, not signalled by colour alone. Purchase orders Supplier A, stationery draft Supplier B, parts RFQ sent Supplier C, licences confirmed, awaiting receipt Supplier D, hardware received, to bill Supplier E, maintenance closed One state per order, and the same screen for the whole team.


What the Purchase module actually does

At the heart of the module is the purchase order. You create a Request for Quotation (RFQ), send it to the supplier by email directly from Odoo, and when it's confirmed, it becomes an official purchase order. Every step is tracked: who requested what, when, at what price, and where things stand.

But the module doesn't stop there. Here are the main features:

Supplier management: each product can have multiple suppliers with their prices, lead times, and minimum quantities. When you create a purchase order, Odoo can automatically suggest the best supplier based on your rules.

Requests for Quotation (RFQ): you can send quote requests to multiple suppliers at the same time, compare offers, and pick the best one. All in a centralized interface instead of juggling emails.

Purchase agreements: two types exist. Blanket orders let you negotiate a price with a supplier for a set period, then place partial orders as needed. Purchase templates cover the quote requests that come back regularly: the product list is kept as is and reused, with one supplier or another. A call for tenders is not an agreement type in Odoo 19: you run one by creating alternative requests for quotation for several suppliers, then comparing them side by side.

Approvals: you can set an approval threshold so that purchase orders above a certain amount require manager validation before being confirmed. It's a simple but effective level of control.

Vendor bill control: every product carries a policy saying whether the vendor can bill on ordered quantities or only on the quantities actually received. That is the basic guard rail against a bill that does not match the delivery, and we come back to it below, with what needs Enterprise and what does not.

Diagram: three-way matching Diagram of three-way matching. The purchase order says what was ordered, the receipt says what arrived, the supplier invoice says what you are being asked to pay. Matching compares all three: if they agree, you pay; if not, you investigate before paying. 1 The purchase order what you ordered, at the agreed price Purchase module 2 The receipt what actually arrived, and how much of it Inventory module 3 The supplier invoice what you are being asked to pay Accounting module 4 The match all three agree, or payment waits the three documents The mismatch shows up before payment, not at bank reconciliation.


The integration that changes everything

What makes the Purchase module really interesting is that it doesn't live in isolation. It integrates directly with two other key modules:

Inventory: when a purchase order is confirmed, Odoo automatically creates a receipt transfer. When products arrive, you validate the receipt and your inventory updates itself. No more entering the same information twice.

Accounting: when you receive a vendor bill, Odoo can create it directly from the purchase order. Journal entries are generated automatically. The bill control we talked about earlier is exactly this integration in action: Odoo knows what was ordered, what was received and what is being billed, because all three live in the same database.

The result: a complete chain from "I need to order something" to "it's paid and recorded," with no manual re-entry and full traceability.


Three settings to get right before you use it

The module installs in two clicks, and that is where a lot of deployments stop. Three settings decide what the tool will actually spare you.

The bill control policy, product by product. This is the most important setting and the least known. Every product carries a policy saying what the vendor may bill you for: the quantities ordered, or the quantities received. Set to received quantities, Odoo will not prepare a bill for what has not arrived. The default depends on the type: a service goes on ordered quantities, goods on received quantities. If you take one setting away from this article, take that one.

Purchase agreements, to be switched on. Blanket orders and purchase templates are not visible out of the box: they come from a companion module, Purchase Agreements, that you tick in the Purchase settings. It is very much in Community, but until the box is ticked the menu does not exist, and people conclude a little too quickly that Odoo cannot do it. A second checkbox appears right below it, Purchase Alternatives, and that is the one that links requests for quotation together so you can compare them: the call for tenders lives there, not in the agreements menu.

The approval threshold. Same logic: you turn on double validation in the settings, set the amount, and purchase orders above it go through a manager. One level only, but it takes a minute to configure.


Three-way matching needs Enterprise, and here is what replaces it

Odoo's automated three-way matching, the one that adds a "Should Be Paid" field on the vendor bill, is not in Community. The point is often reported wrong, so it is worth being precise. It comes from a separate module, account_3way_match, which is not part of the Community repository: in Community's Purchase settings the checkbox exists but is displayed with the upgrade-to-Enterprise button.

What Community gives you instead is not nothing, and it covers most of the need.

The control policy described above is already the main guard rail: set to received quantities, a bill for goods that never arrived does not get prepared. And a line matching screen lines up purchase order lines against bill lines, one by one, with quantities already invoiced, quantities left to invoice, and the amounts on both sides. You see the gap, and you correct the price or the quantity right there.

So the difference comes down to one word: in Community the gap is noticed by you, in Enterprise it is flagged for you. And even then, Odoo's documentation is honest about it: when a draft bill is edited the field switches to exception, but Odoo "does not block the changes or display an error message", since there might be a valid reason for the change. Neither edition excuses you from looking.


Before and after: the comparison that speaks for itself

Process Manual method Odoo Purchase
Purchase order Word or Excel sent by email Created in Odoo, sent by email, automatically tracked
Supplier price tracking Excel file somewhere on the network Price list by supplier, by product, with history
Approval Email to the boss: "is this OK?" Built-in approval workflow with configurable threshold
Receipt Check it off on paper, update inventory by hand Automatic receipt linked to purchase order, inventory updated
Invoice matching Manually compare three documents Billing controlled on received quantities, plus a line matching screen
Reporting Export data and build pivot tables Built-in purchase reports with filters and groupings


Community vs Enterprise: what are you missing?

The Purchase module is very complete in the Community edition. Here's what's included, and what requires Enterprise:

Feature Community Enterprise
Purchase orders and RFQs Yes Yes
Supplier and price management Yes Yes
Purchase agreements (blanket orders, purchase templates) Yes Yes
Alternative requests for quotation, for a call for tenders Yes Yes
Approval (one level) Yes Yes
Bill control on ordered or received quantities Yes Yes
Bill line matching screen Yes Yes
Automated three-way matching ("Should Be Paid" field) No Yes
Inventory and Accounting integration Yes Yes
Purchase reports Yes (basic) Yes (advanced dashboards)
Supplier portal (order consultation) Yes Yes
Odoo Studio (no-code customization) No Yes
Native mobile app No Yes

In practice, for most SMBs, the Community edition covers the need very well. The supplier portal, often presented as an Enterprise addition, is already in Community: the Purchase module serves the /my/rfq and /my/purchase routes, where the supplier reads their requests for quotation and orders, prints the PDF, sees the related bills and corrects the expected delivery dates. What it does not do: take in a bill the supplier would upload themselves.


The questions you will be able to answer a year from now

This is the argument nobody makes, because it does not show up in the first week. Structuring your purchasing is not only about placing an order properly: it builds a history, and the history answers questions a folder of emails never will.

Community's purchase analysis report, with nothing added, measures among other things the days to confirm and the days to receive, the average cost per product, and four distinct quantities on every line: ordered, received, billed, and left to be billed.

Put together, that gives concrete answers. Which vendor actually delivers within the promised lead time, and which one has slipped over the past six months. What you paid for the same product across three different vendors last year. Which orders have been received but still not billed, which is precisely the list of unpleasant surprises waiting at your year end.

None of those questions needs Enterprise. They only need the orders to be placed in the system rather than in an attachment, and that is the whole point of this article.


What's missing (and what we can add)

Like any Odoo module, there are limitations worth knowing:

Multi-level approvals: the standard module offers a single approval level based on amount. If you need complex approval chains (amount X = manager, amount Y = director, amount Z = VP), you'll need a complementary module from the OCA or custom development.

Purchase budget management: Odoo Community doesn't natively manage purchase budgets by department or category: no budget module ships in the Community 19.0 branch. You'll see how much you've spent, but there's no automatic alert when you're approaching a budget ceiling.

Punchout and supplier catalogs: if you work with large distributors that offer integrated online catalogs (punchout), it's not native in Odoo. It exists through third-party modules, but it's an add-on.

Learning curve: the module is intuitive for basic operations, but purchase agreements and bill control policies require some configuration and training to be used properly.

If you're already managing your expenses in Odoo, adding the Purchase module creates a complete picture of all your spending: planned purchases in Purchase, one-off expenses in Expenses, all consolidated in Accounting.


How we deploy it

At Blue Fox, we deploy the Purchase module in Community edition because it's open source, we have full control over the code and data, and for the vast majority of SMBs and non-profits we work with, it's more than enough.

We host instances in Quebec, on sovereign infrastructure, with Law 25 compliance built in from the start. And if someday you need to go further (multi-level approvals, specific integrations), we build on top rather than migrating you to another system.

Need a hand structuring your purchasing? We can configure the Purchase module, train your team, and integrate everything with your inventory and accounting. Let's talk about your purchasing.


Sources

Timesheets and Projects in Odoo Community: Moving Past the Excel File
Time tracking, project profitability, and time-based billing: what the Community version really offers (and what it doesn't).