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
| Property | Value |
|---|---|
| Node Type | crm_manager |
| Category | Actions |
| Subcategory | CRM |
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
| Field | Type | Required | Description |
|---|---|---|---|
| Entity Type | Select | Yes | What type of record to work with |
| Operation | Select | Yes | What action to perform |
| Entity ID | Text | Conditional | Record ID (for get/update/delete) |
| Data | Object/JSON | Conditional | Record data (for create/update) |
Entity Types
Core CRM Entities
| Entity | Description | Required Fields |
|---|---|---|
contact | Individual people | email |
company | Organizations | name |
deal | Sales opportunities | name |
task | Action items | title |
note | Text notes | content, entity_type, entity_id |
product | Products/services | name |
activity | Activity log entries | activity_type, entity_type, entity_id |
Relationship Entities (Junction Tables)
| Entity | Description | Required Fields |
|---|---|---|
deal_contact | Link deals to contacts | deal_id, contact_id |
deal_company | Link deals to companies | deal_id, company_id |
contact_company | Link contacts to companies | contact_id, company_id |
deal_product | Add products to deals | deal_id, product_id |
deal_payment | Record deal payments | deal_id, amount |
deal_payment_schedule | Payment schedules | deal_id, payment_number, amount, due_date |
Channel Entities
| Entity | Description | Required Fields |
|---|---|---|
voice_call | Voice call records | user_number, contact_number, provider |
whatsapp_conversation | WhatsApp chats | phone_number |
Operations
Standard Operations
| Operation | Description | Required |
|---|---|---|
create | Create new record | data with required fields |
get | Retrieve single record | entity_id or data with search criteria |
search | Find multiple records | search_query or filters |
update | Modify existing record | entity_id + data |
delete | Remove record | entity_id |
Relationship Operations
| Operation | Description | Use Case |
|---|---|---|
link | Connect two entities | Add contact to deal |
unlink | Disconnect entities | Remove contact from deal |
update_relationship | Modify link properties | Change contact role in deal |
Batch Operations
| Operation | Description | Required |
|---|---|---|
batch_create | Create multiple records | items array with data |
batch_update | Update multiple records | items array or batch_entity_ids + batch_common_data |
batch_delete | Delete multiple records | items 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 Operations
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
| Error | Cause | Solution |
|---|---|---|
| Missing required field | Entity type needs specific fields | Check required fields table |
| Entity not found | Invalid entity_id | Verify ID or use search first |
| Duplicate email | Contact with email exists | Use upsert or search first |
| Invalid stage_name | Stage doesn't exist in pipeline | Check available stages |
Best Practices
- Use Batch Operations - For multiple records, use batch_create/update/delete instead of loops
- Search Before Create - Check if entity exists to avoid duplicates
- Validate Required Fields - Ensure all required fields are populated
- Use Variables - Reference data from previous nodes with
{{node.field}} - Handle Errors - Always check success and have error handling paths
- Link Related Entities - Use relationship entities to connect contacts, companies, and deals