How-To

Microsoft CSP Billing vs PSA: How to Reconcile Without Losing Your Mind

March 25, 2026 ยท 7 min read

๐Ÿ“ท Hero Image Placeholder

AI Prompt: Two side-by-side CSV spreadsheet views on dual monitors in a dark office, one labeled "Microsoft Partner Center Export" and one labeled "PSA Billing Export", with highlighted mismatched rows glowing red, professional MSP technician workspace, cinematic dark atmosphere, ultra-realistic

Replace with: dual-monitor CSV comparison scene

You've got 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 with half the pieces named differently. This guide gives you a repeatable process that works every month, whether you're running 10 clients or 200.

Get Your Exports Right First

Before you can reconcile, you need clean exports from both sides.

From Microsoft Partner Center (or your distributor): navigate to Billing โ†’ Usage-based subscriptions or License-based subscriptions and export the current billing period as CSV. Confirm your 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. In ConnectWise, this is typically under Finance โ†’ Agreement Billing Summary. In Autotask, use the Contract Billing report. In Kaseya BMS, navigate to Billing and export invoice line items. The key columns you need: company name, product name, quantity billed, and unit price.

Normalize Before You Match

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 and "M365 Bus Premium" in the other.

Normalization means applying consistent rules to both datasets before comparing:

  • Strip extra whitespace and punctuation
  • Apply consistent capitalization (all lowercase for comparison)
  • Map known SKU variations to canonical names ("M365 BP" โ†’ "Microsoft 365 Business Premium")
  • Remove common suffixes that don't affect matching ("Ltd", "Inc", "Corp")

Manual normalization is tedious and error-prone. Reconciliation tools handle this automatically using pre-built normalization rules and SKU alias maps.

๐Ÿ“ท Inline Image Placeholder

AI Prompt: Clean data normalization diagram showing "M365 Bus Prem" and "Microsoft 365 Business Premium" and "O365 BP" all mapping to one canonical SKU name via arrows, dark minimal infographic style, blue and white on dark background, professional technical documentation

Replace with: SKU normalization mapping diagram

Exact Matching: The First Pass

Run an exact match first. For each row in your vendor export, look for a PSA row with an identical client name and identical product name (after normalization). Exact matches are high-confidence โ€” act on quantity differences found here immediately.

Most clean MSP data will get 60โ€“75% of rows matched exactly. The remaining 25โ€“40% need fuzzy matching.

Fuzzy Matching: Catching the Rest

Fuzzy matching compares string similarity rather than requiring exact equality. "Stark Industries" and "Stark Ind." score 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.

The tricky part is tuning the threshold. Too strict and you miss real matches. Too loose and you get false positives โ€” different clients or products incorrectly matched. A threshold around 0.65โ€“0.75 similarity works well for most MSP data. Review any matches below your confidence threshold manually before acting on them.

Review, Update, Invoice

After matching, you have three buckets:

  • Matched, quantities equal: no action needed
  • Matched, quantities differ: the difference is your leakage โ€” update PSA and invoice the delta
  • Unmatched vendor rows: seats you're paying for with no PSA counterpart โ€” high priority, likely unbilled clients

Update your PSA agreement lines for each mismatch, generate a supplemental invoice for the current month, and note the correction in your ticket history so you can track recurring issues.

Frequently Asked Questions

What columns should I include in each export?
Client/company name, product/SKU, quantity, and unit price are the minimum. Subscription ID helps with edge cases but isn't 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 this map for you โ€” Leakage Finder includes 85 Microsoft SKU aliases covering NCE, legacy, and distributor-specific variations.
Is there a faster approach than building this manually?
Yes. Purpose-built reconciliation tools like Leakage Finder automate export normalization and matching, reducing hours of work to a 10-20 minute monthly task.

See your actual numbers

Run the free sample audit โ€” no sign-in required.

Run free sample audit โ†’
Reconcile Microsoft CSP Billing with PSA | Leakage Finder | Leakage Finder