CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Fat Free CRM
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
7 of 9
objects map 1:1 between Fat Free CRM and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Fat Free CRM to Microsoft Microsoft Dynamics 365 Sales is a database-extraction migration rather than a standard API pull. Fat Free CRM exposes no public REST API, so we connect read-only to its underlying MySQL, PostgreSQL, or SQLite database to extract relational data intact including join tables and plugin-extended columns. We then transform and load through the Dynamics 365 Dataverse REST API and Bulk API, handling parent-record lookup resolution (AccountId on Contacts, WhoId and WhatId on Tasks) so that every imported record lands in the correct context. Campaigns and their contact memberships require a tag-to-campaign rebuild because Fat Free CRM uses a global tagging system rather than a native campaign object. We deliver the full user roster and group structure as a reference table for the customer's admin to provision Dynamics 365 users and reassign record ownership post-migration. Automations, custom Rails plugins, and self-hosted infrastructure configurations do not migrate.
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
Fat Free CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Fat Free CRM.
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 Fat Free CRM 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.
Fat Free CRM
Account
Microsoft Dynamics 365 Sales
Account
1:1Fat Free CRM accounts table (name, website, phone, billing address, assigned user) maps directly to Microsoft Microsoft Dynamics 365 Sales Account. The account.id primary key is not preserved; we use the account name plus website as the Dynamics 365 Account dedupe key during import. The assigned user maps via email-match to the Dynamics 365 User lookup once the user roster is reconciled in the approach step. If Fat Free CRM stores shipping address separately, it maps to the Account's ShippingAddress fields.
Fat Free CRM
Contact
Microsoft Dynamics 365 Sales
Contact
1:1Fat Free CRM contacts (first_name, last_name, email, phone, title, account_id) map to Dynamics 365 Contact. The contact_accounts join table preserves the many-to-one Account relationship; we resolve the AccountId lookup by matching the Fat Free CRM account_id to the Account record inserted in the previous step. Tags on contacts migrate as a multi-select text field (ff_crm_tags__c) because Dynamics 365 has no native global tagging equivalent at the Contact level.
Fat Free CRM
Lead
Microsoft Dynamics 365 Sales
Lead
1:1Fat Free CRM leads store status, source, rating, assigned user, and optional custom fields. They map to Dynamics 365 Lead with statuscode mapping (new, contacted, qualified, unqualified) from the Fat Free CRM status enum. The lead_source maps to the Dynamics 365 leadsourcecode picklist. Any rating (cold, warm, hot) from Fat Free CRM populates a custom field ffc_rating__c if the customer's process relies on it.
Fat Free CRM
Opportunity
Microsoft Dynamics 365 Sales
Opportunity
1:1Fat Free CRM opportunities track stage, amount, probability, close_date, assigned account, and assigned contact via join tables. We map to Dynamics 365 Opportunity with AccountId resolved from the account reference, close date mapped to estimatedclosedate, amount to estimatedvalue, and stage to the Microsoft Dynamics 365 Sales stage picklist. The opportunity_contact join table preserves which contact is the primary decision-maker on the deal.
Fat Free CRM
Task
Microsoft Dynamics 365 Sales
Task
1:1Fat Free CRM tasks belong to a user and optionally to an Opportunity or Contact, with title, body, due_date, category, and completion status. We map to Dynamics 365 Task with regardingobjectid resolved to the correct Contact or Opportunity lookup. Completed tasks import with statecode=1 (Completed); open tasks import as statecode=0. The category field migrates as a custom field ffc_category__c if the customer's workflow relies on task categorization.
Fat Free CRM
Campaign
Microsoft Dynamics 365 Sales
Campaign
1:1Fat Free CRM campaigns track name, status, budget, and target metrics. We map to Dynamics 365 Campaign directly. The tag_subscriptions join table stores which contacts are members of which campaign; we rebuild these as CampaignMember records by querying the tag and subscription tables and inserting CampaignMember with status='sent' or the equivalent campaign member statuscode.
Fat Free CRM
Tag
Microsoft Dynamics 365 Sales
Custom field or Topic
lossyFat Free CRM uses a global acts_as_taggable tagging system across Contacts, Accounts, Opportunities, and Leads. Because Dynamics 365 has no native cross-object tagging, we map tags per entity: tags on Contacts become a multi-select text field ffc_tags__c on Contact; tags on Accounts become ffc_tags__c on Account; tags on Leads become ffc_tags__c on Lead. The customer selects this strategy during scoping. We preserve the full tag token list per record.
Fat Free CRM
User and Group
Microsoft Dynamics 365 Sales
User (manual provisioning)
1:1Fat Free CRM internal user IDs and group IDs have no meaning in Dynamics 365. We extract the full user roster (id, email, first_name, last_name, role) and group structure as a reference table. Dynamics 365 User accounts must be provisioned manually by the customer's tenant admin before record import, because OwnerId on every standard object requires a valid Dynamics 365 User reference. We provide the reconciliation table mapping Fat Free CRM user IDs to the provisioned Dynamics 365 User IDs.
Fat Free CRM
Custom Fields
Microsoft Dynamics 365 Sales
Custom Fields
lossyFat Free CRM supports custom fields on Accounts, Contacts, Leads, and Opportunities via serialized fields or extension tables added by plugins. We run a schema discovery phase against the live database before extraction to enumerate all custom columns. Each discovered custom field is pre-created in Dynamics 365 as a custom column (type-matched: text to single-line text, date to datetime, number to whole number or decimal) before data import begins. Plugin-extended fields discovered after extraction require a supplementary pass.
| Fat Free CRM | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Tag | Custom field or Topiclossy | Fully supported | |
| User and Group | User (manual provisioning)1:1 | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required |
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.
Fat Free CRM gotchas
No public REST API forces direct database extraction
Plugin-extended schema may alter core tables
Attachment files live on the host filesystem
Users and groups must be manually remapped in the destination
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
Discovery and database assessment
We identify the Fat Free CRM database engine (MySQL, PostgreSQL, or SQLite), enumerate all tables and columns including plugin-extended schemas, and assess data quality across Accounts, Contacts, Leads, Opportunities, Tasks, Campaigns, and Tags. We run record-count queries and sample 20-50 records per object to validate field populate rates and identify orphaned foreign keys. We pair this with a Dynamics 365 edition review: Sales Professional ($65/user/mo) for standard migration scope; Sales Enterprise ($105/user/mo) if AI features, advanced pipeline intelligence, or custom app requirements are in scope.
Schema design and custom field pre-creation
We design the Dynamics 365 custom field schema before any data import. This includes creating custom text fields for Fat Free CRM tags (ffc_tags__c), custom fields for any plugin-extended columns discovered in the schema phase, and configuring Lead Status, Opportunity Stage, and Campaign Member Status picklists to match the Fat Free CRM enumerations. We also configure any required Business Units if the customer uses Business Unit-based security. Schema is deployed via the Dynamics 365 admin center or the Dataverse API into the destination environment before migration begins.
User reconciliation and owner mapping
We extract every distinct Fat Free CRM user referenced as an owner on Accounts, Contacts, Leads, Opportunities, and Tasks and match by email against the Dynamics 365 destination User table. Fat Free CRM internal user IDs have no meaning in Dynamics 365 and cannot be preserved. Any Fat Free CRM user without a matching Dynamics 365 User is placed in a reconciliation queue; the customer's tenant admin provisions the missing users and we map them before production migration. Record owner assignment cannot proceed until this step is complete.
Sandbox migration and reconciliation
We run a full migration into the Dynamics 365 production environment using a small test dataset (first 500-1,000 records per object) to validate field mapping, picklist value coverage, and owner resolution. The customer's admin spot-checks 25-50 records against the Fat Free CRM source, verifies that CampaignMember records correctly associate contacts with campaigns, and signs off before the full production migration begins. Schema corrections and picklist additions happen at this stage.
Production migration in dependency order
We run production migration in record-dependency order: Accounts first (Contacts require an AccountId lookup), then Leads, then Contacts (with AccountId resolved from the Accounts insert), then Opportunities (with AccountId and OwnerId resolved), then Tasks (with RegardingObjectId resolved to the correct Contact or Opportunity). Campaigns insert with campaign ID retained, then CampaignMember records insert using the tag_subscription query as the membership source. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta migration, and handoff
We freeze Fat Free CRM writes during the cutover window, run a final delta migration of any records created or modified since the initial snapshot, then hand off Dynamics 365 as the system of record. We deliver the file inventory for manual attachment migration, the user reconciliation table mapping Fat Free CRM user IDs to Dynamics 365 User IDs, and the campaign tag membership reference. We do not rebuild automations, workflows, or reports; these are documented in a written handoff for the customer's admin to rebuild in Dynamics 365.
Platform deep dives
Fat Free CRM
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 Fat Free CRM 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
Fat Free CRM: Not applicable — self-hosted database has no API rate limiting.
Data volume sensitivity
Fat Free CRM 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 Fat Free CRM to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM 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 Fat Free CRM
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.