Triggers & Actions
This page is the complete reference for every trigger and action available in EmailSendX automations. Each trigger section covers when it fires, configuration options, use cases, and any applicable limits.
Trigger: Contact Added to List
Fires when: a contact is added to a specific list — regardless of how they were added (CSV import, API, signup form, manual dashboard add, or automation action).
Configuration
- List: required. Select the list to monitor. Only one list per automation trigger — create separate automations for multiple lists.
- Tag filter: optional. Only fire for contacts added to the list who also have a specific tag. Useful when the same list receives both imported and organic signups that need different sequences.
Use cases
- Welcome sequence for newsletter subscribers
- Onboarding emails for users added to "Trial Users" list via API
- Lead nurture sequence for contacts added via a lead magnet form
Notes
- Does not fire for contacts already in the list who are being updated — only on new additions.
- Does not fire retrospectively for existing list members when the automation is activated. Only new additions after activation are enrolled.
- Backfilling existing list members: loop through the list members and call POST /automations/{id}/enroll for each contact. The single-enroll endpoint is idempotent — already-active contacts are skipped automatically.
Trigger: Tag Applied
Fires when: a specific tag is added to a contact. Tags can be applied via the API, an automation action, CSV import with tags, or manually from the contact profile.
Configuration
- Tag name: the tag that triggers enrollment. Case-insensitive. Must be an exact match.
Use cases
- Start a trial onboarding sequence when your app tags a user as
trial-started - Send a win-back sequence when a contact is tagged
churned - Send a VIP welcome when a contact is upgraded and tagged
vip
Notes
- If the tag is removed and re-applied, the trigger fires again (unless the contact is already actively enrolled).
- Applying the same tag twice (when it's already present) does not re-fire the trigger.
Trigger: Campaign Link Clicked
Fires when: a contact clicks any tracked link (or a specific URL) in a selected campaign.
Configuration
- Campaign: select from sent campaigns. Only campaigns with click tracking enabled appear in the list.
- Specific URL: optional. If blank, any click in the campaign triggers enrollment. If set, only clicks on that exact URL trigger enrollment.
Use cases
- Follow up with contacts who clicked a product demo link in a campaign
- Send pricing information to contacts who clicked "View pricing" in a newsletter
- Start a sales outreach sequence for high-intent clickers
Notes
- Trigger fires once per contact per campaign — multiple clicks on the same link by the same contact don't enroll them multiple times.
- Works retroactively: if the automation is created after a campaign was sent, contacts who already clicked will be enrolled when the automation is activated (configure in the activation dialog).
Trigger: Custom API Event
Fires when: your application sends a named event to the EmailSendX events API for a specific contact. This is the most powerful trigger — it connects EmailSendX to any in-app behavior without requiring contact data changes.
Configuration
- Event name: the exact name of the event your app will send (e.g.,
purchase_completed,trial_started,feature_used). - Event data filter: optional. Only trigger if the event's data payload matches a condition. For example, only fire if
data.plan == "pro".
Sending an event from your app
curl -X POST https://emailsendx.com/api/v1/contacts/CONTACT_ID/events \
-H "Authorization: Bearer esx_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "purchase_completed",
"data": {
"plan": "pro",
"amount": 99,
"currency": "USD",
"invoice_id": "inv_123456"
}
}'Use cases
- Start a post-purchase sequence when
purchase_completedfires - Send onboarding tips when
trial_startedfires - Trigger a feature adoption sequence when
feature_enabledfires - Send a milestone email when
usage_milestonefires withdata.count == 100
Event data in templates
event. prefix. For example, {{event.plan}} would output "pro" from the example above. Event data is available only to the email steps in the automation that was triggered by that event.Trigger: Date-Based
Fires at: a specific date and time relative to a date stored in a contact's custom date field.
Configuration
- Custom date field: select a workspace date-type custom field (e.g.,
renewal_date,birthday). - Offset: fire N days/weeks before, on the date, or N days/weeks after the date field value.
- Time of day: the time in the contact's timezone (or workspace timezone if not set).
- Repeat annually: for birthday-style triggers, check this to re-enroll the contact each year.
Use cases
- Renewal reminder: fire 14 days before
renewal_date - Birthday email: fire on
birthday, repeat annually - Contract review: fire 30 days before
contract_end_date - Trial check-in: fire 7 days after
trial_start_date
Actions Reference
Full table of all available automation actions and their configuration fields:
| Action | Config fields | Notes |
|---|---|---|
| Send Email | Template (required), Subject override, From name override, Reply-to override | Counts toward monthly send limit. Analytics available per step. |
| Wait / Delay | Duration (minutes/hours/days), or "Until time of day" (HH:MM in contact timezone) | Contacts are paused here until the wait expires. |
| Add Tag | Tag name | Creates the tag if it doesn't exist. Case-insensitive. |
| Remove Tag | Tag name | No-op if contact doesn't have the tag. |
| Move to List | Target list (add), Source list (remove — optional) | Adding to list may trigger other automations watching that list. |
| Branch on Condition | Field, Operator, Value — same syntax as segments | Evaluates at the moment the contact reaches this step. |
| Update Contact Field | Custom field name, New value (text/number/boolean/date) | Overwrites the current value. Use for marking automation progress. |
| Send Webhook | URL, HTTP method (POST/PUT), Headers, Body template | Pro/Business plan. Calls an external URL. Useful for Zapier, Slack, CRM sync. |
| End / Exit | None | Explicitly ends the contact's journey. Optional — contacts also exit when they reach the last step. |
Build your first automation
Connect triggers to actions in the visual builder and let EmailSendX handle the rest — no code required.