CRM migration

Migrate from Nookal to Microsoft Dynamics 365 Sales

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

Nookal logo

Nookal

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

100%

10 of 10

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

Complexity

BStandard

Timeline

72–96 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Nookal and Dynamics 365 Sales serve fundamentally different use cases — Nookal is a practice management system built for allied health clinics with appointment scheduling, patient billing, and Medicare claiming at its core, while Dynamics 365 Sales is a CRM built around lead management, opportunity pipelines, and sales automation. The migration therefore involves more than field renaming: it requires a structural translation of the data model itself. Practitioners (the primary actors in Nookal) map to Dynamics 365 Sales Users; patients map to Contacts (or Leads for prospects); appointments and sessions map to Activities (Tasks and Events) with practitioner ownership preserved; and invoices — which have no native equivalent in Dynamics 365 Sales — require a custom table created in Dataverse before data lands. FlitStack AI sequences the migration through the Dynamics 365 Sales Web API and Bulk API, resolving practitioner email addresses to User records, establishing Contact-to-Account relationships, and mapping appointment timestamps and location data. Automations, Medicare item codes, and clinical SOAP notes do not migrate and are surfaced in the pre-migration plan as manual-rebuild items. The audit log captures every operation, and a 24–48 hour delta-pickup window captures any records modified in Nookal during the cutover window so Dynamics 365 Sales reflects the final state at go-live.

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

Nookal logo

Nookal

What's pushing teams away

  • Feature scope is narrow; practices needing patient engagement beyond reminders, social messaging, or AI-powered intake chatbots must layer in additional tools.
  • Limited accounting depth — Nookal handles invoicing and payments but does not produce completed accounting records on its own, requiring Xero or QuickBooks to close the loop.
  • Absence of a documented public API means practices with complex custom integrations or developer-dependent workflows hit a ceiling and must migrate manually.
  • Patient engagement features lag competitors; no WhatsApp or social channel integration and no native AI chatbot for handling patient enquiries at scale.
  • Growing practices report outgrowing the platform's customisation surface when they need advanced custom objects, complex automation, or multi-location scalability beyond what Nookal provides.

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 Nookal objects map to Microsoft Dynamics 365 Sales

Each row shows how a Nookal 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.

Nookal

Patient

maps to

Microsoft Dynamics 365 Sales

Contact + Account

1:1
Fully supported

Nookal patients map to D365 Sales Contacts. The patient's primary clinic or referring practitioner creates an Account record first; the Contact links via the Parent Customer ID (AccountId). Patient date of birth, medicare_number, and NHS_number (if applicable) migrate as custom fields since D365 Sales has no native health-ID storage. FlitStack AI creates the Account record from the patient's associated clinic or referring location before creating the Contact so the AccountId foreign key resolves correctly.

Nookal

Practitioner

maps to

Microsoft Dynamics 365 Sales

User

1:1
Fully supported

Practitioners are the primary actors in Nookal — they own appointments, clinical notes, and billing. They map directly to D365 Sales Users. practitioner.name becomes Full Name on the User record; practitioner.email becomes User Name; practitioner.role or specialty becomes a custom field (Specialty__c). FlitStack AI resolves each practitioner by email against existing D365 Sales Users before migration; unmatched practitioners are flagged so they can be provisioned in D365 before the cutover window opens. Practitioner Location associations migrate as a custom field (Location_ID__c) on the User record.

Nookal

Appointment / Session

maps to

Microsoft Dynamics 365 Sales

Task / Event (Activity)

1:1
Fully supported

Each Nookal appointment maps to a D365 Sales Task (for general sessions) or Event (for calendar-scheduled appointments). appointment.start_time and end_time map to ScheduledStart / ScheduledEnd on the Event; appointment.notes map to Description; practitioner_id resolves to OwnerId by email match. The Nookal appointment ID is stored as Appointment_ID__c for traceability and delta-run de-duplication. The patient contact links via the Regarding (regardingobjectid) lookup on the Activity record.

Nookal

Invoice

maps to

Microsoft Dynamics 365 Sales

Custom Table: Invoice (Dataverse)

1:1
Fully supported

D365 Sales has no native invoice entity. FlitStack AI creates a custom Invoice table in Dataverse with fields: Invoice_Number__c (text), Invoice_Date__c (datetime), Total_Amount__c (currency), Status__c (optionset: Paid / Unpaid / Overdue), and Patient__c (lookup to Contact). Invoice line items are stored in a second custom table (Invoice_Line_Item__c) linked to the Invoice record. Medicare item codes on invoices are preserved in the line item table as Item_Code__c for reference — they have no D365 Sales equivalent and must be manually reconciled post-migration.

Nookal

Clinical Note / SOAP Note

maps to

Microsoft Dynamics 365 Sales

Custom Table: Clinical_Note (Dataverse)

1:1
Fully supported

Nookal clinical notes contain subjective, objective, assessment, and plan sections tied to a specific appointment. D365 Sales has no native clinical documentation entity. FlitStack AI creates a Clinical_Note__c custom table with fields: SOAP_Subjective__c, SOAP_Objective__c, SOAP_Assessment__c, SOAP_Plan__c (all text), Patient__c (lookup to Contact), Appointment_ID__c (text for reference), Created_Date__c (datetime to preserve original timestamp), and Practitioner__c (lookup to User). Each note is created after the related Contact and Activity records exist to satisfy the lookup foreign keys.

Nookal

Medicare Claim

maps to

Microsoft Dynamics 365 Sales

No Equivalent

1:1
Fully supported

Nookal Medicare and DVA claiming records — including item codes, bulk-billing flags, and claiming status — have no native equivalent in D365 Sales. FlitStack AI preserves Medicare item codes and claiming data as a custom field block (Medicare_Claim__c JSON blob or individual fields) on the Invoice record for reference, but Medicare claiming must be rebuilt separately using D365 Sales custom tables or an integration with Australian claiming software. This is surfaced explicitly in the pre-migration plan as a manual-rebuild item.

Nookal

Location

maps to

Microsoft Dynamics 365 Sales

Custom Field: Location_ID__c on User + Contact

1:1
Fully supported

Nookal supports multiple clinic locations with practitioner assignment per location. D365 Sales has no native multi-location structure. FlitStack AI creates a Location_ID__c custom field on both the User (for practitioner location) and Contact (for patient location) records. If the clinic has fewer than 5 locations, a Territory__c custom pick-list is used instead of a text field for cleaner reporting segmentation.

Nookal

Payment / Receipt

maps to

Microsoft Dynamics 365 Sales

Opportunity Product (or Custom Table)

1:1
Fully supported

Nookal payments against invoices map to the D365 Sales Invoice custom table (Payment_Status__c updated to Paid) or, if payments need to be tracked against cases, as Opportunity Product records tied to the relevant Contact's Case opportunity. Payment date, amount, and payment method are preserved as custom fields. Unallocated receipts are flagged in the migration report for manual resolution.

Nookal

Referral Source

maps to

Microsoft Dynamics 365 Sales

Custom Field on Contact: Referral_Source__c

1:1
Fully supported

Nookal tracks where patients were referred from (GP referral, self-referral, etc.). D365 Sales has no native referral-source field on Contact. FlitStack AI creates a Referral_Source__c custom pick-list field on the Contact object and maps each Nookal referral value to the corresponding pick-list value. Unknown or unmapped values are preserved as text in a secondary field (Referral_Source_Other__c) for admin review.

Nookal

Appointment Type / Service

maps to

Microsoft Dynamics 365 Sales

Custom Field: Service_Type__c on Task / Event

1:1
Fully supported

Nookal appointment types (Initial Consultation, Follow-Up, etc.) carry Medicare item codes and billing implications. D365 Sales Activities have no native service-type field. FlitStack AI creates a Service_Type__c custom pick-list on the Task/Event and maps Nookal appointment types. Where a service type implies a Medicare item code, the item code is stored in a companion field (Item_Code__c) on the Activity for downstream reconciliation.

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.

Nookal logo

Nookal gotchas

High

Medicare 2.0 migration deadline is hard-gated

High

No public API forces reliance on built-in exports

Medium

Custom clinical note templates are account-specific

Medium

Medicare claiming groups tied to Provider Numbers restrict bulk migrations

Medium

Accounting sync does not export raw ledger data

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

  • Clinical SOAP notes have no native D365 Sales entity — custom table setup required before data lands

    Nookal SOAP notes (subjective, objective, assessment, plan) are first-class data tied to appointments and practitioners. Dynamics 365 Sales has no clinical documentation entity — the entire SOAP structure must be modeled as a custom Clinical_Note__c Dataverse table with SOAP_Subjective__c, SOAP_Objective__c, SOAP_Assessment__c, and SOAP_Plan__c text fields, plus lookups to Contact and User. If this table is not created before migration, clinical note records cannot be linked to the Contact and User records that must exist first as foreign-key targets. FlitStack AI delivers the Dataverse table creation plan as a pre-migration deliverable so the schema is ready before any data loads.

  • Medicare item codes and DVA claiming flags have no D365 Sales equivalent and must be manually rebuilt

    Nookal stores Medicare item codes, bulk-billing flags, and DVA claiming status per appointment and invoice — this is Australian healthcare-specific billing data with no native equivalent in Dynamics 365 Sales. FlitStack AI preserves item codes as reference-only custom fields (Item_Code__c) on the Invoice and Activity records, but the claiming workflow itself cannot migrate. Any automated Medicare/DVA submission logic that existed in Nookal must be rebuilt using D365 Sales custom tables and Power Automate flows after go-live. This limitation is documented in the pre-migration plan and is flagged as a manual-rebuild scope item requiring a Medicare-specific integration review.

  • D365 Sales has no native multi-location structure — location must be modeled as a custom field on every entity

    Nookal supports multiple clinic locations with practitioner assignment per location, and patients may be treated across locations. Dynamics 365 Sales has no native multi-location entity and no native way to segment Contacts, Activities, or Users by clinic location. FlitStack AI creates a Location_ID__c custom text field on the User, Contact, Task, and Event entities, and a companion Territory__c pick-list if fewer than five locations exist for cleaner reporting. However, location-based access controls (so practitioners only see their own location's patients) require D365 Sales Security Roles to be scoped by Location_ID__c values — this is a post-migration admin configuration step.

  • Practitioner-to-User email resolution is a hard dependency — appointments cannot assign owners before Users are provisioned

    Nookal practitioners are the owners of appointments, clinical notes, and billing records. In D365 Sales, every Activity record requires an OwnerId pointing to a SystemUser record. If a Nookal practitioner has no corresponding D365 Sales User (i.e., the email address does not match an existing User), FlitStack AI cannot assign the Activity owner and the record is flagged for manual resolution. Unresolved owners cause the migration to stall on the Activity step because D365 Sales enforces the foreign-key constraint. All practitioners must be provisioned in D365 Sales (with the same email address used in Nookal) before the Activity migration step begins.

  • D365 Sales Bulk API concurrent-request limits may throttle large appointment migrations

    D365 Sales enforces concurrent request limits per environment (approximately 4–8 concurrent requests depending on license tier and Dataverse capacity). A Nookal migration with 100,000+ appointments hitting D365 Sales simultaneously will encounter 412 ConcurrentRequestsLimitExceeded responses. FlitStack AI implements request queuing with exponential backoff, pacing appointment writes to stay within the concurrent-request allocation. For migrations exceeding 50,000 Activities, FlitStack AI recommends scheduling during off-peak hours and splitting the migration into batches of 10,000 records with 15-minute cool-down intervals to avoid throttling.

Migration approach

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

  1. Audit Nookal data export and map to D365 Sales schema

    FlitStack AI exports all Nookal records via the platform's API or CSV export — patients, practitioners, appointments, invoices, clinical notes, referral sources, and locations. We then audit the export against D365 Sales's standard schema (Contact, Account, Task, Event) and identify every Nookal object that requires a Dataverse custom table or custom field (Invoice, Clinical_Note, Medicare_Claim, Location_ID__c, Specialty__c). The schema setup plan is delivered to your D365 Sales admin before any data is moved so the custom tables and fields exist in Dataverse before foreign-key dependencies are resolved.

  2. Provision practitioners as D365 Sales Users and validate email resolution

    Practitioners in Nookal map to D365 Sales Users. FlitStack AI runs an email-resolution pass — each practitioner email is matched against existing D365 Sales Users by internalemailaddress. Any practitioner without a matching User is flagged in a pre-migration report with the action required: invite the practitioner to D365 Sales, or assign them a fallback User. No Activity record can be created without a valid OwnerId, so this step is a hard gate. Once all practitioners are confirmed as D365 Sales Users, the team proceeds to Account and Contact migration.

  3. Migrate Accounts, Contacts, and Custom Patient Fields first

    D365 Sales requires Account records to exist before Contacts can be saved with a Parent Customer lookup, and Contacts must exist before Tasks can reference them as Regarding. FlitStack AI sequences the migration: clinic or business entities first (as Accounts), then patients as Contacts with Medicare_Number__c, Health_Fund__c, and Referral_Source__c custom fields populated. Nookal patient IDs are stored as Source_System_ID__c for traceability. If a patient has no associated clinic, a default 'Unassigned Clinic' Account is created and linked to prevent null-AccountId errors during migration.

  4. Run a sample migration with field-level diff across all record types

    A representative slice — typically 100–500 records spanning patients, practitioners, appointments, invoices, and clinical notes — migrates first against a D365 Sales sandbox or the production environment (depending on your preference). FlitStack AI generates a field-level diff report comparing source values against destination values for every mapped field, including custom fields on the Dataverse Invoice and Clinical_Note tables. You verify that practitioner ownership resolved correctly, Medicare item codes are preserved, SOAP notes landed in the right custom fields, and appointment timestamps match the original Nookal records. No full migration commit proceeds until you approve the sample diff.

  5. Execute full migration with scoped read access and delta-pickup window

    With sample approved, FlitStack AI runs the full migration against D365 Sales in batches of up to 10,000 records with request throttling to respect D365 Sales concurrent-request limits. During the migration, your team continues working in Nookal with full access — FlitStack AI uses scoped read access only and does not modify Nookal records. A delta-pickup window of 24–48 hours after the full migration commits captures any appointments, invoices, or patient updates made in Nookal during the cutover. Delta records are reconciled against Source_System_ID__c to avoid duplicate creation.

  6. Deliver audit log, rollback plan, and manual-rebuild checklist

    FlitStack AI delivers a complete audit log covering every record created, updated, or skipped during migration with source Nookal ID, D365 Sales record ID, and operation timestamp. If reconciliation against your Nookal export reveals discrepancies, one-click rollback reverts all D365 Sales changes to the pre-migration state so the team can investigate and re-run. A separate manual-rebuild checklist itemizes the objects that cannot migrate automatically: Nookal workflows and automations, Medicare claiming submission logic, custom Nookal integrations, and any D365 Sales Security Role scoping required for location-based access control.

Platform deep dives

Context on both ends of the pair

Nookal logo

Nookal

Source

Strengths

  • Per-practitioner pricing scales cost-effectively for small-to-mid allied health clinics with one to ten practitioners.
  • Native Medicare and DVA Online Claiming 2.0 eliminates the need for a separate claiming middleware for Australian health practices.
  • Accounting sync with Xero and QuickBooks keeps financial records up to date without manual re-entry.
  • Built-in diary, clinical notes, and practice reporting cover the core allied health workflow in a single platform.
  • Australian-focused product design includes My Health Record integration and Australian Immunisation Register support.

Weaknesses

  • No documented public REST API limits programmatic data extraction and makes automated migration more complex.
  • Accounting depth is shallow; Nookal handles invoicing and payments but relies on Xero or QuickBooks for completed financial records.
  • Feature set is narrower than multi-feature competitors; practices needing patient engagement, AI chatbots, or social messaging must layer in additional tools.
  • Custom field definitions and clinical note templates are not exposed in a public schema, requiring manual discovery during scoping.
  • Integration ecosystem beyond Xero, QuickBooks, and Medicare claiming is limited compared to larger practice management platforms.
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. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

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

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Nookal: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Nookal 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 Nookal to Microsoft Dynamics 365 Sales data migrations

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

Can't find your answer?

Walk through your Nookal 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 Nookal-to-Dynamics 365 Sales migrations complete within 72–96 hours of clock time for setups with fewer than 25,000 records and under 10 practitioners. Larger migrations — 200,000+ records with complex Dataverse custom tables (Invoice, Clinical_Note) and multiple locations — extend to 7–14 days. The longest planning step is practitioner-to-User provisioning and custom table schema setup before data starts moving. FlitStack AI sequences Account and Contact migration before Activity migration so foreign-key dependencies resolve in the correct order.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Nookal.
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