Invoice to PO 3-way matching
Matches invoices against corresponding purchase orders, identifies maverick spend (invoices without a PO), and PO budget overruns.
72/100·📅 Weekly·IntermediateAP ManagerProcurement
Budget & POsReconciliationget_payablesget_purchase_ordersget_suppliers
🎯 Skill purpose
Matches invoices against corresponding purchase orders, identifies maverick spend (invoices without a PO), and PO budget overruns.
📊 What it produces
Matching report with compliant invoices, PO budget overruns, invoices without a PO, and POs with no recent activity.
⚡ Benefit
Before
Invoice/PO matching is done manually in a spreadsheet and takes several hours each week.
After
Automated matching in seconds with immediate identification of anomalies and maverick spend.
# Invoice ↔ Purchase Order matching (3-way matching)
## Purpose
Reconcile supplier invoices with the corresponding purchase orders to validate payments. Identify invoices with no PO (maverick spend), PO budget overruns, and POs with no activity.
**Limitation:** Spendesk does not natively store the PO→Invoice link on every payable — matching is performed by Claude based on supplierId and amounts.
## Instructions
### Step 1 — Retrieve open POs
```
Call get_purchase_orders with status=open (or pending).
For each PO: note id, supplierId, budgetAmount, invoicedAmount,
currency, startDate, expectedDeliveryDate.
```
### Step 2 — Retrieve recent invoices
```
Call get_payables for the last 60 days.
Exclude expense claims (payableType != expenseClaim).
For each invoice: id, supplierId, amount, currency, invoiceDate, status.
```
### Step 3 — Matching by supplierId
```
For each invoice:
Look for POs with the same supplierId.
If a PO is found:
Check: invoice amount ≤ remaining PO budget (budgetAmount - invoicedAmount)
If overrun > 10% → ⚠️ "PO budget overrun"
Otherwise → ✅ "Matched with PO"
If no PO for this supplier → ❌ "Invoice with no PO" (maverick spend)
```
### Step 4 — POs with no recent invoice
```
For open POs:
If no invoice from the same supplier in the last 60 days → "PO with no recent activity"
If PO open for > 90 days with no invoice → "PO to review / close"
```
### Step 5 — Resolve supplier names
```
For identified anomalies (maverick spend + overruns):
Call get_supplier_by_id for the suppliers involved.
```
### Step 6 — Matching report
```
Present:
✅ Invoices matched with a PO: X (X€) — compliant
⚠️ PO budget overruns: X invoices (X€ above budget)
Supplier | Invoice amount | PO budget | Overrun
❌ Invoices with no PO (maverick spend): X (X€)
Supplier | Amount | Date | Category
📋 POs with no recent activity > 60 days: X POs
Supplier | Budget | Opening date | Recommended action
```
## Points to watch
- Matching by supplierId is an approximation — a supplier may have several active POs
- Some suppliers (SaaS subscriptions, utilities) have no PO by design — exclude them if not applicable
- This skill does not modify Spendesk — any action (approval, closing a PO) must be done manually
## Example prompts
- "Do all my invoices this month have a purchase order?"
- "Are there any budget overruns on my active POs?"
- "Show me invoices with no PO (maverick spend) this quarter"
How to install this skill
/
- 1Download the file
s53-invoice-po-matching.mdusing the button above. - 2Place the file in the
.claude/directory of your project (or~/.claude/for a global install).cp s53-invoice-po-matching.md .claude/s53-invoice-po-matching.md - 3Use in Claude Code — the skill is automatically discovered. Describe your need in natural language and Claude will apply the skill instructions.
💡 Make sure the Spendesk MCP is configured in your
.claude/settings.json with the tools get_payables, get_purchase_orders, get_suppliers.Similar skills
★ Top
★ Top