Salesforce Integration
Automatically sync meetings, insights, and action items to Salesforce CRM. IceCubes matches meeting participants to your Salesforce contacts and associates records with the right accounts and opportunities.
Requirements
Supported Salesforce Editions
IceCubes uses the Salesforce REST API and SOQL queries to sync data. API access is not available on all Salesforce editions. The following editions include API access:
| Edition | API Access | Notes |
|---|---|---|
| Enterprise | Included | Full API access included |
| Unlimited | Included | Full API access included |
| Performance | Included | Full API access included |
| Developer | Included | Full API access included (lower rate limits) |
| Professional | Add-on required | Requires purchasing the "API Access" add-on from Salesforce |
| Essentials / Starter | Not available | API access is not supported on these editions |
If you're on Salesforce Essentials or Starter, IceCubes cannot connect to your org. If you're on Professional, ask your Salesforce admin whether the API Access add-on is enabled.
Required Salesforce Permissions
The Salesforce user who connects IceCubes needs the following permissions:
- API Enabled — must be enabled on the user's profile
- Read/Write access to Contacts, Accounts, Events, Tasks, and Opportunities
- Query access to the User object (for owner assignment lookups)
Most standard Salesforce profiles (System Administrator, Standard User) include these permissions by default. Custom profiles may need them added.
Overview
When a meeting ends, IceCubes generates a summary, extracts insights, and identifies action items. If Salesforce auto-sync is enabled, these are then synced to Salesforce as:
Event
Title, duration, attendees, and AI summary with key discussion points.
Insights Note
Competitor mentions, objections, MEDDIC signals, and pricing discussions.
Action Item Tasks
One task per action item with priority, status, and due date.
Exclusive CRM: Only one CRM can be connected per organization at a time. To switch from HubSpot to Salesforce (or vice versa), disconnect the current CRM first in Settings.
How Matching Works
IceCubes uses SOQL queries to match meeting participants to Salesforce records. Here's the matching flow:
Step 1: Filter Internal Participants
Participants whose email domain matches one of your organization's verified domains are considered internal and excluded from CRM matching.
If all participants are internal and "Skip internal-only meetings" is enabled (default), the meeting won't be synced at all.
Step 2: Search Contacts by Email
For each external participant, IceCubes queries Salesforce Contacts using SOQL: SELECT Id, Email, Name, AccountId FROM Contact WHERE Email IN (...). This finds contacts with an exact email match.
Step 3: Account Lookup by Domain
If no contact is found, IceCubes searches for an Account by website domain. For example, if john@techcorp.com has no matching contact, IceCubes searches for an Account with Website containing techcorp.com.
Step 4: Find Open Opportunities
For matched Accounts, IceCubes looks for open Opportunities(where IsClosed = false). If multiple open Opportunities exist, the most recently modified one is selected.
Step 5: Select Primary Records
IceCubes selects primary Contact, Account, and Opportunity for record associations:
- Primary Contact — First external contact with a match
- Primary Account — Account associated with the primary contact
- Primary Opportunity — Most recently modified open opportunity
Matching Flow
If no contact is found, domain-based Account search is used as a fallback.
What Gets Created in Salesforce
Event
A Salesforce Event is created with:
- Subject — The meeting title from IceCubes
- Start/End DateTime — Actual meeting duration
- Location — Platform name (Google Meet, Zoom, Teams)
- Description — AI-generated summary with key discussion points (if enabled)
- WhoId — Primary matched Contact
- WhatId — Primary matched Opportunity or Account
Action Item Tasks
Each action item becomes a Salesforce Task with:
- Subject — The action item text (truncated to 200 characters)
- Description — Full action item text with meeting context
- Status — Completed or Not Started (matches IceCubes status)
- Priority — High, Normal, or Low
- ActivityDate — Due date if set in IceCubes
- OwnerId — Salesforce User matching the IceCubes assignee email
- WhoId / WhatId — Linked to matched Contact and Opportunity/Account
Owner Assignment
IceCubes automatically assigns Salesforce owners using active Users in your org. Owners must be active Salesforce Users — not just CRM contacts.
Event Owner
The Event is assigned to a Salesforce User using this priority:
- Meeting owner — the IceCubes user who recorded the meeting
- Internal participant — the first internal team member found as a Salesforce User
Task Owner
Each task is assigned to the Salesforce User whose email matches the IceCubes assignee. If no match is found, the task is created without a specific owner.
Settings
Configure Salesforce sync behavior in Settings > Integrations > Salesforce.
| Setting | Default | Description |
|---|---|---|
| Enable Auto-Sync | On | Master toggle for automatic syncing after meetings end |
| Log Meetings | On | Create Events in Salesforce |
| Include AI Summary | On | Add the AI-generated summary and key points to the Event description |
| Sync Action Items | On | Create/update Tasks for each action item |
| Create Contacts for Unmatched | Off | Automatically create Salesforce Contacts for participants with no email match |
| Skip Internal-Only | On | Don't sync meetings where all participants are from your organization |
| Minimum Duration | 5 min | Skip meetings shorter than this duration |
Troubleshooting
Meeting wasn't synced to Salesforce
Check the following:
- Is Salesforce connected? Go to Settings > Integrations > Salesforce
- Is Auto-Sync enabled?
- Was the meeting longer than the minimum duration setting?
- Did the meeting have external participants? Internal-only meetings are skipped by default
- Does the meeting have a calendar event with attendee emails?
No contacts were matched
Contact matching requires exact email matches. Check that:
- The participant's email matches a Contact's Email field in Salesforce
- The participant isn't being filtered as internal (check your verified domains)
You can enable "Create contacts for unmatched" to auto-create Contacts for participants without a match.
Event synced but no Opportunity was associated
Opportunity association requires: Contact → Account → Opportunity.
- The matched Contact must have an AccountId in Salesforce
- The Account must have at least one open Opportunity (IsClosed = false)
Task shows no owner in Salesforce
Salesforce Task owners must be active Salesforce Users. When you assign an action item in IceCubes, IceCubes looks up the assignee's email against active Users in your Salesforce org.
To fix:
- Ensure the assignee has an active Salesforce User account
- Make sure their Salesforce User email matches the email used in IceCubes
Connection expired error
Salesforce OAuth tokens can expire. If you see a "connection expired" message, go to Settings > Integrations > Salesforce, click "Disconnect", then "Connect Salesforce" again. Your sync settings will be preserved.
I want to switch from HubSpot to Salesforce
Only one CRM can be connected per organization. To switch:
- Go to Settings > Integrations > HubSpot
- Click "Disconnect"
- Then go to Salesforce and click "Connect Salesforce"
Previously synced data in the old CRM is not removed when you disconnect.