Sync 365 vs PowerShell scripts

Sync 365 vs PowerShell scripts: who keeps billing working when Microsoft changes?

PowerShell scripts are not finished when they work once. Someone must monitor runs, test Microsoft and PSA changes, maintain credentials, document logic, and fix failures. Sync 365 shifts application and integration maintenance into a supported product; the MSP retains billing policy and exception ownership.

  • AutoMap for matching new Microsoft subscriptions
  • Custom and calculated recurring quantities
  • Location, department and split-billing filters

What Sync 365 does differently

Automate the billing logic between Microsoft and your PSA

A licence count is only the starting point. Sync 365 maps new subscriptions, builds the quantities your MSP sells, and routes each result to the right supported PSA record.

Major differentiator

AutoMap new Microsoft subscriptions

Set the licence, commitment-term, billing-profile and PSA destination rules once. When matching subscriptions appear, AutoMap can apply those rules automatically or queue them for approval.

  • Separate defaults for monthly and annual Microsoft commitment terms
  • Company and filter-group PSA destinations
  • Automatic mapping for trusted setups or pending approval for exceptions
Explore AutoMap
Sync 365 AutoMap settings with separate Microsoft licence term and PSA destination rules

Custom licences

Bill the recurring services around the Microsoft licence

Create the active-user or managed-user count your MSP actually sells, then use it across related support, backup, security and filtering lines in the PSA.

Explore custom licence billing
Sync 365 calculated custom licence builder adding and subtracting recurring service quantities

Calculated custom licences

Turn several source counts into one explainable quantity

Add and subtract Microsoft licences, subscriptions, users, custom licences or fixed quantities to model bundles, included seats and overages before the result reaches the PSA.

Explore calculated billing
Sync 365 licence filters for office, city, state, country, department, company, domain and Entra ID group

Filters and split billing

Bill by location, department, group or billing entity

Split one Microsoft tenant into separate billable populations using office, city, state, country, department, company, domain, Entra ID group or custom attributes.

Explore filters and split billing

At a glance

Sync 365 and PowerShell scripts at a glance

Compare both the billing result and the lifecycle behind it: API and module changes, monitoring, proof of completion, staff continuity, new-subscription mapping, calculated quantities, Azure controls, and PSA updates.

A source-attributed workflow comparison of Sync 365 and PowerShell scripts, reviewed 2026-08-28.
What mattersAutomates repeat billing workSync 365PowerShell scriptsWhy it matters
Primary billing jobProduct-managed billing workflowA focused Microsoft billing layer for licences, Azure, managed users, contacts, and custom recurring services while the supported PSA remains the invoicing system of record.[6][2][5]MSP-built integrationPowerShell scripts: A bespoke integration assembled and maintained by the MSP engineering team.[7][8]The build decision includes every future test, dependency update, incident, and handover—not only the first working version.
Change monitoring and proof of completionMaintained product workflowSync 365 packages Microsoft-to-PSA mappings, review states, and supported update workflows as maintained product configuration. The MSP still owns its commercial policy and exceptions without also maintaining the integration codebase.[1][6]MSP-owned monitoringPowerShell scripts make the MSP responsible for tracking Microsoft, module, authentication, and PSA changes, then testing and deploying fixes. They also need explicit logs, error-stream checks, alerts, output reconciliation, and a responder. Microsoft documents API retirement, upgrades that can require script changes, and Automation jobs that can complete with non-terminating errors.[14][17][10][18][15]A script can run on schedule yet return incomplete data or fail a downstream update. Billing needs a named change owner and customer-level proof—not only a green scheduler status.
Knowledge and staff continuityShared product configurationSync 365 keeps reusable billing rules, customer destinations, and review choices in a shared product workflow. The MSP should still document its commercial policy, but another trained operator is not starting from an undocumented codebase.[1][2][3][4]Author-dependent knowledgePowerShell scripts can become key-person dependent when mappings, assumptions, credentials, scheduler location, exception handling, and recovery steps live mainly with the author. Microsoft migration guidance begins by documenting each script's purpose, location, frequency, importance, and cmdlets.[16]If the author is unavailable or leaves, billing still has a deadline. A backup owner must be able to diagnose, change, test, deploy, and roll back safely.
New subscription mappingReusable AutoMap rulesAutoMap applies reusable Microsoft licence and commitment-term rules to matching new subscriptions, routing each to the configured billing profile and PSA destination automatically or pending review.[1]Custom mapping codePowerShell scripts can reproduce term-aware subscription mapping, but the MSP must design and maintain SKU, term, customer, billing-profile, PSA-destination, approval, retry, and audit behaviour.[7][9][10]A reusable mapping rule reduces the chance that a newly appearing subscription waits for another manual setup step before billing cutoff.
Custom recurring servicesConfigured recurring servicesA configured Microsoft or managed-user count can keep support, backup, antivirus, security, filtering, and other related recurring PSA lines aligned.[2]Custom retrieval logicPowerShell scripts can calculate tailored recurring service quantities when the required source data and PSA write paths are available, but engineers must build the retrieval, commercial logic, customer configuration, review surface, and update path.[11][7]MSPs often sell a service bundle around each user, not only the underlying Microsoft licence.
Calculated quantities and overageConfigured formula builderCalculated custom licences add and subtract Microsoft licences, subscriptions, users, custom licences, or fixed values to produce bundles, included-seat deductions, and overage quantities.[3]Internal calculation codePowerShell scripts can add, subtract, deduplicate, and filter source counts, but every expression rule, validation, preview, negative-value guard, test, and handover remains internal code.[11][7]The correct quantity may be a formula—such as protected mailboxes minus users already included in the bundle—not a copied vendor count.
Location, department, and split billingAttribute-based split billingOffice, city, state, country, department, company, domain, Entra group, and custom attributes can split one tenant into separate billable populations and PSA records.[4]Custom Graph queriesPowerShell scripts can query department, office, domain, group, and extension data when the correct Graph properties, paging, permissions, and customer mappings are implemented.[11][12][9]One Microsoft tenant can represent several sites, departments, franchises, cost centres, or legal billing entities.
Azure consumption workflowReviewed Azure postingAzure consumption can move through billing profiles, markup, billing-period review, approval or configured auto-approval, and supported PSA posting.[5]Custom reconciliation codePowerShell scripts can retrieve Partner Center billed and unbilled data, but the MSP must handle asynchronous reports, charge types, dates, mapping, markup, approvals, and PSA updates.[8][13]Azure comparison should include data timing, markup, period review, approval, exception handling, and the final PSA record—not only ingestion.
PSA ownership and scopeSupported PSA updatesSync 365 supports ConnectWise Manage, Autotask PSA, and HaloPSA workflows while the PSA remains responsible for invoices.[6]MSP-owned API integrationPowerShell scripts can target PSAs that expose suitable APIs, with the MSP owning credentials, idempotency, error handling, auditability, tests, and vendor API changes.[9][10]Clear system ownership prevents overlapping automations and keeps finance confident about which record becomes the invoice.

Beyond one-to-one sync

Build the quantity your MSP actually bills

Start with Microsoft, managed-user or recurring-service data. Apply the commercial rule. Keep the related PSA lines aligned without rebuilding the logic in a spreadsheet each month.

Billing sources

Start with the count the service actually uses

  • Active managed-user counts
  • Protected mailbox counts
  • Microsoft licence and subscription counts
  • Counts filtered by department, site or franchise

Sync 365 billing rules

Build the billable quantity

  • Minimums and exclusions
  • Add or subtract source counts
  • Remove duplicate users
  • Customer-specific mappings

Automated PSA billing

  • Managed support
  • Microsoft 365 backup and overage
  • Antivirus, EDR or email security
  • Web filtering and other recurring services
Managed-service bundle10 active managed users can keep 10 managed support, backup, antivirus and web filtering quantities aligned in the PSA.
Mailbox backup overage13 protected mailboxes minus 10 included users becomes a 3-seat backup overage that Sync 365 can calculate and sync to the PSA.

Workflow differences

What changes in day-to-day billing

These are the practical differences to test with your own customer data—not a generic feature-score exercise.

Know it keeps working when Microsoft changes

Billing automation needs dependency ownership, regression tests, customer-level evidence, an alert path, and an accountable responder.

With Sync 365

Sync 365 keeps Microsoft-to-PSA mapping, quantity, review, and supported update workflows inside a maintained billing product. The MSP configures its commercial rules and handles exceptions without also maintaining the custom integration stack.[1][2][3][4][6]

With PowerShell scripts

PowerShell scripts can be reliable, but the MSP must track vendor changes and maintain the tests, logs, error checks, alerts, completeness checks, and PSA-write reconciliation. Microsoft documents API retirement, upgrades that can require script changes, throttling, and Automation jobs that can complete with non-terminating errors.[14][17][10][18][15]

Why it matters

A scheduled job can run yet miss a page, skip a tenant, or reject a PSA update. Someone needs funded time to test changes and prove what reached the PSA before billing cutoff.

Move billing logic out of one technician's head

A production billing workflow must remain understandable, testable, and recoverable when its original author is unavailable.

With Sync 365

Sync 365 stores reusable Microsoft terms, billing profiles, customer or filter-group destinations, calculated quantities, and review choices as shared product configuration. The MSP still documents its policy, but another trained operator is not starting from source code alone.[1][2][3][4]

With PowerShell scripts

PowerShell scripts become a key-person risk when their commercial assumptions, credentials, deployment location, customer exceptions, and recovery steps live mainly with one author. Microsoft recommends documenting each script's purpose, location, frequency, importance, and cmdlets before migration work.[16]

Why it matters

If the maintainer leaves, takes holiday, or is unavailable during billing week, a backup owner still needs to diagnose the issue, rotate credentials, test a change, deploy it, and roll it back without guessing.

Map new subscriptions without maintaining code

AutoMap turns Microsoft term, billing-profile, PSA-destination, and approval decisions into visible reusable configuration.

With Sync 365

Configure monthly and annual Microsoft commitment-term defaults, the Sync 365 billing profile, the company or filter-group PSA destination, and automatic or pending approval. Matching new subscriptions can then follow that route.[1]

With PowerShell scripts

PowerShell scripts can reproduce term-aware subscription mapping, but the MSP must design and maintain SKU, term, customer, billing-profile, PSA-destination, approval, retry, audit, test, monitoring, and handover behaviour.[7][15][9][10]

Why it matters

Finance should be able to understand why a subscription was mapped without reading code. Reusable configuration also reduces the development and regression-testing burden each time a matching subscription appears.

Bill the services around each Microsoft user

Turn a trusted user or licence count into the support, backup, security, and filtering lines the MSP actually sells.

With Sync 365

Custom licences can use managed users, filtered licences, minimums, exclusions, and customer rules. One configured count can drive several related recurring items through billing profiles into supported PSA records.[2]

With PowerShell scripts

PowerShell scripts can calculate tailored recurring-service quantities when the required source data and PSA write paths are available, but engineers must build and maintain the retrieval, commercial logic, customer configuration, review surface, tests, monitoring, and update path.[11][7]

Why it matters

A Microsoft seat count can be correct while the surrounding managed-service invoice is still wrong. Keeping related lines tied to one reviewed quantity reduces drift without adding another internal code path to maintain.

Build bundles and overage without code ownership

Use ordered additions and deductions when the billable number does not exist in any single source system.

With Sync 365

Calculated custom licences can combine Microsoft licences, subscriptions, all users, custom licences, and fixed quantities. Rules can apply filters, duplicate removal, included-seat deductions, and a zero floor before mapping the result to the PSA.[3]

With PowerShell scripts

PowerShell scripts can add, subtract, deduplicate, and filter source counts, but every expression rule, validation, preview, negative-value guard, regression test, alert, and handover remains internal code owned by the MSP.[11][7]

Why it matters

Finance gets an explainable recurring result for rules that otherwise tend to live in code or spreadsheet formulas, while the MSP avoids maintaining another calculation engine and its edge cases.

Split billing populations without another script branch

Keep one tenant while producing separate location, department, franchise, group, or entity-specific billing populations.

With Sync 365

Sync 365 can include or exclude users by Microsoft and Entra attributes, map each filtered population to the relevant PSA record, and use a separate AutoMap destination for each filter group.[4][1]

With PowerShell scripts

PowerShell scripts can query department, office, domain, group, and extension data when the correct Graph properties, paging, permissions, customer mappings, tests, and exception handling are implemented and maintained.[11][12][9]

Why it matters

The tenant-wide total is often wrong for multi-site or multi-entity agreements. Configuration keeps those populations visible to billing teams instead of burying every branch and customer exception in code.

Built around real MSP billing

The difficult billing scenarios are the point

Sync 365 customer stories show custom recurring rules and split-tenant billing working in live MSP operations.

Custom recurring billing

“Everyone can do 365 licensing. It’s the custom stuff I need.”

Chris F, Operations Director · Cleva Group

Read the Cleva Group story

One tenant, many billing records

“There’s no way we would be able to service a customer like that manually.”

Sean Stuart, Operations Manager · IT Global

Read the IT Global story

Customer-specific examples, not typical or guaranteed results.

Best fit

Which option fits your MSP: Sync 365 or PowerShell scripts?

Choose around who should own the production lifecycle: billing logic, dependency changes, credentials, monitoring, evidence of success, recovery, documentation, and continuity when the original author is unavailable.

Choose Sync 365 when

Choose Sync 365 when billing cannot depend on one engineer

Sync 365 fits when finance wants Microsoft and Entra billing rules in a visible product workflow and the MSP does not want to own the code, dependency, monitoring, and handover lifecycle of a custom integration.[1][2][3][4][6]

  • Billing configuration and review should be operable without reading source code.
  • No single technician should be required to explain, repair, or safely change the workflow.
  • Microsoft licence, Azure, custom, calculated, or split-tenant rules need a supported PSA update path.

Choose the alternative when

Choose PowerShell scripts when custom engineering is justified

PowerShell scripts make most sense when a narrow, temporary, or genuinely proprietary requirement justifies the build and a durable engineering team is funded to operate the integration as internal production software.[14][15][16][18][19]

  • Available product configuration cannot express a critical operational requirement.
  • The codebase has source control, peer review, automated tests, a safe test environment, logs, alerts, and recovery procedures.
  • Named primary and backup owners have funded time for Microsoft, Partner Center, module, PSA API, and credential maintenance.

Use a real customer in the demo

Questions worth testing before you choose

Use one real customer to compare Sync 365 with PowerShell scripts, then test the uncomfortable cases: the author is unavailable, a credential nears expiry, Microsoft changes a dependency, Graph returns throttling, or a scheduled job completes with an error stream. Measure time to detection, proof of affected customers, safe recovery, and billing-team visibility.

  1. 01Who receives an alert when PowerShell scripts return partial data, hit a non-terminating error, or skip a customer?
  2. 02For PowerShell scripts, who verifies each run produced complete, commercially correct PSA quantities—not merely a completed task?
  3. 03When did the team last test PowerShell scripts against a Microsoft Graph, Partner Center, module, authentication, or PSA API change?
  4. 04If the original author of PowerShell scripts left tomorrow, could a backup owner find the documented rules, rotate credentials, deploy a fix, troubleshoot, and roll back before billing cutoff?

How Sync 365 fits

From Microsoft data to PSA billing records

The PSA stays in control of invoicing. Sync 365 owns the reusable mapping, quantity and review logic that prepares supported billing records.

  1. 01

    Connect the source data

    Bring Microsoft 365, Azure, managed-user and supported PSA data into one billing workflow.

  2. 02

    Apply the commercial rules

    Use AutoMap, billing profiles, minimums, exclusions, filters and calculated custom quantities.

  3. 03

    Review the exceptions

    Check pending mappings, calculated quantities, billing changes and configured Azure approvals.

  4. 04

    Align the PSA

    Update supported PSA billing records while the PSA remains the invoicing system of record.

Frequently asked questions

Sync 365 and PowerShell scripts

What is the main difference between Sync 365 and PowerShell scripts?

PowerShell scripts give an MSP control of a bespoke integration—and responsibility for its code, dependencies, credentials, tests, monitoring, recovery, and future changes. Sync 365 puts Microsoft and Entra mapping, filtering, custom and calculated quantities, review, and supported PSA updates into a product workflow while the PSA remains the invoicing system of record.[1][2][3][4][6][7][14][15]

Do PowerShell scripts break whenever Microsoft changes its APIs or modules?

Not after every change, and Microsoft provides notice for general-availability API deprecations. However, API versions are retired, only recent SDK majors remain supported, module upgrades can require script changes, and beta APIs can change without production guarantees. Production PowerShell scripts therefore need someone to monitor notices, test upgrades, migrate before deadlines, and verify the billing output afterward.[14][17][10]

How does an MSP know PowerShell scripts are still working correctly?

A scheduler saying completed is not enough. PowerShell scripts need structured logs, error-stream checks, stale-run and failure alerts, retry handling, customer-level completeness tests, and reconciliation of the intended PSA writes. Microsoft documents that Azure Automation jobs can complete with non-terminating errors, so an accountable person must review and respond before billing cutoff.[18][15]

What happens if the technician who owns PowerShell scripts leaves?

The code may remain, but the MSP can lose practical knowledge about commercial assumptions, credentials, execution location, customer exceptions, deployment, and recovery. Source control, peer review, tests, runbooks, and a trained backup owner mitigate that risk. Microsoft itself recommends documenting each script's purpose, location, execution frequency, importance, and cmdlets before migration work.[16]

What ongoing maintenance do PowerShell scripts require?

Production PowerShell scripts can require module and runtime updates, API and response-change review, permission and authentication work, certificate or secret rotation, retry and throttling logic, regression tests, monitoring, documentation, and recovery rehearsals. The exact burden depends on the implementation, but ownership does not disappear once the first version runs.[14][15][9][19]

Can an MSP use Sync 365 alongside PowerShell scripts?

PowerShell scripts can complement Sync 365 for a narrow adjacent task. Keep ownership boundaries explicit so custom code does not write to the same PSA records or undermine the supported billing workflow. Whichever design you choose, document the system of record and ensure two automations do not update the same customer quantity.[6][7][8]

Test the complete ownership path

Move recurring billing out of one technician's head

Bring one PowerShell billing rule and its current monitoring and recovery path. Compare Sync 365 with PowerShell scripts across the source, mapping, calculation, review, exception, and supported PSA update—then identify what your team would still need to code, watch, document, and maintain.

Methodology and sourcesReviewed

How we compared Sync 365 with PowerShell scripts

PowerShell is a capable automation language, and individual PowerShell scripts vary. This guide does not claim every script is fragile or undocumented. It compares the responsibility of building and operating an equivalent production billing system: dependencies, credentials, tests, monitoring, alerts, recovery, documentation, shared ownership, and change management. Product information was reviewed on. Confirm plan, region, integration and workflow details with each vendor before buying.

  1. Sync 365 AutoMap automated Microsoft licence mappingSync 365
  2. Sync 365 custom licence billingSync 365
  3. Sync 365 calculated custom licence billingSync 365
  4. Sync 365 licence filters and split billingSync 365
  5. Sync 365 Azure consumption billingSync 365
  6. Sync 365 supported PSA integrationsSync 365
  7. Microsoft Graph subscribed SKUs APIMicrosoft Learn
  8. Microsoft Partner Center billed and unbilled reconciliationMicrosoft
  9. Microsoft Graph PowerShell authentication commandsMicrosoft Learn
  10. Partner Center authenticationMicrosoft Learn
  11. Microsoft Graph PowerShell Get-MgUser documentationMicrosoft
  12. Microsoft Graph paging guidanceMicrosoft Learn
  13. Microsoft Partner Center asynchronous reconciliation APIMicrosoft
  14. Microsoft Graph versioning, support, and breaking-change policyMicrosoft Learn
  15. Microsoft Graph reliability, error, paging, and throttling guidanceMicrosoft Learn
  16. Microsoft guidance for documenting and upgrading PowerShell scriptsMicrosoft Learn
  17. Microsoft Graph PowerShell v2 breaking changes and upgrade guideMicrosoft Graph
  18. Microsoft Azure Automation job monitoring and alert guidanceMicrosoft Learn
  19. Microsoft guidance for renewing expiring application credentialsMicrosoft Learn