CRM migration

Migrate from Fat Free CRM to Microsoft Dynamics 365 Sales

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 logo

Fat Free CRM

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

78%

7 of 9

objects map 1:1 between Fat Free CRM and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Fat Free CRM logo

Fat Free CRM

What's pushing teams away

  • The user interface feels dated compared to modern SaaS CRMs, and G2 reviewers consistently rate the UX as needing significant improvement.
  • Community development has slowed — Bitrix24's comparison page explicitly notes it is unclear whether Fat Free CRM is still actively maintained, raising long-term support concerns.
  • No native public API means third-party integrations require direct database access or custom Rails code, complicating connections to email, calendars, or other tools.
  • Lacks the reporting depth, automation builder, and sales intelligence features that teams outgrow as they scale beyond basic contact and opportunity tracking.
  • Hosting, maintenance, security patching, and upgrades fall entirely on the customer, creating hidden operational overhead that grows over time.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How Fat Free CRM objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Contact

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Lead

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Task

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Campaign

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Custom field or Topic

lossy
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

User (manual provisioning)

1:1
Fully supported

Fat 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

maps to

Microsoft Dynamics 365 Sales

Custom Fields

lossy
Mapping required

Fat 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.

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.

Fat Free CRM logo

Fat Free CRM gotchas

High

No public REST API forces direct database extraction

Medium

Plugin-extended schema may alter core tables

Medium

Attachment files live on the host filesystem

Low

Users and groups must be manually remapped in the destination

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • No Fat Free CRM API forces direct database extraction

    Fat Free CRM exposes no public REST API, GraphQL, or SDK for data access. Every record extraction requires a direct read from the underlying MySQL, PostgreSQL, or SQLite database using credentials the customer provides. We connect read-only and map Rails table structures to our extraction schema. This means the customer must be comfortable granting database read access and any custom Rails plugins that extend the schema must be identified before extraction begins. Database credentials expire or change on self-hosted servers; we coordinate a credentials handoff during the discovery call and validate connectivity before extraction starts.

  • Plugin-extended schema may add columns not in core tables

    Fat Free CRM's plugin system can add columns to core tables (accounts, contacts, opportunities) or create entirely new tables. We run a schema discovery phase against the live database before extraction to capture any plugin additions. Undiscovered plugin columns that surface after extraction appear as missing fields in the destination and require a supplementary migration pass. We mitigate this by requesting the customer to enumerate any installed plugins during discovery.

  • Attachments live on the host filesystem, not the database

    Uploaded files in Fat Free CRM are stored on the server's local disk or a configured S3 bucket, not in the database. The database holds only the filename, path reference, and associated record ID. We enumerate every attachment record (filename, path, associated record) and deliver a file inventory so the customer can manually copy binary files to Dynamics 365 SharePoint or Dataverse column storage post-migration. We cannot extract binary attachment content through a standard database read-only connection without additional filesystem access credentials.

  • Dynamics 365 validation rules and field-level security block imports

    Dynamics 365 Dataverse enforces validation rules (required formats, conditional requireds, picklist whitelists) and field-level security that can reject records during bulk import even when the migration user has appropriate Dataverse roles. We coordinate with the customer to either temporarily disable blocking validation rules during load or add a migration-context bypass condition. Without this step, first-pass imports commonly see 5-20 percent record rejection on required fields like Account Name, Lead Status, or Opportunity Stage.

  • Fat Free CRM group-to-Dynamics 365 security role mapping requires admin judgment

    Fat Free CRM Groups are organisational access-control units that do not map directly to Dynamics 365 Business Units or Security Roles. We export the group roster and group membership as a reference table. The customer's Dynamics 365 admin must decide how to map group-based data sharing and access control to Business Units and Security Roles during the post-migration configuration phase. We document the group structure but cannot set destination security roles without write access to the Dynamics 365 admin center.

Migration approach

Six steps for a successful Fat Free CRM to Microsoft Dynamics 365 Sales data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Fat Free CRM logo

Fat Free CRM

Source

Strengths

  • Zero licensing cost — fully open source under MIT license with no per-user or subscription fees.
  • Complete source code access allows deep customisation of data models, views, and business logic without vendor lock-in.
  • Lightweight Ruby on Rails stack runs on commodity hosting (VPS, Heroku) with standard relational databases.
  • Active community and plugin architecture provide extension points for webhooks, time tracking, and record merging.
  • Self-hosted model ensures full data ownership and no third-party data retention concerns.

Weaknesses

  • No native public API — integrations require direct database queries or custom Rails development, limiting third-party tool connectivity.
  • Dated user interface consistently cited in reviews as a friction point compared to modern SaaS CRM experiences.
  • Slowing development activity raises concerns about security patches, Rails compatibility updates, and long-term viability.
  • Operational burden of self-hosting (server management, backups, upgrades, security) falls entirely on the customer.
  • Limited reporting, automation, and sales intelligence features compared to commercial CRM platforms.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. 1 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 Fat Free CRM and Microsoft Dynamics 365 Sales .

  • Object compatibility

    B

    1 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

    Fat Free CRM: Not applicable — self-hosted database has no API rate limiting.

  • Data volume sensitivity

    B

    Fat Free CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Fat Free CRM to Microsoft Dynamics 365 Sales 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 Fat Free CRM to Microsoft Dynamics 365 Sales data migrations

Answers to the questions buyers ask most during Fat Free CRM to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Fat Free CRM stores all data in a standard relational database (MySQL, PostgreSQL, or SQLite) and exposes no public REST API. We connect read-only directly to the database using credentials the customer provides, running queries against the Rails table schema to extract Accounts, Contacts, Leads, Opportunities, Tasks, Campaigns, Tags, and any custom fields or plugin-extended columns. We map the Rails table structure (including join tables like contact_accounts, opportunity_contacts, and tag_subscriptions) to our extraction schema before transforming for the Dynamics 365 Dataverse API. The customer must be comfortable granting read-only database access during the migration window.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Fat Free CRM.
Land in Microsoft Dynamics 365 Sales , 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