Automations Overview
Automations are visual workflows that send emails, apply tags, and route contacts through sequences — automatically, based on triggers you define. Build a welcome series, a trial onboarding flow, a re-engagement campaign, or any other behavior-driven sequence without writing code.
How Automations Work
An automation consists of:
- A trigger: the event that causes a contact to enter the automation.
- A sequence of steps: actions and waits that each contact moves through in order.
- Optional branches: conditional forks that send contacts down different paths based on their data.
Contacts enter the automation when the trigger fires. They advance through steps one at a time. EmailSendX processes each contact independently — thousands of contacts can be at different points in the same automation simultaneously.
A contact exits an automation when:
- They reach the end of the workflow.
- They unsubscribe (exit all automations immediately).
- They hard bounce (exit all automations).
- An admin manually removes them from the automation.
- A condition-based exit step is triggered.
Triggers
A trigger defines when a contact enters the automation. Every automation has exactly one trigger. Select the trigger type when creating a new automation.
Contact Added to List
Fires when a contact is added to a specific list — whether via CSV import, API, signup form, or manual add in the dashboard. Use this to start a welcome or onboarding sequence.
Config: select the list to monitor. Optionally filter by tag (only fire for contacts with a specific tag).
Tag Applied
Fires when a specific tag is added to a contact. Tags can be applied via the API, automations, imports, or manually. Use this to trigger a sequence when your app marks a contact as "trial_started" or "churned".
Config: select the tag to watch for.
Campaign Link Clicked
Fires when a contact clicks a link in a specific campaign. Use this to follow up with contacts who showed interest in a specific offer.
Config: select the campaign, optionally filter by a specific URL in that campaign.
Custom API Event
Fires when your application sends a named event to POST /contacts/:id/events. This is the most flexible trigger — use it to fire automations based on any in-app behavior (user upgraded, completed setup, reached usage threshold, etc.).
Config: enter the event name to listen for (e.g., trial_started). See Triggers & Actions for full API event details.
Date-Based
Fires at a specific time relative to a date stored in a contact's custom field. Common uses: send a renewal reminder 7 days before a subscription end date, send a birthday email on the contact's birthday, send a check-in email 30 days after signup.
Config: select a date custom field, set the offset (e.g., "7 days before", "on the date", "30 days after"), and set the time of day.
Actions
Actions are the steps in your automation workflow. You can chain as many actions as needed and mix different action types. Available actions:
Send Email
Sends an email to the contact using a template from your workspace. Select any custom or system template. You can set per-step from name, subject line override, and reply-to — or inherit from the template.
Emails sent via automation count toward your monthly send limit but are tracked separately from campaigns.
Wait / Delay
Pauses the contact at this step for a specified duration before moving to the next step. Configure the delay in minutes, hours, or days.
Examples: "Wait 1 day then send follow-up email." "Wait 3 hours then check condition."
You can also wait until a specific time of day — e.g., wait until the next 9:00 AM in the contact's timezone. This ensures automation emails arrive at business hours even if the trigger fired at midnight.
Add Tag
Adds a tag to the contact at this point in the workflow. Useful for marking contacts who reached a certain milestone (e.g., "completed-onboarding").
Remove Tag
Removes a specified tag from the contact. Use to clean up temporary state tags once the automation has processed them.
Move to List
Adds the contact to a specified list, and optionally removes them from another list. Use to graduate contacts between lifecycle stages (e.g., move from "Trial Users" to "Customers" when purchase event fires).
Branch on Condition
Creates a conditional fork in the workflow. Contacts who match the condition go down the "Yes" path; those who don't go down the "No" path. See Branching below.
Update Contact Field
Sets or updates a custom field value on the contact. For example, set custom.onboarding_completed to true after the welcome sequence completes.
Branching Logic
The Branch on Condition action splits the workflow into two paths based on a condition evaluated at that moment in the sequence. The condition is evaluated when the contact reaches that step — not when they entered the automation.
Each branch can continue with its own sequence of actions. The two branches merge back at a "Rejoin" step if you want all contacts to continue to a shared set of steps after branching.
# Example: branch based on plan tier after a 3-day wait
Trigger: Tag Applied ("trial_started")
→ Send Email: "Welcome to your trial"
→ Wait: 3 days
→ Branch: IF custom.plan == "pro"
YES → Send Email: "Pro tips for power users"
NO → Send Email: "Getting started checklist"
→ (Rejoin)
→ Wait: 7 days
→ Send Email: "Your trial ends soon"You can nest branches — a branch can contain another branch — but keep nesting to a maximum of 2–3 levels deep for maintainability.
Max 2 branches per step
Enrollment
Contacts are enrolled in an automation when the trigger fires for them. There are a few important enrollment rules:
- Multiple automations simultaneously: a contact can be actively enrolled in multiple different automations at the same time. Each automation runs independently.
- No duplicate enrollment: a contact cannot be enrolled in the same automation twice if they're already actively progressing through it. If the trigger fires again while they're mid-sequence, the re-enrollment is silently ignored. This prevents duplicate emails from repeated triggers.
- Re-enrollment after completion: once a contact has completed (exited the end of) an automation, the trigger can re-enroll them if it fires again. This is useful for recurring workflows like annual renewal reminders.
Enroll via API
# Manually enroll a contact in an automation
POST https://emailsendx.com/api/v1/automations/{automationId}/enroll
{
"contact_id": "cnt_01hx4kpqr9vze8w3t5n2m7b6f"
}
# Enroll by email (creates contact if not exists)
POST https://emailsendx.com/api/v1/automations/{automationId}/enroll
{
"email": "user@example.com",
"first_name": "Jane" // optional — sets fields if contact is new
}Manual API enrollment is useful for triggering automations from external systems without using the custom event system. See Automations API for the full reference.
Monitoring Automations
Each automation has a stats panel accessible from Automations → [automation name] → Analytics:
- Total enrolled: all contacts who have ever entered this automation.
- In progress: contacts currently active in the automation (waiting at a step).
- Completed: contacts who have reached the end of the workflow.
- Exited early: contacts who left before completing (unsubscribed, bounced, or manually removed).
Per-step counts show how many contacts are currently at each step. This helps identify where contacts are dropping off or getting stuck.
Per-contact status
From the automation stats page, click View Contacts to see a filterable list of enrolled contacts with their current step, enrollment time, and status. Search for a specific contact by email to see exactly where they are in the workflow.
Automate your email sequences
Build welcome series, onboarding flows, re-engagement campaigns, and renewal reminders — and let EmailSendX run them for you.