CRM Trigger¶
Overview¶
The CRM Trigger automatically starts workflows when specific events occur in your BaseCloud CRM. This creates powerful automation based on contact behavior, data changes, and CRM activities without any manual intervention.
When to use this trigger:
- Send welcome emails when new contacts are created
- Notify team members when contact data changes
- Trigger follow-ups based on contact status changes
- Automate actions when custom field values change
Quick Start¶
Builder fields¶
The Field column is the label as it appears in the task builder; Key is the name the value is stored under and referenced by.
| Field | Key | Type | Default | Notes |
|---|---|---|---|---|
| Trigger Type | trigger_type |
select | 1 |
Options: Client Created · Client Field Change · Client Field Button Click · Contact Field Change · Quote / Invoice Change · Workflow Note Change · Custom Table: Row Added · Custom Table: Cell Change · Custom Table: Cell Button Click |
| Target Field | var_id |
select | – | Options: Client/Company Name · Client Status · Responsible Manager. Only shown when trigger_type is 1 |
| Target Column | var_id |
select | – | Only shown when trigger_type is 2 |
| Invoice Event | var_id |
select | – | Options: Quote/Invoice Created · Quote/Invoice Edited · Quote/Invoice Deleted · Quote/Invoice Marked as paid · Quote/Invoice Marked as unpaid. Only shown when trigger_type is 3 |
| Target Contact Field | var_id |
select | – | Only shown when trigger_type is 5 |
| Target Table | var_id |
select | – | Only shown when trigger_type is 6 |
| Note Event | var_id |
select | – | Options: Workflow Note Created · Workflow Note Marked as done. Only shown when trigger_type is 7 |
| Button Field | var_id |
select | – | Only shown when trigger_type is 8 |
| Button Column | var_id |
select | – | Only shown when trigger_type is 9 |
- Create a new workflow
- Add a CRM Trigger as the first task
- Select the trigger type, then what it watches (the field, column, event or table)
- Save and switch the workflow on
- The workflow runs automatically when the event occurs

Trigger Types¶
| Trigger type | Starts the workflow when | Then choose |
|---|---|---|
| Client Created | a client is created — by hand, by a form or by another workflow | – |
| Client Field Change | the chosen client field changes (name, status, manager, address, billing address, or a custom field) | the field |
| Client Field Button Click | someone clicks a button custom field on a client | the button field |
| Contact Field Change | the chosen contact field changes | the contact field |
| Quote / Invoice Change | a quote or invoice is created, edited, deleted (voided), marked paid or marked unpaid | the event |
| Workflow Note Change | a workflow note is created or marked done | the event |
| Custom Table: Row Added | a row is added to the chosen custom table | the table |
| Custom Table: Cell Change | the chosen column changes in any row | the column |
| Custom Table: Cell Button Click | someone clicks a button column in a row | the button column |
The trigger fires on the change itself: there is no "equals" or "greater than" condition here. To act only on some
values — a status changed to "Won" — follow the trigger with an If on its var_val.
Changing the trigger type clears the choice below it (the field, event or table), because a field picked for one type means nothing to another — pick it again.
Each type is something people do in the CRM. These pages show what that looks like on screen:
| Trigger type | Where it happens in the CRM |
|---|---|
| Client Created | Add a client |
| Client Field Change | Edit clients — including changing a status — and fill in custom fields |
| Client Field Button Click | Button fields |
| Contact Field Change | Edit a contact and contact custom fields |
| Quote / Invoice Change | Make a quote or invoice, turn a quote into an invoice, mark an invoice paid or void it |
| Workflow Note Change | Add a note and mark notes done |
| Custom Table: Row Added | Add a row |
| Custom Table: Cell Change | Change a value |
| Custom Table: Cell Button Click | Work with table rows |

Custom fields are defined per tenant on the client record itself — the pencil edits the set, Add Field creates one (see Manage custom fields). You pick a field by its name in the task, but the task stores its ID, so renaming the field later doesn't break the workflow; deleting it does.
The custom table events watch tables and columns that are also set up on the client — see Custom tables in automations.

Statuses are defined per tenant in Settings → Client Statuses, so the list differs between accounts — a status that exists in one tenant may not exist in another. Each carries a numeric ID, and that ID is what a task reads and writes; the label is only what people see. Deactivating a status hides it from dropdowns without removing it from records that already hold it.
Outputs¶
The CRM Trigger outputs the change-log entry that fired it, joined to the client and the users
involved. Reference fields as {{task_<ID>_<field>}}.
The change¶
| Field | Type | Notes |
|---|---|---|
id |
number | The change-log entry's ID. |
var_id |
string | Which field changed — e.g. client_status, client_field_updated, contact_created. |
var_val |
string | The new value. |
var_val_from |
string | The previous value. |
date_created |
string | When the change happened, DD/MM/YYYY HH:mm. |
custom_field_id |
number | Set when the change was to a custom field. |
table_id, row_id, column_id |
number | Set for table-row changes. |
wfn_id |
number | Set for workflow-note changes. |
inv_id |
number | Set for quote/invoice changes. |
channel_id, task_id |
number | The workflow and task that fired. |
The client¶
| Field | Type | Notes |
|---|---|---|
client_id |
number | The client the change belongs to. |
company_name |
string | The client's name. |
origin |
string | The client's origin (first_contact). |
owner_id |
number | Account ID. |
user_created |
number | Who created the client. |
contact_id |
number | Set when the change concerns a contact. |
Who made the change, and who owns the client¶
| Field | Type | Notes |
|---|---|---|
user_actioned |
number | ID of the user who made the change. |
user_actioned_name, user_actioned_surname |
string | Their name. |
user_actioned_email, user_actioned_number |
string | Their contact details. |
admin_responsible |
number | ID of the client's responsible user. |
admin_responsible_name, admin_responsible_surname |
string | Their name. |
admin_responsible_email, admin_responsible_number |
string | Their contact details. |
Resolved labels, on field-change triggers¶
| Field | Type | Notes |
|---|---|---|
status_changed_to |
string | Status label, when var_id is client_status. |
status_changed_from |
string | The previous status label. |
custom_field_changed_to |
string | Readable new value, when a custom field changed. Falls back to the raw value if the field has since been deleted. |
custom_field_changed_from |
string | Readable previous value. |
Always¶
| Field | Type | Notes |
|---|---|---|
run |
boolean | Whether the task succeeded. |
run_text |
string | A human-readable account of what happened, including any reason it failed. |
Real-World Examples¶
Welcome a newly created client¶
Act on a status change¶
CRM Trigger (field change, client_status)
└─ If Statement {{task_47001_status_changed_to}} equals "Won"
└─ BaseCloud Accounting raise the invoice
status_changed_to and status_changed_from give you the readable labels, so you can branch on
the change itself rather than on the raw ID.
Tell the new owner when a client is reassigned¶
CRM Trigger (field change, admin_responsible)
└─ Email notify {{task_47001_admin_responsible_email}}
Keep another system in step¶
Acting only on some changes¶
The trigger itself has no conditions. Put an If right after it and test the outputs —
for example {{task_<ID>_status_changed_to}} exactly matches Won, or {{task_<ID>_var_val_from}} is empty (a field
filled in for the first time).
Preventing Workflow Loops¶
A workflow that changes the very field its trigger watches starts itself again: Client Field Change on Status, then an Edit a Client that sets the status, runs again on its own change.
- Watch a different field from the one the workflow writes.
- Stop on a no-op. Edit a Client does not write — or fire triggers for — a value equal to what the client already holds, so a workflow that sets a status to the value it already has does not start itself again.
- Check who made the change.
user_actionedis the person who made it; a change made by a workflow is recorded against the automation user. An If onuser_actionedcan skip changes a workflow made.
Best Practices¶
✅ Do's¶
- Be specific with triggers: Use filters to avoid unnecessary executions
- Add If tasks for validation: Double-check conditions even if trigger has filters
- Test thoroughly: Test with real CRM data before enabling
- Add error notifications: Alert yourself when critical workflows fail
- Document your workflows: Add clear descriptions of what each workflow does
- Use tags for tracking: Add tags to show workflow has processed a contact
- Monitor execution history: Check regularly that workflows are running correctly
❌ Don'ts¶
- Don't create loops: Always check if your workflow updates trigger new events
- Don't trigger on every update: Use specific field monitoring
- Don't skip error handling: Add If tasks to handle missing data
- Don't forget timezone issues: Be aware when using time-based conditions
- Don't over-automate: Not every CRM change needs a workflow
Troubleshooting¶
Workflow Not Triggering¶
Possible Causes:
- Workflow is disabled
- Trigger conditions too restrictive
- Event type doesn't match actual CRM action
- CRM trigger not saved properly
Solutions:
- Check workflow toggle is ON
- Review trigger configuration and filters
- Test by manually performing the CRM action
- Check execution history for error messages
Workflow Triggering Too Often¶
Possible Causes:
- Trigger conditions too broad
- Multiple users editing same contacts
- Workflow creating loop by updating contacts
Solutions:
- Add more specific filters
- Check if workflow updates trigger additional events
- Use "Changed Field" filters
- Add processing flag to prevent duplicates
Missing Contact Data¶
Possible Causes:
- Custom field not populated yet
- Contact still being created when workflow runs
Solutions:
- Add small delay (5-10 seconds) after trigger
- Use If tasks to check if required fields exist
- Handle missing data gracefully
Workflow Running Multiple Times¶
Cause: Multiple CRM updates in quick succession
Solution: each change is its own run, by design. To act once on a burst of changes, have the workflow set a field (for example "Synced at") and check it with an If before acting.
Advanced Patterns¶
Sequential Contact Updates¶
Update contact in stages with delays:
- CRM Trigger - Client Created
- Delay - Wait 1 day
- Email - Send day 1 email
- Delay - Wait 2 days
- Email - Send day 3 email
- Delay - Wait 4 days
- Email - Send day 7 email
Conditional Multi-Path Workflows¶
Route based on contact properties:
- CRM Trigger - Client Field Change (Industry)
- If Task - Check industry
- Technology → Tech sales flow
- Healthcare → Healthcare sales flow
- Other → General flow
Lead Scoring Automation¶
Automatically update lead scores:
- CRM Trigger - Contact Field Change
- Code Task - Calculate lead score based on actions
- Edit Client - Update lead_score field
- If Task - If score >= 80
- Email - Notify sales team
Frequently Asked Questions¶
Can I have multiple CRM Triggers in one workflow?¶
Yes — a workflow can have several triggers, each starting the tasks linked under it. One workflow per purpose is usually easier to follow.
What's the delay between CRM change and workflow execution?¶
Usually immediate (within seconds). Very complex workflows may take longer.
Can I trigger on custom field changes?¶
Yes — choose Client Field Change (or Contact Field Change) and pick the custom field.
Will this trigger if I bulk import contacts?¶
Yes — Client Created fires for each imported client. Switch the workflow off during a large import if it should not run for them. - Adding batch processing logic
Can I undo a workflow action?¶
No, workflows execute automatically and cannot be undone. Always test thoroughly before enabling.
How do I test without affecting real contacts?¶
- Create a test contact
- Use "Run Test" button if available
- Check execution history to see what would happen
- Use a test workflow (disabled for real contacts)
Can I trigger based on inactivity?¶
Not directly. Instead, use a Schedule Trigger to check for inactive contacts periodically:
- Timer Trigger - Daily
- Google Sheets - get_rows from a list of accounts to review
- Loop through results
- Send re-engagement email
What happens if the workflow fails?¶
The system logs the error in execution history. The CRM event still occurred, but the workflow didn't complete. Consider:
- Adding error notification emails
- Implementing retry logic
- Monitoring execution history regularly
Can I prevent certain users from triggering workflows?¶
Yes, add an If task checking triggered_by:
Next Steps:
- Edit Client Task - Update contact data
- If Task - Add conditional logic
- Inbound Email - Trigger from incoming emails