CRM migration

Migrate from Wealthengine to Twenty CRM

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

Wealthengine logo

Wealthengine

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Wealthengine and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

WealthEngine is a wealth-intelligence enrichment platform — it appends net-worth estimates, giving-capacity ratings, real-estate holdings, and propensity-to-give scores to person records in a connected CRM. It is not itself a CRM, so there are no native Deals, Pipelines, or Activities to migrate. The data that moves is WealthEngine's enrichment output: prospect profiles with contact fields and wealth attributes. Twenty CRM is a self-hostable open-source CRM with a People object, a Companies object, and an Opportunities object, plus a custom-object and custom-field layer for domain-specific data. FlitStack AI maps WealthEngine's flat person profiles to Twenty's People object, creates custom fields in Twenty's Data Model for net worth, real estate, and propensity-to-give scores before import, and links enriched People records to their parent Companies using Twenty's companyId relation. Twenty's REST and GraphQL APIs support bulk upsert for high-volume migrations. Workflows and sequences do not exist in WealthEngine's core model, so no automation rebuild is required — though any workflow logic built around WealthEngine enrichment scores in a connected CRM must be reimplemented in Twenty's workflow builder post-migration. FlitStack handles owner resolution by email match against Twenty workspace members and runs a sample migration with field-level diff before committing the full run.

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

Wealthengine logo

Wealthengine

What's pushing teams away

  • Prospect researchers report that data is sometimes missing or less precise for certain geographic regions, income brackets, or demographic segments, requiring manual verification before acting on scores.
  • WealthEngine operates on a subscription and API-call model with no publicly listed pricing, which creates uncertainty for organizations managing tight nonprofit budgets.
  • Nonprofit teams without dedicated development resources find the API-first approach and CRM integration setup to require more technical effort than expected.
  • Screening only enriches contacts the organization already has; WealthEngine does not supply net-new prospect names, so teams expecting a standalone prospecting tool feel the platform is limited to enrichment of existing lists.

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 Wealthengine objects map to Twenty CRM

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

Wealthengine

Person Profile

maps to

Twenty CRM

People

1:1
Fully supported

WealthEngine person profiles (name, email, phone, address) map directly to Twenty's People object. The import resolves People by email — each person record must be unique by email address in Twenty. If a person has multiple enrichment records from different screening batches, the most recent enrichment value wins for each attribute.

Wealthengine

Person Profile → Primary Company

maps to

Twenty CRM

Companies

1:1
Fully supported

When WealthEngine profile data includes employer or associated organization, that name maps to Twenty's Companies object using the domain or company name as the unique key. The import order enforces that Companies must exist before People records are imported so Twenty can resolve the companyId relation.

Wealthengine

Wealth Attribute: Net Worth Estimate

maps to

Twenty CRM

People → Custom Field (number or currency)

1:1
Fully supported

Twenty has no native net-worth field. FlitStack pre-creates a custom field (Net_Worth__c) in Twenty's Settings → Data Model as a currency or number type before the import runs. The WealthEngine net-worth value (e.g., '$2.4M – $4.1M') is stored as a number using the midpoint or lower-bound value per agreed mapping convention.

Wealthengine

Wealth Attribute: Estimated Income

maps to

Twenty CRM

People → Custom Field (number or currency)

1:1
Fully supported

Income data from WealthEngine requires a custom field (Estimated_Income__c) on the People object in Twenty. Income band values (e.g., '$250K–$500K') are stored numerically using the band midpoint; ranges that cannot be resolved are stored as a custom text field with the original label preserved.

Wealthengine

Wealth Attribute: Propensity to Give (P2G) Score

maps to

Twenty CRM

People → Custom Field (number)

1:1
Fully supported

WealthEngine's P2G score is a proprietary composite score (0–100 or similar scale) with no native Twenty equivalent. FlitStack creates P2G_Score__c as a custom number field on People and maps the score directly. The original score label (if any) is preserved in a companion P2G_Label__c text field.

Wealthengine

Wealth Attribute: Real Estate Holdings

maps to

Twenty CRM

People → Custom Field (text, multi-select, or custom object)

1:1
Fully supported

Real estate property counts, values, and addresses from WealthEngine require custom fields. If the migration includes multiple properties per person, FlitStack creates a custom object (Real_Estate_Property__c) linked to People via a one-to-many relation, or stores a summary string (property count, total value) on the People record as a text field — the choice is made during schema planning.

Wealthengine

Wealth Attribute: Charitable Giving History

maps to

Twenty CRM

People → Custom Field (text or custom object)

1:1
Fully supported

WealthEngine giving-capacity ratings (e.g., Gift Capacity Range, Inclination to Give) migrate to custom fields on the People object. If detailed donation history is included, a custom object (Giving_History__c) linked to People may be required; if summary scores only, fields like Giving_Capacity_Rating__c and Inclination_to_Give__c store the values directly.

Wealthengine

Wealth Attribute: Stock & Business Ownership

maps to

Twenty CRM

People → Custom Field (text)

1:1
Fully supported

WealthEngine's markers of wealth (stock holdings, private company ownership, board positions) map to text or multi-select custom fields on the People object. A custom field (Wealth_Markers__c) stores the full list as a comma-separated or multi-select value; a companion number field (Business_Ownership_Value__c) captures estimated value if provided.

Wealthengine

Screening Batch Metadata

maps to

Twenty CRM

People → Custom Field (text)

1:1
Fully supported

WealthEngine batch screening runs produce metadata (screening date, batch ID, screening tier) that is not a standard field on a profile. FlitStack creates a Screening_Batch__c text field and a Last_Screened__c date field on the People object to preserve the context of when and in what batch each enrichment record was produced.

Wealthengine

External Source Record ID

maps to

Twenty CRM

People → Custom Field (text)

1:1
Fully supported

WealthEngine's internal profile ID (the source system ID) is stored as Source_System_ID__c on the People record in Twenty. This enables delta-run reconciliation — when WealthEngine updates enrichment for a subset of profiles, FlitStack matches on Source_System_ID__c to update only the changed fields in Twenty without creating duplicates.

Wealthengine

Integration-Linked CRM Object (Account/Opportunity from connected CRM)

maps to

Twenty CRM

Companies / Opportunities

1:1
Fully supported

If WealthEngine was connected to a CRM that also holds Deals or Opportunities, those objects do not exist in WealthEngine itself — they live in the connected CRM. FlitStack does not migrate those records as part of a WealthEngine-to-Twenty migration; the recommendation is to run a parallel migration from the connected CRM to Twenty for Deals and Opportunities while the WealthEngine enrichment data migrates simultaneously.

Wealthengine

Workflows / Sequences

maps to

Twenty CRM

N/A

1:1
Fully supported

WealthEngine does not have native workflow or sequencing logic — it is a data-enrichment service, not a CRM with automation. Any automated rules that triggered enrichment calls in a connected CRM must be rebuilt in Twenty's workflow builder post-migration. FlitStack exports the rule definitions from the connected CRM as a reference for the rebuild.

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.

Wealthengine logo

Wealthengine gotchas

Medium

Profile lookups do not guarantee a match

Medium

API rate limits are plan-gated and not publicly documented

High

WealthEngine is an enrichment layer, not a contact database

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

  • WealthEngine is an enrichment layer, not a CRM — there are no native deals or activities to migrate

    WealthEngine appends wealth attributes to person profiles in a connected CRM via API or batch export; it does not itself store Deals, Opportunities, Tasks, or Notes. Teams migrating from WealthEngine to Twenty CRM must treat the migration as a data-enrichment export moving to Twenty's People object. Any Deals or Opportunities that were enriched by WealthEngine in the source CRM are NOT inside WealthEngine — those objects live in the connected CRM and require a separate migration path. FlitStack coordinates both migrations in a single project plan, but the two data sets are independent exports.

  • Twenty's CSV import requires all custom fields to exist before the import runs

    Twenty's documentation is explicit: 'Fields must exist before import. The CSV import creates records, not fields.' WealthEngine enrichment exports typically contain 15–30 custom attributes (net worth, P2G score, real estate holdings, giving capacity) that have no native Twenty equivalent. FlitStack creates all custom fields in Twenty's Settings → Data Model before any import executes. The custom field types (number, currency, text, select) are determined during schema planning based on WealthEngine's data types. Skipping this step results in import errors for every enriched field that has no corresponding Twenty field.

  • WealthEngine enrichment is a point-in-time snapshot — it does not transfer as a live API connection

    WealthEngine delivers enrichment via REST API (600 calls/min limit) or scheduled batch file delivery — the output is a static snapshot of what WealthEngine's database contained at query time. Twenty CRM has no native enrichment API and does not support real-time WealthEngine lookups. Migrated P2G scores, net worth estimates, and giving capacity ratings arrive in Twenty as static custom field values. If your team relied on enrichment freshness (e.g., re-screening prospects before a capital campaign), that re-enrichment workflow must be rebuilt post-migration using Twenty's workflow builder and a scheduled WealthEngine API export, or by re-running enrichment against WealthEngine's API on a defined schedule.

  • Multi-company affiliations in WealthEngine collapse to one companyId in Twenty

    WealthEngine profiles may reflect multiple employer affiliations or board positions — a prospect could be associated with a primary employer, a board role, and a private investment company simultaneously. Twenty's People object has a single companyId relation (one primary company). Secondary affiliations are not a native field in Twenty. FlitStack maps the primary employer as companyId, stores additional affiliations (board positions, private company ownership) as text in a custom field (Affiliations__c), and creates a custom object (Affiliation__c) with a one-to-many relation for teams that need full N:1 tracking of secondary affiliations.

  • WealthEngine's 600 calls/min rate limit affects batch export, not import

    WealthEngine's API rate limit (600 calls/min) constrains how fast FlitStack can pull enrichment data during the export phase, not how fast Twenty accepts records. For large prospect databases (500K+ records), the export phase extends because each API call returns one profile's enrichment data and the rate limit governs throughput. Twenty's import accepts up to 20,000 records per CSV export run, so the import side is not constrained by API rate limits — the constraint is on the WealthEngine export. FlitStack handles rate-limit backoff automatically during export and batches the result for efficient Twenty import.

Migration approach

Six steps for a successful Wealthengine to Twenty CRM data migration

  1. Audit WealthEngine export and map enrichment attributes to Twenty custom fields

    FlitStack pulls a sample of WealthEngine enrichment exports (typically 50–200 profiles) to catalog every attribute in the output: contact fields, wealth attributes (net worth, income, P2G score, real estate, giving capacity), screening metadata, and source record IDs. We then map each attribute to a Twenty field — either a native Twenty field (firstName, email, phone) or a custom field created in Twenty's Settings → Data Model. The mapping document is shared with you before any schema is created so you can confirm which attributes should become custom fields and which should be dropped.

  2. Pre-create custom fields in Twenty's Data Model

    Before any import runs, FlitStack creates all required custom fields in Twenty. Fields are created with correct types (number, currency, text, select, date) and, for select fields, with the exact pick-list options that map from WealthEngine's value set. Twenty's Settings → Data Model is the admin interface for this step. We also invite all team members who will be assigned as record owners before the import, since owner resolution in Twenty requires the user to exist in the workspace first — this follows Twenty's explicit requirement that 'users must exist in Twenty before import.'

  3. Export and stage WealthEngine data in load-order sequence

    Twenty's CSV import requires Companies to exist before People (for companyId resolution) and People to exist before Opportunities (for contact-role resolution). Since WealthEngine enrichment targets person profiles, the primary import is People → Companies. FlitStack exports WealthEngine company records first (with domain and industry), imports them to Twenty as Companies, then exports the enriched person profiles and imports them as People linked to the Companies via companyId. All custom wealth attributes are included in the People CSV with their pre-created custom field names as column headers.

  4. Run sample migration with field-level diff

    A representative slice — typically 100–500 records spanning the full attribute range (low, medium, and high wealth-score profiles) — migrates to Twenty first. FlitStack generates a field-level diff comparing source values from the WealthEngine export against the values that landed in Twenty's custom fields. You verify that P2G scores, net worth estimates, and giving capacity ratings match the export exactly. Owner resolution (email-to-workspace-member matching) is also validated at this stage. The diff report is shared before the full migration commits.

  5. Full migration with delta-pickup and rollback guard

    The full enrichment export migrates to Twenty. A delta-pickup window (24–48 hours) runs after the initial load to capture any WealthEngine records that were enriched or updated during the migration window — particularly relevant for teams running a capital campaign screening round that updates scores for a subset of prospects. FlitStack's audit log records every record created or updated. One-click rollback is available if the field-level reconciliation reveals unexpected value shifts in the Twenty custom fields.

Platform deep dives

Context on both ends of the pair

Wealthengine logo

Wealthengine

Source

Strengths

  • Aggregates data from 60+ sources into a single normalized wealth profile on U.S. individuals.
  • Provides the Propensity to Give (P2G) score and Gift Capacity Range, which are uncommon in general-purpose CRMs.
  • Batch Screening handles large donor files without per-record manual lookups.
  • RESTful API with sub-second response times and sandbox environment for testing.
  • Direct integrations with Salsa and Salesforce reduce engineering overhead for common nonprofit CRM stacks.

Weaknesses

  • WealthEngine does not supply net-new prospect names — it only enriches records the customer already holds.
  • Profile coverage is not uniform across all U.S. adults; match rates vary by lookup identifier (name/address vs. email vs. phone).
  • Pricing is not publicly documented, making budget planning difficult for organizations without dedicated sales engagement.
  • API-first architecture means non-technical fundraisers depend on IT or developer resources to set up and maintain integrations.
  • Modeled fields (e.g., Estimated Donations, Net Worth ranges) are algorithmic estimates, not verified financial data.
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. 1 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 Wealthengine and Twenty CRM.

  • Object compatibility

    B

    1 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

    Wealthengine: 600 calls per minute baseline; daily/monthly limits are plan-gated and not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Wealthengine 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 Wealthengine to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most WealthEngine-to-Twenty migrations complete in 48–72 hours for under 50,000 enriched profiles. The longest phase is schema planning — pre-creating 15–30 custom fields in Twenty's Data Model and confirming the mapping for net worth bands, P2G scores, and real estate fields. For datasets over 500,000 profiles or multi-batch enrichment exports with mixed screening dates, the timeline extends to 5–7 days. Discovery and schema setup add 3–5 business days before the first import runs.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Wealthengine.
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