CRM migration

Migrate from Fat Free CRM to Salesforce Sales Cloud

Field-level mapping, validation, and rollback between Fat Free CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.

Fat Free CRM logo

Fat Free CRM

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

75%

9 of 12

objects map 1:1 between Fat Free CRM and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Fat Free CRM to Salesforce Sales Cloud is a migration from a self-hosted open-source Rails application with no public API to a cloud-native enterprise CRM with a full REST and Bulk API surface. Because Fat Free CRM exposes no documented API, we connect read-only to the underlying database, enumerate the schema including any plugin-extended tables, extract relational data intact, and load it into Salesforce through the Bulk API with parent-record resolution. We preserve join-table relationships (account-contacts, opportunity-contacts, campaign-tag memberships) and carry forward custom field definitions from the Rails schema. Attachments stored on the server filesystem are enumerated as a file inventory for manual copy rather than extracted as binary blobs. Fat Free CRM's internal user and group IDs have no meaning in Salesforce; we export the user and group roster as a reference table for manual remapping by the customer's admin. Workflows, automations, and report definitions do not migrate as code; we deliver a written inventory of these objects for the customer's team to rebuild in Salesforce Flow and Reports.

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

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Fat Free CRM objects map to Salesforce Sales Cloud

Each row shows how a Fat Free CRM object lands in Salesforce Sales Cloud, 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

Accounts

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

Fat Free CRM accounts table maps directly to Salesforce Account. We extract name, website, phone, and assigned user (owner) from the accounts table. The Account is created before any Contact import so that AccountId lookup is satisfied at the moment of Contact insert. Multi-address billing and shipping in Fat Free CRM maps to Salesforce BillingAddress and ShippingAddress fields respectively.

Fat Free CRM

Contacts

maps to

Salesforce Sales Cloud

Contact

1:1
Fully supported

Fat Free CRM contacts table maps directly to Salesforce Contact. The contact_accounts join table is resolved during migration: every Contact with an assigned account gets AccountId populated from the matching Account record. Contacts without a matching Account are held in a reconciliation queue for the customer's admin to create Account records or map to an existing placeholder Account. Name, email, phone, title, and department migrate directly.

Fat Free CRM

Leads

maps to

Salesforce Sales Cloud

Lead

1:1
Fully supported

Fat Free CRM leads table maps directly to Salesforce Lead. Status (new, contacted, converted, rejected), source (web, referral, trade show), and rating (cold, warm, hot) migrate as custom or standard Lead fields. The assigned user maps to OwnerId via email matching against the Salesforce User roster. Note that Salesforce Lead converts to Contact-Account pair; Fat Free CRM leads do not have a separate conversion step in the source.

Fat Free CRM

Opportunities

maps to

Salesforce Sales Cloud

Opportunity

1:1
Fully supported

Fat Free CRM opportunities map to Salesforce Opportunity. Stage, amount, probability, and close date migrate directly. The opportunity_contacts join table is resolved by creating OpportunityContactRole records for each associated Contact after both Opportunity and Contact inserts are complete. The assigned account maps to AccountId from the Account lookup.

Fat Free CRM

Tasks

maps to

Salesforce Sales Cloud

Task

1:1
Fully supported

Fat Free CRM tasks belong to a user and optionally to an Opportunity or Contact. Title, body (description), due date, category, and completion status migrate to Salesforce Task. Status open and pending map to Not Started and In Progress; completed maps to Completed. The WhatId lookup (parent Opportunity or Account) and WhoId lookup (parent Contact or Lead) are resolved at migration time using the extracted IDs and the newly created Salesforce IDs.

Fat Free CRM

Campaigns

maps to

Salesforce Sales Cloud

Campaign

1:1
Mapping required

Fat Free CRM campaigns track name, status (planned, launched, completed, suspended), budget, and target metrics. We import campaign records directly. Campaign membership (which contacts belong to which campaigns) is stored via tag subscriptions in Fat Free CRM; we rebuild these as CampaignMember records linking the migrated Contact IDs to the migrated Campaign IDs.

Fat Free CRM

Tags

maps to

Salesforce Sales Cloud

Custom Text Field or Topic

lossy
Mapping required

Fat Free CRM uses a global acts_as_taggable tagging system across Contacts, Accounts, Opportunities, and Leads. Tag tokens are stored in a separate table with polymorphic associations. We offer two strategies during scoping: migrate tags to a Salesforce custom text field (comma-delimited) on each object, or use Salesforce Topics with TopicAssignment records for cross-object classification. The customer chooses the strategy; the default is a custom text field per object.

Fat Free CRM

Custom Fields

maps to

Salesforce Sales Cloud

Custom Fields (__c)

lossy
Mapping required

Fat Free CRM supports custom fields on Accounts, Contacts, Leads, and Opportunities via a serialized field or extension table. We extract the custom field definitions during schema discovery, map field names to Salesforce __c custom field API names, and map data types (string, integer, date, boolean) to equivalent Salesforce field types. Custom fields are deployed to the destination Salesforce org via metadata API before any data import begins.

Fat Free CRM

Users

maps to

Salesforce Sales Cloud

User (reference only)

1:1
Fully supported

Fat Free CRM user records (login, email, role, team membership) are exported as a reference table. We do not create Salesforce User records because that requires destination admin credentials and write access to the Salesforce org user directory. The user roster is delivered as a CSV with user email, role, and team so the customer's Salesforce admin can provision matching User accounts before record ownership is assigned.

Fat Free CRM

Groups

maps to

Salesforce Sales Cloud

Queue or Public Group (reference)

1:1
Mapping required

Fat Free CRM groups are organisational units for access control and data sharing. This concept does not map directly to a first-class Salesforce object. We export the full group roster and group membership as a reference table. The customer's admin decides whether to recreate groups as Salesforce Public Groups (for sharing rules) or Queues (for Lead and Case assignment). We do not create these objects automatically.

Fat Free CRM

Users and Teams

maps to

Salesforce Sales Cloud

User

1:1
Mapping required

Fat Free CRM users and teams (active, inactive status, admin vs user role) are extracted as a reconciliation reference. The migration user is assigned as the interim OwnerId on all migrated records until the customer's Salesforce admin provisions active User accounts and we remap OwnerId references from the reference table. This is a prerequisite step before production migration begins.

Fat Free CRM

Plugin-extended Tables

maps to

Salesforce Sales Cloud

Custom Fields or Custom Objects

lossy
Fully supported

Fat Free CRM's plugin system can add columns to core tables or create entirely new tables beyond the standard Rails schema. We run a schema discovery phase against the live database before extraction to capture any plugin additions. Each discovered plugin column is mapped to a Salesforce custom field (__c) or custom object depending on whether it is a field on an existing object or a new relational table. Undiscovered plugin columns that surface post-extraction require a supplementary pass documented in the reconciliation report.

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

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Fat Free CRM has no public API — direct database extraction required

    Fat Free CRM exposes no documented public API for data access. All extraction queries the underlying database directly (MySQL, PostgreSQL, or SQLite) using read-only credentials the customer provides. We map Rails table structures to our extraction schema and handle polymorphic associations (contactable_id, contactable_type for the tasks-table lookups). The customer must be comfortable granting database read access, and any custom plugins that extend the schema must be enumerated during the discovery phase. This extraction method is stable but requires the database to be reachable from our migration environment and assumes the Rails application has not introduced non-standard table structures through custom code.

  • Plugin-extended schema can alter core tables silently

    Fat Free CRM's plugin ecosystem can add columns to core tables (accounts, contacts, opportunities) or create entirely new tables that are not part of the standard Rails scaffold. We run a schema discovery phase against the live database before extraction to capture any plugin additions and generate a complete table inventory. Undiscovered plugin columns that surface after extraction will appear as missing fields in the destination and require a supplementary migration pass, which adds time and cost. Customers using custom plugins must disclose them during discovery.

  • Attachment files are on the host filesystem and cannot be extracted through 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 stores only the file path reference (filename, storage path, associated record type and ID). We enumerate every attachment reference and deliver a file inventory CSV with the source path, target record type, and target record ID so the customer's admin can manually copy files to Salesforce Files post-migration. We do not extract binary file content because the standard database read-only connection does not grant filesystem access.

  • Fat Free CRM user and group IDs have no meaning in Salesforce

    Fat Free CRM's internal user IDs and group IDs are arbitrary integers assigned by the Rails application and have no counterpart in Salesforce's user directory. We export the full user roster (email, name, role, team) and group roster as reference CSVs. The customer's Salesforce admin must create matching User accounts and decide whether to use Salesforce Public Groups or Queues to replicate the group-based access model before we can assign OwnerId references on migrated records. Migration cannot complete record ownership remapping without this step.

  • Salesforce validation rules and field-level security can reject imported records

    Salesforce orgs commonly enforce validation rules (required formats, conditional required fields, picklist whitelists) and field-level security that will silently reject records during import if the migration user lacks the required permissions. We coordinate with the customer's Salesforce admin before production migration to grant the migration user the Bulk API permission and either temporarily disable blocking validation rules or extend them with a migration-context check. Skipping this step results in partial record insertion with no error visibility unless we enable the Salesforce Bulk API strict mode audit trail.

Migration approach

Six steps for a successful Fat Free CRM to Salesforce Sales Cloud data migration

  1. Discovery and database credentials

    We collect the read-only database credentials (host, port, database name, username, password) and confirm the database engine (MySQL, PostgreSQL, or SQLite). We run a schema discovery query against information_schema (MySQL/PostgreSQL) or sqlite_master (SQLite) to enumerate every table and column, then compare against the standard Fat Free CRM Rails schema to flag any plugin-extended additions. We also query the active_plugins table if present to capture the full plugin list. The discovery output is a written schema map and a plugin inventory requiring customer sign-off before extraction begins.

  2. Data extraction and join-table enumeration

    We run read-only SQL queries against the live database to extract all core objects (accounts, contacts, leads, opportunities, tasks, campaigns, users, groups) plus any plugin-extended tables discovered in step one. We specifically enumerate join tables: contact_accounts, opportunity_contacts, taggings (for tag memberships), and campaign_subscriptions. Each extracted dataset is validated for row count, null percentages, and referential integrity before being staged in our secure extraction environment. Historical timestamps (created_at, updated_at) are preserved as-is for later activity ordering.

  3. Destination Salesforce schema provisioning

    We deploy the Salesforce destination schema via the Metadata API or change set into the customer's Sandbox org for validation. This includes custom fields (__c) on Account, Contact, Lead, Opportunity, Task, and Campaign; Record Types if the customer uses multiple sales processes; and any custom objects required by plugin-extended tables. The Salesforce admin reviews field labels, data types, and picklist values before we proceed. Schema corrections happen in Sandbox, not production.

  4. Sandbox migration and reconciliation

    We run a full migration into a Salesforce Sandbox using production-equivalent data volume. The customer's admin or RevOps lead spot-checks 25-50 records per object against the source database, validates that join-table relationships resolved correctly (Contact-Account links, OpportunityContactRole entries), and signs off the mapping before production migration begins. OwnerId references are validated against the user reference table at this stage.

  5. User provisioning and owner remapping

    Before production migration, the customer's Salesforce admin provisions all required User accounts matching the Fat Free CRM user roster. We receive the provisioned User IDs and map them to the Fat Free CRM user IDs from the extraction. OwnerId references are updated in the migration staging data using this mapping. Any Fat Free CRM user without a matching Salesforce User is flagged; records owned by that user are assigned to the migration user as a placeholder pending admin review.

  6. Production migration in dependency order

    We run production migration in record-dependency order: Accounts (from Fat Free CRM accounts), Leads, Contacts (with AccountId resolved from the Account map), Opportunities (with AccountId and OpportunityContactRole resolved), Tasks and Events (with WhoId and WhatId resolved via parent-record lookup), Campaigns (with CampaignMember rebuilt from tag subscriptions), and custom fields last. Each phase emits a row-count reconciliation report before the next phase begins. We use the Salesforce Bulk API 2.0 with chunking, exponential backoff on rate-limit responses, and parent-record lookup resolution for all foreign-key-style references.

  7. Cutover, attachment inventory delivery, and automation handoff

    We freeze Fat Free CRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the attachment inventory CSV (file path, target object, target record ID) so the admin can manually copy files to Salesforce Files. We deliver the user and group reference tables with recommended Salesforce equivalents (Public Groups or Queues). We do not rebuild automations, workflows, or report definitions as these do not migrate as code; the inventory handoff document lists every object that requires manual rebuild in Salesforce Flow, Process Builder, or Reports.

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.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

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 Fat Free CRM and Salesforce Sales Cloud.

  • 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

    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 Salesforce Sales Cloud 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 Salesforce Sales Cloud data migrations

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

Can't find your answer?

Walk through your Fat Free CRM to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 15,000 Contacts and 3,000 Opportunities with a standard Rails schema and no plugin extensions. Migrations with large task histories (over 200,000 activity records), plugin-extended schema requiring full table enumeration, multiple campaign memberships with complex tag-based segmentation, or customer-specific join-table patterns move to eight to fourteen weeks because of schema discovery time, join-table resolution, and Bulk API chunking. The discovery phase alone adds three to five business days for schema enumeration.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Fat Free CRM.
Land in Salesforce Sales Cloud, 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