CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and Mailchimp. We move data and schema; workflows are rebuilt natively in Mailchimp.
Fat Free CRM
Source
Mailchimp
Destination
Compatibility
5 of 8
objects map 1:1 between Fat Free CRM and Mailchimp.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Fat Free CRM to Mailchimp is a structural migration that maps a general-purpose open-source CRM onto an email marketing platform. Fat Free CRM stores Contacts, Leads, Accounts, Opportunities, Tasks, and Campaign membership data; Mailchimp stores Subscribers organized into Audiences with Tags and Merge Fields. We connect directly to Fat Free CRM's database (it exposes no public REST API), extract all Contact and Lead records, and insert them into a Mailchimp Audience via the Mailchimp Marketing API with batch chunking and exponential backoff. Opportunities, Tasks, Notes, and Attachments have no Mailchimp equivalent and do not migrate. We preserve tag memberships from Fat Free CRM as Mailchimp Tags, map custom field values to Merge Fields, and deliver a campaign-membership inventory that lets your team manually re-segment contacts into Mailchimp email campaigns post-migration. Automations, workflows, and sales sequences from Fat Free CRM do not migrate; we document them for your admin to rebuild in Mailchimp Customer Journey Builder.
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 Mailchimp, 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
Mailchimp
Subscriber (Audience Member)
1:1Fat Free CRM Contacts map directly to Mailchimp Subscribers within an Audience. We extract first_name, last_name, email, phone, title, and website from the contacts table. Email address is used as the subscriber_hash key for Mailchimp API insertion. Any contact with an invalid or empty email address is flagged and excluded from migration with a count delivered in the reconciliation report. Contact-account relationships (many-to-one via contact_accounts join table) cannot be preserved as a native relationship in Mailchimp; the parent Account name migrates as a Merge Field (COMPANY) if the customer chooses.
Fat Free CRM
Lead
Mailchimp
Subscriber (Audience Member)
1:manyFat Free CRM Leads are distinct from Contacts with separate status, source, rating, and assigned_user fields. All Leads migrate as Subscribers into the same Mailchimp Audience. The lead status (new, contacted, qualified, converted, rejected) migrates as a Merge Field (LEADSTATUS). Source and rating fields migrate as Merge Fields (LEADSOURCE, LEADRATING). Leads are not separated into a different Audience because Mailchimp does not have a Lead object; all records land in the unified Subscriber model.
Fat Free CRM
Account
Mailchimp
Merge Field (COMPANY)
lossyFat Free CRM Accounts (company/organization records) do not have a direct Mailchimp equivalent. Account-level data including company name, website, phone, and billing address cannot be stored as related records in Mailchimp. We extract Account.name and map it to a Merge Field named COMPANY on the Subscriber record. Address data from Account maps to an optional ADDRESS Merge Field if present in the source. The customer decides whether to include Account data during scoping.
Fat Free CRM
Campaign
Mailchimp
Segment + Tag
1:1Fat Free CRM Campaigns track name, status, budget, and target metrics. Contact membership in campaigns is stored through tag memberships (acts_as_taggable). We extract the campaign-contact relationship from the tag and subscriptions tables and rebuild it in Mailchimp by creating a Segment per source Campaign and adding matching subscribers. The segment criteria use email address inclusion based on the contacts_in_campaigns join table. Note that Mailchimp Segments are filter-based, not static lists; the campaign-contact relationship is expressed as segment rules rather than a direct static membership list.
Fat Free CRM
Tag
Mailchimp
Tag
1:1Fat Free CRM global tags (acts_as_taggable) across Contacts, Accounts, Opportunities, and Leads migrate to Mailchimp Tags on each Subscriber. Tags are stored as string tokens and we map them directly. Mailchimp Tags can be applied in bulk during subscriber import via the Tags array in the Marketing API. We extract the full tag set per contact from the taggings table and apply the tag list during the subscriber insert phase.
Fat Free CRM
Custom Fields
Mailchimp
Merge Field
lossyFat Free CRM custom fields on Contacts and Leads (stored in a serialized field or extension table) map to Mailchimp Merge Fields. We define the Merge Field name and type during schema discovery, then populate the value from the custom field data during subscriber import. Mailchimp supports TEXT, NUMBER, DATE, ADDRESS, PHONE, EMAIL, and URL merge field types. We create Merge Fields via the Mailchimp API before bulk import begins and drop any merge field that cannot be typed (e.g., serialized JSON or array values).
Fat Free CRM
Opportunity
Mailchimp
None
1:1Fat Free CRM Opportunities track stage, amount, probability, close date, and linked contacts. Mailchimp has no opportunity or pipeline object. Opportunities, their linked contacts, amounts, and stage data do not migrate. We extract a full opportunities export as a CSV reference file for the customer's records and flag the count in the reconciliation report. The customer is responsible for deciding whether to retain opportunity data in a spreadsheet or another tool post-migration.
Fat Free CRM
Task
Mailchimp
None
1:1Fat Free CRM Tasks (title, body, due date, category, status, assignment) have no Mailchimp equivalent. Mailchimp does not store task or activity records. Open and completed tasks do not migrate. We export task data as a CSV reference file with the task title, assignee, due date, and linked record. This file is delivered alongside the migration but is not inserted into Mailchimp.
| Fat Free CRM | Mailchimp | Compatibility | |
|---|---|---|---|
| Contact | Subscriber (Audience Member)1:1 | Fully supported | |
| Lead | Subscriber (Audience Member)1:many | Fully supported | |
| Account | Merge Field (COMPANY)lossy | Fully supported | |
| Campaign | Segment + Tag1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Custom Fields | Merge Fieldlossy | Mapping required | |
| Opportunity | None1:1 | Fully supported | |
| Task | None1: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
Mailchimp gotchas
Contact count includes unsubscribed and non-subscribed records
Automation workflows cannot be exported
Account suspensions trigger silently during migration
Template HTML is Mailchimp-specific and may not render in other platforms
E-commerce data requires active store connection
Pair-specific challenges
Migration approach
Database access and schema discovery
We connect to the customer's Fat Free CRM database (MySQL, PostgreSQL, or SQLite) using read-only credentials they provide. We run a schema discovery query to enumerate all tables, columns, join relationships, and any plugin-extended columns before extracting data. The customer provides the database host, port, credentials, and database name. If the database is hosted on the same server as the application, we coordinate access with their hosting provider or DevOps contact.
Data extraction and relationship mapping
We extract all Contacts, Leads, Accounts, Opportunities, Tasks, and tag memberships from the relevant database tables. We run targeted queries to build the join table relationships: contact-account associations from contact_accounts, opportunity-contact links from opportunities_contacts, and campaign-contact memberships from the tag and subscriptions tables. We extract custom field definitions and their serialized values from the custom_fields or extended-column storage. The extraction runs against a read replica or a point-in-time snapshot agreed upon with the customer to avoid impacting production during business hours.
Mailchimp audience and merge field setup
We create the destination Mailchimp Audience via the API and define all Merge Fields before any subscriber import begins. Merge Field names and types are derived from the extracted custom field definitions, with type mapping (TEXT, NUMBER, DATE, ADDRESS, PHONE) based on the data format in the source. If the customer chooses to include Account company names as a Merge Field, we add the COMPANY field. If address data from Accounts is required, we add the ADDRESS merge field. We validate the merge field creation against the Mailchimp API before proceeding to import.
Email validation and subscriber deduplication
We run a validation pass against all extracted email addresses before API insertion. Addresses that fail RFC 5321 format validation are flagged and excluded. We check for duplicate email addresses across Contacts and Leads and consolidate to a single subscriber record (preferring the Contact record when duplicates exist). We also check for unsubscribe flags in the source data and set the appropriate status (unsubscribed or cleaned) in Mailchimp rather than importing as a normal subscriber. The validation report is delivered to the customer before bulk import begins, giving them the opportunity to correct addresses if needed.
Bulk subscriber import via Mailchimp API
We insert subscribers in batches using the Mailchimp Marketing API with up to 5,000 subscribers per batch. Each subscriber record includes the email address, name fields (FNAME, LNAME), merge field values, and tag list. We apply exponential backoff and retry logic on rate limit responses (HTTP 429). We import tags during the subscriber insert by including the Tags array in each batch payload. The import generates a batch operation ID that we track until completion. Row counts are reconciled against the source extraction before the migration is declared complete.
Segment reconstruction from campaign membership
We create Mailchimp Segments corresponding to each Fat Free CRM Campaign based on the campaign-contact membership relationships extracted in step 2. Segments are created as static or dynamic lists using email address inclusion rules. Because Mailchimp Segments are filter-based rather than static lists, we document the segment criteria so the customer can refine them post-migration. We deliver a campaign-to-segment mapping document that lists each source Campaign name, the number of contacts in it, and the corresponding Mailchimp Segment ID and criteria.
Reference exports and admin handoff
We deliver a full CSV export of Opportunities, Tasks, and any unmapped fields as reference files for the customer's records. We deliver the campaign-to-segment mapping document, the email validation exclusion report, and the tag-to-mailchimp-tag mapping. We do not rebuild Fat Free CRM automations, workflows, or plugin-specific features in Mailchimp. We provide a written inventory of any workflow or automation patterns we observed in the source database that the customer should rebuild in Mailchimp Customer Journey Builder. Post-migration, the customer creates their first Mailchimp email campaign, defines automations in Customer Journey Builder, and sets up any new integrations (Shopify, Zapier, or other connected tools) that were not present in Fat Free CRM.
Platform deep dives
Fat Free CRM
Source
Strengths
Weaknesses
Mailchimp
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Mailchimp.
Object compatibility
1 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 Mailchimp migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM to Mailchimp 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 Mailchimp
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.