Data portability of podcast listening history (and the PortCast protocol)

Disclosure up front: I’m the creator of both PortCast and Trimplayer (an AntennaPod fork), so I have a stake in this. I’m posting because the topic feels genuinely relevant here and I’d value the community’s honest take

One thing I’ve been thinking about a lot is how portable our podcast listening history really is. When switching between podcast apps, things like play position, played/unplayed status, subscriptions, and overall listening stats often don’t come along. OPML rescues your subscriptions and nothing else, and per-app exports all ship in different, mostly-private formats.

This is what led me to build PortCast (https://portcast.org): an open JSON protocol (currently a v0.2.0 draft) aimed at exactly this gap. It’s a single, vendor-neutral file that captures not just subscriptions but episode state (unplayed/in-progress/completed/archived plus play position), playback events, queue order, bookmarks/clips, and per-feed preferences. It matches podcasts by the podcast:guid standard with a feedUrl fallback, requires no central server or account, and is published openly (spec under CC BY 4.0, reference code under MIT on GitHub). There’s also a reference Python implementation with an OPML to PortCast bridge.

One objection I expect: “why not just use the Open Podcast API?” That’s fair, and I don’t see PortCast as a competitor to it. The Open Podcast API is a sync protocol, designed for apps talking to a live server to keep state in sync across devices. PortCast is a portability format, a self-contained file you own and can move anywhere, with no server or account required, even between apps that don’t share a sync backend. I think the two are complementary: sync for day-to-day, a portable file for migration, backup, and exit. I’d genuinely welcome pushback on that framing.

If there’s interest, I’d be happy to contribute the integration to AntennaPod directly, for example import/export support for the format, building on the existing OPML and database backup code rather than reinventing it. I’d want to discuss the approach with maintainers first and keep it small and optional, but the offer is on the table.

So, curious what others think: How well does AntennaPod’s OPML export and database backup preserve listening history today? Would a neutral, listener-owned format like PortCast be worth supporting? And is there appetite for a more universal approach to moving listening data between apps without losing history? Happy to answer any questions about the spec.

check out this PR :slight_smile:

How can I help test this feature as I am trying to design a hardware and software list for creating podcasts and sharing on multiple Android devices ?

I am using Ubuntu with Studio Installer and all the build essentials.
Thus far I have AntennaPod on these devices.
Nvidia Shield
OneNet Plus Pad Go 2
Pixel 6a while driving using steering wheel controls with Android Auto (not Automotive)

The UI is not friendly for these three devices.

I also use VLC and export playlists that don’t have the played to markers.

I can’t see a way to connect the TV, tablet and while driving app to same queue history.

I use TWIT.TV audio / video for test case as well as The REWORK Podcast .

You seem to have the same concern.

thanks a lot for your support, it seems that this change is still in triage phase. maybe you can add some comment on the PR to explain why it’s a good and required addition?

thanks, do you have any way to help with the triage process of this PR?

@keunes and I meet every 2 weeks and triage open feature requests. There is not really something you could do to speed this up.

To be honest, I think this fits better into our migration scripts repo rather than the main app

adding it to the main app will give Spotify users the ability to take their listening history with them into AntennaPod. there’s a chrome extension already that exports a portcast from Spotify PortCast — portable podcast listening history

A few months ago, I made a decision that improved my life and health.

I committed to a daily routine of a 30-minute walk, no compromises and no excuses. So, if I miss a walk, I add it to the next day. Wish me luck, because tomorrow morning I’m about to start a 36-hour walk. :grinning_face_with_smiling_eyes:

I hope you find it funny :hugs:
I just wanted to check if there are any updates.

No updates, but opening an issue instead of a PR might help to not let it slip. See also our contribution guidelines: AntennaPod/CONTRIBUTING.md at develop · AntennaPod/AntennaPod · GitHub