Duplicate Onboarding Messages from Overlapping Entry Events
A B2B SaaS company runs a 14-day onboarding journey for new trial users. The journey enters users when they trigger either trial_started or workspace_created; both events fire within minutes of signup for most users. The journey has a welcome email immediately, a day-3 in-app message, a day-7 push notification if the user has not completed first_project_created, and a day-14 offer email. The journey is set to allow re-entry after 30 days. In the last month, 12,000 users entered, but the welcome email was sent 19,400 times. Support reports that some users got the day-7 push twice and the day-14 offer even though they had already converted. The team wants to fix the journey without losing legitimate re-entry for users who start a second trial after 90 days. The account also uses a global holdout of 5% for journeys.
1. Diagnose the most likely causes of the duplicate sends and the post-conversion offer. Explain how journey entry and exit logic interact.
Read the worked answer
The send count of 19,400 for 12,000 users is the key symptom: the journey is creating more than one path per user. Two causes are likely.
First, two entry events are both firing. trial_started and workspace_created occur within minutes for most signups, so the same user can enter the journey twice unless there is an entry suppression or deduplication rule. A 30-day re-entry window does not prevent a second entry minutes later; it only sets the minimum time before a new entry after the first journey ends or is exited.
Second, the journey lacks a conversion exit and a goal event. The day-7 push checks first_project_created, but the day-14 offer does not appear to exit on subscription_activated or any purchase event. Users who convert keep receiving later steps, which explains the post-conversion offer. The day-7 push duplication may come from two active journey instances, each evaluating the same filter.
The fix is not just to lengthen re-entry. I would use a single entry event, add an entry suppression window, and add exit criteria on the conversion event so the journey stops when the user achieves the goal.
2. Propose a revised journey structure that preserves legitimate re-entry and prevents duplicate messages.
Read the worked answer
I would restructure the journey as follows:
- Single entry event: enter on
trial_startedonly. Ifworkspace_createdis needed as a qualifier, add a filter that checks for it within 10 minutes rather than using it as a second trigger. - Entry suppression: do not allow a user to enter if they have entered this journey in the last 90 days. This matches the legitimate second-trial cycle and prevents the minutes-later duplicate entry.
- Goal and exit: set
subscription_activatedas the goal event. Add exit criteria so any user who converts exits immediately and does not receive the day-14 offer. Add an exit onfirst_project_createdonly if the business decides that step should stop, but do not exit the whole journey on that event unless it truly represents conversion. - Send skip logic: on the day-7 push, check whether the same user already received that push in the current journey instance; skip if so.
- Holdout: exclude the 5% global holdout at entry and measure conversion against it.
This preserves re-entry after 90 days while making the journey idempotent for duplicate entry events and conversion events.
3. How would you validate the fix using Insights & Analytics, and what metrics would show the journey is healthy?
Read the worked answer
I would validate in three layers:
- Entry vs send reconciliation: compare unique journey entrants with sends per step. A healthy journey should have sends per step no higher than entrants, adjusted for legitimate re-entry. If welcome sends exceed entrants by more than 1–2%, entry duplication is still occurring.
- Exit reason breakdown: review journey analytics for exits by goal, exit criteria, and completion. Converted users should exit on the goal event, not continue to the day-14 offer. A high completion count among converted users indicates the exit logic is not firing.
- Incrementality: compare conversion rate, revenue per entrant, and upgrade rate against the 5% holdout. Also monitor complaint and unsubscribe rates by step to ensure the fix did not reduce engagement.
I would set an alert if sends for any step exceed entrants by more than 5% or if any user receives the same step twice in one journey instance. I would also review a sample of user timelines to confirm that the second-trial re-entry still works after 90 days.