CRM migration

Migrate from Function 365 to Freshsales

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

Function 365 logo

Function 365

Source

Freshsales

Destination

Freshsales logo

Compatibility

100%

13 of 13

objects map 1:1 between Function 365 and Freshsales.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Function365 (Microsoft Dynamics 365 CRM) stores contacts and accounts with a complex entity model that includes business units, security roles, and multiple custom entities with N:N relationships. Dynamics 365 also separates Leads from Contacts at the entity level, uses Opportunities for deals, and tracks activities as separate records with directional relationships. Freshsales consolidates these into four core modules — Leads, Contacts, Accounts, and Deals — with a simpler Contact Lifecycle Stage model and built-in activity tracking tied directly to records. We map your Dynamics 365 contacts to Freshsales Contacts, leads to Freshsales Leads, accounts to Freshsales Accounts, and Dynamics 365 Opportunities to Freshsales Deals. Custom fields from Dynamics 365 become Freshsales custom fields, and custom entities migrate as Freshsales custom objects via the developer platform. Dynamics 365 workflows built in Power Automate do not migrate — they require manual reconstruction in Freshsales Workflows. Owner resolution happens by email match against Freshsales users. We sequence the migration so foreign keys (AccountId on contacts, ContactId on deals) resolve correctly in the destination before records land.

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

Freshsales logo

Freshsales

What's pulling them in

  • Lowest barrier to entry among major CRMs — the free tier supports up to 3 users and includes core CRM functionality before committing to per-seat pricing.
  • Built-in chat, email, and phone reduce reliance on third-party integrations for basic sales communication and contact management.
  • Freddy AI contact scoring and deal insights are included on Pro plans at a lower price than comparable HubSpot tiers.
  • Kanban pipeline views across Contacts, Accounts, and Deals provide visual deal management without requiring custom configuration.
  • Integration with the broader Freshworks ecosystem (Freshdesk, Freshchat, Freshservice) reduces tool sprawl for teams already using Freshworks.

Object mapping

How Function 365 objects map to Freshsales

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

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

Function 365

Contact

maps to

Freshsales

Contact

1:1
Fully supported

Direct 1:1 mapping. Each Dynamics 365 Contact field—full name, email address, phone number, physical address, and job title—is transferred directly to the corresponding Freshsales Contact record. The migration also writes the Dynamics 365 contact GUID into a custom field (source_system_id) for traceability. Owner resolution occurs by matching the Dynamics 365 owner’s email address to an existing Freshsales user; unmatched owners are logged for manual assignment before the migration run.

Function 365

Lead

maps to

Freshsales

Lead

1:1
Fully supported

Direct 1:1 mapping. Active Dynamics 365 Leads (status New or Open) become Freshsales Leads, with the source Dynamics 365 GUID preserved in a custom field. Converted Dynamics 365 Leads trigger the creation of Freshsales Contact and Account records, copying the original lead creation date and any custom lead fields onto the new Contact. This conversion logic is defined in the migration plan and verified during the sample run.

Function 365

Account

maps to

Freshsales

Account

1:1
Fully supported

Direct 1:1 mapping. Each Dynamics 365 Account’s attributes—company name, website domain, industry code, employee count, and annual revenue—are written to the corresponding Freshsales Account record. The original Dynamics 365 Account GUID is saved as a custom field for cross‑reference, and the parent‑account hierarchy is either mapped to Freshsales Territory structures or flattened, depending on your configuration. Any missing parent references are flagged for manual review after the migration run.

Function 365

Opportunity

maps to

Freshsales

Deal

1:1
Fully supported

Direct 1:1 mapping. Each Dynamics 365 Opportunity becomes a Freshsales Deal, copying the deal name, amount, close date, and stage. The Dynamics 365 opportunity GUID is stored as a custom field for traceability, and the owner is resolved by email match to a Freshsales user. Pipeline assignment maps the source stage name to a Freshsales pipeline stage; any unmapped stages are flagged for configuration before the migration run.

Function 365

Product

maps to

Freshsales

Product

1:1
Fully supported

Direct 1:1 mapping. Dynamics 365 Product entries—product name, product ID, unit of measure, and associated price list—are transferred to Freshsales as Products, with the Dynamics 365 product GUID saved in a field for reference. The price‑list relationships are not automatically replicated; after migration, the Freshsales Product Catalog must be configured to re‑establish those pricing tiers. Any missing product categories are noted for manual assignment before the data set goes live.

Function 365

Email (Activity)

maps to

Freshsales

Sales Activity (Email)

1:1
Fully supported

Dynamics 365 Email activities are migrated as Freshsales Sales Activities of type Email, preserving the original send timestamp, subject line, body, sender and recipient addresses. The email appears on the timeline of the matching Freshsales record (Lead, Contact, Account, or Deal) based on the Dynamics 365 Regarding reference, and any file attachments are attached to the same timeline entry.

Function 365

Phone Call (Activity)

maps to

Freshsales

Sales Activity (Call)

1:1
Fully supported

Dynamics 365 Phone Call activities become Freshsales Call activities, preserving call duration, direction (inbound/outbound), subject, and outcome notes. The Dynamics 365 phone call GUID is stored in a custom field, and the activity is attached to the matching Freshsales record (Lead, Contact, Account, or Deal) using the source Regarding lookup. The original owner’s email is matched to a Freshsales user, and the original timestamp is retained.

Function 365

Task

maps to

Freshsales

Task

1:1
Fully supported

Dynamics 365 Tasks are transferred as Freshsales Tasks, mapping the subject, description, due date, priority, and status fields directly. The Dynamics 365 task GUID is saved in a custom field, and the owner is resolved by matching the source user email to a Freshsales user. Completed tasks carry over the completion timestamp to Freshsales’s task completion tracking, and any custom task fields are reproduced as Freshsales fields during the migration.

Function 365

Appointment (Activity)

maps to

Freshsales

Sales Activity (Meeting)

1:1
Fully supported

Dynamics 365 Appointment records become Freshsales Meeting activities, copying the start and end timestamps, location, organizer email, attendee list, and meeting notes into the corresponding Freshsales Meeting fields. The Dynamics 365 appointment GUID is stored in a custom field, and each meeting is attached to the timeline of the related Freshsales record (Contact, Account, or Lead) based on the source Regarding reference.

Function 365

Note / Annotation

maps to

Freshsales

Note

1:1
Fully supported

Dynamics 365 Note and Annotation records, including any file attachments stored as annotations, are transferred as Freshsales Notes on the timeline of the matching record (Lead, Contact, Account, or Deal). The note’s creation timestamp, author, and rich‑text body are preserved, and the Dynamics 365 annotation GUID is saved in a field for auditability. File attachments are imported as linked files to the Freshsales Note, preserving the file name and content.

Function 365

Custom Entity (Dynamics 365)

maps to

Freshsales

Custom Object (Freshsales)

1:1
Fully supported

Dynamics 365 custom entities transfer as Freshsales custom objects, with each entity’s attributes mapped to matching custom fields. For N:N relationship tables linking custom entities, the migration plan creates a Freshsales junction custom object (or custom relationship fields) to preserve the associations. Custom field data types, pick‑list values, and relationship cardinalities are documented in the pre‑migration schema report and validated before the data load.

Function 365

User / Owner

maps to

Freshsales

User (Freshsales)

1:1
Fully supported

Dynamics 365 User records cannot be imported directly into Freshsales; each platform has its own user identity store. The migration engine matches each Dynamics 365 User’s email address to an existing Freshsales user account, preserving the original owner on migrated records. Unmatched owners are flagged in a pre‑flight report and assigned to a designated fallback user, ensuring every record has a valid owner before migration commits.

Function 365

Lead Status

maps to

Freshsales

Lead Status

1:1
Fully supported

Dynamics 365 Lead Status pick‑list values—New, Open, Qualified, and Converted—are mapped directly to the corresponding Freshsales Lead Status labels. Any custom Lead Status values defined in Dynamics 365 are identified during the schema assessment and require a one‑to‑one value mapping in the migration plan before execution. The mapping ensures that the status displayed in Freshsales matches the original status from Dynamics 365, preserving reporting continuity for sales cycles.

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

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

Pair-specific challenges

  • Lead-to-Contact conversion state requires routing logic

    Dynamics 365 Leads that have been converted create linked Account and Contact records with a converted lead reference. Freshsales does not have a conversion link model — converted Dynamics 365 Leads land as separate Freshsales Contact and Account records. We detect the conversion by checking the 'converted' status on Dynamics 365 Leads and route them to the appropriate Freshsales modules while preserving the original lead creation date and lead status history as custom fields for reporting continuity.

  • Business unit hierarchy has no Freshsales equivalent

    Dynamics 365 CRM uses Business Units to scope security roles, users, and record visibility across organizational hierarchies. Freshsales does not have a Business Unit model — user management and access control are handled through user roles and profile permissions. When migrating records owned by users in different Dynamics 365 Business Units, we preserve the original owner assignment and flag any records that would require Freshsales Territory or team-based visibility rules to replicate the original access scope.

  • Custom entity N:N relationships need junction objects

    Dynamics 365 custom entities frequently employ N:N (many-to-many) relationship tables to associate records without placing a foreign key on either side. Freshsales custom objects natively support 1:N relationships, but N:N links between custom objects must be modeled using a junction custom object that holds the two foreign keys. During the migration planning phase, the engine scans every Dynamics 365 intersect entity, records its source and target custom objects, and auto‑generates the Freshsales junction object schema, including the required lookup fields and any additional attributes. This schema is validated in a test environment before the actual data migration runs, ensuring that all many‑to‑many associations are correctly reconstructed in Freshsales.

  • Opportunity Contact Roles require Freshsales Deal Contact mapping

    Dynamics 365 Opportunities can have multiple Contact records linked through Opportunity Contact Roles, each with a role name (Decision Maker, Evaluator, etc.). Freshsales Deals associate Contacts through the Deal's contact_person_id field or through manual association in the UI. When a Dynamics 365 Opportunity has more than one Contact Role, we map the primary contact to Freshsales Deal contact_person_id and surface the additional roles as a custom field or note for manual reassignment in Freshsales.

  • Dynamics 365 activity Regarding lookup may not map cleanly

    Dynamics 365 activities use the 'Regarding' field to link to any CRM entity (Contact, Account, Opportunity, Custom Entity). Freshsales Sales Activities attach to a specific record type (Lead, Contact, Account, or Deal) rather than a polymorphic 'Regarding' field. We disambiguate by matching the Regarding object's type to a Freshsales record type and attach the activity to that record. Activities on custom entity types without a Freshsales equivalent are attached to the parent Account record.

Migration approach

Six steps for a successful Function 365 to Freshsales data migration

  1. Assess Dynamics 365 schema and export structure

    FlitStack AI connects to your Dynamics 365 instance via the Web API to catalog all standard entities, custom entities, custom fields, and relationship metadata. We analyze the lead-to-contact conversion status, identify N:N relationship intersect entities, and inventory all active user accounts and their business unit assignments. The assessment produces a complete field-level inventory and flags any custom entities that need Freshsales custom object creation before migration data can land.

  2. Create Freshsales custom fields and custom objects

    Based on the schema assessment, we create all required Freshsales custom fields on the Lead, Contact, Account, and Deal modules. For Dynamics 365 custom entities, we create Freshsales custom objects via the Freshsales API and define the relationship structure (1:N or junction object). Custom pick-list fields receive the same value options as Dynamics 365 so value-mapping is ready before the migration run.

  3. Resolve owners by email match against Freshsales users

    We pull all User records from Dynamics 365, normalize each email address to a standard format, and then attempt an exact match against the email addresses of existing Freshsales user accounts. If a Dynamics 365 owner email does not correspond to any Freshsales user, the record is flagged in a pre‑flight report with a recommendation to either invite that user to Freshsales before the migration or assign a fallback owner for the duration of the import. This ensures that every record loaded into Freshsales has a resolvable owner and that ownership traceability from the source system is preserved.

  4. Migrate accounts and leads before contacts and deals

    Freshsales enforces referential integrity through the account_id foreign key, meaning Account records must be present before Contacts can be associated. The migration plan therefore orders the data load in three phases: first, all Account records are moved; second, Leads and Contacts are imported, with each Contact’s account_id field populated by looking up the corresponding Freshsales Account; third, Deals are loaded, populating both the account_id and contact_person_id lookups to link them to the correct Account and primary Contact. Only after all parent records are in place do we migrate Activities, ensuring that the Regarding‑to‑record linkage resolves without errors.

  5. Run sample migration with field-level diff

    A representative sample — typically 100–500 records spanning Leads, Contacts, Accounts, Deals, and Activities — is migrated first to validate the end‑to‑end process. The system generates a field‑level diff report that juxtaposes source values with their destination counterparts, highlighting any mismatches in field mapping, pick‑list value translations, and owner resolution. Stakeholders review the report, confirm accuracy, and formally approve the sample before the full dataset migration is triggered.

  6. Execute full migration with delta pickup

    The full dataset migrates in ordered batches, with each batch respecting foreign‑key dependencies so that parent records are loaded before child records. After the bulk phase completes, a delta‑pickup window of 24–48 hours captures any Dynamics 365 records created or modified during the cutover, ensuring a near‑real‑time sync. All record creations and updates are written to an immutable audit log, and a one‑click rollback mechanism can revert the Freshsales environment to its pre‑migration state should any reconciliation issue arise.

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.
Freshsales logo

Freshsales

Destination

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 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 Function 365 and Freshsales.

  • Object compatibility

    B

    2 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

    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 Freshsales 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 Freshsales data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Function365-to-Freshsales migrations finish within 48–72 hours of clock time for datasets under 50,000 records. Complex configurations that include multiple custom entities, extensive historical activity logs, or N:N relationship schemas can push timelines to 5–10 business days. The most time‑intensive planning tasks involve defining Freshsales custom objects for Dynamics 365 custom entities, mapping pick‑list values that have many custom options, and profiling data quality to ensure clean field‑level transformation before the migration run.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Function 365.
Land in Freshsales, 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