> ## Documentation Index
> Fetch the complete documentation index at: https://flywheel.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Drop-off Trigger

> Start an agent run when users fail to complete expected actions within a specified timeframe

<iframe src="http://localhost:3000/doc-comp-previews/agent-node-preview?type=drop_off" title="Agent Node Preview" width="100%" height="250px" className="border dark:border-[#1C1C20] rounded-xl" />

## How Drop-off Triggers Work

1. **Monitor Events**: The system tracks when users perform the initial event
2. **Set Expectations**: You define what actions users should take next
3. **Wait and Watch**: The system waits for the expected follow-up events
4. **Trigger on Absence**: If expected events don't occur within your timeframe, the agent run starts

Unlike workflow drop-off triggers which follow a fixed recovery path, agent drop-off triggers pass the full drop-off context to the language model. The agent can then reason about why the user may have dropped off, check additional data with tools like Find Event, and take contextually appropriate action.

## Configuration

<Columns cols={2}>
  <Card title="Inputs">
    <ParamField path="Initial Events" type="string[]" required>
      Select one or more events that start the drop-off monitoring. Examples: `trial_started`, `cart_created`, `signup_initiated`.
    </ParamField>

    <ParamField path="Expected Events" type="object[]" required>
      Configure the events you expect users to complete after the initial event.
    </ParamField>

    <ParamField path="Event Name" type="string" required>
      The specific event you expect users to complete (part of Expected Events configuration).
    </ParamField>

    <ParamField path="Delay Value" type="number" required>
      How long to wait before considering it a drop-off (number value).
    </ParamField>

    <ParamField path="Delay Unit" type="enum" required>
      Time unit for the delay. Options: `seconds`, `minutes`, `hours`, `days`, `weeks`, `months`.
    </ParamField>

    <ParamField path="Sort Order" type="number">
      Priority order for multiple drop-off events. Lower numbers have higher priority.
    </ParamField>
  </Card>

  <Card>
    <iframe src="http://localhost:3000/doc-comp-previews/agent-config-preview?type=drop_off" title="Agent Config Preview" width="100%" height="600px" className="" />
  </Card>
</Columns>

<Card title="Outputs">
  <ParamField path="event" type="object" required>
    The drop-off event data generated by Flywheel when the expected event didn't occur.

    <Expandable title="Event Properties">
      <ParamField path="event.event_id" type="string" required>
        Unique identifier for this drop-off event.
      </ParamField>

      <ParamField path="event.event_name" type="literal" required>
        Always `$fw_drop_off` for drop-off events.
      </ParamField>

      <ParamField path="event.timestamp" type="string" required>
        ISO datetime when the drop-off was detected.
      </ParamField>

      <ParamField path="event.custom_properties" type="object" required>
        Contains drop-off specific data and system properties.

        <ParamField path="event.custom_properties.$fw_event_source" type="literal" required>
          Always `flywheel` for system-generated events.
        </ParamField>

        <ParamField path="event.custom_properties.$fw_user_id" type="string" required>
          Internal user identifier.
        </ParamField>

        <ParamField path="event.custom_properties.last_completed_event_name" type="string" required>
          Name of the last event the user completed that triggered the drop-off monitoring.
        </ParamField>

        <ParamField path="event.custom_properties.last_completed_event" type="object" required>
          Full details of the original event that started the drop-off monitoring, including all event properties and custom data.
        </ParamField>
      </ParamField>
    </Expandable>
  </ParamField>

  <ParamField path="org_user" type="object" required>
    Comprehensive user information for the user who dropped off.

    <Expandable title="User Properties">
      <ParamField path="org_user.id" type="string" required>
        Unique user identifier.
      </ParamField>

      <ParamField path="org_user.org_assigned_user_id" type="string">
        Your company's external user identifier.
      </ParamField>

      <ParamField path="org_user.primary_email" type="string">
        User's primary email address.
      </ParamField>

      <ParamField path="org_user.first_name" type="string">
        User's first name.
      </ParamField>

      <ParamField path="org_user.last_name" type="string">
        User's last name.
      </ParamField>

      <ParamField path="org_user.subscription_status" type="enum">
        Current subscription status: `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `canceled`, `unpaid`, `paused`, `inactive`.
      </ParamField>

      <ParamField path="org_user.payment_processor" type="enum">
        Payment processor used: `stripe` or `paddle`.
      </ParamField>

      <ParamField path="org_user.mrr" type="number">
        Monthly recurring revenue from this user.
      </ParamField>

      <ParamField path="org_user.ltv" type="number">
        Lifetime value of the user.
      </ParamField>

      <ParamField path="org_user.first_payment_date" type="string">
        ISO datetime of user's first payment.
      </ParamField>

      <ParamField path="org_user.next_payment_date" type="string">
        ISO datetime of user's next scheduled payment.
      </ParamField>

      <ParamField path="org_user.cancels_at" type="string">
        ISO datetime when subscription will be cancelled (if applicable).
      </ParamField>

      <ParamField path="org_user.contact_info" type="object">
        Additional contact information and preferences.
      </ParamField>

      <ParamField path="org_user.custom_properties" type="object">
        Custom user properties you've defined.
      </ParamField>
    </Expandable>
  </ParamField>
</Card>

<Note>The system creates drop-off events with the name `$fw_drop_off` for all drop-off triggers.</Note>

## Use Cases

**Trial Conversion Recovery**

```
Initial Event: trial_started
Expected Event: subscription_created
Drop-off Delay: 7 days
Agent behavior: Check usage patterns, assess activation status, send personalized conversion email or assign to sales
```

**Cart Abandonment Rescue**

```
Initial Event: cart_created
Expected Event: purchase_completed
Drop-off Delay: 2 hours
Agent behavior: Analyze cart contents, check for prior purchases, send targeted recovery message via Smart Message
```

**Onboarding Completion**

```
Initial Event: account_created
Expected Events:
  - profile_completed (24 hours)
  - first_project_created (3 days)
  - team_invited (7 days)
Agent behavior: Identify which step stalled, search for related events, send step-specific guidance or escalate to CSM
```

**Feature Adoption Push**

```
Initial Event: feature_introduced
Expected Event: feature_activated
Drop-off Delay: 5 days
Agent behavior: Check user tier and usage history, generate contextual tips email, set custom property for follow-up tracking
```

## Best Practices

**Choose Appropriate Timeframes**

* Consider your typical user behavior patterns when setting delays
* Account for different user segments — some may need more time
* Start with longer delays and optimize based on data from the Runs tab

**Segment Your Audiences**

* Use trigger conditions to create different drop-off flows for different user types
* Consider factors like subscription tier, user role, or geographic location
* Let the agent prompt handle nuanced segmentation logic

**Monitor and Adjust**

* Track which drop-off triggers are most effective in the Runs tab
* Review agent reasoning to ensure it's making appropriate recovery decisions
* Adjust timing and prompt instructions based on actual conversion data
* A/B test different delay periods and agent strategies
