Automatically Remove Inactive Contacts from the Flow

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.

Expire inactive runs (and keep reporting clean)

If you just need the essentials, follow this quick path:

  1. Open the flow’s Edit settings (☰ menu → Edit)
  2. Set an Expiration duration that fits your journey length
  3. Choose a practical expiration pattern (minutes vs days vs weeks)
  4. Understand overall session limits (long-running caps)
  5. Pair expiration with per-question timeouts (best practice)

Expiration is the “global cleanup” so runs don’t stay open indefinitely.

Step-by-Step Process

1
Open the flow’s Edit settings

  1. Go to Flows and open the flow you want to update.
  2. In the flow editor, click the ☰ menu (top-right).
  3. Select Edit.

[CAPTURE: Flow editor header showing the ☰ menu expanded with “Edit” highlighted.]

2
Set the flow expiration time

  1. In the Edit dialog, find the Expiration setting (inactive contact expiration).
  2. Choose an expiration duration from the dropdown.
  3. Save your changes.

[CAPTURE: Flow “Edit” dialog showing an “Expiration” dropdown with time options.]

⚙️
Technical Detail: Expiration removes contacts from the flow when they’ve been inactive for the selected period. If you don’t set an expiration, flows typically use a default expiration (commonly 3 days).

3
Pick an expiration that matches your use case

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
💡
Tip: If you also use reminders (timeouts) inside the flow, set the overall expiration long enough to allow those reminder attempts to happen.

4
Understand session expiration (overall limit)

Even with loops or repeated child flows, a contact can’t remain active in a flow session indefinitely.

⚙️
Technical Detail: A session expiration is the maximum total time a contact can remain in a flow session after entering it (commonly capped at 30 days). This prevents infinite or accidental never-ending sessions.

5
Combine flow expiration with “Wait for Response” timeouts

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.]

⚠️
Warning: If you rely only on expiration (without timeouts), contacts may silently drop out without receiving guidance on how to restart.

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.