The problem
Independent podcast hosts grow the same way: they trade promos with a show whose audience overlaps with theirs. One show plays the other's 30-second trailer, and the other returns the favor. About 466,000 shows posted an episode in the last 90 days (Podcast Index), so the hard part is picking whom to ask first. The other show should be close in taste, still publishing, reachable, and ideally a show that trades promos already.
Hosts already have good tools. Apple shows which shows share listeners. Rephonic shows who a show has mentioned and lets you send pitches from the platform. MatchMaker.fm and swap sign-up lists show who is open to trading. Podtrac lets you send the request. Swap Desk adds one thing: it puts shows in order for you, and we checked that order against swaps hosts really made. It's free and starts from a single show.
What it does
- Type your show's name or paste its Apple Podcasts link. Swap Desk finds it with the iTunes Search API and matches it to Qloo by iTunes ID.
- Qloo returns the 50 podcasts closest to yours. The first screen shows Qloo's top 20 in Qloo's order, with Qloo's top five on top, so it is exactly the list we scored.
- Swap Desk reads each show's own public RSS feed: last episode, how often it publishes, episode count, first year, public contact, and promo episodes. Labels only, never reordering: Smaller / Similar / Bigger / Much bigger reach (Qloo popularity against yours), Quiet for N+ months, Swapped with N shows, Swapped with you in Jun 2021 (found in either feed), same publisher or network. The first active show with a contact that you haven't swapped with is marked Start here.
- Every row has a Why line. It is assembled by code from fixed sentences, and every word of material comes from Qloo or from the feeds: what the two shows have in common per Qloo's compare call (run for all 20 rows) ("Identity, Family Secrets, Genealogy"), the last swap the other show ran, how recently it published.
- Receipt opens three panels on any row: Qloo says (rank, affinity, popularity, shared tags, the raw request), Their feed says (episodes and each swap with the episode it came from), Our call (the labels we added and why).
- Draft invite writes a short trailer-swap email from the row's facts only. Every show and episode name is checked against the receipt; a failed check falls back to a fixed template. You fill in your downloads, tick "I've read this," and open it in your own email app. Swap Desk never sends email.
- Qloo doesn't have this show yet. When Qloo can't find your show, you pick a few similar shows and Swap Desk searches from those. The screen says plainly that this path is a starting list.
Technological Implementation
How Qloo is used, and why it fits:
| Step | Qloo call | Why |
|---|---|---|
| Match your show | /search with types=urn:entity:podcast, matched on external.itunes.id |
iTunes IDs join Qloo entities to public feeds. 97.7% of Qloo's podcast results carry one |
| Rank neighbours | /v2/insights with filter.type=urn:entity:podcast, signal.interests.entities=<your show>, take=50, feature.explainability=true |
One call returns a ranked list with affinity and popularity |
| Explain every row | /v2/analysis/compare (your show vs each of the top 20) |
Returns the tags two podcasts share, finer than genre (themes, keywords) |
| Fallback | /v2/insights with several picked shows as the signal |
feature.explainability scores each pick, so a row can say which pick it is closest to |
| Context | /v2/insights with filter.tags=<your genre> |
"Big name, different crowd": famous in your genre but not among your 50 closest |
Request to result, redacted. For Everything's Relative (a family history show), the request is GET /v2/insights?filter.type=urn:entity:podcast&signal.interests.entities=<Everything's Relative>&take=50&feature.explainability=true. Qloo ranks NPE Stories #2 and CutOff Genes #3; compare returns "Identity, Family Secrets, Society & Culture" for NPE Stories. The feeds then show both shows already swapped with Everything's Relative (2020 and 2021), so Swap Desk labels them "Swapped with you" and marks Start here on Adoptees On (#7): similar reach, still publishing every two weeks, email in its feed.
Around Qloo: iTunes lookup with a name check (about 3% of Qloo's iTunes links point at a differently named show; those rows say so), RSS parsing, gpt-4.1-mini for reading promo episodes (a name is kept only if it appears word for word in the episode text), call and spend caps, a private server-side cache for Qloo responses, and a check:public script that fails if any Qloo response data or key sits in the public repo.
Design
- The first screen answers one question: whom do I ask first. Five rows with reasons, then 15 more, then context.
- Provenance is part of the product: every reason has a source tag (Qloo or Feed), and every row has a receipt.
- A person stays in control: drafts open in your own email app, five drafts per session, nothing is sent automatically.
- Works on a phone. A recorded mode serves cached results for judging; Live refetches Qloo and the feeds.
Potential Impact
We tested the ranking against swaps hosts really made. We took 48 real podcasts and 185 shows they actually traded promos with, straight from their own public feeds, and committed the test before fetching a single feed.
| Top 20 (the cutoff fixed in advance) | Real partners found |
|---|---|
| Qloo taste match | 24.3% |
| gpt-4.1-mini, no web search | 6.1% |
| Most popular in genre | 3.7% |
Qloo minus the LLM-only list: +18.2 points (95% interval 9.6 to 27.3). It holds for mid-size and small shows (23.0% vs 6.2%). Half the 48 shows had at least one real partner in Qloo's top 20.
We also ran a top LLM with web search (gpt-5.5) on the same 48 shows, in two halves: 19.0% in its top 20. Qloo is ahead, but the gap is too small to call, so we count it as a tie. Mixing the two lists did not beat Qloo alone. All of this is on the evidence page.
Who it is for: an indie host who publishes weekly, edits alone, and has no marketing budget. Swap Desk is meant to be free for hosts. A hosting platform keeps a host when the show grows, so the business is a growth tab inside hosting platforms, with Qloo licensing the taste data to the platform. We have not tested this with a platform yet.
Quality of the Idea
- Using Qloo to choose partners for a trade between two shows is a different job from recommending shows to a listener. Fit, size, activity and willingness all matter.
- The answer key is unusual for a hackathon: what hosts actually did, written in their own feeds.
- We report what did not work. Re-ordering Qloo's list by who trades promos did not find more real partners (our Day-1 Test A), so feed reading only adds labels and facts. Seed shows for unknown podcasts did not beat an LLM alone (Test B), so the fallback screen shows no accuracy number. Both tests were committed before running.
Limitations
- A feed only shows swaps that hosts wrote into episode titles or notes. A promo read out loud and never written down is invisible to us.
- Qloo knows about 55% of the indie shows in our test that trade promos.
- The 48 test shows were found because they write about swaps, so they are easier cases than a typical host. Counting only swaps since 2025, Qloo's top 20 held 11.6% (vs 4.2% for the LLM-only list).
- Shows that already swapped may share more listeners because of the swap. We measured who hosts chose, not how well the swap worked.
- We did not compare against Apple's lists (site terms) or Rephonic (paid).
- Qloo popularity is a percentile, not downloads. Qloo results describe aggregate taste, not individual listeners.
Try it (for judges)
- No login. Open https://swap-desk-podcasts.onrender.com. If the service was asleep, the first load can take a minute.
- On the home page, "For judges: 30 seconds" has three examples: a mid-size show, a small show (Everything's Relative, one of our 48 test shows), and a show Qloo doesn't have yet.
- Recorded (default) serves the last saved run from the server's private cache, so the examples load instantly; the run time is shown under the list. Live refetches Qloo and every feed; a run takes about a minute.
- Try any show by name or paste an Apple Podcasts link. Click Receipt on any row to see where each fact came from. Draft invite opens an editable draft; nothing is sent.
- The evidence page is at
/evidence.
Setup from a clean environment
git clone https://github.com/a96020183/swap-desk-podcasts && cd swap-desk-podcasts
npm ci
cp .env.example .env # add QLOO_API_KEY and OPENAI_API_KEY
npm start # http://localhost:3000
npm test # unit tests, no network
npm run check:public # no Qloo data or keys in public files
Protocols, scripts and derived results are in research/ in the repo. MIT license.
Built With
- css
- fast-xml-parser
- gpt-4.1-mini
- html
- itunes-search-api
- javascript
- node.js
- openai
- qloo
- qloo-insights-api
- rss
Log in or sign up for Devpost to join the conversation.