CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Fat Free CRM
Source
Freshsales
Destination
Compatibility
7 of 10
objects map 1:1 between Fat Free CRM and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Fat Free CRM has no public REST API, which is the defining constraint of this migration pair. We connect directly to the underlying MySQL or PostgreSQL database using read-only credentials provided by the customer, enumerate the full relational schema including any plugin-extended columns, then map the extracted records into Freshsales through its REST API with batch chunking and exponential backoff. The migration preserves link tables for contact-account associations, opportunity-contact relationships, and campaign tag memberships. User and group IDs from Fat Free CRM have no meaning in Freshsales, so we extract the full user roster as a reference table and map ownership by email match, requiring the customer to provision Freshsales user accounts before record import. Workflows, automations, and campaign configurations do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Freshsales Workflow Rules.
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 Fat Free CRM 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.
Fat Free CRM
Account
Freshsales
Account
1:1Fat Free CRM accounts table stores name, website, phone, billing address, and assigned user ID. We extract these fields and map them directly to Freshsales Account fields. The account's assigned user_id resolves to a Freshsales User by email lookup once the customer has provisioned Freshsales user accounts. Multi-address or multi-contact relationships encoded in join tables are preserved as Freshsales Contact-to-Account links. Standard tier and edition constraints do not apply to Account object ingestion — all Freshsales tiers support Accounts.
Fat Free CRM
Contact
Freshsales
Contact
1:1Fat Free CRM contacts store name, email, phone, title, and a foreign key to the parent account. The contact_accounts join table preserves the many-to-one relationship. We map contacts to Freshsales Contacts with the AccountId lookup resolved at import time. Duplicate contacts (same email) are flagged in a pre-import report for the customer to resolve before record insertion.
Fat Free CRM
Lead
Freshsales
Lead
1:1Fat Free CRM leads are a distinct pre-conversion object with status, source, rating, and assigned user fields. We map Leads directly to Freshsales Leads, preserving lead status, source attribution, and rating. Any tag memberships on leads migrate as Freshsales tag assignments. The customer decides whether to keep leads as Leads or convert them to Contacts during the scoping phase.
Fat Free CRM
Opportunity
Freshsales
Deal
1:1Fat Free CRM opportunities store deal name, stage, amount, probability, close date, and links to a contact and account. We map these to Freshsales Deals with the pipeline stage mapped to a Freshsales pipeline stage value, and the amount and probability preserved as numeric fields. The opportunity_contact join table is preserved as a Freshsales Deal Contact association. Deal ownership maps via the email-based user lookup.
Fat Free CRM
Task
Freshsales
Task
1:1Fat Free CRM tasks include title, body, due date, category, completion status, assigned user, and optional links to opportunity or contact. We map open and completed tasks to Freshsales Tasks, preserving title, description, due date, status, and category. Task assignment resolves through the email-based owner mapping. Tasks linked to Opportunities or Contacts retain those associations in Freshsales via the WhatId and ContactId fields.
Fat Free CRM
Campaign
Freshsales
Campaign
1:1Fat Free CRM campaigns store name, status, budget, and target metrics. Contact-campaign membership is stored in the tag and subscription tables. We import campaign records and rebuild contact-campaign associations by enumerating the tag memberships linked to each campaign. Note that Freshsales Campaign metrics (budget tracking, target versus actual) are basic compared to dedicated marketing platforms; we document the metrics available in Freshsales and flag any campaign data that has no destination field for the customer to acknowledge.
Fat Free CRM
Tag
Freshsales
Tag
lossyFat Free CRM uses a global ActsAsTaggable system storing tags as string tokens in a separate table. Tags are attached to Contacts, Accounts, Opportunities, and Leads via join tables. We extract the full tag set per record and map to Freshsales Tags. Freshsales stores tags as a separate Tag object linked to records via tag assignments. Because multiple tags can exist per record, we create tag records first, then insert tag assignments in a second pass.
Fat Free CRM
Custom Field
Freshsales
Custom Field
lossyFat Free CRM supports custom fields on Accounts, Contacts, Leads, and Opportunities via a serialized field or extension table. We extract custom field definitions and their stored values during schema discovery. Custom fields map to Freshsales custom fields on the corresponding object. Plugin-extended columns (added by third-party Fat Free CRM plugins) may not have documented types; we infer field type from the column schema and flag any ambiguous types for the customer to confirm before destination field creation.
Fat Free CRM
User
Freshsales
User
1:1Fat Free CRM stores internal user accounts with role, team, and login credentials. These IDs have no persistence in Freshsales because Freshsales maintains its own user directory. We export the full user roster as a reference table including email, name, and role. Freshsales user accounts must be created by the customer before migration begins. Ownership mapping resolves by matching the Fat Free CRM user email to the Freshsales user email at record import time.
Fat Free CRM
Group
Freshsales
Team
lossyFat Free CRM groups serve as organisational units for access control and data sharing. The group concept does not map directly to any Freshsales object, but group membership can be preserved as tags on user records or noted in a supplementary access matrix delivered alongside the migration. We extract group membership as a separate table and document it as a reference for the customer to implement via Freshsales role and territory configuration post-migration.
| Fat Free CRM | Freshsales | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Tag | Taglossy | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| User | User1:1 | Fully supported | |
| Group | Teamlossy | 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.
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
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
Database access and schema discovery
We establish a read-only connection to the customer's Fat Free CRM database (MySQL, PostgreSQL, or SQLite) using credentials the customer provides. We run a full schema enumeration that captures every table, column, data type, and join relationship, including any plugin-extended columns on core tables. We also enumerate attachment metadata (filename, path, associated record) and the full user and group roster. This phase produces a schema map that becomes the basis of the field mapping document and identifies any custom tables requiring dedicated mapping logic.
Field mapping and migration specification
We produce a written field mapping document that pairs every Fat Free CRM table and column with its Freshsales destination object and field, including transformation logic for dates, enums, foreign key lookups, and null handling. The specification covers core objects (Accounts, Contacts, Leads, Opportunities, Tasks, Campaigns), tags, custom fields, and user ownership mapping. The customer reviews and approves the mapping before any test migration begins. Any ambiguous or plugin-derived columns are flagged for confirmation at this stage.
Test migration into Freshsales sandbox
We run a representative subset of records through the full pipeline into the customer's Freshsales sandbox or a development environment. The customer validates record counts, field population, tag assignments, owner assignment, and relationship integrity. We reconcile the imported counts against the source database counts and flag any mapping discrepancies. Corrections to the field mapping or transformation logic are applied before the production migration begins.
Freshsales user provisioning and owner reconciliation
The customer provisions Freshsales user accounts for all active team members. We cross-reference the Fat Free CRM user roster against the Freshsales user list by email and produce an owner reconciliation report identifying any Fat Free CRM users without a Freshsales match. Unresolved users are assigned to a designated catch-all Freshsales user or remain unmapped pending customer action. Migration cannot proceed past owner reconciliation because record ownership references must be valid at insert time.
Production migration in dependency order
We execute production migration in the following order: Accounts (foundational for Contact lookups), Contacts (with AccountId resolved), Leads, Deals (with AccountId and OwnerId resolved), Tasks (with WhatId and ContactId resolved), tag records and tag assignments, and finally custom field values on each object. We use the Freshsales REST API with batch chunking (up to 100 records per request) and exponential backoff on rate-limit responses. Each phase emits a reconciliation report showing inserted, updated, skipped, and errored counts before the next phase begins.
Cutover, validation, and automation inventory delivery
We run a final delta pass for any records modified during the migration window, then deliver the cutover report showing total records migrated per object. We provide a written inventory of all Fat Free CRM workflows, automations, and campaign configurations that do not migrate, with recommended Freshsales Workflow Rule equivalents and rebuild steps. We do not rebuild automations inside the migration scope. Post-migration support is scoped to data reconciliation issues raised within five business days of cutover; ongoing Freshsales administration and workflow rebuild are outside standard scope.
Platform deep dives
Fat Free CRM
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 Fat Free CRM 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
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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM 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 Fat Free CRM
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.