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:

  1. Trigger - The event that starts the automation (e.g., record created)
  2. Conditions - Optional rules that must be true for the automation to run (e.g., status equals "new")
  3. Actions - What happens when the automation runs (e.g., send email, update field)

Creating Your First Automation

Step

Navigate to Automations

In your Kantos dashboard, click "Automations" in the sidebar.

Step

Create New Automation

Click the "Create Automation" button in the top right.

Step

Name Your Automation

Give it a descriptive name like "Send Welcome Email to New Leads".

Step

Configure Trigger

Select what event should trigger this automation.

Step

Add Conditions (Optional)

Set any conditions that must be met.

Step

Add Actions

Choose what should happen when the automation runs.

Step

Save and Activate

Save your automation and toggle it to "Active".

Trigger Types

Automations can be triggered by various events:

TriggerDescriptionUse Case
Record CreatedFires when a new record is created in an objectWelcome emails, assignment notifications
Record UpdatedFires when any field in a record changesStatus change notifications, data sync
Field ChangedFires when a specific field changes valueDeal stage progression, lead scoring
Record DeletedFires when a record is deletedCleanup tasks, audit logging
ScheduleFires on a recurring scheduleDaily reports, reminder emails
Webhook ReceivedFires when an external webhook is receivedThird-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

OperatorDescription
equalsExact match
not_equalsNot an exact match
containsContains the value (text)
not_containsDoes not contain the value
starts_withStarts with the value
ends_withEnds with the value
is_emptyField has no value
is_not_emptyField has a value
greater_thanGreater than (numbers/dates)
less_thanLess than (numbers/dates)
inValue is in a list
not_inValue 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 updated

Date Functions

{{now}}                           - Current timestamp
{{date_add(now, 7, 'days')}}      - 7 days from now
{{date_format(record.date, 'MMM D, YYYY')}}  - Formatted date

Text Functions

{{upper(record.name)}}            - UPPERCASE
{{lower(record.email)}}           - lowercase
{{trim(record.notes)}}            - Remove whitespace
{{truncate(record.message, 100)}} - First 100 characters

Automation 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

Step

Use Test Mode

Enable test mode to run automations without sending actual emails or webhooks.

Step

Check Execution Logs

Review the automation logs to see what would have happened.

Step

Test with Real Data

Create a test record that matches your trigger conditions.

Step

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

    Automations | Kantos Docs