CRM migration

Migrate from InStream to Twenty CRM

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

InStream logo

InStream

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

73%

8 of 11

objects map 1:1 between InStream and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from InStream to Twenty CRM is a migration from a lightweight social-contact CRM to an open-source, self-hosted CRM with a modern data model. InStream's Contact and Company objects map directly to Twenty's Person and Company objects, and its Kanban-style Deals map to Twenty's Opportunities. The critical migration decisions center on preserving social profile URLs (which InStream links from LinkedIn, Twitter, and Facebook but does not store as independent fields), resolving InStream's free-text pipeline stage names against Twenty's configurable stages, and transforming InStream list membership into Twenty's tagging system. We do not migrate InStream workflows, automations, or social enrichment snapshots as code or data — these require manual rebuild in Twenty. Twenty is self-hosted, so the customer's team is responsible for infrastructure, not a SaaS provider.

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

InStream logo

InStream

What's pushing teams away

  • Feature set is too basic for growing teams — users outgrow it when they need advanced automation, custom reporting, or deeper CRM capabilities.
  • Loading performance degrades occasionally, creating friction for daily users who depend on quick access to contact and deal data.
  • Integration ecosystem is narrow; users with complex tech stacks find the Gmail-Facebook-Twitter-LinkedIn-only integrations limiting.
  • Gap between Basic and Business plan pricing leaves solos and very small teams without a mid-tier option, forcing an expensive jump for additional features.

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

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

InStream

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

InStream Contact records map to Twenty Person. The Person record receives name fields, email, phone, and any social profile URLs extracted from InStream's LinkedIn, Twitter, and Facebook fields. We extract these as URL fields on the Person record, not as enriched data snapshots, since InStream does not store the enrichment as independent fields — it is linked from the external social APIs at access time.

InStream

Company

maps to

Twenty CRM

Company

1:1
Fully supported

InStream Company records map directly to Twenty Company. The domain and website fields transfer, and the Company is linked to all associated Person records via the standard relationship. We resolve the Company-Person link during migration to ensure Person records reference the correct parent Company.

InStream

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

InStream Deals map to Twenty Opportunities. The deal name, value, and expected close date transfer directly. Pipeline stage mapping is the critical step: InStream uses free-text stage names with no enforced taxonomy, so we capture the original stage name, stage order, and probability (if set) during discovery and create matching stage values in Twenty's pipeline configuration before migration.

InStream

Pipeline Stage

maps to

Twenty CRM

Pipeline Stage

lossy
Fully supported

Each InStream pipeline's stage names are user-defined and unnormalized, meaning 'Lead' in one account can mean 'Qualified' in another. We document every distinct stage name and its position in the pipeline during discovery, then configure Twenty's pipeline stages to match the original order and naming. Probability values transfer where set; we flag any stage without a probability as needing manual assignment in Twenty.

InStream

List

maps to

Twenty CRM

Tag

1:many
Fully supported

InStream Lists segment Contacts into named groups. We transform list membership into Twenty Tags, creating a tag per list and applying it to all Person records that were members. The list-to-tag mapping is documented so that if the customer used list names as campaign cohorts, those groupings are preserved as tag filters in Twenty.

InStream

Activity: Email

maps to

Twenty CRM

TimelineEntry (Email)

1:1
Fully supported

InStream email history attached to a Contact migrates as a TimelineEntry with type=email in Twenty. The email body, subject, sender/recipient addresses, and timestamp transfer. We resolve the target Person record by email match before inserting the activity.

InStream

Activity: Call

maps to

Twenty CRM

TimelineEntry (Call)

1:1
Fully supported

InStream call logs migrate as TimelineEntry records with type=call in Twenty. Call duration, disposition notes (where present), and timestamp transfer. The target Person record is resolved by email lookup before the activity is attached.

InStream

Activity: Meeting

maps to

Twenty CRM

TimelineEntry (Meeting)

1:1
Fully supported

InStream meeting records migrate as TimelineEntry with type=meeting. Title, date, location, and attendee list transfer. Attendees resolve to Person records by email match, creating the association in Twenty's meeting record.

InStream

Activity: Note

maps to

Twenty CRM

TimelineEntry (Note)

1:1
Fully supported

InStream Notes attached to Contacts migrate as TimelineEntry records with type=note in Twenty. The note body and timestamp transfer directly, linked to the target Person record.

InStream

Tag

maps to

Twenty CRM

Tag

1:1
Fully supported

InStream tags on Contacts transfer as Twenty Tags. Tag names are preserved verbatim, and multiple tags on a single Contact become multiple Tag records associated with that Person. We deduplicate tags by name during the transform to avoid duplicate Tag records in Twenty.

InStream

Custom Field

maps to

Twenty CRM

Custom Field

lossy
Fully supported

InStream's custom field schema is not publicly documented via API. We extract field definitions from the UI export (CSV or JSON) during discovery and cross-reference them against Twenty's custom field API via /metadata. Any unmapped custom fields are flagged for manual review and created in Twenty before the record migration begins. This is a higher-risk step for this pair because the custom field extraction relies on the customer's UI export quality.

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.

InStream logo

InStream gotchas

High

Free plan 100-contact cap applies to total contacts, not just active ones

Medium

Social profile enrichment does not migrate as raw data

Medium

Pipeline stage names are free-text and not normalized

Low

Custom fields schema is not publicly documented

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

  • Social enrichment URLs transfer but the data snapshot does not

    InStream pulls social profile data from LinkedIn, Twitter, and Facebook at access time via external API calls. This enrichment is not stored as independent fields — it is linked. When migrating out of InStream, the social profile URLs are available and we map them to the Person record, but the enriched data snapshot (profile photo, headline, mutual connections) does not transfer because it was never persisted locally. We extract and map all native contact fields explicitly and flag any social data that relies on the live InStream-to-social connection as requiring re-enrichment in Twenty.

  • Free-text pipeline stage names require explicit mapping or they are mislabeled

    InStream allows users to name pipeline stages arbitrarily with no enforced taxonomy or validation. 'New', 'Initial', or 'First Contact' in one account may represent entirely different funnel positions. We capture every distinct stage name and its ordinal position during discovery and configure matching stage values in Twenty before any Deal or Opportunity records are migrated. Without this step, Deals land in Twenty with stages that do not match the customer's original funnel logic, and pipeline reporting becomes unreliable from day one.

  • Custom field extraction depends on InStream's UI export quality

    InStream does not publish its custom field schema via a public API reference. We extract field definitions from the customer's UI export (CSV or JSON) and cross-reference them against Twenty's /metadata API. If the InStream export does not include all custom field names, types, and values, those fields are not migrated. We flag this constraint during scoping and require the customer to confirm that their InStream export reflects the complete custom field inventory before migration begins.

  • Twenty automations and workflows are not migrated as code

    Twenty supports workflow automation via triggers, actions, and background jobs, but the automation logic is platform-specific and not transferable from InStream's workflow builder. We do not migrate InStream workflow rules as code. We deliver a written inventory of every active InStream workflow rule (trigger, conditions, actions) with a note on whether the equivalent behavior can be configured in Twenty's automation system, so the customer's admin can rebuild them manually.

Migration approach

Six steps for a successful InStream to Twenty CRM data migration

  1. Discovery and InStream export

    We audit the InStream account for Contact count, Company count, Deal count, pipeline stage names and order, list names and membership counts, engagement volume, and any custom field definitions present in the UI. We request a full CSV or JSON export from InStream and review it for completeness. This phase identifies whether the export includes all custom field data and flags the social profile enrichment limitation for the customer before migration begins.

  2. Twenty schema configuration

    We set up the Twenty CRM workspace by creating the pipeline with stage values that match InStream's original stage names and order, creating any custom fields (extracted from the InStream export) via Twenty's /metadata API, and verifying the Person, Company, and Opportunity object structure is in place before records are written. This is performed in a staging or development Twenty instance first for validation.

  3. Record dependency mapping and transform

    We build the migration transform in dependency order: Companies first (so Person records can reference a parent), then Persons (with social profile URLs extracted from the source fields and the Company link resolved), then Opportunities (with stage names mapped to the configured Twenty stage values and the Person/Company links resolved), then Tags (deduplicated and created before list membership is applied), then list membership applied as Person-Tag associations, then Activities (emails, calls, meetings, notes) linked to the resolved Person records. Each phase emits a row-count reconciliation report.

  4. Sandbox or staging migration and reconciliation

    We run a full migration into a staging Twenty instance (or a copy of the target environment). The customer reviews a random sample of migrated records against the InStream source and validates pipeline stage labels, tag membership, and activity timestamps. We correct any mapping errors in the transform before the production migration runs.

  5. Production migration and cutover

    We freeze writes to InStream during the cutover window, run a delta extraction for any records modified since the initial export, apply the transform, and load into the production Twenty instance. We verify row counts match across all object types. Any record with an unresolved parent reference (Person without a Company, Opportunity without a Person) is held in a reconciliation queue and reported to the customer for manual resolution.

  6. Workflow inventory handoff and post-migration support

    We deliver a written inventory of every active InStream workflow rule with its trigger, conditions, and actions. The inventory includes a note on whether each workflow has a direct Twenty equivalent or requires a different approach. We do not rebuild InStream automations inside the migration scope. We support a three-day post-migration window where we resolve reconciliation issues and answer questions about the migrated data in Twenty.

Platform deep dives

Context on both ends of the pair

InStream logo

InStream

Source

Strengths

  • Free plan for 1 user and 100 contacts enables zero-cost evaluation.
  • Social media integration pulls LinkedIn, Twitter, and Facebook data into contact records automatically.
  • Grid view gives a visual at-a-glance summary of pipeline status across all leads.
  • Contact import is straightforward, with responsive support available during initial setup.

Weaknesses

  • CRM features are basic — no advanced automation, custom reporting, or workflow builder beyond simple lists.
  • Performance occasionally slows, which disrupts daily use for contact-heavy workflows.
  • Integration library is limited to Gmail and major social platforms, excluding many common business tools.
  • Pricing tier jump from Basic to Business is steep, leaving solos without a comfortable mid-range option.
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 InStream 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

    InStream: Not publicly documented..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most InStream to Twenty migrations land between two and four weeks for accounts with under 5,000 Contacts, 1,000 Companies, and 500 Deals. Migrations with active custom fields, large list membership volumes, or engagement histories exceeding 50,000 activity records extend to four to eight weeks because of the field-extraction and tag-transformation steps. Twenty's self-hosted deployment also adds time if the customer's infrastructure is not provisioned before migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

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