benecaster_subscriber_never_accessed
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 →