CRM migration
Field-level mapping, validation, and rollback between Nookal and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Nookal
Source
Twenty CRM
Destination
Compatibility
10 of 10
objects map 1:1 between Nookal and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Nookal is a practice management system built for allied health: it organises work around clients, practitioners, appointments, clinical notes, and Medicare/DVA claiming workflows. Twenty CRM is a general-purpose CRM with standard objects for People, Companies, Opportunities, Notes, and Tasks. The migration maps Nookal's client-centric healthcare model into Twenty's contact-opportunity model, with several healthcare-specific fields requiring custom fields or manual rebuilds. We extract Nookal data via its export tools, transform each object against Twenty's schema, and load via Twenty's CSV import or GraphQL API. Clinical notes and treatment records from Nookal migrate as Notes attached to People records; appointment history becomes Tasks with original datetime stamps; and invoice data lands in custom fields on the Person record. Nookal's Medicare 2.0 claiming configuration—provider numbers, service types, AIR integration—has no native equivalent in Twenty's workflow engine. We export the claiming workflow definitions as a rebuild reference so your team can reconstruct them step-by-step in Twenty. The migration sequence follows Twenty's import-order requirement: Companies first, then People, then Opportunities, then custom objects.
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.
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 Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Nookal
Client (Nookal patient/contact record)
Twenty CRM
People
1:1Nookal Client records map directly to Twenty People. Client name, email, phone, address, and date of birth transfer as standard fields. Each client must have a primary practitioner assigned in Nookal, which we map to the Twenty Workspace Member (user) who owns the Person record after email-matching resolution.
Nookal
Client → practitioner assignment
Twenty CRM
People → WorkspaceMember relation
1:1Nookal stores practitioner-client relationships with role labels (e.g., 'primary physiotherapist'). We map these to a custom pick-list field (Practitioner_Role__c) on the Person record and set the Twenty workspace member as the record owner via email lookup. If a practitioner has no Twenty account, records attach to a designated fallback owner and the unresolved practitioner name is preserved in a custom text field.
Nookal
Appointment
Twenty CRM
Task
1:1Nookal appointments map to Twenty Tasks with the original start/end datetime preserved. The Task title carries the appointment type (e.g., 'Initial Consultation', 'Follow-up Treatment'). Task status maps from Nookal's appointment status: 'Completed' → Twenty Task 'completed'; 'Cancelled' → 'cancelled'; 'Scheduled' → 'open'. The assigned practitioner maps to the Task assignee via email resolution against Twenty workspace members.
Nookal
Appointment → service type
Twenty CRM
Task → custom field
1:1Nookal service types (e.g., 'Physiotherapy - Standard', 'Podiatry - Initial') have no direct Twenty equivalent. We create a custom select field (Service_Type__c) on the Task object and populate it with the Nookal service-type values. Your admin maps which service types are available in Twenty's Settings → Data Model before the full migration runs.
Nookal
Invoice
Twenty CRM
custom field on Person
1:1Nookal invoices carry total amount, status (paid/unpaid/overdue), and line items. Since Twenty has no native invoicing object, invoice data migrates as custom fields on the Person record: Invoice_Total__c (Number), Invoice_Status__c (Select: Paid/Unpaid/Overdue), and Invoice_Date__c (Date). Each invoice record in Nookal becomes a separate set of these fields, with invoice ID preserved in Invoice_ID__c for reconciliation.
Nookal
Medicare / DVA Claim
Twenty CRM
custom field on Person
1:1Nookal Medicare/DVA claiming records contain provider numbers, service dates, item codes, and claim status. These map to custom fields on Person: Claim_Status__c (Select), Claim_Item_Code__c (Text), Claim_Provider_Number__c (Text), and Claim_Date__c (Date). The claiming workflow itself (provider-number mapping, AIR integration) cannot migrate and is exported as a reference document for rebuild in Twenty's workflow builder.
Nookal
Clinical Note / Treatment Note
Twenty CRM
Note
1:1Nookal clinical notes and treatment records migrate as Twenty Notes attached to the Person record. The Note body carries the full clinical text. Original note datetime and practitioner author transfer as Note metadata fields. Note that clinical note content from Nookal may be PHI-sensitive—your team controls access permissions in Twenty via workspace roles.
Nookal
Location / Practice Site
Twenty CRM
custom field on Person or Company
1:1Nookal multi-location practices store location data per appointment and client. We create a custom select field (Practice_Location__c) on the Person record populated from Nookal's location list. If your Nookal setup stores practice details as separate records, those map to Twenty Companies with location address data.
Nookal
Xero / QuickBooks sync record
Twenty CRM
custom field on Person
1:1Nookal's Xero and QuickBooks integration links invoices to accounting records using external IDs. These IDs have no Twenty equivalent since Twenty lacks native accounting sync. We preserve the external accounting reference as a custom text field (Accounting_Reference__c) for manual reconciliation after migration.
Nookal
Custom fields defined by the practice
Twenty CRM
custom field matching type
1:1Nookal practices often add custom fields for health-specific data (e.g., 'NDIS Plan Number', 'Allergies', 'Emergency Contact'). Each custom field requires a matching Twenty custom field created in Settings → Data Model before import. We inventory all Nookal custom fields during the audit phase and deliver a field-creation checklist so your Twenty workspace is schema-ready before data lands.
| Nookal | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client (Nookal patient/contact record) | People1:1 | Fully supported | |
| Client → practitioner assignment | People → WorkspaceMember relation1:1 | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Appointment → service type | Task → custom field1:1 | Fully supported | |
| Invoice | custom field on Person1:1 | Fully supported | |
| Medicare / DVA Claim | custom field on Person1:1 | Fully supported | |
| Clinical Note / Treatment Note | Note1:1 | Fully supported | |
| Location / Practice Site | custom field on Person or Company1:1 | Fully supported | |
| Xero / QuickBooks sync record | custom field on Person1:1 | Fully supported | |
| Custom fields defined by the practice | custom field matching type1: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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Audit Nookal data export and inventory custom fields
We pull the full Nookal data export using your account's built-in export tools, covering clients, appointments, invoices, Medicare claims, clinical notes, and custom fields. During this phase we inventory every custom field your practice has added to Nookal and map each to a Twenty field type (text, number, select, date, etc.). We also extract your Medicare claiming workflow definition—provider numbers, item-code mappings, AIR settings—as a rebuild reference document. This audit produces the field-creation checklist your admin uses to pre-build the Twenty schema before any data is loaded.
Build Twenty workspace schema from the field-creation checklist
Before data moves, your Twenty admin creates all custom fields identified in the audit: Invoice_Total__c, Invoice_Status__c, Claim_Status__c, Service_Type__c, Practice_Location__c, NDIS_Plan_Number__c, Allergies__c, and any other practice-specific fields. We also create the pick-list options for select fields (e.g., invoice status values, service types, claiming statuses) so Twenty's import validation accepts the incoming values. This step must complete before the CSV import runs, because Twenty's CSV import creates records but not fields.
Resolve Nookal practitioners to Twenty workspace members
Nookal appointment history and Medicare claims carry practitioner assignments. We resolve each Nookal practitioner email against your Twenty workspace members list. Practitioners with matching Twenty accounts become Task assignees and Note authors. Practitioners without Twenty accounts are flagged before migration—your admin either invites them to Twenty first or we assign their records to a fallback owner. No appointment Task lands without a resolved assignee or a flagged fallback.
Run a sample migration with field-level diff on 100–500 records
A representative slice migrates first: 100–500 Nookal clients spanning multiple practitioners and locations, with their appointment history, invoices, and clinical notes. We generate a field-level diff comparing source values in Nookal against the loaded values in Twenty so you can verify that dates, statuses, amounts, and note content arrived correctly. Any mapping errors get corrected before the full run. This sample phase is also where you confirm that invoice data, Medicare claiming fields, and custom health fields landed in the right places.
Execute full migration with delta-pickup window and rollback plan
The full migration runs against Twenty using CSV import or the GraphQL API, sequenced in Twenty's required import order: Companies first (for location data), then People, then Tasks (for appointments). After the initial load, a delta-pickup window (typically 24–48 hours) captures any Nookal records modified or added during the cutover period so Twenty reflects Nookal's final state at go-live. We maintain a full audit log of every record operation. If reconciliation fails, one-click rollback reverts to the pre-migration state.
Platform deep dives
Nookal
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Twenty CRM.
Object compatibility
2 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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Nookal to Twenty CRM 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 Twenty CRM
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.