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

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.

<admonition type="info">

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

</admonition>

**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](/chat/docs/<framework>/import/)

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](/chat/docs/<framework>/import/)

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

3. Import data into Stream via the [Stream Dashboard](/chat/docs/<framework>/import/)

Note: The Dashboard can upload files up to 100MB. If the file is larger than 100MB, please contact <https://getstream.io/contact/support/> 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

<admonition type="info">

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

</admonition>

**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

| Stream Field | In-House/Alternate Provider Field | Transformation |
| ------------ | --------------------------------- | -------------- |
| id           | id                                | None           |
| name         | name                              | None           |
| image        | profile_image                     | None           |
| \*\*         | custom_data                       | None           |

#### channels

| 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

| 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                                                                                                                                                                                                |

---

This page was last updated at 2025-08-15T14:15:16.990Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/react-native/migration_to_stream_from_other_solution/](https://getstream.io/chat/docs/react-native/migration_to_stream_from_other_solution/).