Skip to main content

benecaster_subscriber_never_accessed

Action Free

Fires from the daily engagement check when a subscriber was issued a feed URL and has still never polled it, past a grace window (7 days by default). The token’s engagement_status transitions to never_accessed.

The window counts from when the subscriber was given their current feed link, not from when they joined. A member brought in by Sync existing members, an import, or a manual add with a Supporter since date can have a join date years in the past; they still get the full window. Resetting a feed link hands over a new URL, so the window starts again.

This is the “never started” cohort, and it is a different problem from churn. These subscribers are paying and receiving nothing — not because they lost interest, but because they never completed setup. The usual cause is mundane: they never added the feed URL to a podcast app, or could not work out how. They are the most recoverable segment a podcaster has, because nothing has gone wrong with the product — a single well-timed nudge with app instructions often converts them.

Fires exactly ONCE per token. Subsequent cron ticks skip rows that have already transitioned, so a callback cannot double-send.

Mutually exclusive with benecaster_subscriber_feed_inactive on any given token. That hook covers “was active, went silent”; this one covers “never arrived”. A token can be in only one of those states, and the distinction matters for the copy you send — telling somebody “we miss you” when they never heard the first episode reads badly.

Grace window is filterable per show via benecaster_subscriber_never_accessed_grace_days.

Parameters

Name Type Default Description
$user_id int — WordPress user ID
$show_id int — ID of the show
$tier_slug string — The token's stored tier — `follower` for a follower, the subscriber's tier otherwise. The same value all four engagement hooks pass; to classify the listener, use benecaster_get_token_type().
$days_since_created int — Full days since the subscriber was given their current feed link (when it was first issued, or last reset). The name is historical: it is not counted from the join date, which a sync, an import or a manual add can backdate.

Examples

Nudge the subscriber with podcast app setup instructions

add_action( 'benecaster_subscriber_never_accessed', function ( int $user_id, int $show_id, string $tier_slug, int $days_since_created ): void {
    $user = get_userdata( $user_id );
    if ( ! $user ) {
        return;
    }

    wp_mail(
        $user->user_email,
        sprintf( 'Your %s feed is waiting', get_the_title( $show_id ) ),
        "You subscribed but haven't added your private feed to a podcast app yet.\n\n"
        . "Your feed URL and one-tap app links are on your account page — it takes about a minute."
    );
}, 10, 4 );

Notes

This hook is Free — it fires regardless of license tier.

Treat a dispatch as a paying subscriber receiving nothing, not as an analytics event. The billing is running; the product is not being delivered. The window in which a nudge works is short — somebody who has not set up a podcast app three weeks after paying has usually stopped thinking about it.

The engagement check runs on WP-Cron, which fires on site traffic, so on a quiet site the transition can lag the grace window by a day or more.

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