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.

published invoice-verification

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

  1. 1
    Decide what a discrepancy should do, then set the parameter

    On Accounts payable parameters, Invoice validation tab, confirm Enable invoice matching validation is on, then set Post invoice with discrepancies deliberately. 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.

  2. 2
    Set the matching policy at the level that reflects reality

    Line matching policy offers 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. Check Allow matching policy override before you assume the top level wins.

  3. 3
    Turn on the price checks you actually want

    Match price totals (None, Percentage, Amount, Percentage and amount) and Match invoice totals are separate switches with separate tolerances — Purchase price total tolerance percent, Purchase price total tolerance, and Invoice totals tolerance percentage. None means the check never runs, so the status reads Passed by default.

  4. 4
    Build 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.

  5. 5
    Catch 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 icon to 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.

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-demo CTA 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