Package Information
Documentation
n8n-nodes-dalil-ai
This is an n8n community node. It lets you use Dalil AI in your n8n workflows.
Dalil AI is a CRM platform that helps you manage your customer relationships and sales pipeline.
n8n is a fair-code licensed workflow automation platform.
Installation
Operations
Credentials
Compatibility
Usage
Resources
Installation
Follow the installation guide in the n8n community nodes documentation.
Operations
People:
- Create, Update, Delete, Get, Get Many
Company:
- Create, Update, Delete, Get, Get Many
Opportunity:
- Create, Update, Delete, Get, Get Many
Task:
- Create, Update, Delete, Get, Get Many
Note:
- Create, Update, Delete, Get, Get Many
Task Target (Relations):
- Create, Update, Delete, Get, Get Many
Note Target (Relations):
- Create, Update, Delete, Get, Get Many
Pipeline:
- Create, Update, Delete, Get, Get Many
Credentials
You'll need to create Dalil AI API credentials. You can find these in your Dalil AI account settings.
Compatibility
This was tested against n8n version 1.0+.
Usage
This node allows you to interact with Dalil AI's CRM system to manage contacts, companies, opportunities, tasks, and notes.
Resources
Dalil AI n8n Node - Complete User Guide
Welcome to the comprehensive guide for using the Dalil AI n8n node. This documentation will help users of all experience levels - from beginners to advanced developers - understand and effectively use the DalilAI n8n node.
Table of Contents
- Overview
- Authentication Setup
- Understanding Resources
- Core Concepts
- Operations Guide
- Understanding Field Types and Values
- Query Parameters
- Triggers and Webhooks
- Advanced Features
- Troubleshooting
Overview
The Dalil AI n8n node allows you to seamlessly integrate with the Dalil AI CRM system, enabling automation of customer relationship management tasks. The node supports comprehensive CRUD (Create, Read, Update, Delete) operations across multiple resources and provides real-time webhook notifications for data changes.
Supported Resources
- People: Individual contacts and customers
- Company: Organizations and businesses
- Opportunity: Sales deals and prospects
- Task: To-do items and assignments
- Note: Documentation and comments
- Task Relations: Link tasks to multiple records
- Note Relations: Link notes to multiple records
- Pipeline: Workflow stages and processes
Authentication Setup
Before using the Dalil AI node, you need to configure your API credentials:
- Create Credentials: In your n8n instance, go to Settings > Credentials
- Add New Credential: Select "Dalil AI API"
- Configure:
- API Key: Your authentication token from Dalil AI settings
Understanding Resources
Core Resources
People
Represents individual contacts in your CRM.
- Use Case: Store customer information, contacts, leads
- Key Fields: First Name, Last Name, Email, Phone, Company ID
- Relationships: Belongs to Company, has Tasks/Notes
Company
Represents businesses and organizations.
- Use Case: Manage client companies, prospects, vendors
- Key Fields: Name, Domain URL, Industry, Employees, Address
- Relationships: Has People, Opportunities, Tasks/Notes
Opportunity
Represents sales deals and revenue opportunities.
- Use Case: Track sales pipeline, deals, revenue forecasts
- Key Fields: Name, Amount, Stage, Close Date, Company ID
- Relationships: Belongs to Company and people, has Tasks/Notes
Task
Represents actionable items and assignments.
- Use Case: Track work items, follow-ups, assignments
- Key Fields: Title, Body, Status, Due Date, Assignee ID
- Relationships: Can be linked to any record via Task Relations
Note
Represents documentation and comments.
- Use Case: Store meeting notes, customer interactions, documentation
- Key Fields: Title, Body, Visibility Level
- Relationships: Can be linked to any record via Note Relations
Relationship Resources
Task Relations (taskTarget)
Creates many-to-many relationships between tasks and other records.
- Purpose: One task can be related to multiple People, Companies, or Opportunities
- Use Case: Project tasks affecting multiple contacts or deals
- Key Fields: Task ID, Person ID, Company ID, Opportunity ID
Note Relations (noteTarget)
Creates many-to-many relationships between notes and other records.
- Purpose: One note can be related to multiple People, Companies, or Opportunities
- Use Case: Meeting notes involving multiple participants or deals
- Key Fields: Note ID, Person ID, Company ID, Opportunity ID
Pipeline
Defines workflow stages and custom processes.
- Purpose: Create custom workflows beyond standard opportunity stages
- Use Case: Support tickets, hiring processes, custom workflows
- Key Fields: Name, Status, Custom Fields
Core Concepts
Operations
Each resource supports standard CRUD operations:
- Create: Add new records
- Get: Retrieve a single record by ID
- Get Many: Retrieve multiple records with filtering
- Update: Modify existing records
- Delete: Remove records
Field Types
Understanding field types is crucial for proper data entry:
Standard Field Types
- TEXT: Plain text strings (e.g., "John Smith")
- NUMBER: Numeric values (e.g., 100, 3.14)
- BOOLEAN: True/false values
- DATE_TIME: ISO 8601 format dates (e.g., "2024-01-15T10:30:00Z")
- SELECT: Single choice from predefined options
- MULTI_SELECT: Multiple choices from predefined options
- RATING: Scale of 1-5 (represented as "RATING_1" through "RATING_5")
Complex Field Types
- EMAILS: Email addresses with primary and additional emails
- PHONES: Phone numbers with country codes and calling codes
- LINKS: URLs with labels and secondary links
- ADDRESS: Complete address information
- FULL_NAME: First and last name components
- MONEY: Amount with currency code (stored in micros)
Select Values Format
IMPORTANT: Select field values must be in uppercase with underscores, not the display labels.
Frontend Display → API Value Required
- "Lead" → "LEAD"
- "New Customer" → "NEW_CUSTOMER"
- "In Progress" → "IN_PROGRESS"
- "On Site" → "ON_SITE"
- "Remote Work" → "REMOTE_WORK"
Example for Opportunity Stage:
- Display: "Discovery" → Value: "DISCOVERY"
- Display: "Proposal" → Value: "PROPOSAL"
- Display: "Negotiation" → Value: "NEGOTIATION"
Operations Guide
Creating Records
People - Create
Required Fields:
- First Name
Example:
{
"firstName": "John",
"additionalFields": {
"lastName": "Smith",
"primaryEmail": "[email protected]",
"jobTitle": "Software Engineer",
"companyId": "123e4567-e89b-12d3-a456-426614174000"
}
}
Company - Create
Required Fields:
- Company Name
Example:
{
"name": "Acme Corp",
"additionalFields": {
"domainUrl": "https://acmecorp.com",
"industry": "Technology",
"employees": 50,
"addressStreet1": "123 Main St",
"addressCity": "San Francisco",
"addressState": "CA",
"addressCountry": "United States"
}
}
Opportunity - Create
Required Fields:
- Name
Example:
{
"name": "Q1 Software License Deal",
"additionalFields": {
"amount": 50000,
"currencyCode": "USD",
"stage": "DISCOVERY",
"closeDate": "2024-03-31",
"companyId": "123e4567-e89b-12d3-a456-426614174000"
}
}
Task - Create
Required Fields:
- Title
Example:
{
"title": "Follow up with client",
"additionalFields": {
"body": "Call to discuss proposal feedback",
"status": "TODO",
"dueAt": "2024-01-20T15:00:00Z",
"assigneeId": "123e4567-e89b-12d3-a456-426614174000"
}
}
Note - Create
Required Fields:
- Title
Example:
{
"title": "Client Meeting Notes",
"additionalFields": {
"body": "Discussed project requirements and timeline",
"visibilityLevel": 1
}
}
Creating Relationships
Task Relations (taskTarget) - Create
Links a task to multiple records.
⚠️ Important Constraint: Single Relation Per Record
Each taskTarget record can only link to ONE relation ID at a time. You cannot add both personId
and companyId
in the same taskTarget record.
❌ Incorrect - Multiple Relations in One Record:
{
"taskId": "task-uuid-here",
"personId": "person-uuid-here", // ❌ Cannot combine
"companyId": "company-uuid-here" // ❌ Cannot combine
}
✅ Correct - Separate Records for Each Relation:
First Record (Person Relation):
{
"taskId": "task-uuid-here",
"personId": "person-uuid-here"
}
Second Record (Company Relation):
{
"taskId": "task-uuid-here",
"companyId": "company-uuid-here"
}
Third Record (Opportunity Relation):
{
"taskId": "task-uuid-here",
"opportunityId": "opportunity-uuid-here"
}
Note Relations (noteTarget) - Create
Links a note to multiple records.
⚠️ Important Constraint: Single Relation Per Record
Each noteTarget record can only link to ONE relation ID at a time. You cannot add both personId
and companyId
in the same noteTarget record.
❌ Incorrect - Multiple Relations in One Record:
{
"noteId": "note-uuid-here",
"personId": "person-uuid-here", // ❌ Cannot combine
"companyId": "company-uuid-here" // ❌ Cannot combine
}
✅ Correct - Separate Records for Each Relation:
First Record (Person Relation):
{
"noteId": "note-uuid-here",
"personId": "person-uuid-here"
}
Second Record (Company Relation):
{
"noteId": "note-uuid-here",
"companyId": "company-uuid-here"
}
Workflow Example:
To link a single note to both a person and a company, create two separate n8n node executions:
First Node Execution:
- Operation: Create noteTarget
- noteId: "your-note-uuid"
- personId: "your-person-uuid"
Second Node Execution:
- Operation: Create noteTarget
- noteId: "your-note-uuid"
- companyId: "your-company-uuid"
Updating Records
Updates require the record ID and any fields you want to modify:
Example - Update Person:
{
"personId": "123e4567-e89b-12d3-a456-426614174000",
"updateFields": {
"jobTitle": "Senior Software Engineer",
"primaryEmail": "[email protected]"
}
}
Getting Records
Get Single Record
Requires only the record ID:
- Person ID: UUID of the person to retrieve
- Depth: Level of related data to include (0, 1, or 2)
Get Many Records
Supports filtering, sorting, and pagination:
- Return All: Whether to fetch all results or limit
- Limit: Maximum records to return (1-60)
- Filter: Conditions to filter results
- Order By: Sorting criteria
- Depth: Level of related data to include
Understanding Field Types and Values
Custom Properties
Each resource can have custom fields specific to your workspace. The node dynamically loads available custom properties and shows the expected format.
Custom Property Types:
- Text Fields: Accept plain strings
- Select Fields: Accept predefined values (use API format, not display labels)
- Multi-Select Fields: Accept arrays of predefined values
- Date Fields: Accept ISO 8601 formatted dates
- Boolean Fields: Accept true/false
- Rating Fields: Accept "RATING_1" through "RATING_5"
Query Parameters
Filtering
Filter results using field conditions with comparators:
Format: field[comparator]:value,field2[comparator]:value2
Available Comparators:
eq
: Equal toneq
: Not equal togt
: Greater thangte
: Greater than or equallt
: Less thanlte
: Less than or equalin
: In list (comma-separated values)startsWith
: Starts with textlike
: Contains text (case-sensitive)ilike
: Contains text (case-insensitive)is
: For NULL/NOT_NULL valuescontainsAny
: For array fields
Simple Field Examples:
score[gt]:5
employees[gte]:50
stage[in]:[DISCOVERY,PROPOSAL]
createdAt[gte]:2024-01-01
city[is]:NOT_NULL
Nested Field Examples:
For composite fields, use dot notation to access subfields:
People/Person Fields:
name.firstName[eq]:John
name.lastName[eq]:Smith
emails.primaryEmail[like]:@company.com
emails.primaryEmail[is]:NOT_NULL
phones.primaryPhoneNumber[startsWith]:+1
phones.primaryPhoneCountryCode[eq]:US
linkedinLink.primaryLinkUrl[like]:linkedin.com
whatsapp.primaryPhoneNumber[startsWith]:+1
Company Fields:
name[eq]:Acme Corp
domainName.primaryLinkUrl[eq]:acme.com
address.addressCity[eq]:New York
address.addressCountry[eq]:USA
annualRecurringRevenue.amountMicros[gt]:1000000
linkedinLink.primaryLinkUrl[like]:linkedin.com
Opportunity Fields:
name[eq]:Big Deal
amount.amountMicros[gt]:500000
amount.currencyCode[eq]:USD
Complex Filters with Conjunctions:
Use and
, or
, not
to combine conditions:
and(name.firstName[eq]:John,name.lastName[eq]:Smith)
or(emails.primaryEmail[like]:@company.com,phones.primaryPhoneNumber[startsWith]:+1)
not(emails.primaryEmail[is]:NULL)
and(score[gt]:5,or(name.firstName[eq]:John,name.firstName[eq]:Jane))
Sorting (Order By)
Sort results by one or more fields:
Format: field1,field2[DIRECTION]
Available Directions:
AscNullsFirst
: Ascending, nulls first (default)AscNullsLast
: Ascending, nulls lastDescNullsFirst
: Descending, nulls firstDescNullsLast
: Descending, nulls last
Simple Field Examples:
createdAt[DescNullsLast]
score[DescNullsFirst]
position[AscNullsLast]
Nested Field Examples:
For composite fields, use dot notation to access subfields:
People/Person Sorting:
name.firstName[AscNullsFirst]
name.lastName[DescNullsLast]
emails.primaryEmail[AscNullsLast]
phones.primaryPhoneNumber[DescNullsFirst]
Company Sorting:
name[AscNullsFirst]
domainName.primaryLinkUrl[AscNullsLast]
address.addressCity[DescNullsFirst]
annualRecurringRevenue.amountMicros[DescNullsLast]
Multiple Field Sorting:
name.firstName,name.lastName[DescNullsFirst]
score[DescNullsLast],name.firstName[AscNullsLast]
createdAt[DescNullsFirst],name.firstName[AscNullsFirst]
Depth Levels
Control how much related data to include:
- Depth 0: Only the primary object
- Depth 1: Primary object + direct relationships (default)
- Depth 2: Primary object + relationships + their relationships
Example:
- Depth 0: Just the person record
- Depth 1: Person + their company info
- Depth 2: Person + company + company's opportunities
Triggers and Webhooks
The Dalil AI Trigger node allows you to react to real-time changes in your Dalil AI workspace.
Setting Up Triggers
- Add Trigger Node: Drag "Dalil AI Trigger" to your workflow
- Configure Entity: Choose which resource to monitor (Company, People, Opportunity, Task)
- Configure Action: Choose which events to listen for (Create, Update, Delete, All)
- Save and Activate: The webhook will be automatically registered
Trigger Configuration
Entity Options:
- Company: Monitor company record changes
- People: Monitor person record changes
- Opportunity: Monitor opportunity changes
- Task: Monitor task changes
Action Options:
- All (*): Any change to the entity
- Create: New records created
- Update: Existing records modified
- Delete: Records removed
Webhook Response Structure
When a trigger fires, you receive a structured webhook payload:
[
{
"targetUrl": "https://your-n8n-instance.com/webhook/...",
"eventName": "company.updated",
"objectMetadata": {
"id": "8913832e-825b-4374-a527-f9e3524ef3a9",
"nameSingular": "company"
},
"workspaceId": "20202020-1c25-4d02-bf25-6aeccf7ea419",
"webhookId": "85124f96-2698-4368-8805-c2755070c1c1",
"eventDate": "2025-06-26T04:51:21.005Z",
"record": {
// Complete record data with all fields
"id": "2f51e0c3-6ed4-4ec7-8ecf-05f0282154fe",
"name": "Acme Corp",
"industry": "Technology",
// ... all other fields
},
"updatedFields": [
"address",
"industry"
]
}
]
Key Webhook Fields
eventName
Identifies the specific event that occurred:
- Format:
{entity}.{action}
- Examples:
company.created
,people.updated
,opportunity.deleted
- Use Case: Filter webhook processing based on event type
updatedFields
Array of field names that were changed (only for update events):
- Use Case: Process only specific field changes, ignore others
- Example: Only send email notifications when contact info changes
record
Complete record data after the change:
- Create Events: The newly created record
- Update Events: Record with latest values
- Delete Events: The record before deletion
eventDate
ISO timestamp of when the event occurred:
- Use Case: Order events, detect delayed processing
Using Webhook Data
Example - Process Only Email Changes:
// In your workflow's JavaScript code
if (items[0].json.eventName === 'people.updated' &&
items[0].json.updatedFields.includes('primaryEmail')) {
// Send notification about email change
return items;
} else {
// Skip processing
return [];
}
Example - Route by Event Type:
const eventName = items[0].json.eventName;
const [entity, action] = eventName.split('.');
if (entity === 'company' && action === 'created') {
// Handle new company
} else if (entity === 'opportunity' && action === 'updated') {
// Handle opportunity changes
}
Troubleshooting
Common Issues
Authentication Errors
- Symptom: "Unauthorized" or credential errors
- Solution: Verify API key
Field Value Errors
- Symptom: "Invalid value" errors for select fields
- Solution: Use API format values, not display labels
- Example: Use "IN_PROGRESS" not "In Progress"
Date Format Errors
- Symptom: Date validation failures
- Solution: Use ISO 8601 format: "2024-01-15T10:30:00Z"
- Tools: Use JavaScript
new Date().toISOString()
Relationship Errors
- Symptom: "Record not found" when creating relations
- Solution: Ensure referenced IDs exist and are valid UUIDs
- Check: Verify record existence before creating relations
Filter Syntax Errors
- Symptom: No results or filter errors
- Solution: Check comparator syntax and field names
- Example:
name[eq]:value
notname=value
This guide provides comprehensive coverage of the Dalil AI n8n node. For specific use cases or advanced configurations, refer to the API documentation or reach out to the support team.