CRM migration

Migrate from Function 365 to Microsoft Dynamics 365 Sales

Field-level mapping, validation, and rollback between Function 365 and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .

Function 365 logo

Function 365

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

100%

10 of 10

objects map 1:1 between Function 365 and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

72–96 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Function 365 business data lives across Microsoft 365 applications — Outlook contacts, Exchange email threads, Teams meeting records, and SharePoint document libraries. Dynamics 365 Sales organizes equivalent data as Contacts, Accounts, Leads, Opportunities, and Activities within Microsoft Dataverse. The migration carries everything stored natively in your Microsoft 365 environment into Dynamics 365 Sales standard entities, with custom fields created for any Function 365 properties that lack a direct Dataverse equivalent. Email history migrates as Activity records tied to Contact or Account lookups; calendar meetings become Events with original start/end times and attendee lists preserved; SharePoint file references migrate as Notes with external links intact. Owner resolution matches Microsoft 365 user emails to Dynamics 365 Sales user records so activity attribution carries across. Workflows, Power Automate flows, and Teams channel configurations do not migrate — they require recreation in the destination environment. The migration mechanism uses Microsoft Graph API for read access to source data and Dataverse Web API for writes to Dynamics 365 Sales, with bulk API batches used for record sets exceeding 500 rows.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Function 365 logo

Function 365

What's pushing teams away

  • Functional Medicine + private-healthcare niche means general medical practices, NHS-primary settings, or non-UK clinics often have a tighter fit with Cliniko, Pabau, or country-specific PMS.
  • Implementation requires a paid specialist session (£55/session) plus optional onsite training (£350) — small clinics that expected pure self-serve may find the onboarding gate frustrating.
  • Smaller installed base than Cliniko, Pabau, or Halaxy means fewer integrations, fewer third-party services, and less peer benchmarking for procurement.
  • No public API documentation surfaced in research; integration with lab vendors, payment processors, or downstream EHRs may require vendor coordination.
  • Solo Practitioner tier (£132/month) is steeper than freemium-style PMS competitors; smallest practices may find the entry price hard to justify against single-clinician alternatives.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How Function 365 objects map to Microsoft Dynamics 365 Sales

Each row shows how a Function 365 object lands in Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Function 365

Azure AD User

maps to

Microsoft Dynamics 365 Sales

SystemUser

1:1
Fully supported

Microsoft 365 user accounts map 1:1 to Dynamics 365 Sales SystemUser records. Matching happens on UPN ([email protected]). Unmatched users are flagged before migration — either invited to Dynamics 365 first or their records assigned to a fallback owner during the load phase.

Function 365

Exchange Online Contact

maps to

Microsoft Dynamics 365 Sales

Contact

1:1
Fully supported

Contacts extracted from Exchange Online GAL and user mailboxes map to Dataverse Contact records. The primary email address becomes Contact.Email; phone numbers, job titles, and company affiliations translate to standard Contact fields. Original Azure AD object IDs preserved as a custom field for delta-sync tracking.

Function 365

Exchange Online Mailbox Folder

maps to

Microsoft Dynamics 365 Sales

Email (Activity)

1:1
Fully supported

Email messages from Exchange Online mailboxes are parsed into Dynamics 365 Sales Activity (email) records. Each email gets a regarding object lookup to the matching Contact or Account. Sender, recipients, subject, body (HTML), and timestamp map to corresponding Dataverse activity fields. Large inline attachments extracted to SharePoint and linked via annotation records.

Function 365

Outlook/Teams Calendar Event

maps to

Microsoft Dynamics 365 Sales

Event

1:1
Fully supported

Calendar appointments from Outlook and Teams meetings migrate as Dataverse Event records. Start time, end time, location, subject, body, and attendee list map directly. Regarding object links to the related Contact or Account. Recurring series expanded into individual event records unless Dynamics 365 Sales calendar sync is enabled post-migration.

Function 365

SharePoint Online Document

maps to

Microsoft Dynamics 365 Sales

Annotation (Note)

1:1
Fully supported

SharePoint file attachments associated with contacts or accounts become Dataverse Annotation records. We preserve the original SharePoint URL as an external link field on the annotation so documents remain accessible from their original storage location. File content can optionally be re-hosted in Dynamics 365 Sales connected SharePoint if your admin specifies that preference.

Function 365

Microsoft 365 Group / Distribution List

maps to

Microsoft Dynamics 365 Sales

Team

1:1
Fully supported

Microsoft 365 Groups and distribution lists have no direct Dynamics 365 Sales equivalent. We migrate group membership as a custom field on Contact or Account for reference. The team structure and queue assignments require manual planning by your Dynamics 365 admin post-migration.

Function 365

Microsoft 365 extended user attributes

maps to

Microsoft Dynamics 365 Sales

Custom columns on SystemUser

1:1
Fully supported

Function 365 extended user properties stored in Azure AD custom attributes (onPremisesExtensionAttributes, schema extensions) migrate as custom Dataverse columns on SystemUser. Your admin specifies which attributes to include — we create the __c fields and load values during the user migration phase.

Function 365

OneDrive for Business files

maps to

Microsoft Dynamics 365 Sales

Annotation (Note)

1:1
Fully supported

OneDrive files linked to contacts or deals require admin authorization for Graph API access. We create Annotation records with the OneDrive file URL preserved as an external link. If your organization prefers in-Dynamics storage, files can be uploaded to the connected SharePoint site during migration.

Function 365

Teams chat messages (if scoped)

maps to

Microsoft Dynamics 365 Sales

Custom Activity table

1:1
Fully supported

Teams chat messages lack a standard Dynamics 365 Sales activity type. If scoped for migration, chat threads with CRM-relevant context are stored in a custom Dataverse table with Contact/Account lookups. This requires custom table creation in your Dynamics 365 environment before the migration run.

Function 365

Microsoft To Do / Planner tasks

maps to

Microsoft Dynamics 365 Sales

Task (Activity)

1:1
Fully supported

Tasks from Microsoft To Do or Planner associated with contacts or accounts migrate as Dataverse Task activity records. Task subject, due date, priority, and status map to corresponding activity fields. Open tasks carry over; completed tasks optionally included based on your retention requirements.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Function 365 logo

Function 365 gotchas

High

AI-assisted notes are proprietary — verify clinical-record export coverage

High

NHS Number format must be preserved exactly

Medium

Implementation specialist time is paid extra at £55/session

Medium

GDPR consent timestamps are regulatory artefacts

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • Microsoft Graph API delegation scopes require admin consent before email and calendar read

    Accessing mailbox contents via Microsoft Graph demands Application or Delegate permissions scoped to Mail.Read, Calendar.Read, and Contacts.Read. In tenant-scoped migrations, an admin must grant admin-consent to the FlitStack Azure app registration before Graph can enumerate email threads and calendar events. If your tenant has Conditional Access policies blocking third-party app access to Exchange, a fallback import method using PST exports or Exchange Online PowerShell may be required — this adds manual steps and extends the project timeline.

  • SharePoint file migration requires explicit consent and site-relative URL remapping

    SharePoint document migration under Dynamics 365 Sales uses the connected SharePoint environment as the target. If your Function 365 SharePoint sites are in a different tenant or the site URL structure differs from the Dynamics 365 Sales SharePoint configuration, file URLs stored in Annotation records will point to the original source. FlitStack flags URL mismatches and offers re-hosting (downloading and uploading to the Dynamics-connected SharePoint) as a billable add-on, or preserves the original URL as an external document reference field on the Annotation.

  • Azure AD Object ID matching assumes UPN stability across the migration

    Dynamics 365 Sales SystemUser matching to Microsoft 365 users relies on UserPrincipalName (UPN) or Azure AD Object ID. If your organization undergoes a tenant domain change (e.g., merging after an acquisition) or renames UPNs post-migration, owner lookups on migrated Activity records break. We recommend completing UPN normalization before scheduling the migration window. If UPNs have already changed, a post-migration owner re-mapping script can correct affected records. This script compares the Azure AD Object ID stored during migration against current Azure AD user records and updates the owner references in Dynamics 365 Sales accordingly.

  • Teams chat messages have no standard Dynamics 365 Sales entity and require custom table setup

    Teams channel messages and direct chats lack a built-in Dynamics 365 Sales activity type. Storing Teams chat history requires pre-creating a custom Dataverse table (e.g., TeamsChatMessage) in your Dynamics 365 Sales environment with columns for message text, sender, timestamp, and regarding object lookups. This custom table must be provisioned before the migration run begins. If your compliance requirements demand preserving Teams chat for CRM audit purposes, budget additional configuration time for the custom table schema.

  • Email body HTML rendering varies between Exchange Online and Dataverse activity format

    Microsoft Graph returns email body content as HTML or plain text depending on the prefer header. Dynamics 365 Sales Email activity description field accepts HTML but applies its own sanitization that can alter table layouts and embedded image references. We normalize email body content to a safe HTML subset during migration, preserving text formatting, links, and inline images where supported. Complex email templates with external CSS or VML elements may lose styling fidelity — this is documented in the pre-migration diff output.

Migration approach

Six steps for a successful Function 365 to Microsoft Dynamics 365 Sales data migration

  1. Assess Microsoft 365 data inventory and Graph API access

    We inventory your Microsoft 365 environment: enumerate mailboxes, SharePoint sites, Teams channels, and Azure AD users. Admin consent is requested for Microsoft Graph application permissions. We document mailbox sizes, attachment counts, and SharePoint library structures to size the migration scope. This phase produces a data inventory CSV and a custom field creation plan for any Function 365 extended properties. The inventory also identifies any distribution groups or Microsoft 365 teams that may require special handling during owner resolution.

  2. Provision Dataverse custom tables and columns in Dynamics 365 Sales

    Before loading data, your Dynamics 365 Sales admin (or our team via a solution file) creates the custom SystemUser columns, Annotation URL fields, and any custom activity tables needed for Teams chat history. We deliver a solution XML package that your admin imports into the target environment, avoiding manual form configuration errors. This step runs in parallel with data extraction preparation.

  3. Extract and transform Microsoft 365 data via Microsoft Graph

    We pull contact records, email messages, calendar events, SharePoint file metadata, and OneDrive references using Microsoft Graph API calls. Data is transformed to match Dataverse column names, data types, and pick-list value formats. Emails are parsed into activity records with Contact lookups resolved via email address matching. Large email attachments are extracted to a staging Azure Blob for SharePoint re-hosting or external URL preservation.

  4. Run sample migration with field-level diff

    A representative slice of records — typically 200–500 contacts, 1,000 email activities, 200 calendar events — migrates first. We generate a field-level diff comparing source Graph API output against the Dataverse records, verifying Contact.Email resolution, ActivityRegarding lookups, and Event timing accuracy. You review the diff and approve before the full run commits. Adjustments to mapping logic are made and a second sample validates the fixes.

  5. Execute full migration with delta-pickup window

    The full data set loads via Dataverse bulk API with batch sizes tuned to avoid throttling. A delta-pickup window (typically 24–48 hours) captures records modified in Microsoft 365 during the cutover window. All operations are logged to an audit table in Dataverse. If reconciliation identifies missing or mismatched records, one-click rollback reverts the target to its pre-migration state while your team continues working in Microsoft 365.

Platform deep dives

Context on both ends of the pair

Function 365 logo

Function 365

Source

Strengths

  • Integrated PMS (booking, notes, prescriptions, billing, lab orders, telehealth) in one product.
  • GDPR and HIPAA support built into the data model.
  • Transparent per-licence published pricing on the vendor shop.
  • AI-assisted clinical note generation reduces practitioner admin time.
  • Tiered licence pricing rewards larger practices with lower per-seat cost.

Weaknesses

  • Niche fit (UK private healthcare + Functional Medicine) — not suited for NHS-primary or non-UK general practice.
  • Implementation specialist time billed separately (£55/session) plus £350 onsite training.
  • Smaller installed base than Cliniko/Pabau means thinner integration ecosystem.
  • No public API documentation visible in research.
  • Solo Practitioner price (£132/month) higher than some freemium-style PMS competitors.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Function 365 and Microsoft Dynamics 365 Sales .

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Function 365 and Microsoft Dynamics 365 Sales .

  • Object compatibility

    A

    All 8 core objects map 1:1 between Function 365 and Microsoft Dynamics 365 Sales .

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Function 365: Not publicly documented.

  • Data volume sensitivity

    B

    Function 365 doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Function 365 to Microsoft Dynamics 365 Sales migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Function 365 to Microsoft Dynamics 365 Sales data migrations

Answers to the questions buyers ask most during Function 365 to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Function 365 to Microsoft Dynamics 365 Sales migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Function 365 to Dynamics 365 Sales migrations complete in 72–96 hours of clock time for under 25,000 contacts and 100,000 email activity records. Heavier setups with 500,000+ contacts, extensive SharePoint attachment libraries, or Teams chat scoping extend to 10–14 days. The longest planning step is typically obtaining Microsoft Graph admin consent and provisioning custom Dataverse tables before the data load begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Function 365.
Land in Microsoft Dynamics 365 Sales , intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day