Automations
Automations let you build rules that run automatically in your workspace. Instead of manually updating records, sending notifications, or forwarding data, you define a trigger and a set of steps — and Collab Space handles the rest.
Availability: Automations are available on the Pro and Enterprise plans. Enable the Automations module under Settings → General.
Getting Started
Navigate to Settings → Automations to see your automation list. The panel is split into two areas:
- Left: your list of automations with search and a "+ New" button
- Right: the editor for the selected automation, including trigger config, steps, and execution history
To create your first automation:
- Click + New (or pick a template from Templates)
- Give it a name
- Choose a trigger type
- Add one or more steps
- Toggle it Enabled
Triggers
Every automation starts with a trigger — the event or schedule that kicks it off.
| Trigger | When it fires |
|---|---|
| Event | When something happens in your workspace (issue created, status changed, meeting notes added, etc.) |
| Scheduled | On a recurring cron schedule (e.g. every day at 9am, every 5 minutes) |
| Webhook | When an external service sends an HTTP POST to your automation's unique URL |
| Manual | Only when you click the Run button — useful for testing |
Event Trigger
Select the record type (Issue, Meeting, Document, etc.) and the activity that should fire the automation (created, updated, status changed, assigned, and many more).
The triggering record is automatically available in your steps as state.record — so you can reference {{state.record.title}}, {{state.record.priority}}, and so on.
Scheduled Trigger
Enter a cron expression to control when the automation runs. The scheduler checks every minute.
| Expression | Meaning |
|---|---|
*/5 * * * * | Every 5 minutes |
0 9 * * * | Daily at 9:00 AM UTC |
0 9 * * 1-5 | Weekdays at 9:00 AM UTC |
0 0 1 * * | First day of every month |
Scheduled automations currently run in UTC. Timezone support is planned.
Webhook Trigger
When you save a webhook automation, a unique URL is generated:
https://<your-deployment>.convex.site/api/automations/webhook?path=<uuid>
Send a POST request to that URL to trigger the automation. The request body (JSON) is available in your steps as {{state.body.fieldName}}.
Optional signature validation: set a Webhook Secret in the trigger config. Callers must then include an X-Signature-256: sha256=<hmac> header computed with that secret. Leave the secret blank to allow unsigned requests.
Steps
Steps run in order after the trigger fires. You can add as many steps as you need.
Condition (IF/ELSE)
Evaluates one or more conditions against the current state. If all conditions pass, the THEN branch runs; otherwise the ELSE branch runs.
Example: state.record.priority equals high
Supported operators: equals, not equals, contains, starts with, ends with, in list, greater/less than, is empty, is true/false.
You can drag steps into THEN or ELSE branches, and nest conditions inside each other.
Action
Performs a side effect. Current action types:
| Action | What it does |
|---|---|
| Update Record | Patch fields on the triggering record (or any record by ID) |
| Send Webhook | POST JSON to an external URL |
| Notify | Send an in-app notification to a user |
| Send Email | Send an email to a recipient |
| Run Command (AI) | Invoke a saved Command (prompt template) with the AI and store the response in the execution state |
Action parameters support template interpolation — wrap any state value in {{ }}:
{{state.record.title}} → the record's title as a string
{{state.record}} → the full record object
{{state.body.externalId}} → a field from an inbound webhook body
Delay
Pauses execution for a set duration (seconds, minutes, hours, or days) before continuing to the next step.
Note: In the current release, delays log the intended wait time but do not actually pause execution. Full durable delays are on the roadmap.
Loop
Iterates over an array in the current state and runs child steps once per item. Each iteration sets state.loop.currentItem to the current element.
Useful for acting on a list of records returned by a future Query step.
Query (coming soon)
Looks up one or more records from the database and saves the result to a named state key for use by later steps. For example, fetch the assignee's profile, then use {{state.assignee.name}} in a notification.
Templates
Click Templates in the automation list to browse built-in recipes. Templates are installed in a disabled state so you can review and customise them before enabling.
Available templates include:
- Auto-assign issues by type
- Escalate overdue issues daily
- Welcome new team members
- Notify subscribers on status change
- Archive completed issues weekly
- Meeting follow-up issue creation
- Webhook relay
- Document review reminders
- High-priority team alerts
- SLA breach warnings
Execution History
Each automation run is logged in the Execution History section at the bottom of the editor. Expand any row to see:
- Which steps ran (and in which branch)
- Duration per step
- Input/output state at each step
- Error details for failed runs
Update Record — Parameter Guide
The most common action is Update Record. Pass a JSON params object to the step:
Shorthand (uses the triggering record automatically):
Explicit (target a specific record):
Supported record types: issue, meeting, document, file, milestone plan item, database entry.
Send Webhook — Parameter Guide
Set "payload": "{{state}}" to send the entire execution state as the body.
Run Command (AI) — Parameter Guide
The Run Command action invokes a saved Command (prompt template) using the space's configured AI model. The AI response is written into the execution state so later steps can use it.
Minimal — pass full state to the AI:
Custom user input with field substitution:
Reading the output in later steps:
{{state.commandOutput}} → AI text response (default key)
{{state.followUpEmail}} → AI text response (custom outputKey)
| Parameter | Required | Description |
|---|---|---|
commandSlug | Yes | Slug of the saved Command to run (without the leading /) |
userInput | No | Message to send to the AI. Supports {{state.x}} templates. Defaults to the full execution state as JSON. |
outputKey | No | State key where the AI response is stored. Defaults to commandOutput. |
Note: The Run Command action requires the space's AI model to be configured and uses the same model as the AI chat feature.
Tips & Limits
- Automations are space-scoped — each space manages its own rules
- Steps inside a condition branch can themselves contain conditions (unlimited nesting)
- Loops cap at 50 iterations by default to prevent runaway executions
- The event trigger is non-blocking — it never slows down the original action that fired it
- Manual trigger bypasses the enabled/disabled toggle, making it safe for testing
Related
- Roles & Permissions — who can manage automations
- Notifications — how the Notify action delivers alerts
- Spaces & Billing — Pro plan required