CRM migration
Field-level mapping, validation, and rollback between Contact Beacon and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Contact Beacon
Source
Twenty CRM
Destination
Compatibility
7 of 10
objects map 1:1 between Contact Beacon and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Contact Beacon to Twenty CRM is a migration from a charity-specialist platform to an open-source CRM with no native Gift Aid handling or nonprofit-specific object types. Contact Beacon stores donations as a flat record with a boolean Gift Aid flag; Twenty represents charitable gifts as Opportunities with line items, which requires a schema remap rather than a simple field copy. We extract Beacon data via paginated API reads (Beacon has no bulk endpoint), normalize Gift Aid declarations into a custom Gift Aid amount field, resolve parent Contact lookups on every donation record, and load into Twenty via the REST API. Workflows, automations, and Gift Aid submission workflows do not migrate because Beacon exposes no export path for them; we deliver a written inventory of every active workflow for the customer's team to rebuild in Twenty or a dedicated Gift Aid tool. File attachments require a separate download-and-upload pass because Twenty does not support file import via CSV.
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 Contact Beacon object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Contact Beacon
Contact
Twenty CRM
Person
1:1Beacon Contacts map to Twenty Persons. Standard fields (name, email, phone, address) migrate directly. Owner assignment resolves via email match against Twenty Users. Beacon's custom fields on Contacts map to custom fields on the Person object created via the /metadata API. We flag any multi-select custom fields because Twenty's custom field types have different picklist behaviors that may require restructuring.
Contact Beacon
Donation
Twenty CRM
Opportunity
1:1Beacon Donations map to Twenty Opportunities. The donation amount becomes the Opportunity amount, donation date becomes the close date, and the campaign tag becomes a custom Opportunity field linked to the Campaign object. Gift Aid boolean (true/false) transforms into a Gift Aid custom field with the claimed amount carried in a separate Gift_Aid_Amount__c custom field. We preserve the parent Contact relationship by linking the Opportunity to the corresponding Person record via the Twenty Person ID resolved at migration time.
Contact Beacon
Campaign
Twenty CRM
Custom Campaign Object
1:1Beacon Campaigns map to a Twenty custom object (Campaign__c) created at migration time via the metadata API. We create fields for campaign name, status (active/closed/paused), start date, and end date. Beacon campaign-linked donations reference this custom object via a lookup field on the Opportunity (donation). If Twenty's native workspace-level tracking is preferred, we configure opportunities with a campaign tag field at scoping based on the customer's reporting hierarchy.
Contact Beacon
Pipeline
Twenty CRM
Opportunity Stage
lossyBeacon Pipelines (donor journey stages) map to Twenty Opportunity stages. Stage names and order migrate as stage picklist values. Any conditional stage-routing logic from Beacon Pipelines (e.g. auto-advance based on donation amount) cannot migrate as automation and must be manually reconfigured in Twenty after migration.
Contact Beacon
Tag
Twenty CRM
Tag
1:1Beacon tags on Contacts and Donations migrate as flat label arrays into Twenty's tagging system. We flag any tags that correspond to inactive Beacon workflows, since the workflow reference is lost and the tag meaning may need clarification during post-migration data review.
Contact Beacon
Custom Field (Contacts/Donations)
Twenty CRM
Custom Field
lossyBeacon custom fields on Contacts and Donations are discovered at scoping. We create matching custom fields in Twenty via the /metadata API, mapping Beacon field types to Twenty field types. Multi-select picklists in Beacon map to multi-select in Twenty where supported; free-text fields map to text fields. Any unsupported field types are flagged for the customer's admin to review before migration.
Contact Beacon
Attachment
Twenty CRM
Attachment/File
1:1Beacon file attachments on Contact records are downloaded via individual API requests (one per attachment) and re-uploaded to Twenty as linked files. Large attachment batches are chunked to stay within Beacon's rate limits. Twenty does not support file import via CSV, so all attachments require the API pass rather than bulk loading. Files exceeding Twenty's size limits are flagged for manual re-upload.
Contact Beacon
User
Twenty CRM
User
1:1Beacon user accounts map to Twenty Users. We resolve by email match. Inactive Beacon users are imported as inactive Twenty Users or archived depending on the customer's preference. Owner assignment on migrated records uses the resolved Twenty User ID.
Contact Beacon
Workflow
Twenty CRM
Not Migrated
1:1Beacon automated workflows (Gift Aid submission triggers, thank-you email sequences, donor follow-up timers) are not accessible via the Beacon API or UI export and cannot be migrated. We run a workflow audit during scoping and deliver a written inventory of every active workflow with its trigger conditions, actions, and timing logic. The customer's admin rebuilds these in Twenty or a dedicated automation tool post-migration. Gift Aid submission workflows in particular require a separate UK HMRC-compatible tool rather than generic CRM automation.
Contact Beacon
Gift Aid Declaration
Twenty CRM
Custom Field (Person)
lossyBeacon stores Gift Aid eligibility as a boolean toggle on the Contact record. We map this to a Gift Aid Declaration custom field on the Twenty Person object and carry the declaration date and HMRC claim status in separate custom fields. The Gift Aid amount claimed historically migrates as a monetary custom field on the Person for reporting purposes. HMRC Gift Aid submission itself requires a dedicated tool outside Twenty's standard automation capabilities.
| Contact Beacon | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Donation | Opportunity1:1 | Fully supported | |
| Campaign | Custom Campaign Object1:1 | Fully supported | |
| Pipeline | Opportunity Stagelossy | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Custom Field (Contacts/Donations) | Custom Fieldlossy | Fully supported | |
| Attachment | Attachment/File1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Workflow | Not Migrated1:1 | Fully supported | |
| Gift Aid Declaration | Custom Field (Person)lossy | 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.
Contact Beacon gotchas
API keys are shown once and never recoverable
No bulk export endpoint forces paginated extraction
Revoked API keys are permanently invalidated
Workflows have no export path
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and schema mapping
We audit the source Contact Beacon portal: record counts for Contacts, Donations, Campaigns, Tags, and custom fields; active workflows and pipeline definitions; attachment volume; user list. We map Beacon's Gift Aid boolean flag to a custom Gift Aid Declaration field structure on Twenty's Person object and design the custom Campaign__c object schema. The discovery output is a written migration scope with record counts, custom field inventory, and Gift Aid field normalization plan.
Schema setup in Twenty
We create the destination schema in Twenty via the metadata API: the custom Campaign__c object, all custom fields on Person and Opportunity, and the Gift Aid declaration fields. We configure Opportunity stages to match Beacon Pipeline stages. Schema is validated in a staging workspace before production migration begins.
Paginated data extraction from Beacon
We run the Beacon export via paginated API reads across Contacts, Donations, Campaigns, Tags, and custom field values. We pace requests to stay within Beacon's rate limits, run extractions in off-peak hours, and resolve parent Contact IDs on every Donation record before the transform phase begins. Attachments are queued for a separate API pass.
Transform and Gift Aid normalization
We transform the extracted data: Gift Aid boolean to Gift_Aid_Declaration__c custom field with declaration date; donation amounts to Opportunity amount with close date; campaign tags to Campaign__c lookup; tags to flat label arrays. Owner IDs resolve by email match against the Twenty User table. Any unresolved lookups (e.g. donation referencing a deleted Contact) are held in a reconciliation queue.
Attachment migration pass
We download all file attachments from Beacon via individual API requests, chunked by rate limit. Each attachment is re-uploaded to Twenty and linked to the corresponding Person record. Files exceeding Twenty's size limits are flagged for manual re-upload by the customer.
Production migration and cutover
We run production migration in dependency order: Person records first (custom fields created), then Campaign__c records, then Opportunity records (with Person and Campaign lookups resolved). Users are validated before record migration. We freeze Beacon writes during cutover, run a final delta migration of any records modified during the window, then enable Twenty as the system of record. We deliver the Workflow and Pipeline inventory document to the customer's admin for rebuild in Twenty or a dedicated automation tool.
Platform deep dives
Contact Beacon
Source
Strengths
Weaknesses
Twenty CRM
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 Contact Beacon and Twenty CRM.
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
Contact Beacon: Not publicly documented in customer-facing materials; rate-limit headers returned on 429 responses.
Data volume sensitivity
Contact Beacon 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 Contact Beacon to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Contact Beacon to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Contact Beacon
Other ways to arrive at Twenty CRM
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.