Every line matched.
Every exception explained.
Reconciliation is where distributor margin lives or dies. The engine performs a three-way match across vendor invoice, vendor usage feed, and your priced partner ledger — line by line — before any partner invoice is generated. Nothing moves forward until every variance is resolved or explicitly signed off.
Most platforms bill. They don't reconcile.
Vendor invoices drift
A single Microsoft CSP file can contain 3,000+ lines with retroactive credits, RI adjustments, and mid-cycle tier changes. Without reconciliation, you invoice partners on stale prices and eat the variance.
Billing tools trust the feed
Most channel platforms ingest vendor feeds and trust them. They assume the vendor is right. They surface no exceptions. They leave margin leakage invisible until month-end board review.
Spreadsheets are fragile
The "real" reconciliation is happening in one operator's Excel workbook. It works until they take leave, or a vendor changes their CSV format, or the workbook hits row 65,536 and silently truncates.
Four stages, one evidenced ledger.
Normalise every source
The engine ingests vendor invoices (PDF/CSV), usage feeds (API/SFTP), and your priced ledger, then normalises them to a common line-level schema: (tenant, sku, qty, unit_cost, unit_price, period). Every line preserves a cryptographic hash of its source, so you can always prove where a number came from.
$ recon ingest --source ms-csp --period 2026-04 ✓ 1 invoice (PDF) → 3,112 lines ✓ usage feed → 12,943 events ✓ partner ledger → 412 tenants, 847 SKUs ✓ normalised → 16,902 canonical rows
Three-way match, line by line
Every partner-facing SKU is matched against the corresponding vendor invoice line and the raw usage feed. Matches at quantity, rate, and tenant identifier all have to agree. The engine tolerates known vendor quirks — proration rounding, commitment credits, marketplace FX — so you see real exceptions, not noise.
match rules → 47 active ✓ 12,936 lines matched ⚠ 7 exceptions (0.05%) ⚠ rate drift → 4 lines / $312 ⚠ qty mismatch → 2 lines / $108 ⚠ missing tenant → 1 line / $84
Exceptions, routed and explained
Every exception is categorised (rate drift, quantity mismatch, unknown SKU, tenant unmapped, credit note pending), assigned to an owner, and given a due date. Your finance operator sees a queue, not a spreadsheet. Each exception shows the three source rows side by side and the auto-suggested resolution.
Sign-off, then invoice
No partner invoice generates until the period is signed off. Approvals are evidenced — who approved, when, and with what exceptions outstanding. The signed-off ledger flows straight to channel billing and into your GL with full line-level lineage. Auditable, reversible, reproducible.
period 2026-04 → sign-off ✓ 12,936 matched ✓ 7/7 exceptions resolved ✓ $512 recovered vs draft → approved by j.chen@distributor → 412 partner invoices generated → GL journal posted · ref R-26-04
Ten years of edge cases, in one engine.
Built on the Selcomm billing core — which has been reconciling AU telco and software channel invoices since 1994. Every rule below exists because a distributor lost margin to it.
Retroactive credit tracking
Vendor issues a credit six weeks late. The engine reopens the affected period, re-runs the match, and flags which partner invoices are now misaligned — with a suggested recovery action.
Proration and mid-cycle changes
Seat changes mid-period are reconciled at the day level. We handle Microsoft's NCE commitment model, Dropsuite's add/remove in period, and marketplace prorated usage without manual intervention.
Multi-currency and FX
Vendors bill in USD. Partners pay in AUD or NZD. The engine captures the FX rate used at the moment of reconciliation, not at invoice time, so margin calculations are deterministic.
Tenant identity resolution
Partners show up under different names across vendor feeds. We maintain a canonical tenant graph so a merged acquisition or a renamed tenant stays continuous across reconciliations.
Pricing rule engine
Partner pricing isn't a single markup. It's tiered, per-SKU, with volume breaks, carve-outs and commitment floors. The engine stores pricing rules versioned in time so every line has a reason.
Evidence trail, always
Every reconciled line stores the source hash, the rule that matched it, the approver, and the timestamp. If a partner disputes an invoice, you can show them line-level lineage in under a minute.
From CSV workbook to governed ledger.
"In our first reconciliation run we found seven lines of drift on a single vendor we'd been re-keying for two years. The engine paid for itself in one period."
See your own data reconciled.
Bring one vendor feed and one partner ledger to a 20-minute walk-through. We'll show you the exceptions the engine would have caught last period.