CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.
Fat Free CRM
Source
HubSpot
Destination
Compatibility
12 of 12
objects map 1:1 between Fat Free CRM and HubSpot.
Complexity
BStandard
Timeline
48–96 hours
Overview
Fat Free CRM stores records in a self-hosted Ruby on Rails database — Contacts, Accounts, Opportunities, Tasks, and custom fields in a normalized SQL schema. HubSpot uses a flat properties bag per object with special semantics for lifecycle_stage (contacts only), deal pipelines, and engagement history. The migration requires database read access or a full CSV export from the Rails app, then a property-by-property mapping pass that accounts for HubSpot's reserved property names, pick-list constraints, and object-level association limits. We preserve original created_at and updated_at timestamps as custom datetime properties since HubSpot's native timestamps reflect import time. Tasks in Fat Free CRM become HubSpot engagements (calls, emails, meetings) with original owners matched by email against HubSpot users. Tags from Fat Free CRM require a custom multi-value or comma-joined property since HubSpot has no native tags-without-semantics equivalent outside its marketing lists. Automations and group-permission logic in Fat Free CRM have no HubSpot analogue and must be reconstructed as HubSpot workflows or preserved as documentation for your admin team.
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 HubSpot, 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
Contact
HubSpot
Contact
1:1Fat Free CRM contacts map directly to HubSpot contacts. First name, last name, email, phone, and job title pass through as HubSpot properties with the same values. HubSpot's lifecycle_stage is applied as a default based on the Fat Free CRM contact's status field — active contacts default to 'customer' or 'lead' per your specification.
Fat Free CRM
Contact.status = 'converted'
HubSpot
Contact (lifecycle_stage = 'customer')
1:1Fat Free CRM contacts with status 'converted' land in HubSpot as lifecycle_stage 'customer'. This preserves the conversion event without a separate lead record. If your Fat Free CRM uses a custom status field for lifecycle, we map each value to the nearest HubSpot lifecycle stage during migration.
Fat Free CRM
Account
HubSpot
Company
1:1Fat Free CRM accounts map to HubSpot companies. Company name, domain, industry, employee count, and annual revenue map to HubSpot's corresponding company properties. Parent-account hierarchies in Fat Free CRM translate to HubSpot's parent company association field. We also preserve the account type field as a custom property since HubSpot lacks a native equivalent for categorizing accounts by type.
Fat Free CRM
Opportunity
HubSpot
Deal
1:1Fat Free CRM opportunities map to HubSpot deals with stage, amount, close date, and probability preserved. The opportunity name becomes the deal name. HubSpot's deal pipeline stages are configured to match the stage names from your Fat Free CRM setup, with probability values carried over as deal probability custom fields.
Fat Free CRM
Task
HubSpot
Engagement (call, email, or meeting)
1:1Fat Free CRM tasks map to HubSpot engagements based on their type field. Tasks flagged as calls become HubSpot call engagements with duration and outcome preserved. Email tasks become email engagements with subject and body. General to-do tasks become HubSpot tasks. Owner is resolved by email match to HubSpot users.
Fat Free CRM
Note
HubSpot
Note
1:1Fat Free CRM notes map to HubSpot notes on the associated contact or company record. Original timestamps and note body text are preserved. Rich-text formatting is converted to HubSpot's note content format. Notes with attachments trigger a separate file-migration step to HubSpot Files.
Fat Free CRM
Tag
HubSpot
Custom property (comma-joined or multi-value)
1:1Fat Free CRM tags do not have a native HubSpot equivalent with the same semantics. We create a custom contact and company property (e.g., 'FFCRM_Tags') and join tag values with commas, or create a multi-select pick-list property if the unique tag count is under 200 values. Tag frequency is preserved as a count property for reporting continuity.
Fat Free CRM
Group
HubSpot
Custom property + HubSpot team
1:1Fat Free CRM groups control data visibility and user permissions. HubSpot's teams are assignment buckets only — they do not enforce record-level sharing rules equivalent to Fat Free CRM's group model. We map each Fat Free CRM group to a HubSpot team and surface the original group membership as a custom contact/company property for admin reference.
Fat Free CRM
Attachment (file on record)
HubSpot
HubSpot File + file association
1:1Fat Free CRM file attachments are downloaded from the Rails storage path and re-uploaded to HubSpot Files. Each file is associated back to the originating contact, company, or deal record. Files over 300MB are flagged for manual handling since HubSpot's file hosting has a per-file size cap.
Fat Free CRM
Custom field (plugin-added column)
HubSpot
HubSpot custom property
1:1Custom fields added via Fat Free CRM plugins or Rails migrations become HubSpot custom properties. We infer the HubSpot property type from the database column type — varchar becomes string, integer becomes number, boolean becomes enumeration, date becomes date. Some Fat Free CRM field names may collide with HubSpot-reserved names and require a rename during mapping.
Fat Free CRM
Campaign
HubSpot
HubSpot List or custom property
1:1Fat Free CRM campaign tracking (if enabled via plugin) has no direct HubSpot equivalent without Marketing Hub. We preserve campaign membership as a contact property and recommend rebuilding campaign logic in HubSpot's lists once you have a Marketing Hub seat.
Fat Free CRM
User / Owner
HubSpot
HubSpot user (owner)
1:1Fat Free CRM users are matched to HubSpot users by email address. Unmatched owners are flagged before migration so your team can invite them to HubSpot first or assign their records to a fallback owner. User role permissions in Fat Free CRM do not transfer — those must be reconfigured in HubSpot's native roles and teams.
| Fat Free CRM | HubSpot | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Contact.status = 'converted' | Contact (lifecycle_stage = 'customer')1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Task | Engagement (call, email, or meeting)1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Tag | Custom property (comma-joined or multi-value)1:1 | Fully supported | |
| Group | Custom property + HubSpot team1:1 | Fully supported | |
| Attachment (file on record) | HubSpot File + file association1:1 | Fully supported | |
| Custom field (plugin-added column) | HubSpot custom property1:1 | Fully supported | |
| Campaign | HubSpot List or custom property1:1 | Fully supported | |
| User / Owner | HubSpot user (owner)1:1 | 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
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
Pair-specific challenges
Migration approach
Audit Fat Free CRM database and export source data
FlitStack AI connects to the Fat Free CRM database (MySQL, Postgres, or SQLite) or runs a Rails console export to pull all records. We extract contacts, accounts, opportunities, tasks, notes, attachments, users, groups, and any custom fields from plugin-added columns. We validate record counts against what your team expects and flag any tables with serialized or polymorphic data that may require custom handling. A database backup is confirmed before extraction begins.
Design HubSpot property schema and field mapping plan
We create the custom properties in your HubSpot instance that Fat Free CRM doesn't have native equivalents for — lifecycle_stage (if not already active), probability overrides, original timestamps, Fat Free CRM record IDs, and tag-compression properties. Reserved property name collisions are resolved by renaming during this phase. The field mapping spreadsheet is built with source column, destination property, mapping type, and transformation logic for every field in scope.
Resolve owners and prepare for deal-contact associations
Fat Free CRM users are matched to HubSpot users by email. Any owners in Fat Free CRM who do not have a corresponding HubSpot user account are flagged — your team either creates the HubSpot user first or designates a fallback owner. We also sequence the migration so accounts are migrated before contacts, and contacts are migrated before opportunities, ensuring the foreign key relationships (account_id on contacts, opportunity-account links) resolve correctly in HubSpot.
Run sample migration with field-level diff
A representative sample — typically 100–500 records spanning contacts, accounts, deals, and tasks — is migrated to HubSpot first. We generate a field-level diff comparing source values against destination values so you can verify lifecycle stage routing, tag compression, opportunity-to-deal stage mapping, and owner resolution before the full run. Sample results are reviewed in a call; no full migration proceeds until you sign off on the field mapping.
Execute full migration with delta-pickup and rollback plan
The full dataset migrates to HubSpot with companies first, then contacts (with lifecycle routing), then deals. Attachments are downloaded from the Rails storage path and re-uploaded to HubSpot Files. A delta-pickup window (24–48 hours) runs after the full import to capture any records modified in Fat Free CRM during the cutover window. An audit log records every operation, and one-click rollback is available if the field-level reconciliation reveals unexpected divergences after the migration commits.
Platform deep dives
Fat Free CRM
Source
Strengths
Weaknesses
HubSpot
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 HubSpot.
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 HubSpot migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM to HubSpot 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 HubSpot
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.