Introduction
A vendor invoice should not automatically become a payment.
Before paying a supplier, finance teams need to know three things:
What did we order?
What did we actually receive?
What did the vendor bill us for?
This is the purpose of three-way matching in Odoo.
Three-way matching compares information across three business documents:
Purchase Order → Receipt → Vendor Bill
The purchase order represents the agreed purchase.
The receipt represents what the organization actually received.
The vendor bill represents what the supplier is requesting payment for.
When these three records agree, the invoice can move through the payment process with greater confidence.
When they do not agree, the difference should be identified and reviewed before payment is released.
Odoo supports three-way matching for vendor bills and uses the Received quantities bill control policy for this process. When enabled, Odoo provides a Should Be Paid status on vendor bills to help determine whether a bill can proceed for payment or requires attention.
The real value, however, is not simply enabling a checkbox.
The value comes from designing the business rules, tolerances, exception handling, responsibilities and payment controls around the matching process.
What Is Three-Way Matching in Odoo?
Three-way matching is a financial control that compares:
| Document | What It Represents | Key Information |
|---|---|---|
| Purchase Order | What the company agreed to buy | Vendor, product, quantity, price |
| Receipt | What the company actually received | Received quantity, date, warehouse |
| Vendor Bill | What the supplier is requesting payment for | Billed quantity, price, taxes, total |
The basic logic is:
Purchase Order
↓
What Was Ordered?
↓
Receipt
What Was Received?
↓
Vendor Bill
What Was Billed?
↓
Match
↓
Approve / Exception
↓
Payment
Odoo's documentation describes three-way matching as a comparison of purchase order, vendor bill and receipt information to help determine whether a vendor bill should be paid.
Why Three-Way Matching Matters for Finance Teams
Without a structured matching process, accounts payable teams may have to manually compare:
- Purchase orders
- Goods receipts
- Vendor invoices
- Email confirmations
- Delivery documents
- Spreadsheets
- Supplier statements
This creates several risks.
Overpayment
The vendor may invoice more units than were received.
Incorrect Pricing
The invoice may contain a higher unit price than the agreed purchase price.
Duplicate or Unnecessary Payments
An invoice may be processed even though the underlying purchase has not been properly validated.
Fraud Risk
A fraudulent or unauthorized invoice may bypass purchasing controls.
Receiving Errors
A bill may be processed even though goods have not yet been received.
Manual Work
Finance employees spend time investigating invoices that could have been controlled through a structured process.
Three-way matching introduces an additional control between procurement, inventory and accounts payable.
The Three Documents in Odoo Three-Way Matching
1. Purchase Order
The purchase order establishes the commercial expectation.
It typically contains:
- Vendor
- Product or service
- Quantity
- Unit price
- Taxes
- Delivery information
- Payment terms
- Purchase agreement
For example:
Product: Laptop
Ordered Quantity: 20
Unit Price: $1,000
The PO establishes what the company agreed to purchase.
2. Receipt
The receipt records what physically arrived.
For example:
Ordered: 20 laptops
Received: 18 laptops
The remaining two units may be:
- Backordered
- In transit
- Cancelled
- Damaged
- Expected later
The receipt therefore provides the operational evidence needed by finance.
Odoo's received-quantity billing policy uses quantities actually received when creating the draft vendor bill.
3. Vendor Bill
The vendor bill represents the supplier's request for payment.
It may contain:
- Product
- Quantity
- Unit price
- Taxes
- Discounts
- Freight
- Other charges
- Total amount
For example:
Vendor Bill: 18 laptops × $1,000
This matches the received quantity.
The finance team can then review the bill with greater confidence.
The Ideal Three-Way Matching Workflow
A practical Odoo process can follow:
Purchase Request
↓
RFQ
↓
Purchase Order
↓
Receipt
↓
Vendor Bill
↓
Three-Way Match
↓
Match Successful?
↙ ↘
Yes No
↓
Payment Process Exception Review
Odoo's current documentation states that three-way matching is intended to work with the Received quantities bill control policy.
This is important because the matching process depends on the relationship between the vendor bill and the quantities actually received.
1. Start With the Purchase Control Policy
Before implementing three-way matching, organizations should decide how vendor bills should be controlled.
Odoo provides two main bill control policies:
Ordered Quantities
Vendor bills are based on the quantities ordered.
Received Quantities
Vendor bills are based on quantities actually received.
For three-way matching, the Received quantities policy is the relevant control model in Odoo.
The choice should reflect the organization's procurement process.
For physical goods, receiving-based billing can provide stronger control because the organization verifies receipt before processing the related invoice.
2. Define What "Match" Means
Three-way matching should not simply mean:
“All numbers must always be identical.”
Real-world procurement contains legitimate differences.
For example:
- Partial deliveries
- Approved price changes
- Freight charges
- Taxes
- Rounding differences
- Damaged goods
- Backorders
- Credit notes
- Vendor-specific billing practices
Therefore, the organization should define matching rules.
| Matching Area | Expected Control |
|---|---|
| Vendor | Same approved supplier |
| Product | Corresponding purchased item |
| Quantity | Within approved tolerance |
| Unit Price | Within approved tolerance |
| Receipt | Required where applicable |
| Tax | Correct tax treatment |
| Currency | Expected transaction currency |
| Total | Reconciles with approved differences |
This creates a controlled definition of a successful match.
3. Define Quantity Matching Rules
Quantity discrepancies are among the most common exceptions.
Consider:
PO: 100 units
Receipt: 95 units
Bill: 95 units
This may be a valid partial receipt.
Now consider:
PO: 100 units
Receipt: 95 units
Bill: 100 units
The finance team should investigate the additional five units.
Possible explanations include:
- Vendor billed the full order before completing delivery.
- Remaining goods are in transit.
- Billing policy permits advance billing.
- The invoice contains an error.
- Receipt was not recorded correctly.
The system should support an exception process rather than allowing discrepancies to disappear.
4. Handle Partial Receipts Correctly
Partial receipts are common in procurement.
For example:
Purchase Order: 1,000 units
First Receipt: 600 units
Second Receipt: 400 units
The supplier may send:
- One invoice for 600 units
- Another invoice for 400 units
or potentially invoice according to another agreed commercial arrangement.
Odoo's received-quantity process can create bills based on received quantities, and when only part of an order has been received, the draft bill reflects the received quantity.
The finance policy should clearly define how partial receipts and multiple vendor bills are handled.
5. Define Price Matching Rules
Price discrepancies require careful treatment.
For example:
PO Price: $50
Vendor Bill: $52
The difference may be:
- A vendor error
- An approved price revision
- A tax-related difference
- A contract adjustment
- A currency effect
- An unapproved change
Do not treat every difference as automatically acceptable.
Define a policy such as:
Exact Match
or
Approved Tolerance
or
Mandatory Review
The appropriate rule depends on the organization's procurement controls.
6. Use Tolerances Carefully
Tolerances can reduce unnecessary manual work.
For example:
Allowed Price Difference: 1%
A small rounding difference may pass automatically.
A significant difference should trigger review.
However, tolerance rules should not become a way to bypass financial controls.
Define:
- Quantity tolerance
- Price tolerance
- Amount tolerance
- Currency tolerance
- Tax tolerance
- Approval requirements
A useful principle is:
Small operational variance → controlled tolerance
Material financial variance → human review
7. Define Exception Categories
Not every mismatch has the same cause.
Create clear exception categories.
Quantity Exception
Billed quantity is higher than received quantity.
Price Exception
Invoice price differs from purchase order price.
Receipt Exception
Invoice exists but receipt is missing.
Product Exception
Invoice contains an item that was not ordered.
Tax Exception
Tax treatment does not match the expected configuration.
Duplicate Exception
A similar invoice may already exist.
Commercial Exception
Contract or purchase terms changed after the PO.
Categorizing exceptions makes them easier to route and measure.
8. Define Who Owns Each Exception
Three-way matching crosses multiple departments.
That means exception ownership should be explicit.
| Exception | Primary Owner | Supporting Team |
|---|---|---|
| Quantity mismatch | Warehouse | Procurement |
| Price mismatch | Procurement | Finance |
| Vendor error | Procurement | Accounts Payable |
| Missing receipt | Warehouse | Finance |
| Tax mismatch | Finance | Tax/Accounting |
| Contract difference | Procurement | Finance |
| Duplicate invoice | Accounts Payable | Procurement |
| Integration failure | IT | Finance |
Without ownership, exceptions can remain unresolved while invoices wait for payment.
9. Understand the Odoo "Should Be Paid" Control
When three-way matching is enabled, Odoo provides a Should Be Paid field on vendor bills.
The field helps communicate whether the bill should proceed through payment.
Current Odoo documentation describes statuses including:
- Yes
- No
- Exception
Odoo can automatically set the status based on the bill and matching information, while certain changes can result in an exception status.
This is useful because it gives finance teams a visible control point.
However, organizations should still define their internal approval policy around the status.
10. Understand the Exception Status
Suppose:
PO Quantity: 100
Received: 100
Vendor Bill: 110
The bill may require investigation.
Similarly:
PO Price: $100
Vendor Bill Price: $110
This could create an exception.
An exception does not necessarily mean the vendor is wrong.
It means:
“Something differs from the expected purchasing evidence and should be reviewed.”
The organization should determine:
- Who investigates?
- What evidence is required?
- Who can approve?
- Can the invoice proceed?
- Should the PO be updated?
- Should a vendor credit note be requested?
11. Do Not Confuse Matching With Approval
Matching and approval are related but different controls.
Matching
Does the vendor bill agree with the purchasing evidence?
Approval
Is the organization authorized to pay the bill?
A bill can technically match but still require management approval.
For example:
PO: $80,000
Receipt: Correct
Vendor Bill: Correct
The bill matches.
But company policy may still require CFO or department-head approval because of the amount.
Therefore:
Match → Approval → Payment
can provide stronger financial governance than simply:
Match → Payment
12. Connect Procurement and Accounting Responsibilities
Three-way matching works best when responsibilities are clearly separated.
Procurement
Owns:
- Vendor selection
- Commercial terms
- Purchase order
- Price agreements
Warehouse
Owns:
- Receipt
- Quantity verification
- Physical delivery
Accounts Payable
Owns:
- Vendor bill
- Matching
- Exception processing
- Payment preparation
Finance Leadership
Owns:
- Financial policy
- Approval thresholds
- Tolerances
- Exception governance
This creates segregation of duties.
13. Add Payment Release Controls
Three-way matching should form part of the wider payment-control process.
A practical model is:
Vendor Bill Received
↓
PO Exists?
↓
Receipt Exists?
↓
Three-Way Match
↓
Exceptions?
↓
Approval
↓
Payment
This helps prevent accounts payable from treating every vendor invoice as immediately payable.
The goal is not to delay legitimate payments.
The goal is to ensure that payments are supported by appropriate purchasing evidence.
14. Handle Services Differently From Products
Three-way matching is particularly intuitive for physical goods because there is a receipt event.
Services can be different.
For example:
Consulting Service
PO: 100 hours
Service Delivered: 80 hours
Vendor Bill: 80 hours
The organization may need a service confirmation or another approval mechanism.
For service purchases, define:
- Service completion evidence
- Timesheets where applicable
- Milestone approval
- Contract terms
- Purchase order
- Vendor bill
The same control philosophy can apply, but the evidence may differ from a warehouse receipt.
15. Consider Freight and Additional Charges
Vendor invoices may include charges that were not represented as simple product lines.
Examples include:
- Freight
- Insurance
- Handling
- Customs
- Packaging
- Service charges
Finance should determine whether these charges:
- Are included in the PO
- Are contractually permitted
- Require approval
- Should be treated separately
- Should affect inventory valuation where applicable
A matching process should account for legitimate commercial complexity rather than simply comparing invoice totals.
16. Consider Currency Differences
International procurement introduces another potential source of mismatch.
For example:
PO Currency: EUR
Vendor Bill: EUR
Company Currency: USD
The accounting value in company currency may change based on exchange rates.
The matching policy should distinguish between:
Commercial price difference
and
Accounting currency conversion difference
Otherwise, legitimate currency movements may be incorrectly classified as procurement exceptions.
17. Protect Against Duplicate Vendor Bills
Three-way matching should also operate alongside duplicate-invoice controls.
A duplicate bill may contain:
- Same vendor
- Same vendor reference
- Same amount
- Same invoice date
- Same purchase order
A mature accounts-payable process should combine:
Duplicate Detection + Three-Way Matching + Approval Controls
This provides stronger protection than relying on any single control.
18. Test the Complete Exception Workflow
Before deploying a three-way matching process, test both successful and unsuccessful scenarios.
Scenario 1 - Perfect Match
PO: 100
Receipt: 100
Bill: 100
Expected: Normal payment process.
Scenario 2 - Partial Receipt
PO: 100
Receipt: 60
Bill: 60
Expected: Valid partial-billing process.
Scenario 3 - Excess Billing
PO: 100
Receipt: 60
Bill: 100
Expected: Exception review.
Scenario 4 - Price Difference
PO: $100/unit
Bill: $110/unit
Expected: Exception according to tolerance policy.
Scenario 5 - Missing Receipt
PO: 100
Receipt: 0
Bill: 100
Expected: Payment should not proceed under the received-quantity three-way matching model.
Scenario 6 - Approved Variance
PO: $100
Bill: $102
Expected: Apply approved tolerance or exception workflow.
Scenario 7 - Duplicate Invoice
Same vendor invoice reference already exists.
Expected: Duplicate control identifies the risk.
Testing these scenarios helps ensure that the process behaves correctly beyond the ideal case.
19. Build a Three-Way Matching Governance Matrix
A governance matrix can make the rules easier to operate.
| Condition | Result | Action | Owner |
|---|---|---|---|
| PO = Receipt = Bill | Match | Proceed | AP |
| Partial receipt = billed quantity | Valid partial match | Proceed | AP |
| Bill > Receipt | Quantity exception | Investigate | AP/Warehouse |
| Bill price > PO price | Price exception | Review | Procurement |
| No receipt | Receipt exception | Hold | Warehouse/AP |
| Duplicate reference | Duplicate exception | Investigate | AP |
| Within approved tolerance | Controlled match | Proceed | AP |
| Above tolerance | Material exception | Approval | Finance |
The exact rules should be aligned with company policy and Odoo configuration.
20. Measure Three-Way Matching Performance
Finance teams should measure whether the process is actually improving accounts payable.
Useful KPIs include:
Matching Rate
Percentage of vendor bills matched without manual intervention.
Exception Rate
Percentage of bills requiring investigation.
First-Pass Match Rate
Percentage of invoices that pass the initial matching process.
Exception Resolution Time
Average time required to resolve mismatches.
Invoice Processing Time
Time from invoice receipt to approved payment.
Overpayment Prevention
Value of discrepancies identified before payment.
Duplicate Prevention
Number or value of duplicate invoices prevented.
On-Time Payment Rate
Percentage of valid vendor payments completed within agreed terms.
These KPIs connect financial controls with operational efficiency.
21. Monitor Exception Trends
Exception data can reveal problems outside accounts payable.
For example:
If most exceptions are quantity-related, the organization may have:
- Receiving process problems
- Delayed receipts
- Warehouse data-entry issues
- Vendor shipping problems
If most exceptions are price-related, there may be:
- Outdated purchase orders
- Weak contract management
- Vendor pricing issues
- Poor procurement controls
If most exceptions are duplicate-related, invoice processing controls may need improvement.
Therefore:
Exceptions are not only problems to resolve.
They are data for improving the procurement process.
22. Improve the Procure-to-Pay Process
Three-way matching works best when it is part of a broader procure-to-pay process.
A mature Odoo workflow can connect:
Purchase Request
↓
RFQ
↓
Vendor Selection
↓
Purchase Order
↓
Receipt
↓
Vendor Bill
↓
Three-Way Match
↓
Approval
↓
Payment
↓
Reconciliation
This gives finance and procurement a shared view of the transaction lifecycle.
23. Define Governance Before Automating
Automation should follow clear business rules.
Do not start with:
“How can we automate invoice matching?”
Start with:
“What should happen when the documents match?”
“What should happen when they do not?”
“Who is allowed to approve exceptions?”
“Which differences are acceptable?”
“Which differences require investigation?”
“When can payment be released?”
Once these questions are answered, Odoo configuration and automation can support the governance model.
24. Review the Process Regularly
Three-way matching rules should evolve with the business.
Review:
- Tolerance levels
- Vendor behavior
- Exception trends
- Approval thresholds
- Payment policies
- New purchasing categories
- New integrations
- Accounting requirements
- Warehouse processes
For example, if a company begins purchasing internationally, it may need new controls for:
- Currency
- Freight
- Customs
- Import charges
- Partial shipments
Governance should evolve with procurement complexity.
Odoo Three-Way Matching Checklist
Before implementing or reviewing three-way matching, confirm:
Process
- Current procure-to-pay process documented
- Purchase order process defined
- Receipt process defined
- Vendor bill process defined
- Payment process defined
Matching
- Vendor matching rules defined
- Product matching rules defined
- Quantity matching rules defined
- Price matching rules defined
- Tax handling defined
- Currency handling defined
- Partial receipt rules defined
- Partial billing rules defined
Tolerances
- Quantity tolerance defined
- Price tolerance defined
- Amount tolerance defined
- Approval threshold defined
- Exception threshold defined
Exceptions
- Quantity exceptions defined
- Price exceptions defined
- Missing receipt exceptions defined
- Duplicate invoice controls defined
- Ownership assigned
- Resolution process documented
Odoo Configuration
- Appropriate bill control policy selected
- Three-way matching enabled where applicable
- Product billing policies reviewed
- Vendor bill workflow tested
- Should Be Paid status reviewed
- User permissions reviewed
Odoo's current documentation specifies that three-way matching is intended for the Received quantities bill control policy, so this configuration dependency should be included in implementation validation.
Financial Controls
- Segregation of duties defined
- Approval thresholds defined
- Payment release controls defined
- Exception approvals defined
- Audit trail requirements defined
KPIs
- Match rate
- Exception rate
- First-pass match rate
- Exception resolution time
- Invoice processing time
- Duplicate prevention
- Overpayment prevention
- On-time payment rate
Common Three-Way Matching Mistakes
Mistake 1: Treating Every Difference as an Error
Some differences are legitimate.
The goal is controlled exception handling, not zero variance at any cost.
Mistake 2: Ignoring Partial Receipts
Partial deliveries are common and should be incorporated into the matching policy.
Mistake 3: Allowing Price Changes Without Approval
A vendor bill with a different price should have a defined review path.
Mistake 4: Focusing Only on Quantity
Price, taxes, currency and additional charges can also create financial discrepancies.
Mistake 5: No Exception Ownership
If nobody owns a mismatch, the invoice can remain unresolved indefinitely.
Mistake 6: Matching Without Payment Controls
A matching result should be part of a broader approval and payment-release process.
Mistake 7: Ignoring Services
Service purchases need appropriate evidence even when there is no physical warehouse receipt.
Mistake 8: No KPI Monitoring
Without measuring match rates and exceptions, finance teams cannot determine whether the process is improving.
Mistake 9: Automating Before Defining the Rules
Automation should enforce a clear policy rather than replace one.
Three-Way Matching vs Two-Way Matching
The difference can be summarized simply.
Two-Way Matching
Purchase Order ↔ Vendor Bill
The organization checks what was ordered against what was billed.
Three-Way Matching
Purchase Order ↔ Receipt ↔ Vendor Bill
The organization checks:
What was ordered?
What was received?
What was billed?
Three-way matching therefore introduces receiving evidence into the payment-control process.
For businesses purchasing physical goods, this can provide a stronger control over accounts payable.
Frequently Asked Questions
1. What is three-way matching in Odoo?
Three-way matching in Odoo compares the purchase order, receipt and vendor bill to help determine whether a vendor invoice should proceed through the payment process.
2. What are the three documents used in three-way matching?
The three documents are the Purchase Order, Receipt and Vendor Bill.
3. Why is three-way matching important?
It helps organizations identify quantity and pricing discrepancies, reduce incorrect payments and establish stronger controls between procurement, inventory and accounts payable.
4. Does Odoo support three-way matching?
Yes. Odoo supports three-way matching and provides a Should Be Paid status on vendor bills when the feature is enabled. The feature is intended to work with the Received quantities bill control policy.
5. What happens if the vendor bill does not match the receipt?
The discrepancy should be treated according to the organization's exception policy. Depending on the difference, the invoice may require investigation, approval or correction before payment.
6. Can three-way matching handle partial receipts?
Yes. Odoo's received-quantity workflow supports billing based on quantities received, which allows organizations to process partial receipts according to their procurement and billing policies.
7. What is a price variance in three-way matching?
A price variance occurs when the price on the vendor bill differs from the agreed purchase order price. Organizations should define acceptable tolerances and approval requirements for these differences.
8. Who should resolve three-way matching exceptions?
The owner depends on the exception. Procurement may handle price differences, warehouse teams may investigate quantity differences, and accounts payable may manage invoice or duplicate-bill issues.
9. Does three-way matching replace invoice approval?
No. Matching determines whether purchasing evidence supports the invoice. Organizations may still require separate approval based on amount, department, budget or financial policy.
10. How can businesses improve three-way matching in Odoo?
Start by defining matching rules, tolerances, exception ownership and payment controls. Then configure Odoo accordingly, test realistic scenarios and monitor KPIs such as match rate, exception rate and resolution time.
Conclusion
Three-way matching is more than an accounting feature.
It is a financial control connecting procurement, inventory and accounts payable.
The fundamental relationship is simple:
Purchase Order → What We Agreed to Buy
Receipt → What We Actually Received
Vendor Bill → What We Are Being Asked to Pay
When these three pieces of evidence align, finance teams can process payments with greater confidence.
When they do not, the difference becomes an exception that can be investigated before money leaves the organization.
Odoo provides the foundation for this process through purchase orders, receipts, vendor bills, received-quantity billing and the Should Be Paid control.
But effective Odoo three way matching depends on more than configuration.
Organizations should define:
Matching Rules → Tolerances → Exceptions → Ownership → Approval → Payment Release → KPIs
The strongest approach is to treat three-way matching as part of the broader procure-to-pay governance framework rather than as an isolated accounting setting.
When properly designed, it can help organizations reduce manual invoice checking, improve financial controls, identify procurement problems earlier and create a more reliable path from purchase order to payment.
Looking to improve your Odoo procure-to-pay and accounting controls?