How to Reconcile Microsoft CSP Billing with Your PSA Every Month
You have your Microsoft CSP export open in one tab and your PSA billing report in another. Now what?
Matching these two datasets manually feels like solving a puzzle where half the pieces have different names. This guide gives you a repeatable process that works every month, whether you manage 10 clients or 200.
Step 1: Get Clean Exports from Both Sides
Reconciliation only works if you start with the right data. Before you compare anything, make sure you have line-item exports from both Microsoft and your PSA for the same billing period.
From Microsoft Partner Center (or your distributor):
Go to Billing, then Usage-based subscriptions or License-based subscriptions, and export the current billing period as CSV. Confirm the export includes customer name, product description, quantity, and unit price. Avoid summary-level reports. You need line-item detail.
From your PSA:
Export your agreement or contract billing report for the same period. The path varies by platform:
- ConnectWise: Finance > Agreement Billing Summary
- Autotask: Contract Billing report
- Kaseya BMS: Billing > invoice line items
Columns you need: company name, product name, quantity billed, and unit price.
Step 2: Normalize the Data Before You Match It
The biggest source of false mismatches is inconsistent naming. The same client might appear as "Acme Corp" in your PSA and "Acme Corporation" in the Microsoft export. The same product might be "Microsoft 365 Business Premium" in one system and "M365 Bus Premium" in another.
Normalization means applying consistent rules to both datasets before you compare them:
- Strip extra whitespace and punctuation
- Apply consistent capitalization (use all lowercase for comparison)
- Map known SKU variations to canonical names (for example, "M365 BP" becomes "Microsoft 365 Business Premium")
- Remove common suffixes that don't affect matching, like "Ltd", "Inc", and "Corp"
Manual normalization is tedious and error-prone. Reconciliation tools handle this automatically using pre-built normalization rules and SKU alias maps.
Step 3: Run an Exact Match First
Start with exact matching. For each row in your vendor export, find a PSA row with an identical client name and identical product name after normalization. Exact matches are high-confidence. Act on any quantity differences found here immediately.
Most clean MSP datasets will get 60 to 75 percent of rows matched exactly. The remaining 25 to 40 percent require fuzzy matching.
Step 4: Use Fuzzy Matching for the Rest
Fuzzy matching compares string similarity rather than requiring exact equality. "Stark Industries" and "Stark Ind." score as highly similar. "Microsoft 365 E5" and "M365 E5" match with high confidence. The algorithm assigns a score between 0 and 1. Rows above your threshold are treated as matches.
Tuning the threshold matters. Too strict and you miss real matches. Too loose and you get false positives where different clients or products are incorrectly paired. A threshold of 0.65 to 0.75 similarity works well for most MSP data.
Review any matches below your confidence threshold manually before acting on them.
Step 5: Review, Update, and Invoice
After matching, every row falls into one of three buckets:
- Matched, quantities equal: no action needed
- Matched, quantities differ: the difference is your revenue leakage. Update the PSA and invoice the delta.
- Unmatched vendor rows: seats you're paying for with no PSA counterpart. These are high priority. You're likely billing nothing for them.
Update your PSA agreement lines for each mismatch, generate a supplemental invoice for the current month, and log the correction in your ticket history. Tracking recurring issues helps you spot clients or products that need a permanent fix.
Frequently Asked Questions
What columns do I need in each export?
Client name, product or SKU, quantity, and unit price are the minimum. Subscription ID helps with edge cases but is not required for basic reconciliation.
How do I handle Microsoft SKU name changes?
Maintain a SKU alias map that links old names to current names. Or use a tool that maintains it for you. Leakage Finder includes 85 Microsoft SKU aliases covering NCE, legacy, and distributor-specific variations.
Is there a faster way than building this manually?
Yes. Purpose-built reconciliation tools like Leakage Finder automate export normalization and matching, turning what used to take hours into a 10 to 20 minute monthly task.
Stop Leaving Microsoft Seats Unbilled
Leakage Finder compares your Microsoft CSP billing against your PSA automatically. It catches quantity mismatches, unmatched seats, and SKU inconsistencies before they cost you another month of revenue.
Run your first reconciliation in under 20 minutes.