{"id":293330,"date":"2026-04-02T10:56:00","date_gmt":"2026-04-02T10:56:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/op3-podcast-analytics\/"},"modified":"2026-04-02T10:56:34","modified_gmt":"2026-04-02T10:56:34","slug":"podcast-analytics-for-op3","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/podcast-analytics-for-op3\/","author":15156070,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"6.3","requires_php":"8.0","requires_plugins":null,"header_name":"Podcast Analytics for OP3","header_author":"Miguel \u00c1ngel Terr\u00f3n Bote","header_description":"Adds the OP3 prefix to your podcast feed enclosures and shows download statistics in the WordPress dashboard.","assets_banners_color":"f0f4ff","last_updated":"2026-04-02 10:56:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/materron\/podcast-analytics-for-op3","header_author_uri":"https:\/\/potencia.pro","rating":5,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"materron","date":"2026-04-02 10:56:34"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3497400,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3497400,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3497400,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3497400,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[232,252,259268,238,521],"plugin_category":[36,56],"plugin_contributors":[259269],"plugin_business_model":[],"class_list":["post-293330","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-feed","plugin_tags-op3","plugin_tags-podcast","plugin_tags-statistics","plugin_category-analytics","plugin_category-social-and-sharing","plugin_contributors-materron","plugin_committers-materron"],"banners":{"banner":"https:\/\/ps.w.org\/podcast-analytics-for-op3\/assets\/banner-772x250.png?rev=3497400","banner_2x":"https:\/\/ps.w.org\/podcast-analytics-for-op3\/assets\/banner-1544x500.png?rev=3497400","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/podcast-analytics-for-op3\/assets\/icon-128x128.png?rev=3497400","icon_2x":"https:\/\/ps.w.org\/podcast-analytics-for-op3\/assets\/icon-256x256.png?rev=3497400","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><a href=\"https:\/\/op3.dev\">OP3<\/a> (Open Podcast Prefix Project) is a <strong>free, open-source podcast analytics service<\/strong> committed to open data and listener privacy. This plugin integrates OP3 with any WordPress podcast site in minutes.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Automatic feed prefix<\/strong> \u2014 Adds <code>https:\/\/op3.dev\/e\/<\/code> before every audio enclosure URL in your RSS feed. Works with PowerPress (Blubrry), Seriously Simple Podcasting, Podlove, and any plugin that generates a standard RSS2 podcast feed.<\/li>\n<li><strong>Dashboard widget<\/strong> \u2014 Shows your podcast's downloads for the last 7 days directly on the WordPress dashboard.<\/li>\n<li><strong>Statistics page<\/strong> \u2014 A dedicated admin page with download counts per episode, switchable between last 24 hours, 7 days, and 30 days.<\/li>\n<\/ul>\n\n<h4>How the OP3 prefix works<\/h4>\n\n<p>OP3 is a transparent redirect service. When a listener downloads an episode:<\/p>\n\n<ol>\n<li>Their app requests <code>https:\/\/op3.dev\/e\/yoursite.com\/episode.mp3<\/code><\/li>\n<li>OP3 logs the download anonymously and immediately redirects to <code>https:\/\/yoursite.com\/episode.mp3<\/code><\/li>\n<li>The audio file is served normally from your server<\/li>\n<\/ol>\n\n<p>Your audio files are not modified or hosted anywhere else. Only the URL in the RSS feed changes. Listener privacy is protected \u2014 OP3 never stores raw IP addresses.<\/p>\n\n<h4>Why OP3?<\/h4>\n\n<ul>\n<li><strong>100% free and open source<\/strong> \u2014 no subscription, no lock-in<\/li>\n<li><strong>No signup required<\/strong> to start measuring \u2014 just add the prefix<\/li>\n<li><strong>Open data<\/strong> \u2014 your stats are publicly accessible to anyone, including app developers<\/li>\n<li><strong>Privacy-first<\/strong> \u2014 no raw IPs stored, no tracking pixels<\/li>\n<li>Every show automatically gets a free public stats page at <code>op3.dev\/show\/{uuid}<\/code><\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A WordPress site with a podcast RSS feed<\/li>\n<li>A bearer token from <a href=\"https:\/\/op3.dev\/api\/keys\">op3.dev\/api\/keys<\/a> for statistics (the feed prefix works without one)<\/li>\n<\/ul>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin sends data to the external service <strong>op3.dev<\/strong> in two ways:<\/p>\n\n<ol>\n<li><strong>Feed prefix<\/strong> \u2014 When a listener downloads a podcast episode, their request passes through <code>op3.dev<\/code> before reaching your audio file. OP3 logs anonymised request data (no raw IP addresses). See <a href=\"https:\/\/op3.dev\/privacy\">OP3 Privacy Policy<\/a>.<\/li>\n<li><strong>Statistics API<\/strong> \u2014 When you view the Statistics page or Dashboard widget, the plugin makes an authenticated request to the OP3 API (<code>op3.dev\/api\/1\/<\/code>) to retrieve download counts for your show. No user data from your WordPress site is sent to OP3.<\/li>\n<\/ol>\n\n<p>No data is collected from your site's visitors beyond what OP3 records as part of the redirect.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>podcast-analytics-for-op3<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>OP3 Analytics \u2192 Settings<\/strong> and:\n\n<ul>\n<li>Enable the OP3 prefix<\/li>\n<li>Paste your bearer token from <a href=\"https:\/\/op3.dev\/api\/keys\">op3.dev\/api\/keys<\/a><\/li>\n<li>Enter your Show UUID (visible in your OP3 stats page URL: <code>op3.dev\/show\/{uuid}<\/code>)<\/li>\n<\/ul><\/li>\n<li>Open your RSS feed in a browser and confirm that audio <code>&lt;enclosure&gt;<\/code> URLs start with <code>https:\/\/op3.dev\/e\/<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20powerpress%20%2F%20blubrry%3F\"><h3>Does this work with PowerPress \/ Blubrry?<\/h3><\/dt>\n<dd><p>Yes. The plugin hooks into WordPress's RSS feed output buffer, so it is completely independent of whichever podcast plugin you use to manage your episodes.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20prefix%20without%20an%20op3%20account%3F\"><h3>Can I use the prefix without an OP3 account?<\/h3><\/dt>\n<dd><p>Yes. The feed prefix starts working as soon as you enable it \u2014 no token needed. The statistics section (dashboard widget and stats page) requires a bearer token from op3.dev to retrieve download data.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20the%20api%20key%20and%20the%20bearer%20token%3F\"><h3>What is the difference between the API Key and the bearer token?<\/h3><\/dt>\n<dd><p>On op3.dev, your API Key is your identity, but the credential used in API calls is the <strong>bearer token<\/strong> associated with that key. You can generate or regenerate your bearer token at <a href=\"https:\/\/op3.dev\/api\/keys\">op3.dev\/api\/keys<\/a>. Paste the bearer token (not the API Key itself) into the plugin settings.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20rss%20feed%3F\"><h3>Will this slow down my RSS feed?<\/h3><\/dt>\n<dd><p>No. The URL rewriting is a regex string replacement done in PHP memory before the feed is sent to the client. It adds no network latency.<\/p><\/dd>\n<dt id=\"does%20op3%20store%20my%20listeners%27%20ip%20addresses%3F\"><h3>Does OP3 store my listeners' IP addresses?<\/h3><\/dt>\n<dd><p>No. OP3 never stores raw IP addresses. It stores a rotating, salted hash of the IP that cannot be reversed, ensuring listener privacy.<\/p><\/dd>\n<dt id=\"my%20stats%20page%20shows%20%22no%20download%20data%20available%20yet%22.%20why%3F\"><h3>My stats page shows \"No download data available yet\". Why?<\/h3><\/dt>\n<dd><p>OP3 data is updated daily. If you just enabled the prefix, wait 24 hours for the first data to appear.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20same%20bearer%20token%20on%20multiple%20wordpress%20sites%3F\"><h3>Can I use the same bearer token on multiple WordPress sites?<\/h3><\/dt>\n<dd><p>Yes, if you own all the podcasts. The bearer token is tied to your OP3 identity, not to a specific show. Each site needs its own Show UUID configured.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed output buffer handling: ob_start() is now explicitly closed with ob_get_clean() on the shutdown action, ensuring correct buffer lifecycle management.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Podcast Analytics for OP3\" to clarify it is a community integration, not an official OP3 product.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Feed prefix: automatically adds <code>https:\/\/op3.dev\/e\/<\/code> to all audio enclosures in the RSS feed.<\/li>\n<li>Dashboard widget: shows last 7 days of downloads.<\/li>\n<li>Statistics page: per-episode download counts with 1\/7\/30 day periods.<\/li>\n<li>Compatible with PowerPress, Seriously Simple Podcasting, and any RSS2 podcast feed.<\/li>\n<\/ul>","raw_excerpt":"Integrate OP3 open podcast analytics with WordPress: prefix your feed automatically and view download stats in your dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/293330","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=293330"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/materron"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=293330"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=293330"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=293330"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=293330"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=293330"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=293330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}