CRM migration
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
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
10 of 10
objects map 1:1 between Nookal and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
72–96 hours
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Source platform
Nookal platform overview
Scorecard, SWOT, gotchas, and pricing for Nookal.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Microsoft Dynamics 365 Sales
Contact + Account
1:1Nookal 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
Microsoft Dynamics 365 Sales
User
1:1Practitioners 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
Microsoft Dynamics 365 Sales
Task / Event (Activity)
1:1Each 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
Microsoft Dynamics 365 Sales
Custom Table: Invoice (Dataverse)
1:1D365 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
Microsoft Dynamics 365 Sales
Custom Table: Clinical_Note (Dataverse)
1:1Nookal 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
Microsoft Dynamics 365 Sales
No Equivalent
1:1Nookal 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
Microsoft Dynamics 365 Sales
Custom Field: Location_ID__c on User + Contact
1:1Nookal 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
Microsoft Dynamics 365 Sales
Opportunity Product (or Custom Table)
1:1Nookal 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
Microsoft Dynamics 365 Sales
Custom Field on Contact: Referral_Source__c
1:1Nookal 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
Microsoft Dynamics 365 Sales
Custom Field: Service_Type__c on Task / Event
1:1Nookal 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.
| Nookal | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Patient | Contact + Account1:1 | Fully supported | |
| Practitioner | User1:1 | Fully supported | |
| Appointment / Session | Task / Event (Activity)1:1 | Fully supported | |
| Invoice | Custom Table: Invoice (Dataverse)1:1 | Fully supported | |
| Clinical Note / SOAP Note | Custom Table: Clinical_Note (Dataverse)1:1 | Fully supported | |
| Medicare Claim | No Equivalent1:1 | Fully supported | |
| Location | Custom Field: Location_ID__c on User + Contact1:1 | Fully supported | |
| Payment / Receipt | Opportunity Product (or Custom Table)1:1 | Fully supported | |
| Referral Source | Custom Field on Contact: Referral_Source__c1:1 | Fully supported | |
| Appointment Type / Service | Custom Field: Service_Type__c on Task / Event1:1 | Fully supported |
Gotchas + challenges
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 gotchas
Medicare 2.0 migration deadline is hard-gated
No public API forces reliance on built-in exports
Custom clinical note templates are account-specific
Medicare claiming groups tied to Provider Numbers restrict bulk migrations
Accounting sync does not export raw ledger data
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Nookal
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Nookal and Microsoft Dynamics 365 Sales .
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Nookal: Not publicly documented.
Data volume sensitivity
Nookal doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Nookal to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Nookal
Other ways to arrive at Microsoft Dynamics 365 Sales
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.