Skip to main content

Telemetry Fields Reference

Required add-on: Core

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 — write telemetry_opted_in and revenue_telemetry_opted_in
  • GET /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:

  1. LicenseManager::addon_is_active('transcription-service') returns true, AND
  2. benecaster_telemetry_opted_in is true

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