---
schema_version: "1"
id: 5c9ef6246a1c7449dcf9902a98162494736be555f45daebcad4b2608735c26a4
title: Ingest File Attachments from Salesforce CRM Objects into Data 360
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/data/264-0-0/c360_a_unstructured_data_connect_content_document.md
canonical_url: https://help.salesforce.com/s/articleView?id=data.c360_a_unstructured_data_connect_content_document.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 6549d621d3c6c9c3085d71228243e6f62d7942206be24bc0170b6c164fb112bb
description: Use the Salesforce CRM connector to ingest into Data 360 content files such as documentation or customer support files. You can ingest content files attached to standard and custom CRM objects, including 100K of the most recently uploaded historical files and all new files going forward. Data 360 converts the content into searchable vectors for generative AI, analytics, and automation while preserving search context.
products:
  - Data 360
release: "264"
---
# Ingest File Attachments from Salesforce CRM Objects into Data 360

Use the Salesforce CRM connector to ingest into Data 360 content files such as documentation or customer support files. You can ingest content files attached to standard and custom CRM objects, including 100K of the most recently uploaded historical files and all new files going forward. Data 360 converts the content into searchable vectors for generative AI, analytics, and automation while preserving search context.

### 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: <strong>All Editions</strong> supported by Data 360. See <a href="https://help.salesforce.com/s/articleView?id=data.c360_a_dc_editions.htm&amp;language=en_US" target="_blank">Data 360 edition availability</a>.</td></tr></tbody></table>

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small permission">
        <colgroup>
          <col style="width:50%">
          <col style="width:50%">
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="colgroup" class="slds-cell-wrap" colspan="2" style="text-align:center;vertical-align:top;" id="d99458e61">User Permissions
              Needed</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e61 ">To ingest content document data</td>

            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e61 "><a name="c360_a_unstructured_data_connect_content_document__ul_lm1_dwg_5cc"><!-- --></a>
              <ul id="c360_a_unstructured_data_connect_content_document__ul_lm1_dwg_5cc">
                <li>Permission set:<a name="c360_a_unstructured_data_connect_content_document__ul_mm1_dwg_5cc"><!-- --></a>
                  <ul id="c360_a_unstructured_data_connect_content_document__ul_mm1_dwg_5cc">
                    <li>Data 360 Architect</li>

                  </ul>
                </li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e61 ">Additional permissions</td>

            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e61 ">
              <ul>
                <li><span class="menucascade"><strong class="uicontrol">Setup</strong> | <strong class="uicontrol"> Permission Sets</strong> | <strong class="uicontrol">Data Cloud Salesforce Connector</strong> | <strong class="uicontrol">App Permissions</strong> | <strong class="uicontrol">Content</strong> | <strong class="uicontrol">Query Non Vetoed Files</strong></span>
                  <p>If you can't locate the Content section, search “Manage Content
                    Permission” in the search bar.</p>
                </li>

                <li><span class="menucascade"><strong class="uicontrol">Setup</strong> | <strong class="uicontrol">Permission Sets</strong> | <strong class="uicontrol">Data Cloud Salesforce Connector</strong> | <strong class="uicontrol">App Permissions</strong> | <strong class="uicontrol">Allow View Knowledge</strong></span> for Knowledge attachment ingestion.</li>

                <li><span class="menucascade"><strong class="uicontrol">Setup</strong> | <strong class="uicontrol">Salesforce Files</strong> | <strong class="uicontrol">General Settings</strong> | <strong class="uicontrol">Salesforce Files Settings</strong> | <strong class="uicontrol">Enable Files to be ingested into Data 360</strong></span></li>

                <li><span class="menucascade"><strong class="uicontrol">Setup</strong> | <strong class="uicontrol">Installed packages</strong></span> and confirm that the SSOT version is 1.68 or higher.</li>

              </ul>
            </td>

          </tr>
        </tbody>
      </table>

## How File Attachment Ingestion Works

When you set up file attachment ingestion, Data 360 ingests all files attached to CRM objects, regardless of when you created the connection to the CRM org and its data streams. The relevant data streams are:

- [Content Document](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_contentdocument.htm?q=contentdocument): Represents documents uploaded to a library in Salesforce CRM.
- [Content Version](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_contentversion.htm?q=contentdocument): Represents the specific version of a document in Salesforce CRM.
- [Content Document Link](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_contentdocumentlink.htm?q=contentdocument): Represents a link to users, groups, records, or libraries that the file is shared with.

You can ingest file attachments of the types listed under [Unstructured Data File Formats](https://help.salesforce.com/s/articleView?id=data.c360_a_unstructured_data_connect.htm&language=en_US)

During setup, install a content bundle to deploy the three content data streams, and then create a search index to enable file attachment ingestion. The search index triggers an initial day-0 ingestion of up to 100,000 of the most recent historical files that were attached to the CRM object before you deployed the content bundle. This 100,000 limit applies to each CRM object, regardless of how many search indexes you create. After the initial ingestion, all new file attachments are incrementally ingested and relevant search indexes are automatically refreshed.

The **ContentDocument**, **ContentVersion**, and **ContentDocumentLink** data streams ingest metadata for all files. The 100,000 limit applies only to file content.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/images/icon_note.png)

Note

If you've been ingesting file attachments from CRM to Data 360 prior to July 2026, the **ContentVersion** data stream behaves differently from other CRM content objects.

- **ContentDocument** and **ContentDocumentLink** (structured data) ingest all the content during the initial ingestion.
- **ContentVersion** (unstructured file content) ingests only five versions that you create or update after you create the data stream. To trigger historical file ingestion, delete the existing ContentVersion data stream and deploy the standard content\_bundle. Then, either create new Salesforce objects with file attachments or use the existing attachments to the existing Salesforce objects.
- File attachment ingestion doesn’t support full refresh or total replacement for the ContentVersion data stream.

Before you set up a file attachment ingestion, plan your workflow by one of these scenarios.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
          <colgroup>
            <col style="width:50%">
            <col style="width:50%">
          </colgroup>
          <thead class="slds-text-title_caps ">
            <tr class="">
              <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d99458e277">Scenario</th>
              <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d99458e280">Steps</th>
            </tr>
          </thead>
          <tbody>
            <tr class="">
              <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e277 ">First-time setup</td>

              <td data-label="Steps" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e280 ">Use the Salesforce CRM connector to install the content_bundle that deploys
                the Content Document, Content Version, and Content Document Link data streams.
                Attach files to standard or custom Salesforce objects, and deploy a data stream
                for your desired CRM object. Create a Search Index with the appropriate source and
                attachment DMO.</td>

            </tr>
            <tr class="">
              <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e277 ">You created content data streams before July 10, 2026</td>

              <td data-label="Steps" class="slds-cell-wrap" style="vertical-align:top;" headers="d99458e280 ">
                <p>Any content data streams that you created before July 2026 aren’t compatible
                  with this file attachment ingestion workflow. </p>
                <p>If you created the ContentDocument, ContentVersion, and ContentDocumentLink
                  data streams before July 2026, you can only ingest files that were attached to
                  CRM objects after you created the data streams.</p>
                <p style="margin-bottom:0;">To ingest your historical file attachments, delete the existing content data
                  streams and deploy the standard content_bundle. Then, either create new
                  Salesforce objects with file attachments or use existing attachments to existing
                  Salesforce objects.</p>
              </td>

            </tr>
          </tbody>
        </table>

## Set Up File Attachment Ingestion

### Before You Start

1. Identify the objects in your CRM org that have file attachments you want to ingest (for example, Account).
2. To ingest file attachments from an external CRM org, [set up an external CRM org connection to that org](https://help.salesforce.com/s/articleView?id=data.c360_a_set_up_crm_connection.htm&release=264.0.0&type=5 "A data source and data action target are automatically created for the org where you set up Data 360. To connect other Salesforce orgs, manually set up a connection."). For a [CRM home org](https://help.salesforce.com/s/articleView?id=data.c360_a_connect_salesforce_orgs.htm&release=264.0.0&type=5 "Connect your Salesforce orgs to Data 360 to ingest data from Salesforce objects for processing and unification in Data 360. Depending on the type of connection that you select, you can send back only data actions or harmonized Data 360 data. To access Data 360 data and features in your Salesforce CRM orgs, set up a Salesforce companion connection. Platform components, such as Flow, Apex, CRM, and data enrichment, can also access Data 360 data across companion orgs."), Data 360 automatically creates the connection for you.

## Step 1: Deploy a Data Stream for Your Desired CRM Object

Create or deploy a data stream for the specific CRM object (standard or custom) to which the files you want to ingest are attached (for example, Case, Opportunity). [Learn how to create a Salesforce CRM data stream](https://help.salesforce.com/s/articleView?id=data.c360_a_create_crm_data_stream.htm&release=264.0.0&type=5 "Create a data stream to begin the flow of data from a Salesforce CRM data source to Data 360 for processing and unification.").

## Step 2: Deploy the Standard Content\_Bundle

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/images/icon_note.png)

Note If you already have the Content Document, Content Version, and Content Document Link data streams, delete them first. Delete any downstream dependencies, such as search indexes or retrievers.

Install the standard Content\_Bundle to deploy the Content Document, Content Version, and Content Document Link data streams. Learn more about [installing standard data bundles powered by data kits](https://help.salesforce.com/s/articleView?id=data.c360_a_install_standard_data_bundles_powered_by_data_kits.htm&release=264.0.0&type=5 "After you create your Data 360 instance and set up your Salesforce CRM connection, you can install standard data bundles that are powered by data kits to deploy data within Data 360.").

1. From the app launcher, open Data 360 (Data Cloud).
2. In Data 360, go to the **Data Streams** tab.
3. Click **New** to create a new data stream.
4. Select data source: Salesforce CRM, and click **Next**.
5. Select the CRM org with the file attachments that you want to ingest, and click **View Bundles**.
6. Under **Standard Bundles**, select **Content\_Bundle** and click **Next**.
7. On **New Data Stream**, make sure that for each data stream on the left, all the fields are selected. You don’t need to configure any other setting.
8. Click **Next** to continue.
9. Select the relevant data space and click **Deploy**. The content data bundle deploys these three data streams for your CRM object and their inter-relationships.
10. Go to your **Data Streams** tab to confirm the relationships are created and active.
    
    Content Document: Represents documents uploaded to a library in Salesforce CRM.
    
    Content Version: Represents the specific version of a document in Salesforce CRM.
    
    Content Document Link: Represents a link to users, groups, records, or libraries that the file is shared with.

## Step 3: Create a Relationship Between the Desired CRM Object DMO and the Content Document DMO

After Data 360 deploys the three content data streams and their inter-relationships, configure the object relationship.

1. In Data 360, go to the **Data Model** tab.
2. From Data Model Objects, select the **Content Document Relationships**.
3. Open the **Relationships** tab and click **Edit**.
4. Add a new relationship row with these values.
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small "><tbody><tr class=""><th style="vertical-align:top;" headers="d99458e571-option" id="d99458e575">Object</th><td style="vertical-align:top;" headers="d99458e571-desc d99458e575">Content Document Relationship</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e571-option" id="d99458e584">Field</th><td style="vertical-align:top;" headers="d99458e571-desc d99458e584">Related Item</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e571-option" id="d99458e593">Cardinality</th><td style="vertical-align:top;" headers="d99458e571-desc d99458e593">N:1</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e571-option" id="d99458e602">Related Object</th><td style="vertical-align:top;" headers="d99458e571-desc d99458e602">Data Cloud and the object that has file attachments</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e571-option" id="d99458e611">Related Field</th><td style="vertical-align:top;" headers="d99458e571-desc d99458e611">The primary key of the object that has file attachments, for example: Account Id</td></tr></tbody></table>
5. Save the new relationship.
6. Go to **Data Model** and then **Data Model Objects** and **Content Document Relationship** to ensure that a relationship exists between the object DMO (for example, Case, Opportunity, Account, or your custom object DMO) and the ContentDocumentRelationship DMO.
7. Confirm the following relationships also exist. Data 360 usually creates these relationships automatically during the Content\_Bundle deployment. If one them doesn’t exist, create it manually using these values.
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small "><tbody><tr class=""><th style="vertical-align:top;" headers="d99458e647-option" id="d99458e651">Object</th><td style="vertical-align:top;" headers="d99458e647-desc d99458e651">Content Document Relationship</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e647-option" id="d99458e660">Field</th><td style="vertical-align:top;" headers="d99458e647-desc d99458e660">Content Document</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e647-option" id="d99458e669">Cardinality</th><td style="vertical-align:top;" headers="d99458e647-desc d99458e669">ManyToOne</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e647-option" id="d99458e678">Related Object</th><td style="vertical-align:top;" headers="d99458e647-desc d99458e678">Content Document</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e647-option" id="d99458e687">Related Field</th><td style="vertical-align:top;" headers="d99458e647-desc d99458e687">Content Document Id</td></tr></tbody></table>
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small "><tbody><tr class=""><th style="vertical-align:top;" headers="d99458e695-option" id="d99458e699">Object</th><td style="vertical-align:top;" headers="d99458e695-desc d99458e699">Content Document</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e695-option" id="d99458e708">Field</th><td style="vertical-align:top;" headers="d99458e695-desc d99458e708">Last Published Version</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e695-option" id="d99458e717">Cardinality</th><td style="vertical-align:top;" headers="d99458e695-desc d99458e717">ManyToOne</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e695-option" id="d99458e726">Related Object</th><td style="vertical-align:top;" headers="d99458e695-desc d99458e726">Content Version</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e695-option" id="d99458e735">Related Field</th><td style="vertical-align:top;" headers="d99458e695-desc d99458e735">Content Version Document Id</td></tr></tbody></table>
    
    <table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small "><tbody><tr class=""><th style="vertical-align:top;" headers="d99458e743-option" id="d99458e747">Object</th><td style="vertical-align:top;" headers="d99458e743-desc d99458e747">Content Document Version</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e743-option" id="d99458e756">Field</th><td style="vertical-align:top;" headers="d99458e743-desc d99458e756">ContentDocument</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e743-option" id="d99458e765">Cardinality</th><td style="vertical-align:top;" headers="d99458e743-desc d99458e765">ManyToOne</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e743-option" id="d99458e774">Related Object</th><td style="vertical-align:top;" headers="d99458e743-desc d99458e774">Content Document</td></tr><tr class=""><th style="vertical-align:top;" headers="d99458e743-option" id="d99458e783">Related Field</th><td style="vertical-align:top;" headers="d99458e743-desc d99458e783">Content Document Id</td></tr></tbody></table>

#### See Also

- [_Salesforce Help_: Map a Custom DMO](https://help.salesforce.com/s/articleView?id=data.c360_a_map_custom_data_model_objects.htm&release=264.0.0&type=5 "Data mapping relates Data Lake Object (DLO) fields to Data Model Object (DMO) fields, paving the way for unifying your source data into a single standardized Customer 360 data model.")
- [_Salesforce Help_: Create a Search Index](https://help.salesforce.com/s/articleView?id=data.c360_a_search_index_create_vector_index_config.htm&release=264.0.0&type=5 "When you create a vector search index configuration for a data model object, Data 360 breaks up the referenced data into semantically related chunks and generates searchable vectors. Your RAG and agent workflows use these vectors to find and return semantically similar items when they run queries. To get more granular control over your search index configuration, use the advanced setup, which guides you through each step of the process.")
- [_Salesforce Help_: Map Unstructured Data](https://help.salesforce.com/s/articleView?id=data.c360_a_unstructured_data_connect_content_data_mappings.htm&release=264.0.0&type=5 "Content data streams enable you to upload and ingest files that you’ve attached to Knowledge objects. Manually map the listed fields of the Content Document and Content Document Link objects to DMOs in Data 360.")

## Step 4: Create Search Index with Advanced Setup

If you create the content data streams without an accompanying search index, Data 360 ingests only file metadata. To trigger file ingestion, create a search index. After you create it and select the correct attachment data model, Data 360 automatically detects and ingests historical file attachments in reverse chronological order (newest first).

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-data-data_cloud-264-0-0-production-enus/f3569962-3c9b-4f83-9d0c-b6a574e785da/images/icon_note.png)

Note For existing search indexes, Data 360 doesn't ingest the historical file attachments. To ingest historical file attachments, [rebuild the search index](https://help.salesforce.com/s/articleView?id=data.c360_a_search_index_rebuild_search_index.htm&language=en_US).

1. From Data 360, open the **Search Index** tab and click **new** to create a new search index.
2. Click **Advanced Setup**, and then click **Next**.
3. Under **Select Search Type**, select **Vector Search** or **Hybrid Search**.
4. Select the relevant data space and the source data model object (DMO) where your file attachments reside.
5. On **Select Fields to Chunk**, click **Include File Attachments**.
6. Select the ContentDocumentVersion DMO, and click **Save**.
7. Configure other settings as needed and save the Search Index.
    
    After you create a search index, Data 360 immediately starts to ingest and index file attachments to make the contents available in the search index. To validate that Data 360 ingested and indexed your files, you can query the Chunk DMO via Query Editor and then confirm you see relevant chunks from your files.
    
    Data 360 refreshes the data as described in [Data Refresh Process for Extraction](https://help.salesforce.com/s/articleView?id=data.c360_a_crm_data_refresh_process_for_extraction.htm&release=264.0.0&type=5 "Data refreshes have two phases: full refresh, which replaces all destination data, and incremental refresh, which updates data between full refresh runs. You can perform both full and incremental refresh on demand. Learn about the different refresh scenarios, and the special behavior of ContentVersion and Knowledge_kav objects."). New files are included in this incremental ingestion. Data 360 captures any new file attachments or deleted files as events from the data streams.