CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and HighLevel. We move data and schema; workflows are rebuilt natively in HighLevel.
Fat Free CRM
Source
HighLevel
Destination
Compatibility
8 of 10
objects map 1:1 between Fat Free CRM and HighLevel.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Fat Free CRM has no public API, so every migration to GoHighLevel requires direct database extraction from its MySQL, PostgreSQL, or SQLite backend. We run a schema discovery pass before any extraction to capture core table columns, plugin-extended columns, and join tables. The primary structural difference between the platforms is that Fat Free CRM separates Accounts from Contacts, while GoHighLevel embeds company information inside the Contact record. We resolve this by collapsing the Fat Free Account name into GoHighLevel's company_name field on Contact and setting the contact_type to customer or lead accordingly. Tags migrate as GoHighLevel Tags, Opportunities map to GoHighLevel Opportunities with stage and pipeline preserved, and Tasks migrate with due dates, status, and body intact. User and group IDs have no GoHighLevel equivalent and require manual remapping post-migration. Workflows, automations, and campaigns do not migrate because Fat Free CRM does not have a workflow engine, and GoHighLevel's automation builder is not a migration target.
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 HighLevel, 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
HighLevel
Contact.company_name and contact_type
1:1Fat Free CRM Accounts (name, website, phone, billing address) collapse into GoHighLevel Contact records. The Account name maps to contact.company_name, website maps to contact.website, and phone maps to contact.phone. Since GoHighLevel has no separate Account object, the Account-Contact link table in Fat Free CRM is resolved by setting the company_name field on each Contact. The contact_type is set to customer for Accounts with closed-won Opportunities, lead for Accounts with open pipeline only, and prospect otherwise.
Fat Free CRM
Contacts
HighLevel
Contact
1:1Fat Free CRM Contacts map directly to GoHighLevel Contacts with first_name, last_name, email, phone, title, and address fields preserved. The contact_accounts join table is used to set the company_name field on each Contact at migration time. Tags attached to Contacts (via acts_as_taggable) migrate as GoHighLevel Tags applied to the Contact record.
Fat Free CRM
Leads
HighLevel
Contact (contact_type = lead)
1:1Fat Free CRM Leads map to GoHighLevel Contacts with contact_type set to lead. The Lead status field maps to a custom field ffc_status__c, source maps to ffc_lead_source__c, and rating maps to ffc_rating__c. If the Fat Free CRM Lead has been converted (has a linked Contact or Account), we resolve the relationship and migrate the Contact with the converted company_name rather than creating a duplicate Lead in GoHighLevel.
Fat Free CRM
Opportunities
HighLevel
Opportunity
1:1Fat Free CRM Opportunities map to GoHighLevel Opportunities. The opportunity_accounts join table resolves the Account name for the linked company_name on the Opportunity. Stage, amount, probability, and close date migrate to GoHighLevel's stage, value, and close_date fields. We create a GoHighLevel pipeline matching the Fat Free CRM pipeline structure, with stages mapped to pipeline stages, during the configuration phase before data import begins.
Fat Free CRM
Tasks
HighLevel
Task
1:1Fat Free CRM Tasks (title, body, due date, category, completion status) map to GoHighLevel Tasks. Open tasks and completed tasks both migrate; completed tasks retain their completion status and the original completion timestamp in a custom field ffc_completed_at__c. Tasks linked to an Opportunity or Contact in Fat Free CRM are linked to the corresponding GoHighLevel Opportunity or Contact via the migration-assigned record IDs.
Fat Free CRM
Campaigns
HighLevel
Custom Object or Tag grouping
1:1Fat Free CRM Campaigns (name, status, budget, target) have no direct GoHighLevel equivalent. We migrate campaign records to a GoHighLevel custom object named Campaign with the original campaign name, status, and budget fields preserved. Contact membership in campaigns is reconstructed from the campaign_subscriptions and tag join tables and linked via custom relationship fields on the Campaign custom object.
Fat Free CRM
Tags
HighLevel
Tag
1:1Fat Free CRM's global tagging system (acts_as_taggable) stores tags as string tokens in a separate table. We preserve the full tag set per record and import them as GoHighLevel Tags applied to the corresponding Contact, Lead, Opportunity, or Account-equivalent record. Tags with identical names are deduplicated at import time.
Fat Free CRM
Users
HighLevel
User (manual remap)
1:1Fat Free CRM user IDs have no meaning in GoHighLevel. We export the full user roster (name, email, role) as a reference table. The customer provisions GoHighLevel workspace users by email invite before migration. We then remap Fat Free CRM owner_id references to the corresponding GoHighLevel user by email match during the data load phase.
Fat Free CRM
Groups
HighLevel
Team
lossyFat Free CRM Groups (organisational units for access control) map conceptually to GoHighLevel Teams. We extract the group membership table and deliver a team structure mapping as a written configuration guide. GoHighLevel Teams are created by the customer, and record ownership is reassigned based on the group membership list we export.
Fat Free CRM
Custom Fields
HighLevel
Custom Fields
lossyFat Free CRM custom fields on Accounts, Contacts, Leads, and Opportunities (stored as serialized fields or extension tables) are extracted with their definitions and values. We create matching GoHighLevel custom fields (text, number, date, dropdown) during the schema configuration phase before data import. Plugin-extended columns discovered during schema discovery are included in this mapping pass.
| Fat Free CRM | HighLevel | Compatibility | |
|---|---|---|---|
| Accounts | Contact.company_name and contact_type1:1 | Fully supported | |
| Contacts | Contact1:1 | Fully supported | |
| Leads | Contact (contact_type = lead)1:1 | Fully supported | |
| Opportunities | Opportunity1:1 | Fully supported | |
| Tasks | Task1:1 | Fully supported | |
| Campaigns | Custom Object or Tag grouping1:1 | Mapping required | |
| Tags | Tag1:1 | Mapping required | |
| Users | User (manual remap)1:1 | Fully supported | |
| Groups | Teamlossy | Mapping required | |
| 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
HighLevel gotchas
Sub-account architecture creates isolated data silos per client
Usage-based telecom and AI costs are not in the subscription price
Workflows have no native equivalent in most destination CRMs
API rate limits cap bulk migration throughput at 100 requests per 10 seconds per sub-account
White-label configuration and branding assets do not export via API
Pair-specific challenges
Migration approach
Database connection and schema discovery
We receive read-only database credentials from the customer and connect to the Fat Free CRM database (MySQL, PostgreSQL, or SQLite). We run a schema discovery pass that enumerates all tables, columns, join tables, and any plugin-extended schema additions. The discovery output is a data dictionary we share with the customer for confirmation before extraction begins. This step also identifies which records have custom field values and which have tag memberships.
GoHighLevel workspace provisioning and API access
The customer provisions a GoHighLevel workspace and, if the Starter plan is in use, upgrades to the Unlimited plan to enable API access required for migration. We verify API credentials (Location ID and Access Token) and confirm write permissions. We also configure the GoHighLevel pipeline structure to match the Fat Free CRM opportunity pipeline stages during this phase.
Record extraction and transformation
We extract Accounts, Contacts, Leads, Opportunities, Tasks, Campaigns, and Tags from the Fat Free CRM database via SQL queries. The extraction preserves join table relationships (contact_accounts, opportunity_accounts, campaign_subscriptions, taggings). Custom field values are extracted alongside standard fields and staged for custom field mapping. We run a data quality check on extracted records to flag missing required fields, duplicate email addresses, and orphaned records.
Schema configuration in GoHighLevel
We create GoHighLevel custom fields to match any Fat Free CRM custom field definitions (text, number, date, dropdown). We configure the pipeline and pipeline stages to reflect the Fat Free CRM pipeline structure. If the customer requests Campaign migration, we create the Campaign custom object and relationship fields. This phase runs in parallel with extraction validation.
Data import and reconciliation
We import records into GoHighLevel in dependency order: custom fields (no dependencies), tags (standalone), contacts (with company_name resolved from Account extraction), opportunities (with Contact and pipeline references resolved), and tasks (with parent record references resolved). Each import phase emits a row-count reconciliation report. We cross-check GoHighLevel record counts against the source extraction counts and resolve any discrepancies before the next phase begins.
Cutover, user remap, and workflow handoff
We freeze Fat Free CRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable GoHighLevel as the system of record. We deliver the user and group roster mapping to the customer for GoHighLevel user provisioning and ownership reassignment. We do not rebuild automations or workflows in GoHighLevel because Fat Free CRM does not have a native workflow engine. We deliver a written guide recommending GoHighLevel workflow triggers, conditions, and actions based on the customer's pipeline and task patterns for the admin to implement.
Platform deep dives
Fat Free CRM
Source
Strengths
Weaknesses
HighLevel
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 HighLevel.
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 HighLevel migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM to HighLevel 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 HighLevel
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.