CRM migration
Field-level mapping, validation, and rollback between Function 365 and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Function 365
Source
Freshsales
Destination
Compatibility
13 of 13
objects map 1:1 between Function 365 and Freshsales.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
Freshsales
Contact
1:1Direct 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
Freshsales
Lead
1:1Direct 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
Freshsales
Account
1:1Direct 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
Freshsales
Deal
1:1Direct 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
Freshsales
Product
1:1Direct 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)
Freshsales
Sales Activity (Email)
1:1Dynamics 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)
Freshsales
Sales Activity (Call)
1:1Dynamics 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
Freshsales
Task
1:1Dynamics 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)
Freshsales
Sales Activity (Meeting)
1:1Dynamics 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
Freshsales
Note
1:1Dynamics 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)
Freshsales
Custom Object (Freshsales)
1:1Dynamics 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
Freshsales
User (Freshsales)
1:1Dynamics 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
Freshsales
Lead Status
1:1Dynamics 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.
| Function 365 | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Account | Account1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Email (Activity) | Sales Activity (Email)1:1 | Fully supported | |
| Phone Call (Activity) | Sales Activity (Call)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Appointment (Activity) | Sales Activity (Meeting)1:1 | Fully supported | |
| Note / Annotation | Note1:1 | Fully supported | |
| Custom Entity (Dynamics 365) | Custom Object (Freshsales)1:1 | Fully supported | |
| User / Owner | User (Freshsales)1:1 | Fully supported | |
| Lead Status | Lead Status1: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.
Function 365 gotchas
AI-assisted notes are proprietary — verify clinical-record export coverage
NHS Number format must be preserved exactly
Implementation specialist time is paid extra at £55/session
GDPR consent timestamps are regulatory artefacts
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Function 365
Source
Strengths
Weaknesses
Freshsales
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 Function 365 and Freshsales.
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
Function 365: Not publicly documented.
Data volume sensitivity
Function 365 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 Function 365 to Freshsales migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Function 365
Other ways to arrive at Freshsales
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.