CRM migration

Migrate from Brokerkit to Twenty CRM

Field-level mapping, validation, and rollback between Brokerkit and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Brokerkit logo

Brokerkit

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Brokerkit and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Brokerkit organizes real estate brokerages around agent recruiting and retention: it tracks agents as contacts, brokerages as companies, and deals tied to recruitment pipelines with stage-entered timestamps. Twenty CRM uses a People object (equivalent to contacts), a Companies object (equivalent to accounts), and an Opportunities object for deal tracking — with a fully customizable data model that supports custom fields and custom objects created directly in Settings → Data Model. The migration carries all standard objects (agents, companies, deals, notes, tasks) via Twenty's REST API using CSV-prepped batches, with field-level diff before commit. We surface the import-order constraint explicitly: Companies load before People, then Opportunities, because Twenty requires the "one" side of a relationship to exist before the "many" side references it. Any Brokerkit automations — drip sequences, campaign workflows, agent-alert triggers — do not migrate; we provide an exported configuration reference for rebuild in Twenty's Workflows module. Custom fields that don't map to Twenty's standard fields are created pre-import in Settings → Data Model so no records land without their target fields ready.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Brokerkit logo

Brokerkit

What's pushing teams away

  • The platform lacks deep customization options, leaving brokerages with non-standard recruiting workflows forced to work around the tool's opinionated structure.
  • Canadian market integrations do not exist, and no native equivalents to US tools like RealMetrix means international teams have no path forward within the platform.
  • Reporting and analytics fall short for teams that need pipeline attribution broken down beyond basic source-level tracking.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Brokerkit objects map to Twenty CRM

Each row shows how a Brokerkit 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.

Brokerkit

Contact (Agent)

maps to

Twenty CRM

People

1:1
Fully supported

Brokerkit agents map to Twenty's People object. Name, email, and phone migrate directly. Brokerkit's agent-status field (e.g., active, inactive, prospect) becomes a custom select field in Twenty — created in Settings → Data Model before the import batch runs so the field exists at load time.

Brokerkit

Company (Brokerage)

maps to

Twenty CRM

Company

1:1
Fully supported

Brokerkit brokerage companies map to Twenty's Companies object. Name, domain, address, and industry fields migrate directly. Brokerkit allows multiple contacts per company (N:1); Twenty enforces a primary CompanyId on People — the most-recently-modified contact's company is set as primary; additional associations surface as Company Relations if needed.

Brokerkit

Deal (Recruiting Pipeline)

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Brokerkit recruiting deals map to Twenty's Opportunities object. Deal name, amount, stage, close date, and owner migrate directly. Brokerkit's recruiting pipeline stages (e.g., Contacted, Interviewing, Offer Extended) map to Opportunity Stage pick-list values — these must be defined in Twenty's Settings → Data Model as select options before the import batch references them.

Brokerkit

Pipeline

maps to

Twenty CRM

Stage (select options on Opportunity)

1:1
Fully supported

Brokerkit pipelines become sets of Stage pick-list values on the Opportunity object. Each Brokerkit pipeline maps to a distinct Stage option group in Twenty — not a separate object. If Brokerkit uses multiple pipelines (e.g., Agent Recruiting vs. Retention), these can be modeled as separate Opportunity records with a Pipeline__c custom select field in Twenty.

Brokerkit

Activity (Call, Email, Meeting)

maps to

Twenty CRM

Task / Note

1:1
Fully supported

Brokerkit activity records (calls, emails, meetings, notes) map to Twenty's Tasks and Notes objects. Original timestamps and activity owners (resolved by email match against Twenty workspace members) are preserved. Tasks inherit the linked People or Opportunity record via the targetId field.

Brokerkit

Owner / User

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Brokerkit owner assignments resolve by email match against Twenty workspace members. All team members who appear as owners must accept their Twenty invitation before migration so their email is registered — otherwise records land assigned to a fallback owner or an unassigned state.

Brokerkit

Tag

maps to

Twenty CRM

Custom select (People)

1:1
Fully supported

Brokerkit tags applied to agents are mapped to a custom multi-select or single-select field on the People object. We create a Tags__c custom field in Twenty's Settings → Data Model and configure each Brokerkit tag value as a corresponding select option. This preserves the full tag taxonomy from Brokerkit within Twenty's structured data model.

Brokerkit

Agent Source

maps to

Twenty CRM

Custom field on People

1:1
Fully supported

Brokerkit tracks how agents entered the funnel (referral, job board, inbound). This field has no native equivalent in Twenty's People object — we create a Source__c custom select field in Twenty's data model and map each Brokerkit source value one-to-one.

Brokerkit

Sequence / Campaign

maps to

Twenty CRM

No equivalent — manual rebuild

1:1
Fully supported

Brokerkit drip sequences, automated SMS campaigns, and recruiting alerts are workflow constructs with no data-layer equivalent. These do not migrate. We export Brokerkit's sequence configuration (step order, delay days, message templates) as a structured JSON reference for your Twenty admin to rebuild using Twenty's Workflows module.

Brokerkit

Custom Object (e.g., Licensing Record, Recruiting Cohort)

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Any Brokerkit custom objects (e.g., licensing records tied to agents, cohort groups for training batches) map 1:1 to Twenty custom objects. Custom object creation is done in Twenty's Settings → Data Model before import. N:N relationships between custom objects use Twenty's Relation field type.

Brokerkit

Attachment / File

maps to

Twenty CRM

Note attachments

1:1
Fully supported

Files attached to Brokerkit records (e.g., agent resumes, offer letters, licensing documents) are re-uploaded to Twenty as Note attachments on the corresponding People, Company, or Opportunity record. Inline images embedded in Brokerkit note bodies are extracted, downloaded, and re-hosted as Note attachments in Twenty. File size limits in Twenty's current release apply and are flagged in the pre-flight report.

Brokerkit

System IDs / Audit trail

maps to

Twenty CRM

Custom fields for traceability

1:1
Fully supported

Brokerkit internal record IDs are preserved as a Source_System_ID__c custom field on each Twenty object for traceability and delta-run de-duplication. Original create dates are preserved as Created_At__c custom datetime fields on each record since Twenty's native CreatedDate timestamp reflects migration execution time rather than the source record's original creation date.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Brokerkit logo

Brokerkit gotchas

High

CSV exports truncate long text fields

High

No public API means migration tooling is limited

Medium

Plan tier limits restrict what data exists

Medium

Integration connections do not transfer on migration

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Twenty CRM requires all custom fields created before import — records referencing non-existent fields fail silently

    Twenty's CSV import mechanism reads field names from the uploaded CSV and validates them against the data model at import time. If a Brokerkit field (e.g., agent source, recruiting cohort, custom status) has no corresponding Twenty field, that column is ignored and the data is lost for that field. FlitStack AI pre-creates all required custom fields in Settings → Data Model before any import batch runs. The process: enumerate all Brokerkit custom fields → create matching custom fields (with correct type: select, text, number, date, URL) in Twenty → verify fields appear in the People/Company/Opportunity layout → then run the import. This sequencing is the single most common point of failure in self-serve Twenty migrations and we handle it as a precondition step.

  • Import load order is mandatory — Companies before People before Opportunities

    Twenty enforces referential integrity at import time: People records with a companyId foreign key must reference a Company record that already exists in the workspace. Opportunities that reference a personId must have that People record present. FlitStack AI sequences the migration as three separate batch loads: (1) Companies first using domain or company name as the unique key, (2) People second with companyId resolved against the imported Companies, (3) Opportunities last with personId and companyId resolved. Skipping or reordering these batches causes orphaned records or failed lookups. Brokerkit's data export must also be split by object type before CSV formatting begins.

  • Brokerkit automations — sequences, campaigns, agent alerts — have no export path and must be rebuilt

    Brokerkit's drip sequences, automated SMS campaigns, and agent-alert triggers store automation logic in a format that is not accessible via Brokerkit's public API. Twenty's Workflows module provides a comparable automation builder (trigger → condition → action), but the configuration cannot be imported directly. FlitStack AI exports Brokerkit's sequence definitions as a structured JSON document listing step order, delay days, message content, and trigger conditions. This document serves as the rebuild specification for your Twenty admin or consultant to reconstruct the automation logic in Twenty's Workflows module after migration.

  • Twenty CRM exports only visible columns — export views must be pre-configured or data is truncated

    Twenty's CSV export function exports only the columns visible in the current view. If your workspace view hides certain fields (custom fields added after initial setup, or fields not added to the active view), those columns are absent from the export. For a Brokerkit migration, we configure the export views in Twenty's Settings → Data Model before exporting: ensure all standard and custom fields are added to the People, Company, and Opportunity view columns. Brokerkit's export tool has no such constraint, but the destination-side visibility gap is a common source of incomplete exports during CRM migrations.

  • Twenty's self-hosted deployment requires Docker/PostgreSQL setup before migration can target it

    If the destination is Twenty CRM's self-hosted deployment (AGPL-3.0), the target PostgreSQL instance must be provisioned, Twenty must be installed (Docker or manual), and all workspace members must be invited and active before FlitStack AI can run the migration. We flag any workspace members in Brokerkit who do not yet have a Twenty account — those members' records land as unassigned or fall to a fallback assignee. Cloud-hosted Twenty workspaces (Pro or Organization plan) do not have this precondition, but API access must be enabled on the plan.

Migration approach

Six steps for a successful Brokerkit to Twenty CRM data migration

  1. Audit Brokerkit data and enumerate custom fields

    FlitStack AI connects to Brokerkit via scoped read access and exports all objects: Contacts (agents), Companies (brokerages), Deals, Notes, Tasks, and any custom objects. We catalog every custom field, pick-list value, and relationship between objects. This audit produces a data inventory that determines the number of Twenty custom fields to create, the import batch count, and any data-quality issues (duplicate emails, missing required fields) to flag before migration begins.

  2. Create Twenty custom fields and workspace structure

    Before any records are imported, FlitStack AI creates all required custom fields in Twenty's Settings → Data Model. This includes: source-tracking select fields on People, tag-based multi-select fields, custom status fields, and any Pipeline__c custom fields for multi-pipeline setups. Workspace members who appear as record owners in Brokerkit must have accepted their Twenty invitations so their email is registered for owner-resolution. The import-load sequence (Companies → People → Opportunities) is documented and shared with the customer for confirmation.

  3. Resolve owners and validate relationship keys

    Every Brokerkit owner (recruiter, team lead) is matched by email against Twenty workspace members. Unmatched owners are flagged in a pre-flight report — the customer either invites them to Twenty or designates a fallback assignee. Foreign keys between objects (companyId on People, personId and companyId on Opportunities) are validated against the unique keys (email for People, domain for Companies) to confirm all lookups will resolve before the import batch runs. Duplicate records and circular references are flagged and resolved with customer input.

  4. Run sample migration with field-level diff

    A representative slice (typically 100–500 records spanning agents, companies, deals, and activities) migrates first using Twenty's REST API batch import. FlitStack AI generates a field-level diff between the Brokerkit source values and the Twenty destination values so the customer can verify: custom field creation, pick-list value mapping, owner resolution, and relationship integrity. The customer signs off on the sample before the full migration commits. Any mapping corrections are applied to the full migration plan before execution.

  5. Full migration with delta-pickup window and audit log

    The full migration runs in three sequenced batches: Companies, then People (with companyId lookups resolved), then Opportunities (with personId and companyId lookups resolved). A delta-pickup window (24–48 hours) runs concurrently: any Brokerkit records created or modified during the cutover window are captured and migrated as a final batch. FlitStack AI maintains an audit log of every operation — record count per object, timestamp, owner resolution, and any errors. One-click rollback is available if reconciliation fails. Post-migration, we deliver a data-integrity report comparing record counts and a sample of field values between source and destination.

Platform deep dives

Context on both ends of the pair

Brokerkit logo

Brokerkit

Source

Strengths

  • Tiered plans scale from solo broker to 10-seat brokerage with predictable per-user pricing.
  • Built-in SMS and email follow-up sequences without requiring a separate engagement platform.
  • Multi-admin account support on Core and Expansion tiers enables office manager delegation.
  • Strong customer support reputation with responsive ticket resolution and webinar-based onboarding resources.

Weaknesses

  • No public API documentation means migration relies on CSV exports, which can truncate long text fields.
  • Canadian market has no integrations or localization, making the platform US-only for practical purposes.
  • Limited customization compared to general-purpose CRMs like HubSpot or Follow Up Boss.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Brokerkit and Twenty CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Brokerkit: Not publicly documented — confirm with Brokerkit support during scoping..

  • Data volume sensitivity

    B

    Brokerkit doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Brokerkit to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Brokerkit to Twenty CRM data migrations

Answers to the questions buyers ask most during Brokerkit to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Brokerkit to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Brokerkit-to-Twenty CRM migrations complete in 48–72 hours of clock time for under 20,000 total records. Larger setups with 20,000–100,000 records or 10+ custom fields per object extend to 7–14 days. The longest step is custom field creation in Twenty's Settings → Data Model and the pre-flight owner resolution pass — both happen before any data moves. Twenty's CSV import rate limits (20,000 records per export batch) and API throughput on the Pro plan (50 API calls per minute) determine the actual load window for larger datasets.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Brokerkit.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day