onboardingCompletedAt contact property in the same request. The celebration workflow triggers from the event, and the stalled-user workflow filters out contacts with a completion timestamp.
What you need
- A timestamp contact property like
onboardingCompletedAt - A named event for “onboarding completed”
- The Loops API or an integration writing into Loops
Set up the trigger
Use the Event received workflow trigger with an event name likeonboardingCompleted.
Update the contact’s onboardingCompletedAt property at the same time so your stalled-user workflow can exclude users who already finished.
If you prefer using contact property changes as the trigger, see the Contact updated approach used in the lifecycle emails guide.
1
Send the event from your app
Call the Send event endpoint when the user finishes the last onboarding step. The API accepts contact properties as top-level fields in the same request:
2
Create the workflow
In the Workflow builder, pick Event received and select
onboardingCompleted.3
Send the celebration email
Add a Send email node. Congratulate them, surface the next high-value feature, and offer a next action.
Catching users who stall
The other half of this recipe is a separate workflow that fires when a contact is added but does not complete onboarding within a timer window.1
Trigger on Contact added
Pick Contact added as the trigger.
2
Add a timer
Wait 3 days.
3
Filter on onboarding state
Use an audience filter to only send if
onboardingCompletedAt is empty.4
Send the nudge
Keep it short. Link to the specific step they missed if you track that.
Measuring success
- Open rate on the celebration email: should be >50% because it is expected
- Click-through on the stall nudge: track with the
email.clickedwebhook - Completion lift: compare
daysToCompletedistributions before and after this workflow ships

