Search documentation

Search for pages in the documentation

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

PropertyValue
CategoryAction
Node IDds.crmUpdateOpportunity.perItem.in1.success1.error1
Input Ports1
Success Outputs1
Error Outputs1
Execution ModePer-item
Timeout30 seconds
Retry StrategyExponential, 3 attempts
Side-EffectingYes

Prerequisites

  • HubSpot or Salesforce integration connected
  • Deal room associated with CRM opportunity/deal
  • Appropriate CRM permissions for updating deals

Configuration

ParameterTypeRequiredDescription
deal_room_idCEL ExpressionYesDecision Site ID
meeting_plan_idCEL ExpressionYesMeeting plan ID

Deal Room ID

Identifies which CRM deal to update:

cel
trigger.dealRoomId

Meeting Plan ID

The meeting to sync data from:

cel
trigger.meetingPlanId

How It Works

The CRM Update Opportunity node:

  1. Identifies the CRM - Determines if HubSpot or Salesforce is connected
  2. Fetches meeting data - Gets the latest meeting information
  3. Updates the deal - Syncs relevant data to the CRM opportunity/deal
  4. Logs the activity - Creates an activity record for the meeting

Data Synced

FieldDescription
Meeting ActivityLogs the meeting on the deal timeline
Last Activity DateUpdates last touch date
Meeting NotesSyncs summary and key points
AttendeesAssociates 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

json
{
  "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

json
{
  "error": "NO_CRM_ASSOCIATION",
  "message": "Deal room has no associated CRM deal",
  "dealRoomId": "dr_xyz789"
}
Error CodeDescription
NO_CRM_ASSOCIATIONDeal room not linked to CRM
DEAL_NOT_FOUNDCRM deal was deleted or inaccessible
AUTH_ERRORCRM authentication failed
UPDATE_FAILEDCRM rejected the update

Examples

Basic Example: Sync After Meeting

Update CRM after every meeting ends.

Workflow:

text
[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:

text
[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:

text
[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:

text
[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:

text
[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:

text
[CRM Update Opportunity] ──▶ [Create Task] ──▶ [Slack Notification]

3. Handle Missing CRM Associations

Not all deal rooms have CRM deals. Handle gracefully:

text
[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:

  1. Check deal room settings for CRM link
  2. Verify CRM integration is connected
  3. 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:

  1. Refresh CRM page
  2. Check deal's activity timeline
  3. Verify in CRM activity feed

Stale data in CRM

Causes:

  • Old meeting data synced
  • Multiple workflows running

Solutions:

  1. Use latest meeting ID from trigger
  2. Ensure workflow runs after meeting ends
  3. Check for duplicate workflows

Technical Details

CRM Detection

The node automatically detects which CRM is connected:

  1. Checks for HubSpot deal association
  2. Checks for Salesforce opportunity association
  3. Updates the appropriate CRM

Meeting Activity Logging

When updating, the node:

  1. Creates a meeting engagement/activity
  2. Associates with the deal/opportunity
  3. Links relevant contacts
  4. 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