Title: Podcast Analytics for OP3
Author: Miguel Angel Terrón
Published: <strong>2. April 2026</strong>
Last modified: 30. Juli 2026

---

Search plugins

![](https://ps.w.org/podcast-analytics-for-op3/assets/banner-772x250.png?rev=3601295)

![](https://ps.w.org/podcast-analytics-for-op3/assets/icon-256x256.png?rev=3601295)

# Podcast Analytics for OP3

 By [Miguel Angel Terrón](https://profiles.wordpress.org/materron/)

[Download](https://downloads.wordpress.org/plugin/podcast-analytics-for-op3.2.9.0.zip)

 * [Details](https://de-ch.wordpress.org/plugins/podcast-analytics-for-op3/#description)
 * [Reviews](https://de-ch.wordpress.org/plugins/podcast-analytics-for-op3/#reviews)
 *  [Installation](https://de-ch.wordpress.org/plugins/podcast-analytics-for-op3/#installation)
 * [Development](https://de-ch.wordpress.org/plugins/podcast-analytics-for-op3/#developers)

 [Support](https://wordpress.org/support/plugin/podcast-analytics-for-op3/)

## Description

[OP3](https://op3.dev) (Open Podcast Prefix Project) is a **free, open-source podcast
analytics service** committed to open data and listener privacy. This plugin integrates
OP3 with any WordPress podcast site in minutes.

#### What it does

 * **Automatic feed prefix** — Adds `https://op3.dev/e/` 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.
 * **Dashboard widget** — Shows your podcast’s downloads for the last 7 days directly
   on the WordPress dashboard.
 * **Statistics page** — A dedicated admin page with download counts per episode,
   switchable between last 24 hours, 7 days, and 30 days.
 * **Private podcast support** — Podcasts behind a restricted/password-protected
   feed (e.g. with Restrict Content Pro) get their own self-hosted download-tracking
   endpoint instead of the OP3 prefix, since OP3 cannot access authenticated feeds
   by design. Statistics for private podcasts are calculated from your own database
   and shown alongside your public podcasts. Download counting for private podcasts
   follows the same methodology OP3 documents for its own public counting (startup-
   probe handling, one-download-per-listener-per-day deduplication, bot filtering),
   so numbers are comparable in kind, not just in table layout.
 * **Apps & devices breakdown** — See which podcast apps (Spotify, Apple Podcasts,
   Overcast…) your listeners use, for both public and private podcasts.
 * **Country map** — A world map colored by download volume, plus a ranked country
   list, for both public and private podcasts (private podcasts require a free MaxMind
   GeoLite2 license key).
 * **Custom date range** — Pick any «from/to» range for your stats, in addition 
   to the quick 24h/7d/30d tabs.
 * **Best time to publish** — Charts showing downloads by hour of day and by weekday,
   in your site’s own timezone.
 * **Unique listeners** — A deduplicated listener count, for both public and private
   podcasts.
 * **Audience overlap** — When two or more podcasts are shown together, see how 
   many listeners they share, as a matrix and a ranked list. Public podcasts are
   compared against public podcasts, and private against private — see the FAQ below
   for why they’re never mixed.
 * **Download alerts** — Get an email when an episode (published more than 14 days
   ago) has an unusual spike or drop in downloads compared to the previous week.
   Configured in a dedicated **OP3 Analytics  Alerts** page, with its own history
   log.
 * **Growth ranking** — See which episodes are climbing or falling fastest, comparing
   the selected period against the equal-length period right before it.
 * **App comparison** — When two or more podcasts are shown together, compare their
   apps/devices breakdown side by side.
 * **Printable report** — The «Print / PDF» button now includes a short plain-language
   explanation under each section, so a printed or exported report is understandable
   without the interactive dashboard.

#### How the OP3 prefix works

OP3 is a transparent redirect service. When a listener downloads an episode:

 1. Their app requests `https://op3.dev/e/yoursite.com/episode.mp3`
 2. OP3 logs the download anonymously and immediately redirects to `https://yoursite.
    com/episode.mp3`
 3. The audio file is served normally from your server

Your audio files are not modified or hosted anywhere else. Only the URL in the RSS
feed changes. Listener privacy is protected — OP3 never stores raw IP addresses.

#### Why OP3?

 * **100% free and open source** — no subscription, no lock-in
 * **No signup required** to start measuring — just add the prefix
 * **Open data** — your stats are publicly accessible to anyone, including app developers
 * **Privacy-first** — no raw IPs stored, no tracking pixels
 * Every show automatically gets a free public stats page at `op3.dev/show/{uuid}`

#### Requirements

 * A WordPress site with a podcast RSS feed
 * A bearer token from [op3.dev/api/keys](https://op3.dev/api/keys) for statistics(
   the feed prefix works without one)

### External Services

This plugin connects to two external services. Both are optional in the sense that
the plugin’s core feature (the feed prefix) works without any account, but statistics
require them.

#### OP3 (op3.dev)

Used for public podcasts: the feed prefix and the statistics API.

 * **What it’s for:** Adds an anonymous download-tracking prefix to your public 
   podcast feed enclosures, and retrieves the resulting download counts, per-episode
   data, apps/devices, and country/region breakdown for the Statistics page and 
   Dashboard widget.
 * **What is sent and when:** When a listener downloads a podcast episode, their
   request passes through `op3.dev` before reaching your audio file — OP3 logs anonymised
   request data (no raw IP addresses are stored by OP3). Separately, when you view
   the Statistics page or Dashboard widget, the plugin makes an authenticated request
   to the OP3 API (`op3.dev/api/1/`) using your bearer token to retrieve this data.
   No personal data from your WordPress site (user accounts, post content, etc.)
   is sent to OP3.
 * **Service URL:** [https://op3.dev](https://op3.dev)
 * **Terms of Service:** [https://op3.dev/terms](https://op3.dev/terms)
 * **Privacy Policy:** [https://op3.dev/privacy](https://op3.dev/privacy)

#### MaxMind GeoLite2 (optional, private podcasts only)

Only used if you mark a podcast as private AND enter a MaxMind license key in the
plugin settings. Public podcasts never use this service (they already get country
data from OP3).

 * **What it’s for:** Resolves the country of a private podcast’s listeners from
   their IP address, using a local country-ranges database built from MaxMind’s 
   free GeoLite2 data.
 * **What is sent and when:** Once (and periodically, weekly, to keep the data current),
   the plugin downloads the GeoLite2 Country CSV database from MaxMind’s servers
   using your license key. No visitor data is ever sent to MaxMind — the lookup 
   happens entirely on your own server against the locally stored database, and 
   the raw IP address is never stored, only a country code and a daily-rotating 
   salted hash used to deduplicate listeners.
 * **Service URL:** [https://www.maxmind.com](https://www.maxmind.com)
 * **Terms of Service:** [https://www.maxmind.com/en/end-user-license-agreement](https://www.maxmind.com/en/end-user-license-agreement)
 * **Privacy Policy:** [https://www.maxmind.com/en/privacy-policy](https://www.maxmind.com/en/privacy-policy)

### Privacy Policy

No data is collected from your site’s visitors beyond what is described in the External
Services section above. IP addresses are never stored in raw form by this plugin—
only a daily-rotating salted hash (for private-podcast unique-listener deduplication)
and, when GeoLite2 is configured, a resolved country code.

Because the salt rotates daily and the hash is one-way, the stored data cannot be
traced back to an individual or to a registered WordPress user. The plugin therefore
has nothing to hand to WordPress’s built-in personal-data exporter and eraser tools,
and does not register them.

Deleting the plugin from the Plugins screen removes all of its data: settings, credentials,
cached statistics and its custom database tables.

### Credits

The world map used in the country statistics (`admin/img/world-map.svg`) is based
on [«Simple SVG World Map»](https://github.com/flekschas/simple-world-map) by Fritz
Lekschas, editing original artwork by Al MacDonald, licensed under [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/).

## Installation

 1. Upload the `podcast-analytics-for-op3` folder to `/wp-content/plugins/`, or install
    via **Plugins  Add New  Upload Plugin**.
 2. Activate the plugin.
 3. Go to **OP3 Analytics  Settings** and:
 4.  * Enable the OP3 prefix
     * Paste your bearer token from [op3.dev/api/keys](https://op3.dev/api/keys)
     * Enter your Show UUID (visible in your OP3 stats page URL: `op3.dev/show/{uuid}`)
 5. Open your RSS feed in a browser and confirm that audio `<enclosure>` URLs start
    with `https://op3.dev/e/`.

## FAQ

### Does this work with PowerPress / Blubrry?

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.

### Can I use the prefix without an OP3 account?

Yes. The feed prefix starts working as soon as you enable it — no token needed. 
The statistics section (dashboard widget and stats page) requires a bearer token
from op3.dev to retrieve download data.

### What is the difference between the API Key and the bearer token?

On op3.dev, your API Key is your identity, but the credential used in API calls 
is the **bearer token** associated with that key. You can generate or regenerate
your bearer token at [op3.dev/api/keys](https://op3.dev/api/keys). Paste the bearer
token (not the API Key itself) into the plugin settings.

### Will this slow down my RSS feed?

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.

### Does OP3 store my listeners‘ IP addresses?

No. OP3 never stores raw IP addresses. It stores a rotating, salted hash of the 
IP that cannot be reversed, ensuring listener privacy.

### My stats page shows «No download data available yet». Why?

OP3 data is updated daily. If you just enabled the prefix, wait 24 hours for the
first data to appear.

### Can I use the same bearer token on multiple WordPress sites?

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.

### I have a private/restricted podcast feed. Can I still get statistics?

Yes, since v2.1.0. Mark the podcast as «Private» in the settings and set its Feed
slug (the `/feed/{slug}/` part of your restricted feed’s URL). The plugin will route
its downloads through a self-hosted tracking endpoint on your own site instead of
the OP3 prefix, and its statistics will appear alongside your public podcasts. Downloads
are logged without ever storing raw IP addresses (only a daily-rotating salted hash).

### How are private podcast downloads counted? Is it comparable to OP3’s numbers?

As of v2.6.0, private podcast downloads follow the same counting rules OP3 documents
for its own public numbers ([download_calculation.htm, in OP3’s own open-source repository](https://github.com/skymethod/op3/blob/master/worker/static/download_calculation.htm)):

 * A request asking for only 1-2 bytes in the middle of the file (some apps «poke»
   the server before really fetching) isn’t counted as a download — except the very
   first 2 bytes (`bytes=0-1`), which many apps request as a startup check right
   before the real download; that one _is_ counted, since a real request from the
   same listener almost always follows.
 * Only one download is counted per listener, per episode, per day — a listener 
   re-requesting the same episode (retries, app reopens) doesn’t inflate the count.
 * Requests from recognisable bots and crawlers are excluded from every report.

This mirrors OP3’s _methodology_, not its exact internal implementation — OP3 also
filters against a large, continuously-updated list of known-abusive IP addresses
accumulated from running the service since 2023, which isn’t something a single 
WordPress site can replicate. In practice this affects a small fraction of traffic;
the rules above cover the overwhelming majority of what separates a real listen 
from noise.

### Does the country map work for private podcasts too?

Yes, but it requires a free MaxMind GeoLite2 license key (sign up at [maxmind.com/en/geolite2/signup](https://www.maxmind.com/en/geolite2/signup)),
added in **OP3 Analytics  Settings**. Public podcasts get country data directly 
from the OP3 API and don’t need this. The plugin never stores raw IP addresses —
it resolves the country at the moment of the download and discards the IP immediately.

### How does audience overlap work, and why are public and private podcasts never compared to each other?

The Statistics page’s network view (2+ podcasts shown together) includes an audience-
overlap section: a matrix and a ranked list showing how many listeners each pair
of podcasts has in common.

This requires a way to recognise «the same listener» across two shows, and public
and private podcasts identify listeners very differently:

 * **Public podcasts** use OP3’s `audienceId`, a stable identifier assigned by OP3
   itself, consistent across the whole period you’re viewing.
 * **Private podcasts** use this plugin’s own privacy-preserving IP hash, which **
   rotates daily** (a new random salt each day) so the raw IP is never retained.
   Two different private podcasts _on the same WordPress site_ still produce the
   _same_ hash for the same listener on the same day, because the salt is site-wide—
   so private-vs-private comparison works correctly. But this hash has no relationship
   whatsoever to OP3’s `audienceId`, so a public podcast can never be meaningfully
   compared against a private one.

Because of this, the plugin always keeps public and private podcasts in **separate
groups** for audience overlap: it computes a public-vs-public matrix and a private-
vs-private matrix independently, and only shows each one when that group actually
has 2 or more comparable podcasts with data. It never attempts to compare across
the two groups.

If you select only one podcast (or only one podcast per group), the audience-overlap
section doesn’t appear at all — it needs at least two comparable shows to say anything
meaningful.

### How do download alerts work?

Go to **OP3 Analytics  Alerts** and:

 1. Enter a destination email address. This is required — there is no fallback to the
    site’s admin email, so alerts stay off until you set one explicitly.
 2. Choose which type(s) to enable: «Pico de descargas» (spike) and/or «Caída de descargas»(
    drop).
 3. Optionally adjust the threshold (default ±50%) and the minimum baseline (default
    5 downloads).
 4. Optionally choose which podcasts to monitor (all active podcasts by default).

Once a day, the plugin compares each monitored episode’s downloads in the last 7
days against the 7 days before that. If the change is at or beyond your threshold,
it’s included in a single consolidated email. Two safeguards keep it from being 
noisy:

 * Episodes younger than 14 days are skipped entirely — a brand-new episode’s natural
   launch curve (high initial downloads, then a steep decline) would otherwise look
   like a constant «spike» and «drop» for every episode, every day.
 * The previous week’s count must be at least the configured minimum baseline (default
   5) — otherwise tiny numbers produce meaningless percentages (e.g. going from 
   1 to 2 downloads reads as «+100%»).

A history of the last 50 triggered alerts is kept on the Alerts page itself, along
with a «Save and check now» button to test your configuration immediately instead
of waiting for the daily cron.

## Reviews

![](https://secure.gravatar.com/avatar/487e43642ad0bd8d893cd5befa19f51e17d07985f9999ef3e4aff61533272300?
s=60&d=retro&r=g)

### 󠀁[Ideal para tus podcast en WordPress](https://wordpress.org/support/topic/ideal-para-tus-podcast-en-wordpress/)󠁿

 [eove](https://profiles.wordpress.org/eove/) 14. April 2026

Ojalá y este plugin viniera instalado en todos las webs pensadas para alojar, promocionar
o relacionadas con un podcast. Si fuera así, avanzaríamos mucho en la medición de
estadísticas y en la auto gestión de este tipo de contenidos… Gracias Mat!

![](https://secure.gravatar.com/avatar/4170ac6fdca6f95f721a1866258f08b39833890582db8a7a1b0813ebd946db04?
s=60&d=retro&r=g)

### 󠀁[¿Cómo no existia antes?](https://wordpress.org/support/topic/como-no-existia-antes/)󠁿

 [jorgeresca](https://profiles.wordpress.org/jorgeresca/) 5. April 2026

No se como no podía existir esta herramienta antes.

![](https://secure.gravatar.com/avatar/74c9c0a9659507085e807b375628a9bbb81caba6e146f409ed6b627d2c86894d?
s=60&d=retro&r=g)

### 󠀁[Es precioso de la hostia](https://wordpress.org/support/topic/es-precioso-de-la-hostia/)󠁿

 [Joan Boluda](https://profiles.wordpress.org/boluda/) 4. April 2026

Perfecto, bonito, precioso, me lo como a besos. Al plugin y al developer. Ole.

![](https://secure.gravatar.com/avatar/1c3331ba2ca79d22915892bb71bd5cb0a560f6ae23b6048f7974169518664f9b?
s=60&d=retro&r=g)

### 󠀁[Best podcast analytics plugin ever](https://wordpress.org/support/topic/best-podcast-analytics-plugin-ever/)󠁿

 [Jesus Yesares](https://profiles.wordpress.org/glycymeris/) 2. April 2026

It's useful, easy and free. It uses the OP3 system (free too).

![](https://secure.gravatar.com/avatar/3089ff1456a3ba047f6b20713c8828dc7cec818fb0775415d83da1249ee047d2?
s=60&d=retro&r=g)

### 󠀁[Magníficos datos](https://wordpress.org/support/topic/magnificos-datos/)󠁿

 [Mariano Pérez Caro](https://profiles.wordpress.org/mpcdigital/) 2. April 2026

Antes de usar este plugin estaba a oscuras sobre las estadísticas de mi podcast.
Desde que lo uso ya sé todo, respiro mejor y mi mujer ya no me riñe casi nunca.

![](https://secure.gravatar.com/avatar/7b229fa68feb4f92956885e0eec80f0be035241dd7b15a3717090becef38ec6b?
s=60&d=retro&r=g)

### 󠀁[Posiblemente, uno de los mejores plugins del mundo](https://wordpress.org/support/topic/posiblemente-uno-de-los-mejores-plugins-del-mundo/)󠁿

 [madrillano](https://profiles.wordpress.org/madrillano/) 2. April 2026 1 reply

Ha cambiado mi vida de un modo brutal. Ahora puedo tener estadísticas reales y auditadas
sin tener que robar tiempo a mi familia.

 [ Read all 6 reviews ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/)

## Contributors & Developers

“Podcast Analytics for OP3” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Miguel Angel Terrón ](https://profiles.wordpress.org/materron/)

“Podcast Analytics for OP3” has been translated into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/podcast-analytics-for-op3/contributors)
for their contributions.

[Translate “Podcast Analytics for OP3” into your language.](https://translate.wordpress.org/projects/wp-plugins/podcast-analytics-for-op3)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/podcast-analytics-for-op3/),
check out the [SVN repository](https://plugins.svn.wordpress.org/podcast-analytics-for-op3/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/podcast-analytics-for-op3/)
by [RSS](https://plugins.trac.wordpress.org/log/podcast-analytics-for-op3/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.9.0 (2026-07-29)

 * Fixed: the plugin’s source strings were written in Spanish, which made Spanish
   the effective default for everyone. An admin running WordPress in English saw
   large parts of the interface in Spanish, because gettext falls back to the source
   string when a language has no translation. All 145 source strings are now in 
   English, with the Spanish rendering moved into the bundled es_ES catalog where
   it belongs. A Spanish site looks exactly the same as before; an English one is
   now actually in English.
 * Improvement: translators on translate.wordpress.org can now work from English
   source strings instead of translating out of Spanish, which is what the platform
   assumes.
 * Improvement: the es_ES catalog went from 57 entries (many of them for screens
   that no longer exist) to a complete 145, so nothing falls back to the source 
   string any more. Two labels that were shown in English even on Spanish sites —«
   All (network)» and «Print / PDF» — are now translated.
 * Improvement: the VozCaster promo no longer picks its wording with a hand-written
   locale check; the text goes through gettext like everything else. Only the destination
   URL still varies, since VozCaster has a separate English site.
 * Improvement: renamed the «Badge colour» label to «Badge color» to match WordPress
   core’s US English spelling.

#### 2.8.0 (2026-07-29)

 * Fixed: uninstalling the plugin left data behind. It had not been updated since
   2.0 and only removed the podcast list and a few old transients, leaving the Bearer
   Token, the MaxMind license key, all alert settings, the cached statistics and—
   most importantly — the custom download-tracking and GeoLite2 tables in the database.
   Uninstall now removes everything the plugin ever created, and does so per-site
   on Multisite.
 * Improvement: accessibility — the ten inputs in the Podcasts settings table (name,
   show UUID, feed GUID, feed slug, colour, private) had no accessible name, since
   the table only has column headers. Each control now carries an `aria-label` that
   also states which podcast row it belongs to.
 * Improvement: accessibility — the section headings on the Statistics page were`
   <h3>` directly under the page’s `<h1>`, skipping a level. They are now `<h2>`,
   so the heading outline is sequential for screen readers.
 * Improvement: Multisite — new sites created in a network with the plugin network-
   activated now get their tracking table immediately, via `wp_initialize_site`,
   instead of on the next admin request.
 * Improvement: the bundled world map SVG is now read through the WordPress Filesystem
   API instead of `file_get_contents()`.
 * Improvement: the podcast list option is no longer autoloaded on every page request,
   since it is only needed on the plugin’s own screens and on feed requests.

#### 2.7.0 (2026-07-15)

 * New: a small, dismissible note on the Statistics and Settings pages pointing 
   to VozCaster (the same author’s Telegram-based podcast publishing bot), admin-
   only and never intrusive.

#### 2.6.4 (2026-07-14)

 * Fixed: a brand-new install (no v1.x data to migrate) could incorrectly show the«
   your settings were migrated, please verify your Bearer Token» admin notice. That
   notice is now only shown after a real migration from v1.x actually happened.

#### 2.6.3 (2026-07-13)

 * Fixed: eight remaining `PluginCheck.Security.DirectDB.UnescapedDBParameter` warnings
   in class-op3pa-geo.php’s table-swap logic — the suppression comment was missing
   that specific sniff code (present in the file’s first query, forgotten in the
   rest).

#### 2.6.2 (2026-07-13)

 * Fixed: remaining Plugin Check warnings missed in 2.6.1 — verified this time against
   a locally-installed copy of WordPress Coding Standards rather than by hand, since
   several `phpcs:ignore` comments in 2.6.1 didn’t actually cover the flagged line(
   multi-line SQL statements need the comment on the exact line, not just the statement’s
   opening line) or used the wrong sniff code.

#### 2.6.1 (2026-07-13)

 * Fixed: `Tested up to` used a patch-level version number (7.0.1), which WordPress.
   org’s readme validator rejects — only major.minor is accepted. Corrected to 7.0.
 * Fixed: several WordPress.org Plugin Check warnings (missing `wp_unslash()` before
   sanitizing a few POST/SERVER values, missing `translators:` comments, direct-
   database-query suppression comments that didn’t match the actual sniff codes 
   triggered).

#### 2.6.0 (2026-07-12)

 * Improvement: Private podcast download counting now follows the same methodology
   OP3 documents for its own public counting — startup-probe (`bytes=0-1`) handling,
   one-download-per-listener-per-day deduplication, and bot/crawler filtering. See
   the FAQ for details.

#### 2.5.0 (2026-07-11)

 * New: Growth ranking report — episodes climbing or falling fastest vs. the equal-
   length period before.
 * New: Side-by-side app/device comparison across podcasts in the network view.
 * Improvement: Every report section now includes a short explanation, shown when
   printing/exporting to PDF.
 * Fix: The «Print / PDF» output no longer has a lopsided left margin from the WordPress
   admin menu gutter.

#### 2.4.0 (2026-07-11)

 * New: download alerts. Get a consolidated email when a monitored episode (14+ 
   days old) has a spike or drop in downloads vs. the previous week. New dedicated«
   OP3 Analytics  Alertas» settings page with its own history log, separate from
   the Statistics page — email required, no fallback to the site admin address, 
   checkable per alert type and per podcast, with a configurable threshold and minimum-
   baseline noise filter.

#### 2.3.1 (2026-07-10)

 * New: audience overlap report (matrix + ranked list) showing how many listeners
   two or more podcasts have in common, when 2+ podcasts are shown together. Public
   and private podcasts are always kept in separate comparisons — see the FAQ for
   why.

#### 2.3.0 (2026-07-10)

 * New: downloads by hour-of-day and by weekday charts («best time to publish»),
   converted to your site’s own timezone, for both public and private podcasts.
 * New: unique listeners count, shown next to the total downloads. Exact for public
   podcasts (OP3’s stable audience identifier) and for private podcasts within a
   24h period; approximate for private podcasts over longer periods, since the privacy-
   preserving IP hash rotates daily.
 * Changed: the episode list now shows the top 10 by default, with a «Ver todos»
   button to expand the rest — much less scrolling to reach the charts below.
 * Fixed: the country map’s floating tooltip could get covered by the bundled SVG’s
   own native browser tooltip («Simple World Map») on small countries.

#### 2.2.0 (2026-07-10)

 * New: apps & devices breakdown, for both public podcasts (from OP3’s per-download
   data) and private ones (detected from the User-Agent).
 * New: country map and ranked list, colored by download volume. Public podcasts
   get country data directly from OP3; private podcasts need a free MaxMind GeoLite2
   license key (added in Settings).
 * New: custom date range picker (desde/hasta) alongside the 24h/7d/30d tabs, for
   both public and private podcasts.
 * Changed: default statistics period is now 24h instead of 30 days, so the page
   loads faster by default.
 * Fixed: an AJAX race condition where rapidly toggling the podcast selector could
   show a stale result if an earlier request resolved after a newer one.

#### 2.1.0 (2026-07-10)

 * New: private podcast support. Podcasts behind a restricted/password-protected
   feed (e.g. Restrict Content Pro) can now be marked as private with a Feed slug,
   routing their downloads through a self-hosted tracking endpoint instead of the
   OP3 prefix (which cannot access authenticated feeds). Statistics for private 
   podcasts are calculated from your own database, with episode titles resolved 
   from your own posts, and shown alongside your public podcasts in the same network
   view.
 * Fixed: the OP3 prefix rewrite is now scoped per feed (via the new Feed slug setting)
   instead of applying site-wide, preventing a public podcast’s prefix from leaking
   into other feeds on multi-podcast sites.
 * Settings page: fields not relevant to a podcast’s public/private status (Show
   UUID/GUID vs. Feed slug) are now visually disabled to reduce confusion.

#### 2.0.8 (2026-04-30)

 * Fixed: feed prefix now applies immediately after activation, even before configuring
   a Show UUID. The prefix only stops when all configured podcasts are explicitly
   marked as private.

#### 2.0.6 (2026-04-07)

 * Episode publish date now shown in statistics tables (formatted according to WordPress
   date settings).
 * Episode titles now resolved universally for all podcast hosts using the episodeId
   field from OP3 download data.
 * Fallback title resolution by itemGuid for PrestoCast-style hosts.

#### 2.0.5 (2026-04-07)

 * Improved episode title resolution: cross-references OP3 episodeId from download
   rows with episode list from show endpoint, making titles work reliably for all
   podcast hosts.

#### 2.0.4 (2026-04-07)

 * Episode titles now fetched from OP3 show endpoint and matched against audio filenames(
   itemGuid strategy for PrestoCast).

#### 2.0.3 (2026-04-07)

 * Fixed dashboard widget pagination (left/right arrows between podcasts).
 * Added episode title enrichment from OP3 show info endpoint.

#### 2.0.2 (2026-04-06)

 * Fixed statistics page rendering: initial table now renders inside #op3pa-stats-
   container so period/podcast changes correctly replace it via AJAX.

#### 2.0.1 (2026-04-06)

 * Network view: episodes from all podcasts now shown in a single merged table sorted
   by downloads, with a Podcast column identifying each episode’s show.
 * Network header now shows all podcast names with individual links to their OP3
   stats pages.
 * Settings page texts improved with clearer Spanish descriptions for all fields.

#### 2.0.0 (2026-04-06)

 * Multi-podcast support: configure any number of podcasts, each with name, Show
   UUID and optional Podcast GUID.
 * Global bearer token: a single token covers all configured podcasts.
 * Private podcast flag: private podcasts are excluded from the OP3 prefix and from
   statistics.
 * Automatic migration from v1.x settings (bearer token and podcast data preserved
   on update).
 * Network view: statistics page aggregates downloads across all podcasts or a custom
   selection.
 * Network ranking table: shows which podcast in the network gets the most downloads.
 * Dashboard widget with left/right pagination between podcasts when multiple are
   configured.
 * Print-friendly statistics page (Ctrl+P / Cmd+P generates a clean PDF report).

#### 1.0.2 (2026-04-02)

 * Fixed output buffer handling: ob_start() is now explicitly closed with ob_get_clean()
   on the shutdown action.

#### 1.0.1 (2026-03-25)

 * Renamed plugin to «Podcast Analytics for OP3» to clarify it is a community integration,
   not an official OP3 product.

#### 1.0.0 (2026-03-18)

 * Initial release: feed prefix, dashboard widget and statistics page with 1/7/30
   day periods.

## Meta

 *  Version **2.9.0**
 *  Last updated **2 Monaten ago**
 *  Active installations **10+**
 *  WordPress version ** 6.3 or higher **
 *  Tested up to **7.0.7**
 *  PHP version ** 8.0 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/podcast-analytics-for-op3/) und 
   [Spanish (Spain)](https://es.wordpress.org/plugins/podcast-analytics-for-op3/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/podcast-analytics-for-op3)
 * Tags
 * [analytics](https://de-ch.wordpress.org/plugins/tags/analytics/)[feed](https://de-ch.wordpress.org/plugins/tags/feed/)
   [podcast](https://de-ch.wordpress.org/plugins/tags/podcast/)[statistics](https://de-ch.wordpress.org/plugins/tags/statistics/)
 *  [Advanced View](https://de-ch.wordpress.org/plugins/podcast-analytics-for-op3/advanced/)

## Ratings

 5 von 5 Sternen.

 *  [  6 5-Sterne-Rezensionen     ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/?filter=5)
 *  [  0 4-Sterne-Rezensionen     ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/?filter=4)
 *  [  0 3-Sterne-Rezensionen     ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/?filter=3)
 *  [  0 2-Sterne-Rezensionen     ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/?filter=2)
 *  [  0 1-Sterne-Rezensionen     ](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/podcast-analytics-for-op3/reviews/)

## Contributors

 *   [ Miguel Angel Terrón ](https://profiles.wordpress.org/materron/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/podcast-analytics-for-op3/)