Settings Reference
The Settings screen (/#/settings) covers app-level configuration that applies across all your shows. It has seven tabs: Account, Notifications, Permalinks, Add-ons, Email, Tools, Your Data, and GDPR / Privacy.
Screenshots note: UI screenshots for the Account tab (Shows portfolio panel, tab navigation), per-show Settings tab navigation, ShowSwitcher, and PreviewTierButton are stale after the bugfix/2026-07-15 release. Update before launch.
Each tab is URL-addressable: /#/settings/account, /#/settings/permalinks, /#/settings/tools, etc.
Show-specific settings — General, Emails, Language, Templates, Memberships, Webhooks, Analytics, Integrations, and Support Mode — are in per-show settings at /#/shows/:showId/settings/. See The Benecaster Admin for an overview of the per-show settings tabs.
Account
Shows portfolio. The Account tab shows only the Shows portfolio panel, Refer a Friend, Limit Enforcement, and Telemetry. The app-level License, License Key, and Studio Plan Perks sections were removed in the bugfix/2026-07-15 release — license state is now shown per-show on each show’s Settings → Subscription tab.
Shows
The Shows panel leads the Account tab and is always visible. It renders as a two-column card grid — one card per show. Each card’s content depends on the show’s connection state:
| State | Card content |
|---|---|
| Free — no license needed (free show on unlicensed install) | Show name, feed visibility badge, “Free — no license needed” note |
| Free — change to paid (free show on licensed install) | Show name, feed visibility badge, “Change to paid →” in-app CTA linking to the Subscription tab |
| Not connected | Show name, Not connected badge, Connect → link to Subscription tab |
| Connected | Show name, Connected badge, paying subscriber count |
| Reconnect required | Show name, Reconnect required badge, Reconnect → link to Subscription tab |
The “Change to paid →” CTA appears for free shows when your account already has an active license — it routes you directly to the show’s Subscription tab to start the upgrade flow. On sites with no Benecaster account at all, free shows show an external link to benecaster.com/shop instead.
Reconnect state
If a show’s /validate call returns HTTP 401 on two consecutive cron runs, Benecaster flags that show as needing reconnection (benecaster_license_reconnect_required_{show_uuid} = 1). An admin notice appears:
Action required: Your Benecaster connection for Show Name needs to be refreshed. [Reconnect to Benecaster →]
Clicking the notice link takes you to that show’s Settings → Subscription tab to restart the OAuth flow. Reconnect state is per-show — a revoked token on one show does not affect other connected shows.
Two consecutive 401s are required before the reconnect flag is set, to buffer against managed-host proxy anomalies that can strip Authorization headers on a single request. See Connecting Your Site for all reconnect triggers and recovery steps.
Developer notes
LicenseManager::is_activated( int $show_post_id ): bool— returns true when the show has a token and is not in reconnect state. Requires a show context argument as of the per-show-tokens update; calls without$show_post_idreturn the legacy site-scoped state (deprecated).LicenseManager::is_reconnect_required( string $show_uuid ): bool— returns true whenbenecaster_license_reconnect_required_{show_uuid}is set. Pass the show’s_benecaster_show_uuidmeta value.LicenseManager::get_site_token_prefix( string $show_uuid ): string— returns the display-safe 8-character token prefix for UI display. Never returns the full token.LicenseManager::any_show_is_activated(): bool— returns true when at least one show on the install has an active connection, regardless of plan tier. Used to determine whether the “Change to paid →” CTA or an external upgrade link should appear on free show cards.ShowMeta::ensure_show_uuid( int $show_post_id ): string— lazy-generates and persists the UUID if the show pre-dates the per-show-tokens feature; called internally before rendering the Connect button on the Subscription tab.DiagnosticLogSenderandBenchmarkFetcherno-op when no shows are connected — both checkLicenseManager::any_show_connected()before sending data to the license server. No action needed; this is expected behaviour on fresh installs.
Telemetry
This section is only visible when a license is activated. It contains two checkboxes that let you optionally share usage data with the Benecaster team to help improve the product.
Share anonymous usage data (benecaster_telemetry_opted_in)
When on, Benecaster periodically sends a small anonymous payload to the license server. What’s included:
- Average episode duration
- Total content hours across all episodes
- Show age in days
- Whether the setup wizard was completed
- Web player play count (aggregate, no subscriber identity)
- Your revenue telemetry opt-in flag
No subscriber identities, episode titles, IP addresses, or feed URLs are ever included. Both flags default to off — you’re never opted in without taking action.
Also share an estimated monthly recurring revenue (MRR) figure (benecaster_revenue_telemetry_opted_in)
When on, Benecaster also sends an estimated MRR figure in cents. The estimate is calculated as: bridge tier price × subscriber count. No payment processor data is accessed — this is a rough estimate derived from what Benecaster already knows about your subscriber counts and tier pricing.
This checkbox is disabled until the base telemetry checkbox is turned on. If you turn the base telemetry flag off, the revenue flag is automatically cleared server-side.
Notifications
Admin notification preferences — controls which in-app alerts and email digests Benecaster sends to site administrators.
Permalinks
Controls how episode and show URLs are structured on your site.
URL Mode
- Single show (default) — all episodes share one URL structure:
yoursite.com/{episode-prefix}/{episode-slug}. Use this when you run one podcast show on the site. - Multiple shows — each show gets its own path segment:
yoursite.com/{show-prefix}/{show-slug}/{episode-prefix}/{episode-slug}. Choose this when you host more than one podcast on the same WordPress installation, or think you might later.
Episode Prefix
The word that appears before the episode slug in the URL. Default: episode. Example: changing this to ep gives you yoursite.com/ep/interview-with-alice.
In single-show mode, the episode prefix can be left blank to place episodes directly at yoursite.com/{episode-slug}. See Permalinks for the collision rules that apply in this mode.
Show Prefix
Visible only in multiple-shows mode. The word that appears before the show’s feed slug. Default: show. Example: yoursite.com/show/crypto-curious/episode/ep-100.
Live Preview
Both prefix fields have a live preview below them that updates as you type, so you can see exactly what your URLs will look like before saving.
Validation
Benecaster checks your prefix choices against three rules before saving:
- Reserved words — words like
wp-admin,wp-json,feed,rss,benecaster,category, andtagare off-limits because they conflict with WordPress routing. The error message lists exactly which word is reserved. - Page slug conflict — if a prefix matches the slug of an existing WordPress page, Benecaster rejects it. Rename the page first, then save your prefix.
- Show slug conflict — the show prefix cannot match any show’s feed slug (multi-show mode only).
These are hard blocks, not warnings. Choosing a conflicting value would break site routing with no obvious error for visitors.
301 Redirects
When you change a prefix after episodes already exist, Benecaster automatically creates 301 redirect rules from your old URLs to the new ones. Existing links — from podcast apps, blog posts, search results — continue to work. The redirects are applied before WordPress’s own routing, so they work even if WordPress returns 404 for the old path.
You can review active redirects at Settings → Permalinks. After a year, Benecaster surfaces a one-time notice for each old redirect rule suggesting you consider removing it (search engines and apps will have updated by then). You can dismiss each notice individually — the redirect stays active until you explicitly delete it.
Add-ons
Installed and available Benecaster add-ons. Manage all add-ons from Settings → Add-ons.
Navigation note: The top-level “Add-ons” entry was removed from the left navigation in bugfix/2026-07-15. The canonical path to add-ons is now Settings → Add-ons. Any external links or documentation pointing to a dedicated Add-ons nav item should be updated.
The Add-ons screen is organized into three sections:
Installed
Add-ons that have been downloaded and activated on this site. Each card shows the add-on name and displays “Active on this site.” There is no version number, Settings button, or Disable button on the installed card.
Ready to Install
Add-ons you have purchased but not yet installed. An entitlement exists in your Benecaster account (via LicenseManager), but the add-on package hasn’t been downloaded to this site yet. Click a card in this section to download and activate the add-on — no manual file download or WordPress plugin upload required.
See Installing Add-ons for the full post-purchase install flow.
Available
Future and Phase 2 add-ons that are not yet released. Cards in this section display “Coming soon” — there is no purchase link and no notification option from within the screen.
There is no “Browse all” link in the Add-ons screen header. All add-ons Benecaster knows about for your account are shown directly in the appropriate section.
Site-level email configuration. This tab contains settings that apply across all shows.
Sending Rate
Controls the maximum number of outbound emails Benecaster sends per hour across all email queues (option: benecaster_email_sending_rate_per_hour).
- Default: 300 emails/hour
- Range: 10–2000 emails/hour (values outside this range are clamped on save)
This setting was moved from the per-show Emails tab (where it was named “Emails per hour”) to this site-level tab in version 1.32.0. The rename from benecaster_emails_per_hour to benecaster_email_sending_rate_per_hour also occurred at that version — if you relied on the option name directly, update accordingly.
Tools
Utilities for cache management, analytics data, and GeoIP enrichment.
Cache
Manual feed cache controls. Clear the global feed cache or the cache for a specific subscriber. Useful after making episode changes that need to propagate immediately.
Analytics Data
Storage usage and retention controls for Benecaster’s three analytics tables.
Storage table
Shows the current row count and estimated disk size for each table:
| Table | What it stores |
|---|---|
benecaster_subscriber_events |
Subscriber lifecycle events (joins, cancellations, tier changes) |
benecaster_analytics_daily |
Pre-aggregated daily download and play counts |
benecaster_download_log |
Per-request download records (episode, token, hashed IP, byte range) |
A “Last pruned” line below the table shows when the most recent automatic prune ran.
Retention window
Controls how far back Benecaster retains analytics records. Options:
- Forever (default) — no automatic pruning
- 5 years
- 2 years
- 1 year
- Custom — enter a number of months
A nightly cron job (benecaster_analytics_prune, runs at 01:00) automatically purges rows older than the configured window.
Prune now
Forces an immediate prune using a two-step dry-run → confirm flow:
- Click Prune now — Benecaster runs a dry-run and reports exactly how many rows would be deleted from each table.
- Review the summary and click Confirm to commit the deletion, or cancel to abort.
No data is deleted during the dry-run step.
GeoIP Database
Benecaster can enrich download log records with ISO country and region codes using a local MaxMind GeoLite2 database. This panel sits between Analytics Data and Danger Zone.
The panel surfaces:
- Enabled state — whether GeoIP enrichment is on or off.
- License key status — whether a valid MaxMind license key is configured.
- Last updated — when the local database file was last refreshed.
- File size — the current size of the downloaded database file.
Controls:
- Enable/disable toggle — turns GeoIP enrichment on or off. When disabled, new download log rows have no country or region code.
- License key field — paste your MaxMind license key here and save. The key is used to download and refresh the database; it is never stored in the database and is not included in telemetry.
- Update now — forces an immediate database refresh outside the monthly schedule.
- Automatic monthly refresh — a notice confirming that
benecaster_geoip_update(WP-Cron) refreshes the database monthly. No configuration needed.
Setting up GeoIP:
- Create a free account at maxmind.com.
- In the MaxMind dashboard, go to My Account → Manage License Keys and generate a new license key.
- Paste the license key into the License key field in this panel and save.
- Click Update now to download the database immediately. Future updates happen automatically each month.
Privacy note: Raw IPs are never stored. The GeoIP lookup runs inline on each feed request, before the IP is hashed for log storage. Only the ISO alpha-2 country code and ISO subdivision/region code are written to the download log — city, postal code, latitude, and longitude are read and immediately discarded. See Privacy and Data Handling for full details.
Danger Zone
Actions that cannot be undone: factory reset, license deactivation, and full data deletion. Each action requires explicit confirmation.
Your Data
Export and review controls for the data Benecaster holds about your subscribers.
- Export subscriber list — download a CSV of all subscribers with their tier, join date, and token status.
- Export download log — download a CSV of the download log for a date range you specify.
- View raw analytics — table-level view of aggregated download and play data.
GDPR / Privacy
Controls for subscriber data retention and right-to-erasure. This tab sits after Your Data in the nav and carries a Shield icon.
Legal Responsibility Banner
A non-dismissible banner at the top of this tab: you are responsible for your site’s privacy compliance. Benecaster provides tools to help you comply, but it cannot guarantee compliance on your behalf. Consult a legal professional if you’re uncertain about your obligations.
A separate note covers CCPA (California Consumer Privacy Act) considerations for US-based sites.
Subscriber Data Retention
Controls how long Benecaster retains subscriber personal data after a subscription ends. The retention window applies to:
- Token records
- Download log rows linked to a subscriber
- Email log rows linked to a subscriber
- Migration patron records
Presets: 30 days / 60 days / 90 days (default) / 180 days / 365 days
Custom: enter any number of days.
A nightly cron job (benecaster_gdpr_prune, runs at 02:00) purges subscriber data older than the configured window.
Important exception: benecaster_unsubscribe_log is excluded from all retention purges and is retained indefinitely. This table records that an unsubscribe event occurred (not the reason or any detailed content), and retaining it supports regulatory compliance.
Delete a Subscriber’s Data
Manually execute a right-to-erasure request. This is the tool to use when a subscriber asks you to delete their data.
- Enter the subscriber’s email address in the form.
- Click Find subscriber — Benecaster shows a cascade summary: which tables contain records for this subscriber, and how many rows will be deleted.
- Review the summary and click Confirm deletion to permanently delete all records.
The cascade covers: tokens, download log, email log, and migration patron records. The benecaster_unsubscribe_log entry (if one exists) is also deleted for right-to-erasure requests — the indefinite-retention exception applies only to the automatic prune, not to manual erasure.
Deletion is immediate and irreversible.
Cookie Notice
A textarea for entering cookie/privacy notice text that appears on your subscriber-facing pages via the [benecaster_cookie_notice] shortcode. Write your own notice text here; the shortcode renders it wherever you place it on your site.
Per-Show Settings Reference
Show-specific settings live at Settings → Shows → [Show] → Settings and are organized into tabs. This section documents the tabs that have changed or been added recently.
Details Tab — Explicit Content
The Explicit content field on the Details tab now writes a three-value string enum rather than a boolean:
| Value | Meaning |
|---|---|
Clean |
No explicit content — writes <itunes:explicit>false</itunes:explicit> |
Yes |
Contains explicit content (some feeds use this value) — writes <itunes:explicit>yes</itunes:explicit> |
Explicit |
Marked explicit — writes <itunes:explicit>true</itunes:explicit> |
Previously this was a checkbox (checked = explicit). Existing shows with the checkbox checked are migrated to Explicit; unchecked migrates to Clean.
Feed Settings Tab
Location: Shows → Settings → [Show] → Settings → Feeds
A dedicated tab for controlling what appears in your podcast’s RSS feed. These settings were previously scattered across the Details and other tabs — the Feeds tab collects them in one place.
Public Feed URL
The first block on the Feeds tab shows your show’s public RSS feed URL in a read-only field with a Copy to clipboard button.
The URL takes one of two forms depending on your permalink settings:
| Condition | Feed URL format |
|---|---|
| Pretty permalinks off, or no per-show feed slug set | /podcast-feed/ |
Per-show feed slug set and benecaster_pretty_feed_permalinks option on |
/podcast/{feed-slug}/feed/ |
The URL displayed here is the one your listeners should add to their podcast app. Subscriber-specific tokenized feed URLs are separate and are shown in each subscriber’s account.
View on [directory] chips: If you have filled in your Podcast Platforms links on the General tab, this block also shows a row of “View on Apple Podcasts”, “View on Spotify” (and so on) chip links. Each chip opens the relevant directory in a new tab. Chips appear for any platform link you have populated; entries with empty URLs are skipped. Custom platform slugs are humanised automatically (e.g. amazon_music → “Amazon Music”).
Controls:
| Setting | Type | Description |
|---|---|---|
| Explicit content | Three-value select | Clean / Yes / Explicit — controls the <itunes:explicit> feed tag |
| Copyright | Free text | Populates <copyright> in the feed; empty value omits the tag |
| Show type | Radio (Episodic / Serial) |
Controls <itunes:type> — Episodic means newest first by date; Serial means tell listeners to start from the beginning |
| Seasons | Toggle | Enables the Season sidebar field in the episode editor and <itunes:season> output in the feed |
| Enable errata for this show | Toggle | When enabled, a rich-text Errata field appears on the More tab in the episode editor for every episode in this show. Errata content is published on the WordPress episode page only — it is not emitted in the RSS feed. This is a per-show setting; each show has its own errata toggle. |
| Enable WordPress comments on episode pages | Toggle | When enabled, WordPress comments are active on this show’s episode pages. When disabled, episode pages fall back to your site-wide comment setting in Settings → Discussion. This is a per-show setting. |
| Block from podcast directories | Toggle (Advanced section) | Emits <itunes:block>Yes</itunes:block> — asks directories not to index this feed |
| Mark show as complete | Toggle (Advanced section) | Emits <itunes:complete>Yes</itunes:complete> — indicates the show has ended |
The Explicit content and Show type selects use the same fields as the Details tab — editing either tab updates the same stored meta values.
Subscription Tab — Free Shows on Licensed Installs
When a show is set to “free” visibility (public feed, no subscriber gating) and your Benecaster account has an active license, the Subscription tab shows a “Change to paid →” prompt rather than a full connection flow. This prompt routes you to the show’s visibility settings to enable subscriber gating, after which the Connect button becomes available.
The License section (masked token, deactivate button) is suppressed on the Subscription tab for free shows — it only appears for paid shows with an active or reconnect-required connection.
Templates Tab — Episode Page Visibility
Location: Shows → Settings → [Show] → Settings → Templates
The Templates tab has two toggles for controlling whether episode pages are publicly accessible on your site:
| Toggle | Effect |
|---|---|
| Disable episode single pages | Individual episode permalink pages (/episode/episode-slug/) return 404 for this show |
| Disable episode archive | This show’s episodes are excluded from the episode archive listing (/episode/) — the archive URL still resolves, it just won’t include this show’s episodes |
Note on the archive toggle: The archive setting filters the episode query (excludes from listings) rather than issuing a 404. The /episode/ URL will always resolve; if every show has this toggle on, the archive renders empty rather than 404ing. If you need a hard 404 on the archive URL, use a custom redirect rule instead.
These settings were moved from a site-wide option (version 1.33.0) to per-show controls. The migration broadcasts your previous site-wide setting to all shows, so existing configurations are preserved automatically.
Podcasting 2.0 Tab
Location: Shows → Settings → [Show] → Settings → Podcasting 2.0
Settings for Podcasting 2.0 namespace tags in your RSS feed. Each section below maps to one or more <podcast:…> elements emitted when you save.
Show GUID
Read-only. Shows the UUID emitted as <podcast:guid> in your RSS feed, with a Copy to clipboard button.
Stable identifier used by podcast apps and directories to track this show across hosting moves.
This GUID was generated when the show was created and is permanent. Help tooltip text:
This is your Podcast GUID — a permanent identifier for this show. It was generated when you created the show and should never change.
Footer note: Generated once when the show was created. Never changes — even if you move to a different host or domain.
The field cannot be edited. If you need to move to a new host, copy this value and give it to your new host so directories can correlate your feed continuity.
Portability Lock
Toggle: Lock this feed
When locked, podcast directories will not move or re-import this show to another platform without confirmation from the owner email below. Use this only when actively managing a hosting migration — leave it off for day-to-day operation.
When the toggle is turned on, an Owner email input field animates into view beneath the toggle.
Saving with an empty owner email: If you enable the lock but leave the owner email blank, Benecaster substitutes the WordPress admin email address so <podcast:locked owner="…"> is never emitted with an empty attribute.
RSS output when enabled:
<podcast:locked owner="you@example.com">yes</podcast:locked>
When the toggle is off, the <podcast:locked> tag is omitted from the feed entirely.
Funding
Controls the <podcast:funding> tag — a link podcast apps can surface to listeners who want to support your show.
Source — two-option radio:
- Auto — uses the payment URL from this show’s Listener Support configuration. When Listener Support is not configured, this option shows: “Listener Support is not configured. [Set up Listener Support →]” and the field falls back to Custom URL mode.
- Custom URL — when selected, a Custom URL field and a Label text input animate into view.
Label — the link text shown to listeners in podcast apps. Defaults to {Show Title} Listener Support when left blank.
RSS output:
<podcast:funding url="https://…">{label}</podcast:funding>
The label text is filterable via benecaster_feed_podcast_funding_label. See Filter Hooks Reference for parameters.
Content License
Dropdown: how listeners are permitted to reuse this show’s audio. Emitted as <podcast:license> in the RSS feed. Leave as All Rights Reserved if you have not chosen a public license.
| Option | Feed output |
|---|---|
| All Rights Reserved (default) | Tag omitted entirely |
| CC BY 4.0 | <podcast:license url="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</podcast:license> |
| CC BY-SA 4.0 | <podcast:license url="…">CC BY-SA 4.0</podcast:license> |
| CC BY-NC 4.0 | <podcast:license url="…">CC BY-NC 4.0</podcast:license> |
| CC BY-NC-SA 4.0 | <podcast:license url="…">CC BY-NC-SA 4.0</podcast:license> |
| CC BY-ND 4.0 | <podcast:license url="…">CC BY-ND 4.0</podcast:license> |
| CC BY-NC-ND 4.0 | <podcast:license url="…">CC BY-NC-ND 4.0</podcast:license> |
| Custom URL | <podcast:license url="{your url}">{your label}</podcast:license> |
CC preset options resolve to their canonical creativecommons.org URLs at feed compile time — you do not need to enter a URL manually for CC licenses. Selecting All Rights Reserved (or leaving the field unset) omits the <podcast:license> tag entirely.
When Custom URL is selected, a Custom URL field and a Custom label field animate into view.
Platform Block
A multi-select for blocking specific platforms from indexing your show. Each selected platform slug emits a separate tag in your feed:
<podcast:block id="spotify">yes</podcast:block>
<podcast:block id="google">yes</podcast:block>
Platform slugs use lowercase [a-z0-9_-] characters only (sanitized with sanitize_key() on save). You can select from preset checkboxes for well-known platforms or enter custom slugs as free text. The combined total of preset selections and custom slugs cannot exceed 20 entries.
Leave this section empty to not block any platforms. Blocking a platform asks the platform not to index this feed — it is a request, not a technical restriction.
TXT Records
A repeater-style input for adding arbitrary TXT record entries to your feed. Common uses include verification codes for podcast directories and ownership proof tokens.
Each record has two fields:
| Field | Required | Notes |
|---|---|---|
| Purpose | No | Short description of what the record is for |
| Value | Yes | The record content — max 512 characters |
RSS output:
<podcast:txt purpose="verify">abc123xyz</podcast:txt>
<podcast:txt>some-other-value</podcast:txt>
The purpose attribute is omitted when the Purpose field is left blank. Maximum 10 records per show.
Host
Sets the show’s default host credit, emitted on every episode in this show’s RSS feed.
| Field | Required to emit tag | Notes |
|---|---|---|
| Host name | Yes | If blank, no <podcast:person> host tag is emitted |
| Host URL | No | Links to the host’s website or profile |
| Host image URL | No | URL of the host’s headshot or avatar |
RSS output (per episode):
<podcast:person role="host" href="https://…" img="https://…">Jane Smith</podcast:person>
This is the show-level default host. Individual episodes can add or override credits in the episode editor’s Feed Credits tab — those episode-level credits are emitted in addition to, not instead of, the show-level host tag unless the episode overrides that role.
Leave all three fields blank to omit the host tag from the feed.
Season Display Names
This section appears only when the show has at least one published episode with a season number assigned.
One text input is shown per season number that has episodes. Each input sets the name attribute on the season tag for that season:
<podcast:season name="The Early Years">1</podcast:season>
<podcast:season name="Pandemic Edition">2</podcast:season>
Leave a field blank to emit the season number without a display name:
<podcast:season>3</podcast:season>
Season numbers and their associated episodes are managed in the episode editor. This section only appears once at least one season number has been assigned — it is hidden for shows where no episodes carry a season number.