{"id":20258788,"url":"https://github.com/skymethod/op3","last_synced_at":"2025-04-07T13:08:26.700Z","repository":{"id":60315149,"uuid":"534305169","full_name":"skymethod/op3","owner":"skymethod","description":"OP3: The Open Podcast Prefix Project","archived":false,"fork":false,"pushed_at":"2024-10-29T22:33:51.000Z","size":2501,"stargazers_count":87,"open_issues_count":1,"forks_count":5,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-10-30T00:45:11.328Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://op3.dev","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skymethod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://github.com/skymethod/op3#sponsors"]}},"created_at":"2022-09-08T16:44:51.000Z","updated_at":"2024-10-29T22:33:55.000Z","dependencies_parsed_at":"2023-02-18T13:00:26.560Z","dependency_job_id":"c263ea46-43d4-442f-9677-c4abc7b2ca9e","html_url":"https://github.com/skymethod/op3","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skymethod%2Fop3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skymethod%2Fop3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skymethod%2Fop3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skymethod%2Fop3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skymethod","download_url":"https://codeload.github.com/skymethod/op3/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247657281,"owners_count":20974345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T11:11:32.106Z","updated_at":"2025-04-07T13:08:26.662Z","avatar_url":"https://github.com/skymethod.png","language":"TypeScript","funding_links":["https://github.com/skymethod/op3#sponsors"],"categories":[],"sub_categories":[],"readme":"# OP3: The Open Podcast Prefix Project\n\n\u003cimg width=\"200\" alt=\"OP3 logo on dark background\" src=\"https://github.com/skymethod/op3/assets/47259736/3babd9f4-44bf-48ef-8162-1a14673cb5b1.png\"\u003e\n\u003cbr\u003e\u003cbr\u003e\n\nThe [Open Podcast Prefix Project (OP3)](https://op3.dev/) is a free and open-source podcast [prefix analytics service](https://soundsprofitable.com/update/prefix-analytics) committed to open data and listener privacy.\n\n# TL;DR\nPodcasters or podcast hosting companies can prepend\n\n`https://op3.dev/e/`\n\nto podcast episode urls in their feed to participate and start sending data.\n\nAnyone can verify the data using the [OP3 API](https://op3.dev/api/docs).  Only a safe set of request attributes are currently stored and returned by this API.\n\n# The Vision\nA free service for podcasters and podcast hosts to compute standard episode/show-level analytics and make them available to everyone\n\n## Commitment to **safely store listener requests**\n  - Raw IP addresses are never stored, but safely hashed using private keys (rotated monthly) that never leave the server\n  - This provides a way to compute analytics without providing a way for anyone to identify a particular listener, even if their IP is known\n\n## Commitment to **open data**\n  - Podcasting is media publishing using an open platform, this project provides a way to open up a piece of the system that has not been available to date\n  - Publish an [API](https://op3.dev/api/docs) of the low-level request logs for others to perform derived metrics such as downloads or other industry trends\n  - Compute standard episode/show-level downloads/uniques, up to the [IAB](https://iabtechlab.com/compliance-programs/compliant-companies/#) standard\n    - Goal would be eventually to obtain IAB certification, if someone sponsors it\n    - This way non-IAB podcast hosts or independent podcasters could still report IAB-qualified downloads\n  - Support emerging methods for improving download computation quality such as [ULIDs](https://podcastlistening.com)\n\n## Commitment to **open development**\n  - Anyone can get involved in the project [discussions](https://github.com/skymethod/op3/discussions)\n   \n## Commitment to **auditable infrastructure**\n  - Entire code base is open source, right here in this very GitHub repo\n  - Deployments run entirely on GitHub, and are pushed directly to Cloudflare's CDN environment, no black boxes in the middle\n  - Any IP lists will default to being public in the codebase\n    - For those that cannot be public, a hash will be present in the codebase - so changes can be tracked and verified by other parties with the same list\n  - The logs never leave Cloudflare's infrastructure, and stored in a storage product that _has no backend query api_, all access goes through the public code paths that are fully visible in this source repository\n    \n## Commitment to **high-performance redirects**\n  - Since any prefix service is in the path of serving podcast episodes, it needs to be lightning-fast\n  - Runs entirely on Cloudflare's CDN platform, a global infrastructure with edge nodes in over 320 cities in over 120 countries\n  - The redirects always succeed, even if the backend storage is down. Logging is done in the background after the response is returned\n \n## Commitment to **sustainable development**\n  - Building a service like this will require a large amount of initial development (see work plan below)\n  - Although the service runs on serverless infrastructure, there will still be monthly costs involved, and ongoing administration (combatting fraud and abuse, managing current IP lists)\n  - [op3.dev](https://op3.dev) (and the [staging](https://staging.op3.dev) and [ci](https://ci.op3.dev) subdomains) run under a dedicated Cloudflare paid account, these are the only hosting costs\n  - Monthly bills and usage details are [published](https://op3.dev/costs) as a public part of the project\n  - Anyone interested in supporting the project can sponsor development and operational costs by purchasing sponsorships (see [below](#sponsors))\n\n# Roadmap\nThe production [op3.dev](https://op3.dev) prefix service is ready to use, it's been running since September 2022, currently measuring\nover 1000 shows, large and small.\nBasic request and download-level data is available in the API, all other future features will build on top in a layered approach.\n\nFree public stats pages are available for every show using OP3 - see an [example](https://op3.dev/show/dc1852e4d1ee4bce9c4fb7f5d8be8908).\n\n## Work plan\n - ✅ Launch highly-available, performant prefix redirect service\n - ✅ Make low-level minimized **request** data available in the API\n - ✅ Identify podcast show and episode information for each episode url using the service\n - ✅ Make high-quality podcast and episode **download** data available in the API\n   - (This will be the most useful data for podcast use cases such as verifying downloads for advertisers or comparing shows)\n   - Filter out duplicate requests from the same listener\n   - Distinguish apps from bots by User-Agent, building on the [public OPAWG User agent list](https://github.com/opawg/user-agents)\n   - Categorize request IPs using known IP ranges of cloud services, vpns, tor traffic, etc, and exclude ranges representing automated traffic\n   - Implement a solid first-pass calculation along the lines of the [Open Downloads](https://github.com/open-downloads/odl) criteria\n - 👨‍💻 Publish documentation site with setup guides for every podcast hosting company and FAQs on how to audit the project claims and policies\n - 🔜 Build user-friendly charts and widgets for podcasters to easily reference and/or integrate into their own sites\n - 🔜 Build useful data exports to Google Sheets, Zapier, etc\n - 🔜 Build operational tools to support ongoing maintenance, data management, and abuse/fraud detection with minimal staffing needs\n\n## Translation\n🌎 Help us translate OP3 into as many languages as possible! See our [translation instructions](https://github.com/skymethod/op3/blob/master/translation.md) for more details.\n\n# Sponsors\nAnyone interested in supporting the project can sponsor development and [operational costs](https://op3.dev/costs) by purchasing sponsorships.  This is the only way OP3 can stay open and independent into the future.\n\nThere are two monthly sponsorship levels:\n - $500/mo [OP3 Gold Sponsorship](https://buy.stripe.com/aEU8z676n2fnfEQ148) to help fund development and drive future features\n - $100/mo [OP3 Sponsorship](https://buy.stripe.com/cN2eXueyP07f3W83ch) to help fund development\n - These sponsors are listed on [the OP3 home page](https://op3.dev/#sponsors)\n\nFor podcasters using OP3 or anyone else wanting to support this effort, consider our:\n - $10/mo [Early Supporter Sponsorship](https://buy.stripe.com/8wM6qYeyPg6d9gsdQW) to help offset monthly infrastructure costs\n\n# Questions?\nEmail [john@op3.dev](mailto:john@op3.dev) or [start a discussion](https://github.com/skymethod/op3/discussions).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskymethod%2Fop3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskymethod%2Fop3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskymethod%2Fop3/lists"}