Flows
A flow sends a sequence of emails automatically: a welcome series, a product onboarding, a reminder before a trial ends. Each contact goes through it at their own pace.
How a flow works
A flow has a trigger and a list of steps. When the trigger fires for a contact, Kula starts a run for that contact, which goes through the steps from top to bottom:
Starts when: a contact subscribes to "Newsletter"
1. Send an email "Welcome to Acme Weekly"
2. Wait 3 days
3. Send an email "Our 5 most read issues"
4. Continue only if plan is not set
5. Send an email "Try Acme Pro"
Steps run in order, with no branches. A Condition step lets a contact continue or stops their run there.
Triggers
| Trigger | Fires when | Good for |
|---|---|---|
| A contact subscribes to a list | A subscription to that list is confirmed: from a form, the API or the dashboard | Welcome series, newsletter onboarding |
| A contact performs an event | Your app sends that event through the API | Product onboarding, trial reminders, post-purchase emails |
Imports never trigger a flow: imported contacts did not just sign up. With double opt-in, the flow starts when the contact confirms, not when they submit the form.
Events are sent by your app with POST /v1/events. If the address is not yet a contact, Kula creates it. Onboarding with events.
Steps
Add steps with Add email, Add delay and Add condition. A flow has up to 50 steps.
Send an email
An email with its subject, preview text, sender and content, written in the same editor as campaigns. Flow emails are marketing emails: they carry an unsubscribe link and follow your warm-up and reputation rules. Writing emails.
Wait
Pauses the run for a duration in Minutes, Hours or Days, from 1 minute to 365 days.
Condition
Continue only if the contact matches a set of conditions, built like a segment: attributes, lists, events, email activity. A contact who does not match exits the flow.
Put a wait before a condition to give contacts time to act: "Wait 3 days, then continue only if has not done project_created".
Re-entry
Re-entry sets what happens when the trigger fires again for a contact who already went through the flow:
| Option | Behavior |
|---|---|
| Once per contact (default) | A contact goes through the flow only once, ever |
| Every time the trigger fires | The contact starts again, unless they are still in the flow |
Use Every time the trigger fires for repeated events, such as order_paid for a post-purchase email.
When a contact leaves a flow
A run ends when it reaches the last step (Completed) or earlier (Exited), when the contact:
- unsubscribes from the list that triggered the flow, or from everything;
- bounces or complains;
- is deleted;
- does not match a condition step.
Activate a flow
A new flow is a Draft. Activate checks the trigger and every step, then starts the flow.
Contacts already on the list do not enter the flow: only new subscriptions and new events start runs.
AI assistants can build a flow but never activate it: they request an activation, and a member clicks Approve and activate. AI assistant.
Edit a running flow
| Change | When |
|---|---|
| Content of an email (subject, text, sender) | Any time, even while active. Contacts who have not reached the step yet get the new version |
| Add, remove or reorder steps | Pause the flow first |
| Trigger and re-entry | Pause the flow first |
While a flow is paused, no contact enters it and runs in progress wait. Click Resume to continue: runs pick up where they stopped.
If marketing is paused for your space, runs wait too, and continue once sending resumes. Reputation.
Runs
The Runs tab lists every contact who entered the flow, with the status of their run (Active, Completed, Exited, Failed), the step they are on and the reason they exited. The flow page also shows delivered, opened and clicked counts for each email step.