Introduction: Flow expirations help you keep runs clean when contacts stop responding or get stuck in loops. By setting an expiration, you automatically remove inactive contacts after a defined period—so your flow doesn’t stay “open” forever and your reporting stays meaningful.
6–8 min read
Flows
Updated on: 18/12/2025
Expire inactive runs (and keep reporting clean)
If you just need the essentials, follow this quick path:
- Open the flow’s Edit settings (☰ menu → Edit)
- Set an Expiration duration that fits your journey length
- Choose a practical expiration pattern (minutes vs days vs weeks)
- Understand overall session limits (long-running caps)
- Pair expiration with per-question timeouts (best practice)
Expiration is the “global cleanup” so runs don’t stay open indefinitely.
Step-by-Step Process
- Go to Flows and open the flow you want to update.
- In the flow editor, click the ☰ menu (top-right).
- Select Edit.
[CAPTURE: Flow editor header showing the ☰ menu expanded with “Edit” highlighted.]
- In the Edit dialog, find the Expiration setting (inactive contact expiration).
- Choose an expiration duration from the dropdown.
- Save your changes.
[CAPTURE: Flow “Edit” dialog showing an “Expiration” dropdown with time options.]
Use these patterns as a starting point:
- 5–30 minutes: fast, transactional flows (short surveys, quick confirmations)
- 1–3 days: onboarding, registrations, multi-step forms
- 1–2 weeks: long follow-ups where delays are expected
Even with loops or repeated child flows, a contact can’t remain active in a flow session indefinitely.
Expiration is the “global cleanup.” Timeouts are “per question handling.”
- Flow expiration: removes inactive contacts after X time overall
- Wait for Response timeouts: let you send reminders or route “No response” for a specific step
[CAPTURE: Wait for Response node showing a timeout + No response branch, alongside flow Edit dialog showing expiration.]
Common Issues & Quick Fixes
Contacts expire without receiving any follow-up
Problem: Users go inactive and disappear from the run with no reminder or restart instructions.
Fix:
- Add timeouts on key Wait for Response steps so “No response” can send guidance.
- Use a restart keyword message on the final timeout attempt (before they hit expiration).
My expiration is too short and breaks long journeys
Problem: Contacts are removed even though delays are expected (e.g., multi-day onboarding).
Fix:
- Increase expiration to match real behavior (often 1–3 days for registrations).
- Make sure expiration is long enough to allow any reminder loops to complete.
I’m confusing “timeouts” with “expiration”
Problem: You expect a reminder, but only set an expiration (or vice versa).
Fix:
- Use timeouts for per-question handling (reminder and “No response” routing).
- Use expiration as overall cleanup so runs don’t stay open forever.
