---
schema_version: "1"
id: 981ac10bdee3b5007d3b171afc8ba55d8afc7384f9255f9f7c574efceece1289
title: Migrate Peer-to-Peer Conversations to Your Experience Cloud Site
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/experience/264-0-0/networks_convo_migrate.md
canonical_url: https://help.salesforce.com/s/articleView?id=experience.networks_convo_migrate.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: ece99fd315def15a928f6fdac7e7995f89cf2467a243f17e57a70297c19ed1db
description: Migrating peer-to-peer conversations from other platforms can be a part of creating an Experience Cloud site. Understand the steps to take before migrating and how to use Data Loader to migrate conversations.
products:
  - Experiences
release: "264"
---
# Migrate Peer-to-Peer Conversations to Your Experience Cloud Site

Migrating peer-to-peer conversations from other platforms can be a part of creating an Experience Cloud site. Understand the steps to take before migrating and how to use Data Loader to migrate conversations.

### Required Editions

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small edition"><colgroup><col></colgroup><tbody><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in: both Salesforce Classic and Lightning Experience</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in: <strong>Enterprise</strong>, <strong>Performance</strong>, <strong>Unlimited</strong>, and <strong>Developer</strong> Editions</td></tr></tbody></table>

Before you can load your data, perform these steps.

- [Create your Experience Cloud site](https://help.salesforce.com/articleView?id=networks_setup_basics.htm&type=5&language=en_US).
- Create the profiles to assign to your internal and external users, as applicable.
- [Assign profiles to your site](https://help.salesforce.com/articleView?id=networks_customize_members.htm&type=5&language=en_US) (**Setup** | **All Sites** | **Workspaces \[for the site you’re working on\]** | **Administration** | **Members**).
- Create an Account and Contact (for B2B sites) or a Person Account (for B2C sites) before creating an external user. Internal users (employees of your company) aren’t linked to accounts and contacts. Your internal users can exist in Salesforce, so you don’t need to create them as users.
- Put together a plan for how to migrate your data. Identify how to transform the data from your current format into the format that Salesforce uses. We recommend that you do a trial run of your data load into a full sandbox before migrating in production. Create a guide to refer to when you do the load into production.
- As with all data migrations, do a test load of a few records first. Ensure the data looks as you expect, and then proceed with the full load. This process is especially important when loading conversations to ensure that they render the way you expect them to.

![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-experience-communities-264-0-0-production-enus/bf7df212-91a1-4fa3-a007-4d6f3e3b470b/images/icon_important.png)

Important

- When you create site users during the data load, don’t send a welcome email. You can prevent this action by taking your site offline or by deactivating the welcome email option.
- To prevent users from receiving Chatter email alerts during the data load, turn off emails for all your site members. Email notification preferences are site-specific and are stored in the `NetworkMember` object. Query `NetworkMember (SELECT Id,NetworkId,PreferencesDisableAllFeedsEmail FROM NetworkMember WHERE NetworkId = 'ENTER YOUR 18-DIGIT SITE ID HERE')` and set the `PreferencesDisableAllFeedsEmail` field for all users in the community to `TRUE`. Be sure to set it back to `FALSE` after the entire data load is complete so that site members get email notifications after the site is live. We advise not globally disabling all system emails from your sandbox when doing a test load. Disabling all system emails when doing the data load in production prevents other departments that also use your Salesforce instance from sending email.

There are many dependencies between objects when migrating posts, so it’s important to pay attention to the order in which the data is loaded. Here is our recommended order and the key required fields to populate to be successful.

1. Load Accounts
    
    Ensure that the Account Owner for each account has a role assigned to their user. If you aren't specifying an Account Owner, ensure that the user doing the data load has a role assigned to them. Users without an assigned role can't load users.
    
    - For business accounts—`Account Name`
    - For person accounts—`First Name`; `Last Name`
2. Load Contacts
    
    If you're using person accounts, upload contacts as they're automatically created when you load their information to the Accounts object. At a minimum, load these fields:
    
    - `AccountId`
    - `First Name`
    - `Last Name`
3. Load Users
    
    Required fields:
    
    - `ContactId`: Leave blank if creating a user in your Salesforce org who works for your organization. Only external users must be linked to a contact.
    - `FirstName`
    - `LastName`
    - `Email`
    - `Username`: The username in the format of an email address that members use to log in and isn't visible to anyone else in the site.
    - `Alias`: The alias doesn't appear anywhere in the site, but it's a globally required field in Salesforce.
    - `Nickname`: If you choose to use a nickname instead of first and last names, the nickname appears to users in the site.
    - `ProfileId`
    - `LanguageLocaleKey`: The user's language and locale.
    - `LocaleSidKey`: The two-digit ISO language code. For example, English (United States) is en\_US.
    - `TimeZoneId`
    - `EmailEncodingKey`: The email encoding for the user, such as ISO-8859-1 or UTF-8.
4. Load Collaboration Groups
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:27.47252747252747%">
              <col style="width:72.52747252747253%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e274">Required Field</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e277">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e274 "><code>GroupName</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e277 ">&nbsp;</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e274 "><code>OwnerId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e277 ">The user ID of the person who owns the group.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e274 "><code>CollaborationType</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e277 ">
                  <p>Controls the visibility of the group:
                  </p>
                  <ul>
                    <li>Public: Anyone can see and post updates. Anyone can join a public group.</li>

                    <li>Private: Only members can see the group feed and post updates. Non-members can see only the group name and a few other details in list views, search, and on the group page. The group's owner or managers add members who request to join the group.</li>

                    <li>Unlisted: Only members and users with the Manage Unlisted Groups permission can see the group and post updates. Other users can't access the group or see it in lists, search, or feeds.</li>

                  </ul>
                </td>

              </tr>
            </tbody>
          </table>
5. Load Collaboration Group Members
    
    Required fields:
    
    - `GroupId`: The ID of the group
    - `CollaborationRole`: If the user is a Standard or Admin user.
    - `MemberId`: The user ID of the member.
6. Load Topics
    
    Required fields:
    
    - `Name`
    - `Description`
    - `NetworkId`: The 18-digit Experience Cloud site ID.
7. Load Content Documents
    
    For information about how to load files, see [Upload Content with the Data Loader](https://help.salesforce.com/articleView?id=loader_content.htm&language=en_US). You can leave the `ParentId` (for example, Library) field blank because files attached to Chatter records typically aren't stored in Libraries.
8. Load Feed Items
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:22.271714922048996%">
              <col style="width:77.728285077951%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e418">Required Field</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e421">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>Body</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">The main content of your post. Only <a href="https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_feeditem.htm" target="_blank">specific HTML tags are supported</a>, so
                  make sure to clean your data before attempting to upload.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>Type</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">
                  <p><a href="https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_feeditem.htm" target="_blank">The kind of post</a> made. Common options
                    include: </p>
                  <ul>
                    <li><code>AdvancedTextPost</code>: For announcements in groups</li>

                    <li><code>ContentPost</code>: A post with an attached file</li>

                    <li><code>QuestionPost</code>: Used for posting a question to a topic or
                      group</li>

                    <li><code>PollPost</code>: Used if the post includes a poll in groups</li>

                    <li><code>LinkPost</code>: A post with an attached URL</li>

                  </ul>
                </td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>IsRichText</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">
                  <ul>
                    <li><code>True</code>: Use when there's <a href="https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_feeditem.htm" target="_blank">HTML markup</a></li>

                    <li><code>False</code>: Use if plain text</li>

                  </ul>
                </td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>NetworkScope</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">The 18-digit site ID. To get the ID, query the Network object in Data
                  Loader using: <code>SELECT Id,Name FROM Network</code></td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>ParentId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">For group posts, enter the <code>CollaborationGroup</code> ID. For
                  topic posts, enter the ID of the user who created the post.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>Visibility</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 "><code>AllUsers</code></td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e418 "><code>Title</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e421 ">If using type <code>QuestionPost</code>, enter the question title
                  here.</td>

              </tr>
            </tbody>
          </table>
9. Load Feed Comments
    
    When adding feed comments, it's crucial to add attachments at the time of creation. You can't edit a comment and add an attachment to it. <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:28.57142857142857%">
              <col style="width:71.42857142857143%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e583">Required Field</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e586">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e583 "><code>FeedItemId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e586 ">The parent post that the comment is related to.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e583 "><code>CommentBody</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e586 ">The content in the post.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e583 "><code>ThreadParentId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e586 ">Leave empty if a comment is the first level down of comment on a post. If it is below an existing comment, enter the <code>FeedItemId</code> from its parent comment.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e583 ">CommentType</td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e586 ">
                  <ul>
                    <li><code>ContentComment</code>: A comment that includes an attachment.</li>

                    <li><code>TextComment</code>: A direct text entry on a comment.</li>

                  </ul>
                </td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e583 "><code>RelatedRecordId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e586 ">ID of the <code>ContentVersion</code> object associated with a <code>ContentComment</code>. This field is null for all comments except <code>ContentComment</code>.</td>

              </tr>
            </tbody>
          </table>
10. Load Feed Likes
    
    Required fields:
    
    - `FeedItemId`: If the like is related to a post, enter the `FeedItemId` from the post here.
    - `FeedEntityId`: If the like is related to a comment, enter the `FeedCommentId` from the comment here.
11. Load Feed Attachments
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
            <colgroup>
              <col style="width:28.57142857142857%">
              <col style="width:71.42857142857143%">
            </colgroup>
            <thead class="slds-text-title_caps ">
              <tr class="">
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e719">Required Field</th>
                <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d37413e722">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e719 "><code>FeedEntityId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e722 ">The ID of the associated post (<code>FeedItem</code>) that contains this attachment.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e719 "><code>RecordId</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e722 ">The ID of the record that this feed attachment contains. For inline images, <code>RecordId</code> is a <code>ContentDocument</code> ID. For content attachments, <code>RecordId</code> is a <code>ContentVersion</code> ID.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e719 "><code>Title</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e722 ">The title of this feed attachment. When <code>Type</code> is <code>Link</code>, the <code>Title</code> value is the label for the attachment link. Otherwise, the <code>Title</code> value isn't used.</td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e719 "><code>Type</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e722 ">
                  <p>The type of this feed attachment. Valid values are:
                  </p>
                  <ul>
                    <li><code>Content</code>: A content attachment.</li>

                    <li><code>FeedEntity</code>: A feed entity, such as a shared post. Available in API version 39 and later in Lightning Experience.</li>

                    <li><code>InlineImage</code>: An inline image. The system creates an inline image attachment when an image is added to the body of the associated <code>FeedItem</code>. You can't add an inline image directly by using <code>FeedAttachment</code>.</li>

                    <li><code>Link</code></li>

                  </ul>
                </td>

              </tr>
              <tr class="">
                <td data-label="Required Field" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e719 "><code>Value</code></td>

                <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d37413e722 ">Enter the URL here if the feed attachment is <code>Type = Link</code>. Otherwise, leave blank.</td>

              </tr>
            </tbody>
          </table>
12. Load Topic Assignments
    
    Required fields:
    
    - `EntityId`: The ID of the post (such as `FeedItem`) that corresponds to the topic.
    - `TopicId`: The ID of the topic to assign to the feed.
13. Load Entity Subscriptions
    
    Required fields:
    
    - `ParentId`: The ID of the record being followed. For example, it could be the ID of a user or a topic being followed.
    - `SubscriberId`: The ID of the user who is following the record.
    - `NetworkId`: The 18-digit site ID.
14. Update Network Members
    
    Member records were already created. However, if you want to migrate user email preferences or reputation points earned, update these records as a final step of your migration.

Other Considerations

- External IDs — You can’t add external ID fields to most of the objects, so keep your success files from each data load to track the relationship between your source data and Salesforce. You can then use `VLOOKUPS` to populate the Salesforce ID from the parent record created into the next file load.
- Threaded conversations — If your current platform uses threaded conversations, load `FeedComments` in several batches. For example, group all top-level comments into one file and load them. Then group all the posts beneath those comments into the next data load, and so on. Only threaded conversations that are three levels deep are supported.
- Inactive users — If you’ve had your legacy forum for some time, chances are that you have some users who are no longer active. Migrate them as active users so that you can bring over their posts and comments, and then deactivate their user record. If you’re using member-based licenses and are migrating more users than you have licenses, before starting your data load, contact your Account Executive to discuss which options are available.
- Formatting posts — The trickiest part of this load is getting your posts into the correct format. If you can’t migrate your posts exactly the way you want with these instructions, see the [Connect REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_requests_message_body_input.htm) for how a developer could load your posts and comments to the site.
- Updating Chatter posts to select best answer — If your current forum has the concept of a best answer, update the `BestCommentId` field on the `FeedItem` records after loading all your `FeedComments`. You can’t set this value during the initial `FeedItem` insert, because the child `FeedComment` records don’t yet exist.
- Updating the `BestCommentId` field — The `BestCommentId` field can't be updated using Workbench or Dataloader. To update the field, use the [QuestionAndAnswers Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_ConnectAPI_QuestionAndAnswers_static_methods.htm) via the Connect API.
- Uploading Chatter profile photos and Chatter polls — This upload must be done via Connect REST API. For more information, see [this guide](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_users_UserPhotos.htm) on photos and [this guide](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_responses_feed_poll.htm) on polls.
- What can’t be migrated — For example, you can’t migrate the view count on posts or whether a user has or hasn’t viewed a post.