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, counted from when the token was issued). The token’s engagement_status transitions to never_accessed.
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.
Nudge Subscribers Who Never Set Up Their Podcast App
Benecaster transitions a token to never_accessed when the subscriber received a feed URL, the grace window elapsed (default 7 days), and the URL was never polled. The action fires once per token, so it is the right hook for a low-friction one-time nudge.
This cohort is the most recoverable one a podcaster has. Nothing has gone wrong with the show — these subscribers are paying and simply never added the feed to a podcast app, or could not work out how. A single well-timed message with the feed URL and setup instructions converts a good share of them.
Do not reuse churn copy here. Telling somebody “we miss you” when they never heard the first episode reads badly, which is why this state is kept separate from at_risk.
<?php
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;
}
$show_name = get_the_title( $show_id );
$subject = sprintf( 'Need help setting up %s?', $show_name );
$body = sprintf(
"Hi %s,\n\nWe noticed your %s feed hasn't been added to a podcast app yet. "
. "Grab your private feed URL from %s and paste it into Apple Podcasts, Overcast, "
. "or Pocket Casts — full instructions here: %s\n\nWelcome aboard.",
$user->display_name,
$show_name,
home_url( '/podcast-account/' ),
home_url( '/docs/podcast-app-setup/' )
);
benecaster_mail( $show_id, $user->user_email, $subject, $body );
},
10,
4
);
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
$user_id |
int |
— | WordPress user ID |
$show_id |
int |
— | ID of the show |
$tier_slug |
string |
— | Tier slug for this subscription |
$days_since_created |
int |
— | Full days elapsed since the token was created |
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.