Automations Overview
Build automated workflows and business logic.
Kantos Automations let you build powerful workflows that trigger automatically when events occur in your CRM. Send emails, update records, call webhooks, and more—all without writing code.
Work Smarter, Not Harder
Automations handle repetitive tasks so your team can focus on what matters. From simple email notifications to complex multi-step workflows, automate it all.
How Automations Work
Every automation consists of three parts:
- Trigger - The event that starts the automation (e.g., record created)
- Conditions - Optional rules that must be true for the automation to run (e.g., status equals "new")
- Actions - What happens when the automation runs (e.g., send email, update field)
Creating Your First Automation
Navigate to Automations
In your Kantos dashboard, click "Automations" in the sidebar.
Create New Automation
Click the "Create Automation" button in the top right.
Name Your Automation
Give it a descriptive name like "Send Welcome Email to New Leads".
Configure Trigger
Select what event should trigger this automation.
Add Conditions (Optional)
Set any conditions that must be met.
Add Actions
Choose what should happen when the automation runs.
Save and Activate
Save your automation and toggle it to "Active".
Trigger Types
Automations can be triggered by various events:
| Trigger | Description | Use Case |
|---|---|---|
| Record Created | Fires when a new record is created in an object | Welcome emails, assignment notifications |
| Record Updated | Fires when any field in a record changes | Status change notifications, data sync |
| Field Changed | Fires when a specific field changes value | Deal stage progression, lead scoring |
| Record Deleted | Fires when a record is deleted | Cleanup tasks, audit logging |
| Schedule | Fires on a recurring schedule | Daily reports, reminder emails |
| Webhook Received | Fires when an external webhook is received | Third-party integrations |
Conditions
Conditions let you filter when automations should run:
{
"conditions": {
"match": "all",
"rules": [
{
"field": "status",
"operator": "equals",
"value": "new"
},
{
"field": "lead_source",
"operator": "is_not_empty"
},
{
"field": "email",
"operator": "contains",
"value": "@"
}
]
}
}Available Operators
| Operator | Description |
|---|---|
equals | Exact match |
not_equals | Not an exact match |
contains | Contains the value (text) |
not_contains | Does not contain the value |
starts_with | Starts with the value |
ends_with | Ends with the value |
is_empty | Field has no value |
is_not_empty | Field has a value |
greater_than | Greater than (numbers/dates) |
less_than | Less than (numbers/dates) |
in | Value is in a list |
not_in | Value is not in a list |
AND vs OR Logic
Use "match": "all" for AND logic (all conditions must be true), or "match": "any" for OR logic (at least one condition must be true).
Action Types
Actions define what happens when an automation triggers:
Send Email
Send an email using a template with dynamic variables:
{
"type": "send_email",
"config": {
"template_id": "tmpl_welcome_email",
"to": "{{record.email}}",
"variables": {
"name": "{{record.name}}",
"company": "{{record.company}}"
}
}
}Update Record
Update fields on the triggering record:
{
"type": "update_record",
"config": {
"fields": {
"status": "contacted",
"last_contacted_at": "{{now}}",
"follow_up_count": "{{record.follow_up_count + 1}}"
}
}
}Create Record
Create a new record in the same or different object:
{
"type": "create_record",
"config": {
"object_definition_id": "obj_def_tasks",
"data": {
"title": "Follow up with {{record.name}}",
"due_date": "{{date_add(now, 3, 'days')}}",
"related_record_id": "{{record.id}}"
}
}
}Send Webhook
Send data to an external URL:
{
"type": "webhook",
"config": {
"url": "https://api.example.com/webhook",
"method": "POST",
"headers": {
"Authorization": "Bearer {{secrets.api_key}}",
"Content-Type": "application/json"
},
"body": {
"event": "new_lead",
"lead_id": "{{record.id}}",
"email": "{{record.email}}"
}
}
}Wait/Delay
Pause before executing the next action:
{
"type": "wait",
"config": {
"duration": 24,
"unit": "hours"
}
}Conditional Branch
Execute different actions based on conditions:
{
"type": "branch",
"config": {
"conditions": [
{
"if": {"field": "deal_value", "operator": "greater_than", "value": 10000},
"then": [{"type": "send_email", "template": "high_value_alert"}]
},
{
"else": [{"type": "send_email", "template": "standard_notification"}]
}
]
}
}Variables & Templates
Use double curly braces to insert dynamic values:
Record Fields
{{record.field_name}} - Access any field on the record
{{record.id}} - The record's unique ID
{{record.created_at}} - When the record was created
{{record.updated_at}} - When the record was last updatedDate Functions
{{now}} - Current timestamp
{{date_add(now, 7, 'days')}} - 7 days from now
{{date_format(record.date, 'MMM D, YYYY')}} - Formatted dateText Functions
{{upper(record.name)}} - UPPERCASE
{{lower(record.email)}} - lowercase
{{trim(record.notes)}} - Remove whitespace
{{truncate(record.message, 100)}} - First 100 charactersAutomation Examples
Welcome Email Sequence
{
"name": "New Lead Welcome Sequence",
"trigger": {
"event": "record.created",
"object": "obj_def_leads"
},
"actions": [
{
"type": "send_email",
"template": "welcome_email"
},
{
"type": "wait",
"duration": 2,
"unit": "days"
},
{
"type": "send_email",
"template": "follow_up_email_1"
},
{
"type": "wait",
"duration": 3,
"unit": "days"
},
{
"type": "branch",
"conditions": [
{
"if": {"field": "status", "operator": "equals", "value": "new"},
"then": [
{"type": "send_email", "template": "follow_up_email_2"}
]
}
]
}
]
}Lead Scoring
{
"name": "Update Lead Score",
"trigger": {
"event": "record.updated",
"object": "obj_def_leads"
},
"actions": [
{
"type": "update_record",
"fields": {
"lead_score": "{{
(record.has_company ? 20 : 0) +
(record.has_phone ? 15 : 0) +
(record.page_visits > 5 ? 25 : 0) +
(record.email_opened ? 20 : 0) +
(record.link_clicked ? 20 : 0)
}}"
}
}
]
}Slack Notification
{
"name": "Notify Sales on High-Value Lead",
"trigger": {
"event": "record.created",
"object": "obj_def_leads"
},
"conditions": {
"match": "all",
"rules": [
{"field": "estimated_value", "operator": "greater_than", "value": 10000}
]
},
"actions": [
{
"type": "webhook",
"config": {
"url": "{{secrets.slack_webhook_url}}",
"method": "POST",
"body": {
"text": "🎉 New high-value lead: {{record.name}} ({{record.company}}) - ${{record.estimated_value}}"
}
}
}
]
}Testing Automations
Use Test Mode
Enable test mode to run automations without sending actual emails or webhooks.
Check Execution Logs
Review the automation logs to see what would have happened.
Test with Real Data
Create a test record that matches your trigger conditions.
Verify Results
Check that all actions executed correctly and data was updated.
Execution Logs
Every automation run is logged for debugging and auditing:
- Trigger details - What event started the automation
- Condition results - Whether conditions passed or failed
- Action outcomes - Success/failure of each action
- Error messages - Detailed errors if something failed
- Execution time - How long the automation took
Best Practices
- Name automations clearly - Use descriptive names that explain what the automation does
- Start simple - Build basic automations first, then add complexity
- Test thoroughly - Use test mode before activating with real data
- Monitor regularly - Check execution logs for failures or unexpected behavior
- Use conditions wisely - Prevent infinite loops by checking state before updates
- Document your automations - Add descriptions explaining the purpose and logic
Avoid Infinite Loops
Be careful with "Record Updated" triggers that also update the record. Use conditions to check the previous value or add a flag field to prevent re-triggering.
Next Steps
- Learn about trigger types in detail
- Set up webhooks for external integrations
- Create email templates for your automations