> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monterey.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce

> Ingest Salesforce Closed-Won Opportunity Notes

export const provider_0 = "Salesforce"

export const customFieldSelectionStrategy_0 = undefined

export const customFilteringStrategy_0 = "Filter cases by status or priority to focus on active issues - Use opportunity stage filters to analyze specific sales phases or focus on closed-won deals - Filter accounts by type or size to focus on target customer segments - Apply date filters to analyze recent activity patterns"

export const customPerformanceConsiderations_0 = undefined

<Frame>
  <img src="https://mintcdn.com/montereyai/tK6qGM7BVTTtFhts/salesforce.png?fit=max&auto=format&n=tK6qGM7BVTTtFhts&q=85&s=99881692d6d7206c34146b285cd6f4e1" style={{ width: "100%" }} alt="" title="" width="3168" height="792" data-path="salesforce.png" />
</Frame>

### Overview

Salesforce unifies sales, marketing, and customer data on a single platform. Connect this data with Reforge Insights to find more insights, and link feedback back to real customer value.

### Get Started

You can find the Salesforce integration on your [**integration settings page**](https://insights.reforge.com/w/default/settings/integrations/salesforce).

A user with access to both Reforge Insights as well as Salesforce will need to authorize the connection.

<Steps>
  <Step title="Go to &#x22;Settings&#x22;" />

  <Step title="Click &#x22;Integrations&#x22; in the navigation menu" />

  <Step title="Click &#x22;Salesforce&#x22;" />

  <Step title="Click &#x22;Connect&#x22;" />

  <Step title="If necessary, log in to Salesforce using the appropriate account" />

  <Step title="Review and approve the permissions requested" />

  <Step title="Once confirmed, you will be returned to Reforge Insights, where you can toggle on ingestion of sales notes" />
</Steps>

## Advanced Configuration

<Frame>
  <img src="https://mintcdn.com/montereyai/tK6qGM7BVTTtFhts/images/salesforce-configuration-overview.png?fit=max&auto=format&n=tK6qGM7BVTTtFhts&q=85&s=0badedcde884a1ceb1d841cafe2897ef" alt="Salesforce integration configuration interface showing options for Service Cloud Cases, Opportunities, and Accounts" width="2220" height="1938" data-path="images/salesforce-configuration-overview.png" />
</Frame>

After connecting your Salesforce account, you can customize exactly what data gets imported and how it's filtered. The Salesforce integration allows you to import Service Cloud Cases, Opportunities, and Accounts from your Salesforce instance with precise control over field selection and filtering criteria.

### Configuration Sections

#### 1. Choose What to Include

The Salesforce integration supports importing multiple data types independently:

##### **Service Cloud Cases**

Enable loading cases from Service Cloud. This includes support case information and related contact details.

##### **Include Case Comments**

Enable this option to import comments associated with cases in addition to the case content itself.

<Warning>
  Including case comments will increase the amount of data imported and may
  affect ingestion performance for large Salesforce instances.
</Warning>

##### **Opportunities**

Enable loading opportunities from Salesforce. This imports opportunity data and associated notes. You can use filters to specify which opportunities to include based on stage, amount, or other criteria.

##### **Accounts**

Enable loading accounts from Service Cloud. This includes company information and account details.

#### 2. Choose the Data to Include

Select which fields to import for each data type. The data is organized into tabs representing the different Salesforce objects that can be ingested. Each data type can be configured independently.

##### Data Type Tabs

<CardGroup cols={3}>
  <Card title="Service Cloud Cases" icon="ticket">
    Support case information including subject, description, status, priority, and related contact details.
  </Card>

  <Card title="Opportunities" icon="chart-line">
    Sales opportunity data including deal information, stage, and associated
    notes. Use filters to specify which opportunities to include.
  </Card>

  <Card title="Accounts" icon="building">
    Company and account information including contact details, revenue data, and custom account fields.
  </Card>
</CardGroup>

#### 3. Narrow Down Your Data

Use filters to focus on specific records you want to analyze. Each data type can be filtered independently based on its own fields.

<Note>
  Filtering is applied separately to each data type. You cannot filter cases
  based on account fields, or opportunities based on case fields. Each object
  type is filtered using only its own field values.
</Note>

##### Filter Types and Operators

Different field types support different filtering operators:

<AccordionGroup>
  <Accordion title="String Fields">
    **Available Operators:**

    * `contains` - Field contains the specified text
    * `does not contain` - Field does not contain the specified text

    **Examples:**

    * Subject contains "billing"
    * Description does not contain "resolved"
  </Accordion>

  <Accordion title="Number Fields">
    **Available Operators:**

    * `is` - Field equals the specified number
    * `is not` - Field does not equal the specified number
    * `is greater than` - Field is greater than the specified number
    * `is less than` - Field is less than the specified number
    * `is less than or equal to` - Field is less than or equal to the specified number
    * `is greater than or equal to` - Field is greater than or equal to the specified number
    * `is empty` - Field is empty
    * `is not empty` - Field is not empty
    * `between` - Field falls within the specified range

    **Examples:**

    * Priority equals 3
    * Satisfaction score is greater than 4
  </Accordion>

  <Accordion title="Date Fields">
    **Available Operators:**

    * `between` - Field falls within the specified date range
    * `is empty` - Field is empty
    * `is not empty` - Field is not empty

    **Examples:**

    * Updated date range between 2024-01-01 and 2024-02-01
    * Created date is empty
  </Accordion>

  <Accordion title="List Fields">
    **Available Operators:**

    * `is` - Field is any of the specified values
    * `is not` - Field is not any of the specified values
    * `is empty` - Field is empty
    * `is not empty` - Field is not empty

    **Examples:**

    * Tags is "urgent" or "billing"
    * Status is not "closed" or "solved"
  </Accordion>

  <Accordion title="Boolean Fields">
    **Available Operators:**

    * `is` - Field matches the specified boolean value (true/false)
    * `is not` - Field does not match the specified boolean value
    * `is empty` - Field is empty
    * `is not empty` - Field is not empty

    **Examples:**

    * Is public is true
    * Has incidents is false
  </Accordion>
</AccordionGroup>

##### Multiple Filters

When you add multiple filters, they are combined using an **AND** operator. This means tickets must match ALL filter criteria to be imported.

<Tip>
  Start with broader filters and gradually add more specific ones to fine-tune
  your data selection.
</Tip>

#### 4. Field Selection and Reference Drilling

<Tabs>
  <Tab title="Required Fields">
    Fields marked as **Required** are essential for the integration to function properly and cannot be deselected. These fields include:

    * **Service Cloud Cases**: `Id`, `Subject`, `Description`, `AccountId`, `LastModifiedDate`, `CreatedDate`, `Contact.Id`, `Contact.Phone`, `Contact.MobilePhone`, `Contact.Title`, `Contact.CreatedDate`, `Contact.LastModifiedDate`, `Contact.Name`, `Contact.Email`
    * **Opportunities**: `Id`, `AccountId`, `StageName`, `CreatedDate`, `LastModifiedDate`, `Description`
    * **Accounts**: `Id`, `Name`, `Description`, `LastModifiedDate`, `CreatedDate`

    <Warning>
      Required fields are automatically included in the ingestion process regardless
      of selection status.
    </Warning>

    <Info>
      **Preselected Fields**: Beyond the required fields, we automatically preselect additional commonly used fields to help you get started quickly with meaningful data. These preselected fields include useful metadata like case status, account revenue information, and contact details that are frequently needed for analysis. You can deselect any of these preselected fields if they're not relevant to your specific use case.
    </Info>
  </Tab>

  <Tab title="Reference Field Drilling">
    Salesforce field selection supports drilling down into reference fields to access related object data. You can navigate up to 3 levels deep from the root object.

    **How Reference Drilling Works:**

    * **Root Level**: Base object fields (e.g., Case.Subject, Account.Name)
    * **Level 2**: Referenced object fields (e.g., Case.Contact.Name, Case.Account.Website)
    * **Level 3**: Fields from objects referenced by Level 2 objects

    **Visual Indicators:**

    * Reference fields show the related object type in parentheses (e.g., "AssetProvidedBy (Account)")
    * Dropdown indicators show the number of selected sub-items for each reference field
    * You can expand and collapse reference field sections to manage complex field selections

    **Example Structure:**

    ```
    Case
    ├── Subject (string)
    ├── Contact ▼ (3 selected)
    │   ├── Name (string)
    │   ├── Email (string)
    │   └── Account ▼ (2 selected)
    │       ├── Name (string)
    │       └── Website (string)
    └── Account ▼ (1 selected)
        └── AnnualRevenue (number)
    ```

    <Info>
      Reference field drilling allows you to access related data without separate API calls, making your data more comprehensive and analysis-ready.
    </Info>
  </Tab>

  <Tab title="Custom Fields">
    Custom fields created in your Salesforce instance are automatically detected and available for selection. These fields:

    * Are fetched directly from your Salesforce configuration
    * Include the custom field name and description
    * Support reference drilling if they are lookup/master-detail fields
    * Are stored with their original field names in the metadata

    <Info>
      Custom fields are dynamically loaded from your Salesforce instance, so any changes to custom fields in Salesforce will be reflected in the integration.
    </Info>
  </Tab>
</Tabs>

#### 5. Custom Field Mapping

<Tabs>
  <Tab title="Account Contract Value">
    For accounts, you can map a custom number field to represent the Contract Value. This allows you to:

    * Select from your existing custom number fields in Salesforce
    * Map the selected field to the standardized "Contract Value" field in Reforge Insights
    * Use this mapped value for account-based analysis and reporting

    **How to Set Up Custom Field Mapping:**

    1. Navigate to the Accounts tab in the data selection interface
    2. Locate the "Custom field mapping" section
    3. Select your desired custom number field from the dropdown
    4. The selected field will be mapped to "Contract Value" in Reforge Insights

    <Frame>
      <img src="https://mintcdn.com/montereyai/tK6qGM7BVTTtFhts/images/salesforce-accounts-custom-field-mapping.png?fit=max&auto=format&n=tK6qGM7BVTTtFhts&q=85&s=6044057b173c72f70acdc36a7979d1c9" alt="Custom field mapping interface showing Contract Value mapped to Custom Customer Value field" width="904" height="222" data-path="images/salesforce-accounts-custom-field-mapping.png" />
    </Frame>

    <Info>
      Only custom fields of number type are available for Contract Value mapping to ensure proper numerical analysis.
    </Info>
  </Tab>
</Tabs>

### Best Practices

<Card title="Field Selection Strategy" icon="lightbulb">
  {customFieldSelectionStrategy_0 ||
      `Start with required fields and commonly used standard fields - Add custom
    fields that are consistently populated and relevant to your analysis -
    Consider the impact on data volume when selecting many fields - Review and
    update field selections as your {provider} usage evolves`}
</Card>

<Card title="Filtering Strategy" icon="filter">
  {customFilteringStrategy_0 ||
      `Use filters to focus on the most relevant data for your use case - Apply
    filters to narrow down to specific statuses, categories, or priorities -
    Remember that only records with content will be ingested regardless of filters`}
</Card>

<Card title="Performance Considerations" icon="gauge">
  {customPerformanceConsiderations_0 ||
      `More fields and fewer filters = larger data volume - Consider the frequency
    of your data sync when selecting options - Monitor ingestion performance and
    adjust as needed`}
</Card>

### Next Steps

After configuring your {provider_0} integration:

1. **Test the configuration** by triggering a manual sync
2. **Monitor the ingestion** to ensure data is being imported correctly
3. **Review the imported data** in your analytics dashboard
4. **Adjust filters and fields** based on your initial results
5. **Set up automated workflows** using the imported HubSpot data

<Note>
  Changes to field selection and filters will apply to future data ingestion.
  Existing imported data will not be retroactively updated.
</Note>

### Data Collected

Once Reforge Insights and Salesforce are connected successfully, data will be pulled from periodically. The first time Reforge Insights loads data, it will look back 1 week. After that, it will ingest all new data up to your plan's feedback volume limit.

Each enabled data type (Service Cloud Cases, Opportunities, Accounts) will be ingested according to your configuration. You can use filters to specify which opportunities to include based on your specific needs and analysis requirements.

### Pricing Volume Impact

| Entity Type | Volume Impact |
| :---------- | :-----------: |
| Case        |     **1x**    |
| Opportunity |     **1x**    |

<Info>
  View the [pricing page](/pricing/volume-calculation) for more information on
  how we calculate volume usage.
</Info>

### Common Issues

**OAUTH\_APP\_BLOCKED**

The most common issue we see with connecting Salesforce is "OAUTH\_APP\_BLOCKED". This is likely due to configuration in your Salesforce organization that restricts users from connecting new apps via OAuth. If you hit this error, please have a user with admin access in Salesforce complete the following steps:
If you see an error like OAUTH\_APP\_BLOCKED when trying to install the integration, your Salesforce admin needs to allow access to the app.

<Steps>
  <Step title="Go to Setup → Connected Apps OAuth Usage">
    You can search "Connected Apps OAuth Usage" in the Setup search bar.
  </Step>

  <Step title="Find &#x22;Reforge Insights&#x22; in the list" />

  <Step title="Click Manage next to the app name" />

  <Step title="On the next screen, click Edit Policies" />

  <Step title="Under Permitted Users, choose one of the following options">
    <ul>
      <li>
        Self-authorization (easier setup):

        Select "All users may self-authorize" → Save. You're done.
      </li>

      <li>
        Admin-approved access (more control):

        Select "Admin approved users are pre-authorized" → Save. → Then scroll down and add the appropriate Profiles or Permission
        Sets under "Profiles" or "Custom Permissions" so your users can access the app.
      </li>
    </ul>
  </Step>

  <Step title="Once updated, users can try the installation/authentication again" />
</Steps>
