Migrating To Stream From An In-House Solution Or Another Provider

LAST EDIT Nov 21 2022

Migrations are common during implementation and we have extensive experience with this process. We have assisted with migrations for our largest customers (ex. GameChanger, 9Count, Caffeine.tv, etc) from both other chat providers and in-house solutions. There are two different ways to migrate to Stream, both are explained below.

We recommend purchasing premium support to help with a large-scale migration. Premium support provides real-time engagement with our engineering team.

Hard Switch To Stream (requires a break in service and customers must upgrade their App)

  1. Schedule ideal time to stop service and perform migration

  2. Export all relevant data for Stream in the correct import format - import format & process

  3. Import data into Stream via the Stream Dashboard

  4. Validate and perform a sanity check

  5. Go live with Stream Chat!

Alternative: Seamless Integration To Stream Infrastructure (i.e. no break in service) 

  1. Create and begin running a mechanism (ex. webhook) to replicate data from your previous provider 

    ex: On Channel created -> create a Channel in Stream

  2. Export existing chat data in the required data format

    Note: You can provide an example export for Stream to review as well

  3. Import data into Stream via the Stream Dashboard

    Note: The Dashboard can upload files up to 100MB. If the file is larger than 100MB, please contact support@getstream.io or mention this in your shared slack channel.

  4. Setup and run reverse replication (so users in old app version can communicate with users in new app until they upgrade)

    ex. On Channel created -> create a Channel in the old provider system

  5. Rollout SDK updates to connect to the Stream API

It's best to provide a sample data import for review prior to your migration. This will help Streamline your migration process.

Mapping - How to keep existing Chat identifiers (ex. Channel ID) consistent when switching to Stream

It’s important to map existing data fields for users, messages, and channels to these entities in Stream. If you are using a Seamless Integration approach, it is important that the data import fields and permissions and other provider webhook fields and permissions are mapped correctly.

Please view the example mappings in the tables below

users

Copied!

Stream Field

In-House/Alternate Provider Field

Transformation

id

id

None

name

name

None

image

profile_image

None

**

custom_data

None

channels

Copied!

Stream Field

In-House/Alternate Provider Field

Transformation

id

id

None

type

private

public rooms map to livestream and private rooms map to messaging

created_by_id

created_by_id

None

name

name

None

members

member_user_ids

None

**

custom_data

None

messages

Copied!

Stream Field

In-House/Alternate Provider Field

Transformation

id

id

int → string

channel_type

N/A

Inherit from parent Channel

channel_id

N/A

Inherit from parent Channel

user

sender_id

None

text

parts

Take the content of the first element of the parts array with a part-type of inline and a mime-type of text/plain. If no such part exists (a small minority of messages) set to a sensible default.

type

N/A

regular

attachments

parts

All Provider message parts excluding the first part with a type of text/plain

**

custom_data

None