Skip to main content

CRM Manager Node Reference

The CRM Manager is a unified node that handles all CRM operations. Rather than separate nodes for contacts, companies, and deals, this single node manages everything through entity type and operation selection.


Overview​

PropertyValue
Node Typecrm_manager
CategoryActions
SubcategoryCRM

Why One Node?​

The CRM Manager consolidates all CRM operations into one flexible node:

  • Simpler workflows - One node type to learn
  • Consistent interface - Same patterns across all entities
  • Powerful batch operations - Process multiple records at once
  • Relationship management - Link entities together

Configuration​

Core Parameters​

FieldTypeRequiredDescription
Entity TypeSelectYesWhat type of record to work with
OperationSelectYesWhat action to perform
Entity IDTextConditionalRecord ID (for get/update/delete)
DataObject/JSONConditionalRecord data (for create/update)

Entity Types​

Core CRM Entities​

EntityDescriptionRequired Fields
contactIndividual peopleemail
companyOrganizationsname
dealSales opportunitiesname
taskAction itemstitle
noteText notescontent, entity_type, entity_id
productProducts/servicesname
activityActivity log entriesactivity_type, entity_type, entity_id

Relationship Entities (Junction Tables)​

EntityDescriptionRequired Fields
deal_contactLink deals to contactsdeal_id, contact_id
deal_companyLink deals to companiesdeal_id, company_id
contact_companyLink contacts to companiescontact_id, company_id
deal_productAdd products to dealsdeal_id, product_id
deal_paymentRecord deal paymentsdeal_id, amount
deal_payment_schedulePayment schedulesdeal_id, payment_number, amount, due_date

Channel Entities​

EntityDescriptionRequired Fields
voice_callVoice call recordsuser_number, contact_number, provider
whatsapp_conversationWhatsApp chatsphone_number

Operations​

Standard Operations​

OperationDescriptionRequired
createCreate new recorddata with required fields
getRetrieve single recordentity_id or data with search criteria
searchFind multiple recordssearch_query or filters
updateModify existing recordentity_id + data
deleteRemove recordentity_id

Relationship Operations​

OperationDescriptionUse Case
linkConnect two entitiesAdd contact to deal
unlinkDisconnect entitiesRemove contact from deal
update_relationshipModify link propertiesChange contact role in deal

Batch Operations​

OperationDescriptionRequired
batch_createCreate multiple recordsitems array with data
batch_updateUpdate multiple recordsitems array or batch_entity_ids + batch_common_data
batch_deleteDelete multiple recordsitems array with entity_ids

Entity Field Reference​

Contact Fields​

Required: email

Optional:
- first_name, last_name
- phone, mobile
- job_title, department
- address_line1, address_line2, city, state, postal_code, country
- lead_status: "new" | "contacted" | "qualified" | "converted"
- lead_score (number)
- lifecycle_stage
- preferred_contact_method
- timezone, language
- linkedin_url, twitter_handle, facebook_url
- source
- tags (array)
- custom_fields (object)
- owner_email

Company Fields​

Required: name

Optional:
- domain, website
- industry, company_type
- size, annual_revenue
- description
- address_line1, address_line2, city, state, postal_code, country
- phone, email
- linkedin_url, twitter_handle, facebook_url
- source, status
- tags (array)
- custom_fields (object)
- owner_email

Deal Fields​

Required: name

Optional:
- value (number), currency (default: "INR")
- stage_name: "Unknown" | "Inquiry" | "Qualified" | "Trial" | "Negotiation" | "Closed Won" | "Closed Lost" | "Services"
- probability (0-100)
- deal_type
- expected_close_date, actual_close_date
- close_reason, competitors
- description, next_step
- source
- tags (array)
- is_won, is_lost (boolean)
- custom_fields (object)
- owner_email

Task Fields​

Required: title

Optional:
- description
- type
- priority: "low" | "medium" | "high" | "urgent"
- status: "pending" | "in_progress" | "completed" | "cancelled"
- due_date, completed_at
- reminder_date
- assigned_to_email, assigned_by_email
- entity_type, entity_id (to link task to another record)

Note Fields​

Required: content, entity_type, entity_id

Optional:
- is_pinned (boolean)
- attachments (array)

Product Fields​

Required: name

Optional:
- description, category
- price, cost, currency
- is_active (boolean)
- tags (array)
- custom_fields (object)

Usage Examples​

Create Operations​

Create Contact:

Entity Type: contact
Operation: create
Data: {
"email": "john@example.com",
"first_name": "John",
"last_name": "Doe",
"phone": "+1234567890",
"lead_status": "new"
}

Create Deal:

Entity Type: deal
Operation: create
Data: {
"name": "Enterprise Contract",
"value": 50000,
"stage_name": "Qualified",
"probability": 25,
"expected_close_date": "2024-06-30"
}

Create Task:

Entity Type: task
Operation: create
Data: {
"title": "Follow up call",
"description": "Discuss proposal details",
"priority": "high",
"due_date": "2024-03-25",
"assigned_to_email": "sales@company.com"
}

Search Operations​

Search by Name:

Entity Type: contact
Operation: search
Search Query: "john doe"

Search by Email:

Entity Type: contact
Operation: search
Data: {
"email": "john@example.com"
}

Search with Filters:

Entity Type: deal
Operation: search
Data: {
"stage_name": "Qualified",
"value": {">=": 10000}
}

Partial Name Match:

Entity Type: contact
Operation: search
Data: {
"first_name": {"contains": "John"},
"last_name": {"contains": "Doe"}
}

Get Operations​

Get by ID:

Entity Type: contact
Operation: get
Entity ID: {{previousNode.contact_id}}

Get by Email (Enhanced Get):

Entity Type: contact
Operation: get
Data: {
"email": "john@example.com"
}

Update Operations​

Update Contact Status:

Entity Type: contact
Operation: update
Entity ID: {{contact.id}}
Data: {
"lead_status": "qualified",
"lead_score": 85
}

Update Deal Stage:

Entity Type: deal
Operation: update
Entity ID: {{deal.id}}
Data: {
"stage_name": "Closed Won",
"probability": 100,
"is_won": true
}

Link Contact to Deal:

Entity Type: deal_contact
Operation: link
Data: {
"deal_id": "{{deal.id}}",
"contact_id": "{{contact.id}}",
"role": "Decision Maker",
"is_primary": true
}

Link Company to Contact:

Entity Type: contact_company
Operation: link
Data: {
"contact_id": "{{contact.id}}",
"company_id": "{{company.id}}",
"role": "CEO",
"department": "Executive"
}

Batch Operations​

Batch Create Contacts:

Entity Type: contact
Operation: batch_create
Items: [
{"email": "alice@example.com", "first_name": "Alice"},
{"email": "bob@example.com", "first_name": "Bob"},
{"email": "charlie@example.com", "first_name": "Charlie"}
]

Batch Update Same Data:

Entity Type: deal
Operation: batch_update
Batch Entity IDs: {{searchNode.results}}
Batch Common Data: {
"stage_name": "Closed Lost",
"close_reason": "Budget constraints"
}

Output Variables​

Single Record Operations​

{{crmmanager_1.success}}        - true/false
{{crmmanager_1.entity_id}} - Created/updated record ID
{{crmmanager_1.data}} - Full record data

Search Operations​

{{crmmanager_1.results}}        - Array of matching records
{{crmmanager_1.total}} - Total count
{{crmmanager_1.results[0].id}} - First result ID
{{crmmanager_1.results[0].email}} - First result email

Batch Operations​

{{crmmanager_1.total}}          - Total items processed
{{crmmanager_1.processed}} - Successfully processed count
{{crmmanager_1.failed}} - Failed count
{{crmmanager_1.created_ids}} - Array of created IDs (batch_create)
{{crmmanager_1.updated_ids}} - Array of updated IDs (batch_update)
{{crmmanager_1.deleted_ids}} - Array of deleted IDs (batch_delete)
{{crmmanager_1.errors}} - Array of error details

Advanced Filtering​

Use filter operators in the data field for powerful searches:

Comparison Operators​

// Greater than or equal
{"lead_score": {">=": 80}}

// Less than
{"value": {"<": 100000}}

// Date range
{"created_at": {">=": "2024-01-01", "<=": "2024-12-31"}}

Text Operators​

// Contains
{"email": {"contains": "@acme.com"}}

// Starts with
{"first_name": {"starts_with": "John"}}

// Ends with
{"domain": {"ends_with": ".com"}}

Multiple Criteria​

{
"lead_status": "qualified",
"lead_score": {">=": 80},
"email": {"contains": "@company.com"}
}

Special Features​

Upsert Behavior (Contacts)​

When updating contacts by email, enable Create If Not Found to automatically create the contact if it doesn't exist:

Entity Type: contact
Operation: update
Entity ID: john@example.com (email as identifier)
Create If Not Found: true
Data: {
"first_name": "John",
"lead_status": "contacted"
}

Custom Fields​

Access organization-specific custom fields through the custom_fields object:

Data: {
"email": "john@example.com",
"custom_fields": {
"industry_vertical": "Healthcare",
"contract_type": "Enterprise",
"renewal_date": "2025-01-01"
}
}

JSON Data Input​

For complex data, use the json_data field with a JSON string:

JSON Data: '{"email": "{{webhook.payload.email}}", "first_name": "{{webhook.payload.name}}"}'

Common Patterns​

Create or Update (Upsert)​

[Search Contact] → [Condition: Found?]
→ Yes → [CRM Manager: Update]
→ No → [CRM Manager: Create]

Full Record Creation Flow​

[CRM Manager: Create Company]
→ [CRM Manager: Create Contact]
→ [CRM Manager: Link contact_company]
→ [CRM Manager: Create Deal]
→ [CRM Manager: Link deal_contact]
→ [CRM Manager: Link deal_company]

Batch Processing from Loop​

[Search Contacts] → [Loop: For each contact]
→ [CRM Manager: Update lead_score]

Efficient Batch Update​

[Search Contacts] → [CRM Manager: batch_update with batch_entity_ids]

Error Handling​

Always check the success variable:

[CRM Manager] → [Condition: {{crmmanager_1.success}}]
→ true → [Continue workflow]
→ false → [Log Error: {{crmmanager_1.error}}]

Common Errors​

ErrorCauseSolution
Missing required fieldEntity type needs specific fieldsCheck required fields table
Entity not foundInvalid entity_idVerify ID or use search first
Duplicate emailContact with email existsUse upsert or search first
Invalid stage_nameStage doesn't exist in pipelineCheck available stages

Best Practices​

  1. Use Batch Operations - For multiple records, use batch_create/update/delete instead of loops
  2. Search Before Create - Check if entity exists to avoid duplicates
  3. Validate Required Fields - Ensure all required fields are populated
  4. Use Variables - Reference data from previous nodes with {{node.field}}
  5. Handle Errors - Always check success and have error handling paths
  6. Link Related Entities - Use relationship entities to connect contacts, companies, and deals