D365 Finance Invoice Matching: The Settings That Trip People Up
Three-way matching in Dynamics 365 Finance compares every invoice line, but a stack of permissive defaults decides whether a Failed status stops anything. Here are the settings that trip people up.
You switched on three-way matching in Dynamics 365 Finance, saw the match status columns appear on every invoice line, and assumed the system would now hold anything that did not reconcile. Months later an audit finds lines that posted at the wrong unit price with a Failed status sitting right there in the register. Nothing stopped them. The matching engine did its job — it compared, it flagged, it wrote Failed — but a handful of parameters decided that a Failed line could still post, that a whole band of variance still counted as Passed, and that a price billed below the agreed figure was not worth catching at all. In D365 Finance, matching is not one switch. It is a stack of settings spread across the Accounts payable parameters and the Invoice matching setup pages, and the defaults are quietly permissive. These are the ones that trip people up.
Where the matching gap actually hides
Every setting below compares correctly. The gap is between what each one makes you think is happening and what it actually does.
| Setting | What you assume | What it actually does |
|---|---|---|
| `Post invoice with discrepancies` = Allow with warning | A discrepancy stops the invoice | A line with a Failed status still posts; you get only a warning |
| `Line matching policy` set at the legal entity | Three-Way Match applies company-wide | Item and vendor, Item, and Vendor levels override it — a line can resolve to Not required |
| `Match price totals` = None | Price totals are being checked | The check never runs; only the per-unit comparison happens, if that is enabled |
| Price tolerance left at the default | There is a sensible company-wide tolerance | The legal-entity default is 0 percent and cannot be deleted — without a more specific row, every variance Fails |
| `Display unit price match icon` at its default | A price below the PO is caught too | Negative price discrepancies are allowed by default and never surface |
The engine always compares; whether a mismatch stops anything is a parameter choice. Microsoft’s own worked example makes the Passed/Failed signal concrete: item MM01 Wireless Mouse fails price match because the invoice unit price of 41.00 exceeds the PO price of 40.00 by 2.5 percent, beyond the 2 percent tolerance. That is the whole artefact — a Failed status on a line, not an error message you can search for.
Before and after: trusting the defaults vs. configuring the stack
| Trusting the defaults | Configured on purpose |
|---|---|
| Allow with warning leaves every Failed line postable | `Post invoice with discrepancies` tightened so a real discrepancy holds the invoice |
| One legal-entity policy assumed to cover everything | `Line matching policy` set at the item-and-vendor level where it matters, with override controlled |
| `Match price totals` at None, per-unit drift unseen | `Match price totals` set to Percentage or Amount with a real tolerance |
| The undeletable 0 percent default is the only tolerance | Price tolerances built at the Table, Group, and All specificity the catalog needs |
| An invoice billed below the PO price posts silently | `Display unit price match icon` set to catch greater-than or less-than |
Configure the stack — do not just turn on three-way matching
- 1Decide what a discrepancy should do, then set the parameter
On Accounts payable parameters, Invoice validation tab, confirm
Enable invoice matching validationis on, then setPost invoice with discrepanciesdeliberately. Allow with warning is the permissive default — it lets a Failed line post. If a real discrepancy must hold the invoice, do not leave it there. - 2Set the matching policy at the level that reflects reality
Line matching policyoffers Not required, Two-Way Match, and a three-way match (Three-Way Match). Precedence runs Item and vendor, then Item, then Vendor, then legal entity, so a company-wide Three-Way Match is overridden by any more specific level. CheckAllow matching policy overridebefore you assume the top level wins. - 3Turn on the price checks you actually want
Match price totals(None, Percentage, Amount, Percentage and amount) andMatch invoice totalsare separate switches with separate tolerances —Purchase price total tolerance percent,Purchase price total tolerance, andInvoice totals tolerance percentage. None means the check never runs, so the status reads Passed by default. - 4Build price tolerances from most specific to least
On Accounts payable, Setup, Invoice matching setup, the Price tolerances page resolves Table/Table down to All/All. The legal-entity default is 0 percent and cannot be deleted, so without a more specific row every variance Fails. This is the same idea an SAP shop knows as a tolerance key; a price-list diff tells you what tolerance the real spread between agreed and billed prices actually calls for.
- 5Catch the discrepancies that point the wrong way
Negative price discrepancies are allowed by default, and negative tolerance percentages cannot be entered. To surface a line billed below the PO price, set
Display unit price match iconto If greater than or less than tolerance.
Build a matching checklist into your AP close
Why identity resolution is the real fix
Every tolerance you set assumes the line resolved to the right item, in the right unit, against the right agreed price. D365 Finance does not guarantee that. Microsoft itself notes that when a unit is changed on a purchase order, trade-agreement prices are not recalculated — if no price is found for the new unit, none is applied, and the line surfaces a Failed unit price match with no error at all. Tuning tolerances only decides how loud that mismatch is. The durable fix is resolving every supplier line to one trusted record with known units and the price from the list in force, so matching runs against figures you can trust — the job of invoice reconciliation against trusted catalog data, and the same wedge behind the flagship case where the error says price but the cause is units.
Related
Tool
Price List Diff
Compare the agreed price list against what a supplier billed to size the tolerance your matching actually needs.
Free tool
Margin and Markup Calculator
Check what a per-unit price variance that slips past a wide tolerance really costs in margin.
Tool
Unit and Dimension Converter
Confirm a unit conversion so a right price is not read as a Failed unit price match.
Guide
The Error Says Price. The Cause Is Units.
Why a price block in SAP, D365, and Business Central is so often a units problem in disguise.
Guide
SAP Price Variance Tolerance Is Not Working: Why
The SAP equivalent — how a price tolerance that looks configured still lets variances through.
Guide
What Business Central Invoice Matching Can and Cannot Do
Why the matching policy and price tolerances in this guide exist in Finance, not in Business Central.
Playbook
Map Supplier Attributes to Your Schema
Resolve supplier units, prices, and identifiers onto one canonical product model.
Glossary
What Is Three-Way Matching?
What a passed match proves — quantity, not price — and the separate check price needs.
FAQ
What is invoice matching in Dynamics 365 Finance?
Invoice matching in Dynamics 365 Finance is the validation that compares a vendor invoice against the purchase order and, for three-way matching, the product receipt. It runs across six named features: Invoice totals matching, Two-way matching, Three-way matching, Charges matching, Net unit price matching, and Price totals matching. Each invoice line reports a Passed or Failed status per check — there is no price-mismatch error message, so the signal is the status and the match icon. Whether a Failed line can still post is a separate parameter choice, not part of the comparison itself.
Why do invoices with a Failed match status still post in D365 Finance?
Because the Post invoice with discrepancies parameter on the Accounts payable parameters Invoice validation tab is commonly set to Allow with warning, which lets a line carrying a Failed status post with only a warning. Matching still compares and still writes Failed; the parameter decides whether that Failed status blocks anything. If a real discrepancy must hold the invoice, this cannot be left at Allow with warning.
What is the price tolerance precedence in D365 Finance?
Price tolerances resolve from most specific to least specific: Table/Table, Table/Group, Table/All, Group/Table, Group/Group, Group/All, All/Table, All/Group, and finally All/All. The legal-entity default is 0 percent and cannot be deleted, so if no more specific tolerance applies, every price variance Fails against a zero tolerance. Set a tolerance at the specificity your catalog needs rather than relying on the undeletable default.
How do I catch a negative price discrepancy in D365 Finance?
Negative price discrepancies — where the invoice unit price is below the purchase order price — are allowed by default and do not Fail. Negative tolerance percentages cannot be entered, so the way to surface them is to set Display unit price match icon to If greater than or less than tolerance. The line then shows a match icon when the price is outside the tolerance in either direction, not only when it is too high.
Does Business Central have the same matching tolerances as D365 Finance?
No. Business Central has no native matching-policy or price-tolerance framework. It enforces that you can never invoice more than you have received, but the line matching policy, price tolerances, and override settings described here exist in Finance, not in Business Central. Partners fill that gap with extensions, so do not assume a Business Central invoice-matching tolerance setting exists out of the box.
REVIEW-NOTES
- Deferred inline cross-link (not a content error). The Related block Cards link the sibling guide
business-central-vs-d365-finance-matching, which does not exist yet;<Card href>is not audit-checked, so the build stays green, but it is a live broken link until that sibling ships. When it does, add an inline body cross-link both ways (brief Workflow step 6) and verify the Card. - No fabricated D365 error string. Dynamics 365 Finance is described only via Passed/Failed statuses, the match icons, and Microsoft’s own worked example (MM01 Wireless Mouse, invoice unit price 41.00 vs PO 40.00, 2.5% over a 2% tolerance). No price-mismatch error message is quoted, because none exists.
- Every setting name traces to the brief appendix.
Enable invoice matching validation,Post invoice with discrepancies(Allow with warning),Automatically update invoice header match status,Line matching policy(Not required / Two-Way Match / Three-Way Match),Allow matching policy override,Match price totals(None / Percentage / Amount / Percentage and amount),Purchase price total tolerance percent,Purchase price total tolerance,Display price total match icon,Display unit price match icon(If greater than or less than tolerance),Match invoice totals,Invoice totals tolerance percentage,Display total match icon, the six matching features, the Price tolerances precedence chain (Table/Table → All/All, undeletable 0 percent legal-entity default), matching-policy precedence (Item and vendor → Item → Vendor → legal entity), and the Invoice matching setup pages are all from the verified data. Nothing was pulled from memory. - DE/IT CTA localisation remains the open decision from SCHEMA-NOTES §4; it does not affect this
English guide, whose
book-demoCTA renders the brief’s heading and button verbatim.
Claro
Stop maintaining this by hand
Claro keeps product and supplier data trusted as catalogs change — matching, deduplication, enrichment, and validated write-back into the systems you already run.
Book a demo