Telemetry Fields Reference
When a podcaster opts in to anonymous usage sharing (Settings → Account → Telemetry), the daily license validation ping includes a telemetry block built by TelemetryCalculator::build(). This page documents every field in that block, its source, and when it is included.
Manage opt-in state via:
POST /benecaster/v1/license/telemetry-preferences— writetelemetry_opted_inandrevenue_telemetry_opted_inGET /benecaster/v1/license— read current values
Base Telemetry Fields
Always included when benecaster_telemetry_opted_in is true.
| Field | Type | Source | Description |
|---|---|---|---|
avg_episode_duration_sec |
int | Episode post meta | Average audio duration in seconds across all published episodes |
total_content_hours |
float (2dp) | Episode post meta | Total hours of content across all published episodes |
show_age_days |
int | Show CPT post_date |
Days since the earliest published show was created |
setup_wizard_completed |
bool | benecaster_setup_wizard_completed option |
Whether the setup wizard has been completed at least once |
web_player_plays |
int | benecaster_web_player_plays option |
Cumulative site-wide count of [benecaster_player] render events; incremented by POST /analytics/player-play |
revenue_telemetry_opted_in |
bool | benecaster_revenue_telemetry_opted_in option |
Whether revenue telemetry is also enabled; always false when base telemetry is off |
Revenue Telemetry Fields
Included only when both telemetry_opted_in and revenue_telemetry_opted_in are true.
| Field | Type | Source | Description |
|---|---|---|---|
estimated_mrr_cents |
int | Bridge tier price × subscriber count | Estimated monthly recurring revenue in US cents; this is an estimate derived from configured tier prices and token counts — no actual payment processor data is accessed |
estimated_mrr_is_estimate |
bool | Always true |
Signals to the license server that this value is a floor estimate, not a verified figure |
Transcription Sub-block
Appended to the telemetry block when:
LicenseManager::addon_is_active('transcription-service')returnstrue, ANDbenecaster_telemetry_opted_inistrue
When the Transcription Service add-on is inactive, the entire sub-block is silently omitted — no error, no null fields.
TelemetryCalculator constructor signature (as of feature/staging-mode): __construct($bridge, $show, $episode, ?LicenseManager $license = null) — the optional 4th param enables the add-on check.
| Field | Type | Source | Description |
|---|---|---|---|
transcription_provider |
string | benecaster_transcription_provider option |
Provider slug (e.g. openai, deepgram). Never the API key. |
transcription_minutes_api_30d |
int | benecaster_transcripts.duration_seconds + provider |
Sum of transcription minutes processed via API (not file upload or paste) in the last 30 days |
transcription_episodes_30d |
int | benecaster_transcripts.completed_at |
Count of episodes with a completed transcript in the last 30 days |
import_method_distribution |
object | benecaster_transcripts.import_method |
Count per method over last 30 days: { api, file, paste, rss_feed } |
transcript_edit_rate_distribution |
object | benecaster_transcripts.segments_edited_pct |
Count per edit-rate bucket: { never_opened, opened_no_edits, low_0_5pct, medium_5_20pct, high_20pct_plus } |
has_custom_prompt |
bool | benecaster_transcription_prompt_is_modified option |
true if the operator has customized the transcription prompt. The prompt text is never transmitted. |
Privacy Guarantees
No telemetry block ever contains:
- Subscriber identities, email addresses, or user IDs
- Episode titles, descriptions, or content
- Transcript text or segment data
- API keys or credentials
- Raw IP addresses
The full data-handling disclosure is at Privacy and Data Handling.
See Also
Last updated