Skip to main content

Trigger a re-engagement automation when a subscriber goes silent

Premium Intermediate

When a subscriber stops polling their feed for longer than the configured threshold, Benecaster marks them at_risk and fires benecaster_subscriber_feed_inactive — once, not daily. This recipe enqueues a re-engagement sequence in an ESP and shows how to extend the threshold for a monthly show where a 30-day gap is normal.

Pair with benecaster_subscriber_feed_reactivated to cancel the automation and restore the subscriber to an active segment when they return.

Notes

Once per inactivity event: The hook fires when engagement_status transitions from 'active' to 'at_risk'. It does not re-fire on subsequent daily cron runs while the subscriber remains silent. The next firing opportunity is after the subscriber reactivates (benecaster_subscriber_feed_reactivated) and then goes silent again.

Never-accessed tokens are excluded: Subscribers who signed up but never added the feed to a podcast app (last_accessed_at = NULL) do not trigger this hook. They are a different state handled by monitoring whether benecaster_token_first_accessed fires. Build a separate automation for subscribers who sign up but never start listening.

Per-show threshold: Monthly or bi-weekly shows have a naturally longer listening cadence than daily or weekly ones. Use benecaster_subscriber_engagement_threshold to override the threshold per show — a 60-day window for a monthly show avoids false positives on genuinely engaged listeners.

Related Hooks

Code

<?php
add_action(
    'benecaster_subscriber_feed_inactive',
    function ( int $user_id, int $show_id, string $tier_slug, int $days_inactive ): void {
        $user = get_userdata( $user_id );
        if ( ! $user ) {
            return;
        }
        my_esp_add_tag( $user->user_email, 'podcast-inactive' );
        my_esp_trigger_sequence( $user->user_email, 're-engagement', [
            'show_id'       => $show_id,
            'days_inactive' => $days_inactive,
        ] );
    },
    10,
    4
);

// Optional: extend the threshold to 60 days for a monthly show.
add_filter(
    'benecaster_subscriber_engagement_threshold',
    function ( int $days, int $show_id ): int {
        return $show_id === MY_MONTHLY_SHOW_ID ? 60 : $days;
    },
    10,
    2
);

View on GitHub →

Hooks Used

Need this built rather than just documented? See our services →