{"id":26162,"date":"2026-10-19T13:53:48","date_gmt":"2026-10-19T17:53:48","guid":{"rendered":"https:\/\/www.sherweb.com\/blog\/?p=26162"},"modified":"2026-10-29T15:32:44","modified_gmt":"2026-10-29T19:32:44","slug":"microsoft-license-billing-issues","status":"publish","type":"post","link":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/","title":{"rendered":"The MSP license audit: How to find wasted spend across every client tenant"},"content":{"rendered":"<h2><strong>Key takeaways<\/strong><\/h2>\n<ul>\n<li>Performing a standardized, multi-tenant license audit ahead of each billing cycle catches unassigned subscriptions before they hit the invoice, protecting gross margin across every client account.<\/li>\n<li>Building ghost license detection into your offboarding workflow eliminates the single most common billing error found in Microsoft 365 audits.<\/li>\n<li>Reconciling PSA pricing against current Microsoft retail rates after every price increase prevents invisible margin compression that compounds across dozens of tenants.<\/li>\n<li>Connecting CIPP (CyberDrain Improved Partner Portal) to an API-integrated distributor enables auditing inventory, detecting inactive accounts and adjusting subscriptions across all client tenants from a single interface.<\/li>\n<\/ul>\n<hr \/>\n<p><strong>Picture this:<\/strong> you\u2019ve got 30 clients, 30 Microsoft 365 admin centers, 30 separate sets of user identities accumulating drift and 30 monthly billing cycles that depend on accurate seat counts. Now imagine one technician offboards an employee for one client account, but forgets to remove their license from the CSP portal.<\/p>\n<p>You\u2019re going to be billed for that unused license every month until someone discovers it.<\/p>\n<p>For managed service providers (MSPs) running manual, tenant-by-tenant reconciliation, that scenario is common. However, a Microsoft 365 license audit shouldn\u2019t be a one-time clean-up exercise, but rather a process built into your operations. It\u2019s what separates MSPs who protect their margins from those who absorb costs they can&#8217;t see.<\/p>\n<p>Keep reading for common Microsoft billing issues and help building a repeatable audit process for every client tenant to prevent overbilling.<\/p>\n<h2><strong>Why Microsoft license billing issues are so common<\/strong><\/h2>\n<p>Billing discrepancies in the <a href=\"https:\/\/www.sherweb.com\/productivity\/microsoft-365\">Microsoft 365 channel<\/a> often result from multiple errors that accumulate due to structural gaps between technical provisioning and financial accounting.<\/p>\n<p>Running a modern Microsoft 365 practice requires synchronized tracking across the Microsoft Partner Center, <a href=\"https:\/\/www.sherweb.com\/blog\/partner\/how-to-audit-distributor-relationship\/\">distributor marketplaces<\/a>, client Microsoft Entra ID (formerly Azure Active Directory) environments and PSA (Professional Services Automation) tools. A breakdown anywhere in that chain creates financial leakage.<\/p>\n<p>These four friction points explain why billing errors compound across multi-tenant environments:<\/p>\n<ul>\n<li><strong>Mid-cycle subscription changes.<\/strong> Client headcount changes throughout the month. That\u2019s normal. When a client adds seats mid-cycle, provisioning takes effect immediately inside the tenant. If the PSA isn&#8217;t updated at the same time, the MSP pays the distributor for the extra seat while continuing to bill the client at the old quantity.<\/li>\n<li><strong>NCE commitment windows.<\/strong> Under Microsoft&#8217;s <a href=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/office-365\/microsoft-nce-partner-need-to-know\/\">NCE (New Commerce Experience) framework<\/a>, seat reductions are restricted to a 7-day window after initial purchase or annual renewal. Miss that window after a client downsizes, and the MSP must continue to pay for that unused seat for the remainder of the term.<\/li>\n<li><strong>PSA retail price sync gaps.<\/strong> Distributors pass through wholesale cost changes via API when Microsoft raises prices. However, many don&#8217;t automatically update retail prices inside PSA tools like ConnectWise Manage, Autotask or Kaseya BMS. When the PSA price book still reflects legacy retail rates, client invoices are generated with the old price while the MSP absorbs the difference, and that gap can be significant as it compounds across all affected tenants.<\/li>\n<li><strong>Decentralized provisioning.<\/strong> Technicians frequently provision licenses directly inside the Microsoft 365 Admin Center while resolving a support ticket, without executing the corresponding workflow in the distributor marketplace or updating the PSA contract. The technical reality and the billing record drift apart.<\/li>\n<\/ul>\n<h2><strong>What a Microsoft 365 license audit actually covers<\/strong><\/h2>\n<p>An MSP license audit is an operational and financial control exercise. It&#8217;s designed to align active technical allocations with actual user activity and recurring client billing. It does not inspect legal entitlement compliance.<\/p>\n<p>These three areas should be inspected and verified or updated in your audit:<\/p>\n<ol>\n<li><strong>License inventory:<\/strong> The baseline count of paid subscription seats in the CSP portal versus the number of licenses assigned to active user accounts in Entra ID. Unassigned seats sitting idle in the tenant pool are the first target.<\/li>\n<li><strong>License usage:<\/strong> Whether assigned licenses reflect actual user behaviour. For example, an employee is assigned to the Enterprise E5 suite but never actually uses its advanced compliance or governance features. You could downgrade their access to <a href=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/office-365\/office-365-e3-vs-microsoft-365-business-premium\/\">Business Premium<\/a> and save costs.<\/li>\n<li><strong>License cost:<\/strong> The financial reconciliation layer. Match distributor wholesale invoices against current Microsoft retail pricing and PSA contract line items. This is where price sync gaps become visible and can be amended.<\/li>\n<\/ol>\n<h3><strong>License inventory vs. license usage vs. license cost<\/strong><\/h3>\n<p>Most single-tenant audit guides stop at inventory. That&#8217;s enough for a corporate IT department managing one organization. For an MSP, it&#8217;s only the first third of the picture. Usage data identifies rightsizing opportunities, while cost alignment catches margin erosion. All three layers are required to run an audit that actually protects the business.<\/p>\n<h3><strong>What changes between a single-tenant audit and a multi-tenant one<\/strong><\/h3>\n<p>Single-tenant audit methods (native Microsoft 365 Admin Center reports, Microsoft Purview and tenant-specific PowerShell scripts) work well for an internal IT team managing a single organization. They break down fast at MSP scale.<\/p>\n<p>Running sequential single-tenant workflows across 30, 50 or 100 clients introduces much higher overhead. Each admin center requires an individual authentication context switch. PowerShell scripts run one tenant at a time, can&#8217;t aggregate data across tenants and are bound by native retention limits. Microsoft Purview&#8217;s standard audit logs cap at 180 days by default.<\/p>\n<p>Here&#8217;s how the two approaches compare:<\/p>\n<table width=\"625\">\n<tbody>\n<tr>\n<td width=\"117\"><strong>Dimension<\/strong><\/td>\n<td width=\"243\"><strong>Single-tenant approach<\/strong><\/td>\n<td width=\"265\"><strong>Multi-tenant MSP approach<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"117\">Primary tooling<\/td>\n<td width=\"243\">Microsoft 365 Admin Center, Purview, PowerShell<\/td>\n<td width=\"265\">CIPP, multi-tenant APIs, PSA integrations<\/td>\n<\/tr>\n<tr>\n<td width=\"117\">Execution context<\/td>\n<td width=\"243\">One tenant at a time<\/td>\n<td width=\"265\">Aggregated across all tenants simultaneously<\/td>\n<\/tr>\n<tr>\n<td width=\"117\">Scope of review<\/td>\n<td width=\"243\">Internal user compliance<\/td>\n<td width=\"265\">Cross-tenant margin protection, ghost license detection, PSA reconciliation<\/td>\n<\/tr>\n<tr>\n<td width=\"117\">Historical baseline<\/td>\n<td width=\"243\">Native Microsoft 365 retention (90\u2013180 days)<\/td>\n<td width=\"265\">External repository for continuous trend tracking<\/td>\n<\/tr>\n<tr>\n<td width=\"117\">Financial alignment<\/td>\n<td width=\"243\">Internal IT budget tracking<\/td>\n<td width=\"265\">Direct alignment with distributor billing and PSA invoicing<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong>The four-stage audit framework<\/strong><\/h2>\n<p>MSPs need a repeatable, four-stage process applied consistently to every client environment. Each stage produces a defined output that feeds into the next.<\/p>\n<p>Here&#8217;s a summary of what each stage addresses:<\/p>\n<table width=\"624\">\n<tbody>\n<tr>\n<td width=\"132\"><strong>Stage<\/strong><\/td>\n<td width=\"127\"><strong>Focus<\/strong><\/td>\n<td width=\"189\"><strong>Primary action<\/strong><\/td>\n<td width=\"176\"><strong>Risk mitigated<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Stage 1: Inventory<\/td>\n<td width=\"127\">Entitlement discovery<\/td>\n<td width=\"189\">Map CSP subscriptions against Entra ID assignments<\/td>\n<td width=\"176\">Paying for unassigned seats<\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Stage 2: Usage check<\/td>\n<td width=\"127\">Activity analysis<\/td>\n<td width=\"189\">Flag accounts dormant 90+ days and ghost licenses<\/td>\n<td width=\"176\">Billing for offboarded users<\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Stage 3: Cost alignment<\/td>\n<td width=\"127\">Financial reconciliation<\/td>\n<td width=\"189\">Reconcile PSA rate cards against current CSP pricing<\/td>\n<td width=\"176\">Margin compression from price sync gaps<\/td>\n<\/tr>\n<tr>\n<td width=\"132\">Stage 4: Action and governance<\/td>\n<td width=\"127\">Remediation and logging<\/td>\n<td width=\"189\">Execute seat reductions, update PSA, archive baseline<\/td>\n<td width=\"176\">Invoice errors and accidental deprovisioning<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Let\u2019s discuss each stage in more detail\u2026<\/p>\n<h3><strong>Stage 1: Inventory\u2014what subscriptions exist and who has what<\/strong><\/h3>\n<p>The inventory stage establishes your baseline. Your technical teams pull license allocation data from tenant directory endpoints and cross-reference it against active CSP subscriptions.<\/p>\n<p>You\u2019re seeking to determine if the number of licenses purchased matches the number assigned to active user accounts. A small buffer of one or two unassigned seats is often intentional, held for rapid onboarding in the future. Anything beyond that deserves scrutiny.<\/p>\n<p><strong>Stage 1 output:<\/strong> Full license assignment list by user, by tenant<\/p>\n<p><strong>Stage 1 primary tools used:<\/strong> CIPP license reports, Microsoft 365 Admin Center, Graph API\/PowerShell<\/p>\n<h3><strong>Stage 2: Usage check\u2014identify inactive accounts and ghost licenses<\/strong><\/h3>\n<p>This is where you\u2019re likely to uncover the most Microsoft billing issues. Ghost licenses are paid subscriptions still assigned to offboarded, disabled or dormant user accounts.<\/p>\n<p>Ghost licenses from late offboarding are often the most frequently encountered issue across partners managing multiple tenants. The pattern is consistent: a helpdesk technician executes an offboarding ticket by blocking the user&#8217;s sign-in and converting the mailbox to shared, but the paid license assignment stays in place, and the seat is never cancelled. The distributor keeps billing.<\/p>\n<p>This stage seeks out:<\/p>\n<ul>\n<li>User accounts with zero interactive sign-in activity over the past 90 days.<\/li>\n<li>Licenses assigned to disabled, external or temporary test accounts.<\/li>\n<li>Shared mailboxes retaining paid standalone licenses despite qualifying for free shared mailbox status (under 50 GB storage).<\/li>\n<\/ul>\n<p>The <a href=\"https:\/\/zylo.com\/blog\/unused-software-cut-costs\">Zylo 2026 SaaS Management Index<\/a> found that an average of 46% of provisioned licenses sit unused or underutilized in any given month across corporate SaaS environments. Inside an MSP&#8217;s client portfolio, that unused capacity is direct margin leakage. The MSP pays the distributor for unused licenses.<\/p>\n<p><strong>Stage 2 output:<\/strong> List of candidates for license reclamation<\/p>\n<h3><strong>Stage 3: Cost alignment\u2014match license costs to PSA and current retail pricing<\/strong><\/h3>\n<p>Stage 3 moves from technical data to financial reconciliation. This step catches billing discrepancies before client invoices go out. Three evaluations happen here:<\/p>\n<ol>\n<li><strong>PSA pricing audit.<\/strong> Verify that the retail unit pricing charged to clients in the PSA reflects current Microsoft list prices. Sherweb doesn&#8217;t automatically sync Microsoft retail prices to PSA tools. This is a known process gap that requires manual reconciliation after any price adjustment. When the PSA still reflects old retail rates, the MSP absorbs the extra costs on every affected tenant.<\/li>\n<li><strong>SKU optimization.<\/strong> Evaluate whether clients are carrying suboptimal license combinations. Here\u2019s a common example: your client is running Microsoft 365 Business Standard with separate add-ons for Microsoft Defender for Business, Entra ID Plan 1 and Intune. If you consolidate those components into a Microsoft 365 Business Premium account, you can deliver <a href=\"https:\/\/www.sherweb.com\/blog\/partner\/business-premium-adoption-guide\/\">stronger security integration at a lower aggregate monthly cost<\/a>.<\/li>\n<li><strong>NCE renewal alignment.<\/strong> Review upcoming commitment expiration dates. Annual NCE agreements approaching renewal represent a critical window to reduce seat counts or switch billing frequencies without penalty (or having to hold unused seats for another term).<\/li>\n<\/ol>\n<p><strong>Stage 3 output:<\/strong> Cost discrepancy report by client tenant<\/p>\n<h3><strong>Stage 4: Action and documentation\u2014reclaim, reassign, escalate<\/strong><\/h3>\n<p>Stage 4 converts audit findings into verified changes and records. Reclaiming licenses without client confirmation risks disrupting access or violating that client&#8217;s specific requirements.<\/p>\n<p>Here are the tasks you should perform during this stage:<\/p>\n<ol>\n<li><strong>Client confirmation.<\/strong> Present reclamation candidates (dormant accounts, SKU consolidation opportunities) to client contacts for sign-off before making any changes.<\/li>\n<li><strong>Technical execution.<\/strong> Unassign redundant licenses in Entra ID and execute seat reductions in the CSP distributor portal.<\/li>\n<li><strong>PSA reconciliation.<\/strong> Update recurring agreement quantities, proration adjustments and unit prices in the PSA before the next billing cycle.<\/li>\n<li><strong>Baseline documentation.<\/strong> Export and archive audit snapshot data into an external data store. This preserves historical visibility beyond Microsoft&#8217;s native retention limits and gives you a defensible record if questions arise later.<\/li>\n<\/ol>\n<p><strong>Stage 4 output:<\/strong> Updated license counts, billing notes and signed client confirmations<\/p>\n<h2><strong>How CIPP makes this scalable across all client tenants<\/strong><\/h2>\n<p>Running a four-stage audit manually across 50 client environments is operationally expensive and not scalable. <a href=\"https:\/\/www.sherweb.com\/psa-integration\/cipp\">CIPP<\/a> is an open-source, hosted, multi-tenant management layer built specifically for MSPs to unify Microsoft 365 administration across all clients in a single interface.<\/p>\n<h3><strong>Cross-tenant license visibility from a single dashboard<\/strong><\/h3>\n<p>Rather than authenticating to each client portal individually, administrators can access a global view showing total provisioned seats, active assignments and unassigned buffers across all managed organizations. The authentication context switching that makes tenant-by-tenant auditing slow disappears entirely.<\/p>\n<h3><strong>Automated detection of inactive accounts and licensing drift<\/strong><\/h3>\n<p>CIPP automates the core work of Stage 2. Built-in reporting routines continuously query sign-in timestamps across all mapped tenants, surfacing accounts that have been dormant for 90 to 180 days. It also tracks configuration baselines. When an unauthorized seat addition or unmapped SKU appears in a tenant, CIPP flags the deviation so it gets caught before the billing cycle closes.<\/p>\n<h3><strong>What Sherweb&#8217;s exclusive CIPP integration adds<\/strong><\/h3>\n<p>Standard CIPP deployment handles multi-tenant Microsoft 365 management. Sherweb&#8217;s exclusive distributor integration extends that to cover the billing and procurement layer, connecting technical tenant data directly to financial workflows. Key capabilities include:<\/p>\n<ul>\n<li><strong>API-driven license procurement inside CIPP.<\/strong> Administrators can increase or decrease subscription seat quantities directly within the CIPP interface. Changes are executed through a direct API call to Sherweb&#8217;s billing engine. This eliminates the need to switch between the management portal and the distributor catalog.<\/li>\n<li><strong>The Sherweb Licence Report.<\/strong> Standard tenant reports analyze only what&#8217;s assigned inside Microsoft 365 directories. The dedicated Sherweb Licence Report within CIPP queries Sherweb&#8217;s billing API directly, placing billed subscription counts side by side with active tenant assignments. If an MSP is paying for 50 licenses on a distributor agreement while only 42 seats are assigned in the tenant, that discrepancy appears immediately, without any manual cross-referencing.<\/li>\n<li><strong>Automated offboarding and provisioning workflows.<\/strong> When a user account is removed, integrated offboarding wizards automatically ensure the associated license is either unassigned or scheduled for cancellation in the distributor portal. This closes the process gap that produces ghost licenses in the first place.<\/li>\n<li><strong>NCE migration support.<\/strong> The integration provides structured workflows for migrating legacy CSP subscriptions into NCE structures while managing commitment terms and seat constraints.<\/li>\n<li><strong>Real-time PSA billing sync.<\/strong> Combined with Sherweb&#8217;s <a href=\"https:\/\/www.sherweb.com\/blog\/partner-experience-enablement\/halopsa-for-msps\/\">native HaloPSA integration<\/a>, license modifications trigger event-driven billing updates. Subscription changes flow into client contract agreements immediately, updating quantities and calculating proration automatically rather than waiting for daily batch syncs.<\/li>\n<\/ul>\n<p>For an MSP managing 30-plus client tenants, the difference between running the four-stage audit in CIPP and a portal-by-portal manual process is significant in terms of overhead and technician time. It&#8217;s the difference between an audit cadence that&#8217;s sustainable and one that still misses things even with a dedicated person behind it.<\/p>\n<div class=\"sherweb-callout\">\n<p>Check out <strong><a href=\"https:\/\/info.sherweb.com\/sherweb-cipp-integration\">Sherweb&#8217;s CIPP integration<\/a><\/strong> to learn how it handles your license audits at scale. You can also explore Sherweb&#8217;s full <strong><a href=\"https:\/\/www.sherweb.com\/integrations\">PSA and automation integrations<\/a><\/strong> to see how license data flows into your existing tools.<\/p>\n<\/div>\n<style>\n<!--.sherweb-callout { border-left: 4px solid #0078D4; background: #faddd7; padding: 1.25em 1.5em; margin: 2em 0; font-size: 1rem; border-radius: 6px; box-shadow: 0 0 0 1px rgba(0,0,0,0.05); } .sherweb-callout a { color: #0078D4; font-weight: 600; text-decoration: none; } .sherweb-callout a:hover {text-decoration: underline;}--><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\"><\/span><br \/><\/style>\n<h2><strong>How often should MSPs run a license audit?<\/strong><\/h2>\n<p>A thorough annual audit will catch some things, but not the ghost license created by last month&#8217;s offboarding ticket, or the PSA pricing gap that opened the day Microsoft raised prices. We recommend a combination of monthly, quarterly and annual reviews. The strongest MSPs treat licensing audits as a proactive, recurring customer-lifecycle motion.<\/p>\n<p>Protecting margins consistently requires several cadences:<\/p>\n<ul>\n<li><strong>Monthly pre-billing cycle sync.<\/strong> Perform these syncs three to five days before generating monthly client invoices. This rapid check confirms unassigned seats, catches ghost licenses from recent offboardings and verifies PSA contract quantities match active CSP billing.<\/li>\n<li><strong>Quarterly business review alignment.<\/strong> This is a deeper review integrated into client QBRs. Use it to present license utilization summaries, highlight cost-saving adjustments made on the client&#8217;s behalf and recommend structural changes such as SKU consolidation. Framing audit outputs as a client-facing deliverable turns backend maintenance into visible advisory value, the kind that strengthens retention.<\/li>\n<li><strong>Annual NCE renewal window.<\/strong> Schedule your annual review 30 to 60 days before NCE subscriptions expire. This is the only window to reduce baseline seat commitments or switch billing frequencies without financial penalty.<\/li>\n<li><strong>Microsoft price increase triggers.<\/strong> When Microsoft announces price adjustments, you should review your accounts. Review PSA rate cards against incoming distributor wholesale cost changes and update price books before billing cycles run at legacy rates.<\/li>\n<\/ul>\n<p>Most Microsoft billing issues result from unmanaged licensing drift, ghost licenses and PSA pricing gaps. Manual, single-tenant inspection methods don\u2019t help prevent unnecessary costs from accumulating and compounding over multiple MSP client accounts.<\/p>\n<p>We recommend implementing a repeatable and scalable four-stage audit framework. Running this audit consistently, supported by multi-tenant tooling, closes the operational gaps between technical administration and billing.<\/p>\n<h4><strong>Looking to expand your Microsoft 365 practice?<\/strong> <a href=\"https:\/\/www.sherweb.com\/productivity\/microsoft-365\"><strong>Resell Microsoft 365 with Sherweb<\/strong><\/a><strong> and get access to the distributor tools, support and integrations built for MSPs managing clients at scale. Join <\/strong><a href=\"https:\/\/cumulus.sherweb.com\/partners\/signup\/\"><strong>Sherweb\u2019s partner program<\/strong><\/a><strong> to get started.<\/strong><\/h4>\n<hr \/>\n<h2><strong>Frequently asked questions<\/strong><\/h2>\n<h3>How do I check for unused Microsoft 365 licenses?<\/h3>\n<p>To check for unused Microsoft 365 licenses, MSPs need to analyze account sign-in activity and entitlement assignments across client tenants. Filter user directories for accounts with zero interactive sign-ins over 90 days, locate disabled accounts that still carry active license assignments and identify unassigned subscription seats sitting idle in the tenant pool. Tools like CIPP, Graph API reports or the Microsoft 365 Admin Center can surface this data. CIPP is the only option that aggregates it across all tenants simultaneously.<\/p>\n<h3>How often should an MSP audit Microsoft 365 licenses?<\/h3>\n<p>MSPs should audit Microsoft 365 licenses monthly before billing runs, with deeper strategic reviews tied to client QBRs each quarter and a dedicated review 30 to 60 days before annual NCE subscriptions renew. Monthly checks catch operational issues like ghost licenses and unbilled mid-cycle seat additions. Quarterly reviews identify opportunities for longer-term rightsizing and tier consolidation.<\/p>\n<h3>What is a ghost license in Microsoft 365?<\/h3>\n<p>A ghost license in Microsoft 365 is an active paid subscription that continues generating wholesale charges in the CSP portal after the associated user has been offboarded or disabled. This typically happens when a technician disables a departing employee&#8217;s account but doesn&#8217;t remove the license assignment or cancel the seat in the distributor portal. The distributor keeps billing the MSP, often for months, until someone manually catches it.<\/p>\n<h3>How does CIPP help with Microsoft 365 license management?<\/h3>\n<p>CIPP helps with Microsoft 365 license management by providing centralized multi-tenant visibility, automated dormant account detection, configuration drift reporting and direct integration with distributor billing APIs. Billing and engineering teams can audit inactive users across dozens of tenants simultaneously and adjust seat counts from a single administrative interface. Sherweb&#8217;s exclusive CIPP integration extends this to include API-driven procurement and real-time PSA billing sync.<\/p>\n<h3>What is the best way to audit Microsoft 365 licenses across multiple tenants?<\/h3>\n<p>The best way to audit Microsoft 365 licenses across multiple tenants is to run a standardized four-stage framework (inventory, usage check, cost alignment and action\/documentation) through an API-connected multi-tenant portal integrated with your PSA and cloud distributor. This replaces manual, tenant-by-tenant portal checks with cross-tenant data aggregation, enabling identification of unassigned seats, dormant users and billing sync gaps across all managed environments in a single pass.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Key takeaways Performing a standardized, multi-tenant license audit ahead of each billing cycle c","protected":false},"author":177,"featured_media":26167,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1157],"tags":[1214,1189,1216,717,1127],"class_list":["post-26162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-ecosystem","tag-billing","tag-cipp-integration","tag-license-management","tag-microsoft-365","tag-msp-best-practices"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to audit Microsoft 365 licenses across client tenants<\/title>\n<meta name=\"description\" content=\"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to audit Microsoft 365 licenses across client tenants\" \/>\n<meta property=\"og:description\" content=\"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\" \/>\n<meta property=\"og:site_name\" content=\"Sherweb\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Sherweb\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-19T17:53:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T19:32:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"480\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"The Sherweb Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SherWeb\" \/>\n<meta name=\"twitter:site\" content=\"@SherWeb\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"The Sherweb Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\"},\"author\":{\"name\":\"The Sherweb Team\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976\"},\"headline\":\"The MSP license audit: How to find wasted spend across every client tenant\",\"datePublished\":\"2026-10-19T17:53:48+00:00\",\"dateModified\":\"2026-10-29T19:32:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\"},\"wordCount\":2883,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage\"},\"thumbnailUrl\":\"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg\",\"keywords\":[\"Billing\",\"CIPP integration\",\"License Management\",\"Microsoft 365\",\"MSP Best Practices\"],\"articleSection\":[\"Microsoft Ecosystem\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\",\"url\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\",\"name\":\"How to audit Microsoft 365 licenses across client tenants\",\"isPartOf\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage\"},\"thumbnailUrl\":\"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg\",\"datePublished\":\"2026-10-19T17:53:48+00:00\",\"dateModified\":\"2026-10-29T19:32:44+00:00\",\"author\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976\"},\"description\":\"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage\",\"url\":\"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg\",\"contentUrl\":\"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg\",\"width\":1200,\"height\":480},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sherweb.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Ecosystem\",\"item\":\"https:\/\/www.sherweb.com\/blog\/category\/microsoft-ecosystem\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The MSP license audit: How to find wasted spend across every client tenant\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/#website\",\"url\":\"https:\/\/www.sherweb.com\/blog\/\",\"name\":\"Sherweb\",\"description\":\"More than a cloud marketplace\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sherweb.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976\",\"name\":\"The Sherweb Team\",\"url\":\"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/author\/the-sherweb-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to audit Microsoft 365 licenses across client tenants","description":"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/","og_locale":"en_US","og_type":"article","og_title":"How to audit Microsoft 365 licenses across client tenants","og_description":"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.","og_url":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/","og_site_name":"Sherweb","article_publisher":"https:\/\/www.facebook.com\/Sherweb","article_published_time":"2026-10-19T17:53:48+00:00","article_modified_time":"2026-10-29T19:32:44+00:00","og_image":[{"width":1200,"height":480,"url":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg","type":"image\/jpeg"}],"author":"The Sherweb Team","twitter_card":"summary_large_image","twitter_creator":"@SherWeb","twitter_site":"@SherWeb","twitter_misc":{"Written by":"The Sherweb Team","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#article","isPartOf":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/"},"author":{"name":"The Sherweb Team","@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976"},"headline":"The MSP license audit: How to find wasted spend across every client tenant","datePublished":"2026-10-19T17:53:48+00:00","dateModified":"2026-10-29T19:32:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/"},"wordCount":2883,"commentCount":0,"image":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage"},"thumbnailUrl":"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg","keywords":["Billing","CIPP integration","License Management","Microsoft 365","MSP Best Practices"],"articleSection":["Microsoft Ecosystem"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/","url":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/","name":"How to audit Microsoft 365 licenses across client tenants","isPartOf":{"@id":"https:\/\/www.sherweb.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage"},"image":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage"},"thumbnailUrl":"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg","datePublished":"2026-10-19T17:53:48+00:00","dateModified":"2026-10-29T19:32:44+00:00","author":{"@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976"},"description":"Unused licenses, ghost accounts, and missed price updates quietly drain MSP margins. Here is a repeatable audit process for every client tenant.","breadcrumb":{"@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#primaryimage","url":"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg","contentUrl":"\/blog\/wp-content\/uploads\/MSPlicenseAudit_1200x480.jpg","width":1200,"height":480},{"@type":"BreadcrumbList","@id":"https:\/\/www.sherweb.com\/blog\/microsoft-ecosystem\/microsoft-license-billing-issues\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sherweb.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Microsoft Ecosystem","item":"https:\/\/www.sherweb.com\/blog\/category\/microsoft-ecosystem\/"},{"@type":"ListItem","position":3,"name":"The MSP license audit: How to find wasted spend across every client tenant"}]},{"@type":"WebSite","@id":"https:\/\/www.sherweb.com\/blog\/#website","url":"https:\/\/www.sherweb.com\/blog\/","name":"Sherweb","description":"More than a cloud marketplace","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sherweb.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sherweb.com\/blog\/#\/schema\/person\/42a19dccace310904575a5656cc20976","name":"The Sherweb Team","url":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/author\/the-sherweb-team\/"}]}},"tag_names":["Billing","CIPP integration","License Management","Microsoft 365","MSP Best Practices"],"_links":{"self":[{"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/posts\/26162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/users\/177"}],"replies":[{"embeddable":true,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/comments?post=26162"}],"version-history":[{"count":4,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/posts\/26162\/revisions"}],"predecessor-version":[{"id":26166,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/posts\/26162\/revisions\/26166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/media\/26167"}],"wp:attachment":[{"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/media?parent=26162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/categories?post=26162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/r-swca2-app15-sherwebbl-change-font-czgcf8cmcjh3asb3.canadacentral-01.azurewebsites.net\/blog\/wp-json\/wp\/v2\/tags?post=26162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}