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 a multi-step search ladder to match meeting participants to the most relevant Salesforce records. The algorithm tries the highest-signal path first and falls back to broader searches, reporting a confidence level for each match.
Step 1: Filter Internal Participants
Participants whose email domain matches one of your organization's verified domains — or who are active Salesforce Users in your org — 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 & Leads by Email
For each external participant, IceCubes queries Salesforce Contacts and Leads by exact email match. Matched Contacts provide Account associations. Leads are tracked separately and used as fallback if no Contact is found.
Step 3: Opportunity Contact Role (OCR) Path
This is the highest-confidence path. If any matched Contacts have OpportunityContactRole records linking them to open Opportunities, IceCubes uses majority voting to pick the best Opportunity:
- Majority vote — the Opportunity linked to the most participants on the call wins
- IsPrimary tie-break — if tied, prefer an Opportunity where a call participant holds the Primary role
- Recency tie-break — if still tied, the most recently modified Opportunity wins
Only open Opportunities created within the last 12 months are considered, matching Salesforce's own standard matching behavior.
Step 4: Account Path (Fallback)
If no OCR links are found, IceCubes looks for open Opportunities on the matched Accounts. It searches in two tiers:
- Owner-filtered (medium confidence) — Opportunities owned by a Salesforce User who was also on the call. This identifies deals your team actively owns.
- Unfiltered (low confidence) — any open Opportunity on the Account, sorted by most recently modified.
Step 5: Domain-Based Account Search
For participants with no matching Contact, IceCubes extracts the email domain and searches for Accounts whose Website field contains that domain. For example, john@techcorp.com would match an Account with Website www.techcorp.com.
Step 6: Select Primary Records
IceCubes selects the best primary Contact, Account, and Opportunity to associate with synced records:
- Primary Contact — Contact with the most recent activity, favoring those linked to the primary Opportunity
- Primary Account — Account associated with the primary Contact or Opportunity
- Primary Opportunity — Selected by the OCR or Account path above
Matching Flow
Falls back from OCR → Account-owned → Account-unfiltered → Account-only
Match Confidence
Each sync includes a match confidence level so you can understand how the records were associated:
| Confidence | Path | Meaning |
|---|---|---|
| High | OCR | Contact is directly linked to the Opportunity via OpportunityContactRole |
| Medium | Account-owned | Opportunity found on the Account, owned by someone on the call |
| Low | Account / Account-only | Best-guess based on Account association or domain match |
| None | No match | No Salesforce records could be matched to the meeting participants |
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 at least one of these paths to succeed:
- OCR path: The matched Contact has an OpportunityContactRole on an open Opportunity created in the last 12 months
- Account path: The Contact's Account has at least one open Opportunity (IsClosed = false) created in the last 12 months
- Domain path: The participant's email domain matches an Account's Website field, and that Account has open Opportunities
If the match shows "account-only" confidence, it means a Contact and Account were found but no open Opportunities exist on that Account.
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.