CRM Update Opportunity
Update deal/opportunity records in your CRM
The CRM Update Opportunity node updates deal or opportunity records in your connected CRM (HubSpot or Salesforce). Use it to automatically sync meeting outcomes, update deal stages, and keep your CRM current.
Overview
| Property | Value |
|---|---|
| Category | Action |
| Node ID | ds.crmUpdateOpportunity.perItem.in1.success1.error1 |
| Input Ports | 1 |
| Success Outputs | 1 |
| Error Outputs | 1 |
| Execution Mode | Per-item |
| Timeout | 30 seconds |
| Retry Strategy | Exponential, 3 attempts |
| Side-Effecting | Yes |
Prerequisites
- HubSpot or Salesforce integration connected
- Deal room associated with CRM opportunity/deal
- Appropriate CRM permissions for updating deals
Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
deal_room_id | CEL Expression | Yes | Decision Site ID |
meeting_plan_id | CEL Expression | Yes | Meeting plan ID |
Deal Room ID
Identifies which CRM deal to update:
trigger.dealRoomId
Meeting Plan ID
The meeting to sync data from:
trigger.meetingPlanId
How It Works
The CRM Update Opportunity node:
- Identifies the CRM - Determines if HubSpot or Salesforce is connected
- Fetches meeting data - Gets the latest meeting information
- Updates the deal - Syncs relevant data to the CRM opportunity/deal
- Logs the activity - Creates an activity record for the meeting
Data Synced
| Field | Description |
|---|---|
| Meeting Activity | Logs the meeting on the deal timeline |
| Last Activity Date | Updates last touch date |
| Meeting Notes | Syncs summary and key points |
| Attendees | Associates contacts from meeting |
Input Schema
Accepts any data from upstream. The node primarily uses the deal_room_id and meeting_plan_id parameters to fetch and sync data.
Output Schema
Success Output
{
"success": true,
"crm": "hubspot",
"dealId": "12345678901",
"dealRoomId": "dr_xyz789",
"meetingPlanId": "mp_abc123",
"updatedAt": "2024-01-15T14:30:00Z",
"changes": {
"activityLogged": true,
"contactsAssociated": 2,
"lastActivityDateUpdated": true
}
}
Error Output
{
"error": "NO_CRM_ASSOCIATION",
"message": "Deal room has no associated CRM deal",
"dealRoomId": "dr_xyz789"
}
| Error Code | Description |
|---|---|
NO_CRM_ASSOCIATION | Deal room not linked to CRM |
DEAL_NOT_FOUND | CRM deal was deleted or inaccessible |
AUTH_ERROR | CRM authentication failed |
UPDATE_FAILED | CRM rejected the update |
Examples
Basic Example: Sync After Meeting
Update CRM after every meeting ends.
Workflow:
[Event Trigger: MEETING_ENDED]
│
▼
[CRM Update Opportunity]
deal_room_id: trigger.dealRoomId
meeting_plan_id: trigger.meetingPlanId
Configuration:
Deal Room ID: trigger.dealRoomId
Meeting Plan ID: trigger.meetingPlanId
Example: Conditional CRM Update
Only update CRM for important meetings.
Workflow:
[Event Trigger: MEETING_ENDED]
│
▼
[Load Meeting]
│
▼
[AI: Classify importance]
│
▼
[If: json.importance == "high"]
├── Yes ──▶ [CRM Update Opportunity]
└── No ───▶ [Sink]
Example: Combined CRM Update + Task
Update the deal and create a follow-up task.
Workflow:
[Event Trigger: MEETING_ENDED]
│
▼
[CRM Update Opportunity] ──── Sync meeting data
│
▼
[AI: Extract action items]
│
▼
[Create HubSpot Task] ──── Create follow-up
Example: Multi-CRM Workflow
Handle different CRM integrations.
Workflow:
[CRM Update Opportunity]
├── Success ──▶ [Continue processing]
│
└── Error ────▶ [If: error == "NO_CRM_ASSOCIATION"]
├── Yes ──▶ [Slack: "No CRM linked"]
└── No ───▶ [Slack: "CRM update failed"]
Best Practices
1. Update After Every Meeting
The most common pattern is updating CRM for all deal-related meetings:
[Event Trigger: MEETING_ENDED_FOR_DEAL_ROOM] ──▶ [CRM Update Opportunity]
Using MEETING_ENDED_FOR_DEAL_ROOM ensures the meeting is associated with a deal room.
2. Combine with Other Actions
CRM update works well alongside other actions:
[CRM Update Opportunity] ──▶ [Create Task] ──▶ [Slack Notification]
3. Handle Missing CRM Associations
Not all deal rooms have CRM deals. Handle gracefully:
[CRM Update Opportunity]
└── Error ──▶ [Log for review] ──▶ [Sink]
4. Don't Over-Update
The node handles deduplication, but consider:
- One update per meeting is sufficient
- Don't run the same workflow multiple times
Common Issues
"No CRM association" error
Causes:
- Deal room not linked to CRM
- CRM integration not configured
- Deal room uses manual/no CRM mode
Solutions:
- Check deal room settings for CRM link
- Verify CRM integration is connected
- Link the deal room to a CRM opportunity
Updates not appearing in CRM
Causes:
- CRM sync delay
- Page not refreshed
- Activity logged but not visible
Solutions:
- Refresh CRM page
- Check deal's activity timeline
- Verify in CRM activity feed
Stale data in CRM
Causes:
- Old meeting data synced
- Multiple workflows running
Solutions:
- Use latest meeting ID from trigger
- Ensure workflow runs after meeting ends
- Check for duplicate workflows
Related Nodes
- Create HubSpot Task - Create follow-up tasks
- Create Salesforce Task - Salesforce tasks
- Load Meeting - Get meeting details
- AI Prompt - Generate insights for CRM
Technical Details
CRM Detection
The node automatically detects which CRM is connected:
- Checks for HubSpot deal association
- Checks for Salesforce opportunity association
- Updates the appropriate CRM
Meeting Activity Logging
When updating, the node:
- Creates a meeting engagement/activity
- Associates with the deal/opportunity
- Links relevant contacts
- Sets meeting time and duration
Field Updates
Standard fields updated:
- Last activity date
- Meeting count (if custom field exists)
- Associated contacts
Custom field updates depend on your CRM configuration.
Idempotency
Updates are idempotent per execution:
- Same execution + same meeting = same result
- Re-running creates a new activity log
Rate Limits
Respects CRM API limits:
- HubSpot: ~100 requests/10 seconds
- Salesforce: Daily and concurrent limits
- Automatic retry on rate limit errors