delivered for clients · names withheldmigration CRM, ITSM and automation

Dynamics CRM on-premises to Dynamics 365 online

Cohash moves on-premises Dynamics CRM and Customer Engagement organizations onto Dynamics 365 online. The first job is finding customizations that would block Microsoft's on-premises-to-online database migration. Then we rewrite SQL-based reports and Windows-authenticated integrations and map Active Directory users to Entra ID. We rehearse in a sandbox before production, and until users, data and integrations check out online, the old servers stay running.

  1. 01Version and customization audit
  2. 02Clean the source
  3. 03Identity and users
  4. 04Rehearsal migration
  5. 05Integrations
  6. 06Production cut-over and retirement
case-study / dynamics-crm-on-premises-to-dynamics-365-online delivered
beforeDynamics CRM / Customer Engagement 9.x (on-premises) afterDynamics 365 online on Dataverse
01 · USERS AND IDENTITY 02 · DYNAMICS 365 ONLINE 03 · INTEGRATIONS AND REPORTING Sales and service users: browser · Outlook Sales and serviceusers browser · Outlook Entra ID: SSO · MFA Entra ID SSO · MFA Dynamics 365 online: Dataverse Dynamics 365 online Dataverse Plugins in sandbox isolation: supported customizations Plugins in sandboxisolation supportedcustomizations Integrations: Dataverse Web API · OAuth Integrations Dataverse Web API ·OAuth FetchXML and Power BI: reports without SQL access FetchXML and PowerBI reports without SQLaccess Exchange Online: server-side sync Exchange Online server-side sync
case file

The story

Told without the client's name or anything that could identify them.

what happened

A membership organization's CRM team ran Dynamics CRM 2016 on its own servers, with SSRS reports only one DBA could change and AD FS kept mostly for claims-based sign-in. The CRM servers and their SQL Server instance were the last on-premises Dynamics workload anyone patched, and sales wanted Copilot features the on-premises org couldn't get. We audited customizations first, upgraded the org to 9.1 and removed unsupported SQL-level changes, then mapped every user to Entra ID. After a timed OP2OL rehearsal into a sandbox, production moved to Dynamics 365 online, integrations were re-pointed to the Dataverse Web API and the old servers were shut down after a read-only period.

why it was urgent

Microsoft Lifecycle has Customer Engagement 9.x on-premises leaving mainstream support on 12 January 2029. Extended support goes to 9 January 2031. The catch is the OP2OL tooling in Lifecycle Services, which won't accept anything older than 9.0. A CRM 2016 org has to be upgraded before it can move.

problem statement
  • openThe CRM servers and their SQL Server instance are the last on-premises Dynamics workload anyone still patches.
  • recurringSales saw Copilot in a demo and keeps asking for it. The on-premises org can't have it.
  • blockedReports are SQL-based SSRS files that only one DBA knows how to change.
  • openAD FS exists mainly to sign people in to CRM with claims-based authentication.
architecture

The estate, before and after

before
before

Before: Dynamics CRM 2016 on-premises behind AD FS

Users signed in through AD FS using claims-based authentication against Active Directory. CRM sat on its own SQL Server, reports queried that database directly, and integrations hit the organization service with Windows credentials.

Before: Dynamics CRM 2016 on-premises behind AD FS Users signed in through AD FS using claims-based authentication against Active Directory. CRM sat on its own SQL Server, reports queried that database directly, and integrations hit the organization service with Windows credentials. 01 · USERS AND IDENTITY 02 · CRM ON-PREMISES 03 · DATA AND INTEGRATIONS sign in accounts claims token customizes data direct SQL Windows credentials email sync Sales and service users browser · Outlook Active Directory domain accounts AD FS claims-based authentication D365 Dynamics CRM 2016 on-premisesorganization Plugins and SQL changes some unsupported online SQL Server CRM databases SSRS reports SQL-based · one DBA Integrations organization service ·Windows auth Exchange on-premises server-side sync
Read the diagram as text
  1. Sales and service users → AD FS: sign in
  2. Active Directory → AD FS: accounts
  3. AD FS → Dynamics CRM 2016: claims token
  4. Plugins and SQL changes → Dynamics CRM 2016: customizes
  5. Dynamics CRM 2016 → SQL Server: data
  6. SSRS reports → SQL Server: direct SQL
  7. Integrations → Dynamics CRM 2016: Windows credentials
  8. Dynamics CRM 2016 → Exchange on-premises: email sync
after
after

After: Dynamics 365 online on Dataverse with Entra ID

Sign-in moved to Entra ID, and the org itself now lives in Dynamics 365 online on Dataverse. The integrations we rewrote call the Dataverse Web API with app registrations and OAuth. Reports are FetchXML or Power BI, and Exchange Online handles server-side sync.

After: Dynamics 365 online on Dataverse with Entra ID Sign-in moved to Entra ID, and the org itself now lives in Dynamics 365 online on Dataverse. The integrations we rewrote call the Dataverse Web API with app registrations and OAuth. Reports are FetchXML or Power BI, and Exchange Online handles server-side sync. 01 · USERS AND IDENTITY 02 · DYNAMICS 365 ONLINE 03 · INTEGRATIONS AND REPORTING sign in Entra ID token registered in Web API calls FetchXML queries server-side sync Sales and service users browser · Outlook Ex Entra ID SSO · MFA D365 Dynamics 365 online Dataverse Plugins in sandboxisolation supported customizations Integrations Dataverse Web API · OAuth PP FetchXML and PowerBI reports without SQLaccess Exchange Online server-side sync
Read the diagram as text
  1. Sales and service users → Entra ID: sign in
  2. Entra ID → Dynamics 365 online: Entra ID token
  3. Plugins in sandbox isolation → Dynamics 365 online: registered in
  4. Integrations → Dynamics 365 online: Web API calls
  5. Dynamics 365 online → FetchXML and Power BI: FetchXML queries
  6. Dynamics 365 online → Exchange Online: server-side sync
results

What the client got

What changed for the client once the work was done. Described, not scored: we don't publish client figures.

  1. result 01

    Users sign in with Entra ID

    Each on-premises user now has an Entra ID account. AD FS claims-based sign-in is gone, and security roles and business units were settled before the first test migration ran.

  2. result 02

    Reports run on FetchXML or Power BI

    SQL-based SSRS reports were converted to FetchXML or rebuilt in Power BI, so changing a report no longer needs a DBA with database access.

  3. result 03

    Integrations authenticate with OAuth app registrations

    We moved every integration off Windows credentials. They call the Dataverse Web API through app registrations and OAuth now.

  4. result 04

    Email sync runs through Exchange Online

    We moved server-side sync to Exchange Online and tested it during the sandbox rehearsal, together with forms, plugins and reports.

  5. result 05

    No CRM servers left to patch

    Key users signed off on the production migration, the agreed read-only period ran out, and then the on-premises CRM servers and their SQL Server instance were switched off.

what can go wrong

Risks we plan for

  1. Unsupported customizations block the database move

    Microsoft's program puts fixing unsupported customizations and SQL-level changes on the customer or partner. Finding them late stalls the migration in Lifecycle Services.

  2. Reports that can't run online

    SQL-based SSRS reports don't run in Dynamics 365 online. Each one is rebuilt in FetchXML or moved to Power BI, which takes longer than teams expect when there are hundreds.

  3. Integrations tied to Windows authentication

    ETL jobs, portals and line-of-business apps that sign in with domain accounts stop working on cut-over day unless they're moved to OAuth first.

  4. Storage capacity surprises

    Years of audit history, email attachments and notes count against licensed Dataverse capacity. Data that nobody reads should be archived before the move, not after the bill.

ai in this move

Where AI helps, and where it needs guardrails

Online, Copilot in Dynamics 365 Sales summarizes records and drafts emails, using only data the signed-in user can see. Microsoft is shifting that to the Sales agent in Microsoft 365 Copilot. An agent or MCP server that reads or writes CRM data through Dataverse should run as its own application user, with a security role limited to the tables it needs. Audit its writes like any other integration's.

forward deployed engineers →
you keep

What you're left with

We write these for your setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • inventory01

    Customization inventory with a supported, rewrite or retire decision per item

    yours to keep
  • inventory02

    User mapping from Active Directory accounts to Entra ID

    yours to keep
  • report03

    FetchXML or Power BI replacements for SQL-based reports

    yours to keep
  • tests04

    Rehearsal migration log with timings and defects found

    yours to keep
  • runbook05

    Integration cut-over plan with new app registrations and OAuth settings

    yours to keep
  • runbook06

    Production runbook with go and no-go checkpoints

    yours to keep
talent and delivery · dynamics 365 online on dataverse

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
01We're on Dynamics CRM 2016. Can we go straight online?

Not through Microsoft's OP2OL tooling, which needs version 9.0 or later. The usual route is an in-place upgrade to 9.1 first, then the database migration. If the 2016 system is heavily customized, a fresh online build with a data migration can be cheaper, and we compare both.

02How long is the production downtime?

It depends on database size, attachment volume and how much post-migration checking the business wants before it opens the system. The rehearsal run in a sandbox gives a measured number, and we plan the weekend around that.

03Do our plugins work online?

Usually. Register them in sandbox isolation and make sure they don't reach into the file system, the registry or SQL directly. Plugins that call internal services are the tricky ones, since those services may have to go behind an API gateway or Azure Relay.

04Do you also move the reports to Power BI?

For the analysis reports, yes. The operational ones people print straight off a record tend to stay in Dynamics 365 as FetchXML SSRS reports.

sources 3 sources linked last checked 2026-10-20 content fingerprint da7d82a2
  1. 01Microsoft Lifecycle: Customer Engagement apps 9.x (on-premises)learn.microsoft.com ↗
  2. 02Microsoft Learn: Dynamics CRM on-premises to online migration (OP2OL) overviewlearn.microsoft.com ↗
  3. 03Microsoft Learn: Copilot in Dynamics 365 Sales overviewlearn.microsoft.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Planning this move?

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it