The Salesforce CRM connector tools let marketing and sales teams seamlessly integrate with Salesforce from Opal. The tools streamline workflows, from automating personalized content for new leads and suggesting relevant materials for sales follow-ups, to providing actionable insights through dynamic reporting and proactive alerts for at-risk opportunities. Opal transforms how teams leverage their CRM for enhanced engagement, efficiency, and competitive advantage.
First, an Opal administrator must connect Salesforce CRM to Opal using Optimizely Connect Platform (OCP). After installing the connector in OCP, individual Opal users and agent builders can log in to Salesforce to access their information from Opal. Administrators only need to install the Salesforce connection in OCP once.
Complete the following steps to enable the Salesforce CRM tools.
Connect Opal with Salesforce
The following video and steps walk you through connecting Opal with Salesforce CRM. An Opal administrator installs and configures the Salesforce CRM connector through the OCP App Directory,
Install Salesforce CRM in OCP
In the OCP App Directory, complete the following:
- Click the Opal Tool Salesforce CRM connector tool.
-
Click Install App.
- Click on the Settings tab
- Leave the Instance level Opal Oauth toggle off if you are using Optimizely managed Oauth.
- Enter your Salesforce instance URL.
- Click Save.
Enable your toolset preferences
- Expand the Tool Permissions section.
-
Toggle the permissions on that you want.
- Enable Data Reading – Tools that let Opal to read data (list, get, describe, count objects, and reports) from Salesforce.
-
Enable Data Modification – Tools that let Opal update (create and update objects) in Salesforce.
You can modify specific tool access within Opal.
Add the Salesforce CRM tools to your Opal instances
- Expand the Add to Opal section.
-
Click Add to Opal to register the Salesforce CRM connector tools to the corresponding Opal instance. Click Remove from Opal to remove the connection.
After you complete the steps in this section, Opal users can then follow the steps in the User-level auth for Salesforce CRM section.
Configure the Salesforce CRM connector
After an Opal administrator adds the Salesforce CRM tools to your Opal instances, a Salesforce Admin must complete the following steps in Opal:
- Go to Tools > Connectors.
- Click Connect on the Salesforce CRM connector.
This makes the Opal app available in Salesforce.
Open a new tab and go to Salesforce. Log in and complete the following steps once:
- Go to Setup > Apps > Connected Apps > Connected Apps OAuth Usage. See Manage Current OAuth Connected App Sessions in the Salesforce documentation.
- Click Manage App Policies on the Opal app. See Manage Access to a Connected App in the Salesforce documentation.
- Click Edit policies and adjust IP restrictions to Relax IP restrictions. See Connected App IP Relaxation and Continuous IP Enforcement in the Salesforce documentation.
- Click Save.
- Click Install on the Connected Apps OAuth Usage page.
User-level auth for Salesforce CRM
After an administrator connects Opal with Salesforce CRM, you can log in from Opal to access your information. The Salesforce CRM connector tools leverage user-level authorization to ensure individual Opal users can only access data they have permission to access within Salesforce.
To authenticate, complete the following steps in Opal:
- Go to Tools > Connectors.
-
Click Connect on the Salesforce CRM connector tools.
-
Log in to Salesforce in the window that Optimizely displays.
After you connect to Salesforce, the Salesforce CRM connector tools become available in Opal Chat, agents, and workflows.
Add instructions
Instructions help you control how Opal communicates with Salesforce based off of how you use it. You should add at least one instruction before calling the Salesforce CRM connector tools.
As an example, follow the steps in the Create instructions documentation and enter the following information:
Name – Salesforce Tools
Core Instruction
Salesforce Tool Usage Guidelines: When interacting with Salesforce data, especially `Opportunity` records, always adhere to the following rules:
- **Opportunity Filtering:**
- When querying `Opportunity` records, only include opportunities where type is one of the following:
- New Customer - Single Product
- New Customer - Multiple Products
- Existing Customer - Cross Sell
- Existing Customer - Cross Sell and Up Sell
- If the user mentions "closed won opportunities" in the context of an Opportunity always use 'stage' of 'Closed Won - Finance'
- If the user mentions "open opportunities" in the context of an Opportunity, filter by 'opportunity status' is 'Open'
- If the user mentions "closed lost opportunities" in the context of an Opportunity always filter by 'stage' is 'Closed Lost'
- If the user mentions "top opportunities" always sort descending by the **RecurringSoftwareAmountChange__c** field
- Always exclude opportunities with "test", "dummy", or "renewal" in the name (not case sensitive)
- Always exclude opportunities where the **RecurringSoftwareAmountChange__c** is null, a non-number, 0, or less than 1
- When querying `Opportunity` records, only include opportunities where type is one of the following:
- **Opportunity Data:**
- When returning opportunity data always show: opportunity name, Recurring_Software_Amount_Change__c (label this field 'Recurring Software Amount (converted)'), owner, and close date at a minimum
- Always use thousands separators (commas) when displaying number fields. Never show decimal points or cents.
- **IMPORTANT:** If the user asks for opportunity "ARR", "amount", "revenue", or "value", always use the **RecurringSoftwareAmountChange__c** field on the opportunity object because this is always in USD currency. Never use the 'Amount' field because it can be in different currencies.
- *Salesperson/AE Mapping:**
- If the user mentions "salesperson" or "AE" in the context of an `Account` or `Opportunity`, interpret this as a request for the "Primary Account Executive" field.
- **Implementation:** When retrieving `Account` or `Opportunity` records, include the Salesforce API field name for "Primary Account Executive" in the `fields` parameter (for example, `"PrimaryAccountExecutive__c"` or `"PrimaryAccountExecutive"`). *Note: You may need to use* `salesforce_crm_describe_object` *to confirm the exact API name of this field if it's a custom field.*
- **CSM Mapping:**
- If the user mentions "CSM" in the context of an `Account` or `Opportunity`, interpret this as a request for the "Primary Customer Success Manager" field.
- **Implementation:** When retrieving `Account` or `Opportunity` records, include the Salesforce API field name for "Primary Customer Success Manager" in the `fields` parameter (e.g., `"PrimaryCustomerSuccessManager__c"` or `"PrimaryCustomerSuccessManager"`).
- *Note: You may need to use* `salesforce_crm_describe_object` *to confirm the exact API name of this field if it's a custom field.*
When to use – When querying Salesforce data with Salesforce CRM tools.
You can update the Core Instruction with additional information about how your organization uses Salesforce.
Salesforce CRM connector tools
After an Opal administrator connects to Salesforce CRM and adds instructions and you connect using user-level auth, you can call the following tools in Opal. Click on a tool's name to expand it and learn more about when to use the tool, required and optional parameters, and example prompts on how to call the tool. If you do not provide a required parameter, Opal prompts you for it.
Objects
salesforce_crm_count_object – Counts records in any Salesforce object without retrieving the actual data.
-
When to use
- When you want to know the total count of objects without seeing the actual data.
- To check if records exist before performing operations.
- To verify data volumes efficiently.
-
Parameters
-
objectType– Salesforce object type to count. For example, "Account", "Lead", or "Product_Catalog__c". - (Optional)
filters– Filter conditions as JSON string. For example, '{"Industry": "Technology"}'. - (Optional)
createdAfter– Filter records created on or after this date in YYYY-MM-DD format. - (Optional)
createdBefore– Filter records created on or before this date in YYYY-MM-DD format. - (Optional)
customDateField– Date or datetime field name to filter on, for instance "CloseDate". - (Optional)
customDateAfter– Filter records wherecustomDateFieldis on or after this date in YYYY-MM-DD format. - (Optional)
customDateBefore– Filter records wherecustomDateFieldis on or before this date in YYYY-MM-DD format.
-
-
Example prompts
- How many accounts are there in Salesforce?
- Count the number of leads created this month.
- How many opportunities are closing this quarter?
- Count cases that were closed last week.
- How many active products are in the Product Catalog?
salesforce_crm_create_object – Creates a new record in any Salesforce object.
-
When to use
- To create new records in Salesforce, such as Accounts, Leads, Contacts, Opportunities, or custom objects.
- When you need to add data to Salesforce programmatically.
- To streamline the creation of standard or custom Salesforce records.
-
Parameters
-
objectType– Salesforce object type to create a record in. For example, "Account", "Lead", or "Product_Catalog__c". -
fields– Field values as a JSON string. For example, '{"Name": "Acme Corporation", "Industry": "Technology"}'.
-
-
Example prompts
- Create a new Account named "Global Innovations" with Industry "Technology".
- I need to create a Lead for Jane Doe, company "Example Corp", email "jane.doe@example.com".
- Create an Opportunity named "Q2 2026 Expansion" with Stage "Prospecting" and CloseDate "2026-06-30".
- Add a new product to the Product Catalog with Name "Super Widget", SKU "SW-001", and Price 29.99.
salesforce_crm_describe_object – Describes a Salesforce object and gets its field metadata.
-
When to use
- To discover available fields for an object before creating or updating records.
- To check which fields are required, createable, or updateable.
- To get valid picklist values for picklist fields.
- To understand field types and their data formats.
-
Parameters
-
objectType– Salesforce object type to describe. For example, "Account", "Lead", "Product_Catalog__c".
-
-
Example prompts
- Describe the Account object in Salesforce.
- Show me the fields available for the Lead object.
- What are the metadata details for the custom object Product_Catalog__c?
salesforce_crm_get_object – Retrieves a single record from any Salesforce object by ID or field search.
-
When to use
- To fetch details of a specific Salesforce record when you know its ID.
- To find a record by a unique field value, such as an email address or a custom SKU.
- To retrieve information about a single Account, Lead, Contact, Opportunity, or custom object record.
-
Parameters
-
objectType– Salesforce object type to query. For example, "Account", "Lead", "Product_Catalog__c". - (Optional)
recordId– Salesforce record ID (18-character ID). If provided,searchFieldandsearchValueare ignored. - (Optional)
searchField– Field name to search by, for instance, "Name", "Email", "SKU__c". Required ifrecordIdis not provided. - (Optional)
searchValue– Value to search for in the specified field. For example, "Acme"or "john@example.com". Required ifrecordIdis not provided. - (Optional)
fields– Comma-separated list of specific field names to retrieve. For example, "Name,Email,Phone". If not specified, Opal returns all queryable fields.
-
-
Example prompts
- Get the account details for ID "0015e000001ABC123".
- Find the lead with email "john@example.com".
- Retrieve the opportunity named "Q1 Deal".
- Show me the product details for SKU "PROD-12345".
salesforce_crm_update_object – Updates an existing record in any Salesforce object.
-
When to use
- To modify existing records in Salesforce, such as updating an Account's industry or a Lead's status.
- When you need to change specific fields of a Salesforce record.
- To automate updates to records based on new information or workflow changes.
-
Parameters
-
objectType– Salesforce object type to update. For example, "Account", "Lead", "Product_Catalog__c". -
recordId– The ID of the record to update. -
fields– Field values to update as a JSON string. For example, '{"Industry": "Finance", "Phone": "555-9876"}'.
-
-
Example prompts
- Update the Account with ID "0015e000001ABC123" to have Industry "Finance" and Phone "555-9876".
- Change the status of Lead "00Q5e000001XYZ789" to "Qualified".
- For Opportunity "0065e000001DEF456", set the StageName to "Closed Won" and Amount to 150000.
- Update the Price__c of Product_Catalog__c record "a005e000001ABC123" to 129.99.
Custom objects
salesforce_crm_list_custom_object_records – Lists records from Salesforce custom objects with optional filtering and pagination.
-
When to use
- To search and retrieve multiple records from any Salesforce custom object.
- To filter custom object records by specific criteria, such as status or category.
- To sort custom object records by any field, including custom date or formula fields.
- To paginate through large sets of custom object records.
-
Parameters
-
objectName– Custom object API name. Must end with__c. For example, "Product_Catalog__c". - (Optional)
filters– Filter conditions as a JSON string. - (Optional)
createdAfter– Filter records created on or after this date in YYYY-MM-DD format. - (Optional)
createdBefore– Filter records created on or before this date in YYYY-MM-DD format. - (Optional)
customDateField– Date or datetime field name to filter on. For example, "ExpirationDate__c". - (Optional)
customDateAfter– Filter records wherecustomDateFieldis on or after this date in YYYY-MM-DD format. - (Optional)
customDateBefore– Filter records wherecustomDateFieldis on or before this date in YYYY-MM-DD format. - (Optional)
sortBy– Field name to sort results by. For example, "Name" or "Price__c". - (Optional)
sortOrder– Sort order for results, "ASC" or "DESC". - (Optional)
limit– Maximum number of results to return. Default, 100. - (Optional)
nextRecordsUrl– Salesforce pagination URL from previous response.
-
-
Example prompts
- List all records from the Product_Catalog__c custom object.
- Show me active products in the Electronics category from Product_Catalog__c.
- List all contracts from Contract__c expiring in 2026.
- Show me the top five most expensive products from Product_Catalog__c.
salesforce_crm_list_custom_object_types – Lists all custom object types in the Salesforce organization.
-
When to use
- To discover what custom objects exist in the Salesforce organization.
- To get the API names of custom objects needed for other operations.
- To understand the structure of custom data in Salesforce.
-
Parameters
- None
-
Example prompts
- List all custom object types in Salesforce.
- What custom objects are available in this Salesforce org?
- Show me the API names for all custom objects.
Reports
salesforce_crm_describe_report – Retrieves metadata about a Salesforce report without executing it.
-
When to use
- Understand report structure before running it.
- See available columns and fields.
- Identify the filters you can apply.
- Understand groupings and aggregations.
-
Parameters
-
reportId– Salesforce report ID to describe. Starts with "00O". For example, "00O5e000001ABC123". Use thesalesforce_crm_list_reportstool to find available report IDs.
-
-
Example prompts
- Tell me about Salesforce report "00O5e000001ABC123".
- What are the available columns and fields for Salesforce report "00O5e000001ABC123".
salesforce_crm_list_object – Lists records from any Salesforce object with optional filtering, sorting, and pagination.
-
When to use
- To search and retrieve multiple records from standard or custom Salesforce objects.
- To filter records by any field using advanced operators.
- To sort records by any field, including Amount, Name, CloseDate, or custom fields.
- To paginate through large result sets of Salesforce records.
-
Parameters
-
objectType– Salesforce object type to query (e.g., "Account", "Lead", "Opportunity"). -
fields– Comma-separated list of specific field names to retrieve (e.g., "Name,Email,Phone"). - (Optional)
filters– Filter conditions as a JSON string. - (Optional)
createdAfter– Filter records created on or after this date in YYYY-MM-DD format. - (Optional)
createdBefore– Filter records created on or before this date in YYYY-MM-DD format. - (Optional)
customDateField– Date or datetime field name to filter on. For example, "CloseDate". - (Optional)
customDateAfter– Filter records wherecustomDateFieldis on or after this date in YYYY-MM-DD format. - (Optional)
customDateBefore– Filter records wherecustomDateFieldis on or before this date in YYYY-MM-DD format. - (Optional)
sortBy– Field name to sort results by. For example, "Amount" or "Name". - (Optional)
sortOrder– Sort order for results, "ASC" or "DESC". - (Optional)
limit– Maximum number of results to return. Default, 100. - (Optional)
nextRecordsUrl– Salesforce pagination URL from previous response.
-
-
Example prompts
- List all accounts in the Technology industry, showing their Name, Industry, and Website.
- Show me the top 5 opportunities by amount, including their Name, StageName, and Amount.
- List leads created this month, displaying their Name, Email, and Company.
- Find all cases with a "High" priority, showing CaseNumber, Subject, and Status.
salesforce_crm_list_reports – Retrieves a list of all reports accessible to you.
-
When to use
- Discover available reports.
- Find reports by name or folder.
- Identify report IDs for running or describing reports .
-
Parameters
- (Optional)
folderId– ID to filter reports. Folder IDs start with "00l". For example, "00l5e000000ABC123".- If provided, Opal returns only reports in this folder.
- If not provided, Opal returns all accessible reports.
- (Optional)
-
Example prompts
- List all reports.
- List reports in a folderId: 00l5e000000ABC123.
salesforce_crm_run_report – Runs a Salesforce report and returns the data.
-
When to use
- Execute an existing Salesforce report.
- Get report data with optional runtime filters.
- Retrieve aggregated and grouped data.
-
Parameters
-
reportId– Salesforce report ID to execute. Starts with "00O". For example, "00O5e000001ABC123". Use thesalesforce_crm_list_reportstool to find available report IDs. - (Optional)
filters– Filter conditions as a JSON string. - (Optional)
includeDetails– Whether to include detailed report results in the response. Default, true. Set to false for faster execution when you only need metadata.
-
-
Example prompts
- Run a report without filters: { "reportId": "00O5e000001ABC123" }
- Run a report with runtime filters: { "reportId": "00O5e000001ABC123", "filters": "{\"reportFilters\": [{\"column\": \"CLOSE_DATE\", \"operator\": \"greaterThan\", ' + '\"value\": \"2025-01-01\"}]}" }
- Run report without detailed results: { "reportId": "00O5e000001ABC123", "includeDetails": false }
Use cases
Personalized content for new leads
Challenge – Marketing teams struggle to quickly create and deliver highly personalized content to new leads, leading to generic outreach and lower engagement.
Solution with Opal – Opal can monitor Salesforce for newly created leads. Upon identifying a new lead, Opal automatically retrieves relevant details such as industry, company size, and expressed interests. Leveraging this data, Opal then drafts personalized marketing content, like a tailored email or a blog post summary, ready for review and immediate deployment by the marketing team. This ensures every new lead receives content that resonates, significantly boosting engagement and qualification rates.
Automated content suggestion for sales follow-up
Challenge – Sales representatives spend valuable time searching for appropriate content (case studies, product sheets, or demos) to share with prospects at different stages of the sales cycle, often leading to delays and inconsistent messaging.
Solution with Opal – As opportunities advance through Salesforce stages, Opal proactively identifies the need for follow-up content. Based on the opportunity's details (for example, industry, specific product interest, or identified pain points), Opal searches your Content Marketing Platform (CMP) for the most relevant assets. It then suggests these assets directly to the sales rep or even drafts a personalized email incorporating the content, streamlining the follow-up process and ensuring timely, relevant communication.
Streamlined opportunity reporting
Challenge – Business users need quick, up-to-date insights into sales pipeline health and opportunity status, but compiling reports from Salesforce can be time-consuming and require specific expertise.
Solution with Opal – You can ask Opal for a summary of open opportunities, top deals, or opportunities by stage. Opal queries Salesforce in real-time, aggregates the data, and presents it in an easily digestible format, such as a dynamic table or chart within an Opal canvas. This eliminates manual reporting efforts, providing instant, actionable insights for sales leaders and executives, unifying reporting into a single, accessible interface.
Proactive engagement for at-risk opportunities
Challenge – Sales teams often react to at-risk opportunities rather than proactively addressing potential issues, leading to lost deals. Identifying these opportunities early and knowing the best course of action is critical.
Solution with Opal – Opal continuously monitors Salesforce opportunities for signs of risk, such as prolonged inactivity, approaching close dates without recent engagement, or changes in competitor presence. When an at-risk opportunity is detected, Opal alerts the sales representative and suggests next-best actions. This could include drafting a re-engagement email, recommending a specific piece of content to share, or prompting a call with a key stakeholder, letting you proactively intervene to keep deals on track.
Competitive intelligence for sales pitches
Challenge – Sales representatives need quick access to up-to-date competitive intelligence to effectively position Optimizely's solutions during critical sales pitches, but this information is often scattered or difficult to retrieve on demand.
Solution with Opal – When a sales rep is preparing for a pitch, they can ask Opal for competitive intelligence related to a specific opportunity. Opal retrieves any competitor information stored in Salesforce for that opportunity and then leverages its extensive internal knowledge base (including up-to-date competitor analysis) to provide key differentiators, battle cards, and strategic talking points against the identified competitors. This empowers sales teams with instant, relevant insights to strengthen their pitches and close more deals.
If you use Opti ID, administrators can turn off generative AI in the Opti ID Admin Center. See Turn generative AI off across Optimizely applications.
Article is closed for comments.