Trigger a re-engagement automation when a subscriber goes silent
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
-
benecaster_subscriber_feed_inactive— the hook this recipe uses; full parameter reference -
benecaster_subscriber_feed_reactivated— fires when the subscriber returns; use to cancel the win-back automation -
benecaster_subscriber_engagement_threshold— filter the inactivity window per show -
benecaster_token_first_accessed— for subscribers who have never listened at all
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
);
Hooks Used
Need this built rather than just documented? See our services →