Every vendor invoice gets checked against its purchase order the moment it arrives — not batched into a Friday pile for AP to sort through. A webhook receives the invoice and PO fields, Claude flags concrete discrepancies and decides whether to auto-approve, hold, or dispute, and the result is archived and returned immediately.
Claude compares the invoice to its PO on price, quantity, line items, and PO validity, then applies strict cutoffs on the variance between invoice and PO amount.
One straight path from intake to review, then a three-way fork on the result. All three land in the same archive and response.
invoices_reviewed Data Table.The invoices below are made-up test data, not real transactions. The discrepancy tiers, flagged issues, and drafted actions are genuine, unscripted output — each one is what Claude actually produced from running that invoice against its PO through the live workflow.
The same AI call that reviews the invoice also drafts what happens next, matched to the tier: approve gets a brief AP ledger note, hold gets an internal flag to the AP reviewer, and dispute gets a professional email addressed to the vendor. Nothing is left as a bare pass/fail — even the cleanest invoice above got a real drafted note.
invoices_reviewed? It's a Data Table — a lightweight database built directly into this n8n workspace, not a separate external system. It lives inside this n8n project, viewable in n8n's own Data Tables screen and reachable by any other workflow in the same project. It isn't exposed to the public internet on its own — the only way anything outside n8n sees this data is through what a workflow deliberately sends back out, like the drafted actions above.
| invoice_id | vendor_name | variance_percent | discrepancy_tier | discrepancy_count | reasoning |
|---|---|---|---|---|---|
| INV-58231 | Northfield Office Supplies | 0.00% | approve | 0 | Exact match against PO — clear to pay. |
| INV-58288 | Meridian Janitorial Services | 0.03% | approve | 0 | Negligible restock variance, within documented tolerance. |
| INV-58270 | Alpine Print & Signage | 8.00% | hold | 4 | Unverified quantity overage and price change — needs ops sign-off. |
| INV-58244 | Redstone Industrial Parts | 14.73% | dispute | 2 | Rush surcharge has zero PO backing, only discussed informally. |
| INV-58259 | Quantum Cloud Hosting LLC | 100% | dispute | 4 | No PO, unrecognized vendor, first-ever invoice — hold pending verification. |
Nothing here runs on a manual trigger in production. A real invoice has to enter this pipeline the moment it's received, and the result has to land somewhere a person actually sees it — usually the AP system of record.
Tools like NetSuite, Bill.com, and Coupa ship their own invoice-vs-PO matching, and at a company that already has one configured well, this workflow isn't a replacement for it.
Where a custom pipeline like this earns its place: native 3-way match is typically a strict pass/fail on price and quantity, it's often a paid add-on gated behind a higher pricing tier, and it doesn't draft the actual follow-up — a reviewer still has to write the vendor email or the internal flag by hand. This build is the shape you reach for when native matching isn't available at your tier, doesn't exist for your AP system, or needs judgment calls (like the informally-discussed surcharge above) that a strict rules engine can't make.