API recipe

Find Potential Sponsors for Your Podcast

Research brands appearing on similar podcasts and build a shortlist for your next sponsorship pitch.

beginner 10 minutes PodEngine Team
PodcastsSponsorsHosting

Before you start

  • API token
  • The Pod Engine ID or slug of a similar podcast

Choose your example

Your selection applies to every step. HTTP uses built-in clients without the Pod Engine libraries.

Use Node.js 22 or newer. Save the complete script as recipe.mjs.

npm install @podengine/sdk
# macOS / Linux shell; set the same variable in your shell on Windows
export PODENGINE_API_KEY="YOUR_API_KEY"
node recipe.mjs

Set up the client

Start your file with this setup, then append each step in order. The complete script below includes everything.

import { PodEngine } from '@podengine/sdk';

const apiKey = process.env.PODENGINE_API_KEY;
if (!apiKey) throw new Error('Set PODENGINE_API_KEY before running this recipe');
const pe = new PodEngine({
  apiKey,
  baseUrl: process.env.PODENGINE_API_URL || 'https://api.podengine.ai',
});
Complete runnable script
Download script
import { PodEngine } from '@podengine/sdk';

const apiKey = process.env.PODENGINE_API_KEY;
if (!apiKey) throw new Error('Set PODENGINE_API_KEY before running this recipe');
const pe = new PodEngine({
  apiKey,
  baseUrl: process.env.PODENGINE_API_URL || 'https://api.podengine.ai',
});

const podcastIdOrSlug = 'this-week-in-startups';
const { podcast, sponsors: summary } = await pe.podcasts.getPodcastSponsors({ podcastIdOrSlug, sinceDays: 90 });
console.table([
  {
    podcast: podcast.title,
    analyzedEpisodes: summary.episodesCount,
    oldestAnalyzedEpisode: summary.oldestEpisodeDate,
    newestAnalyzedEpisode: summary.mostRecentEpisodeDate,
  },
]);

const shortlist = [...summary.sponsors]
  .sort(
    (a, b) =>
      b.appearancesCount - a.appearancesCount ||
      new Date(b.mostRecentAppearanceDate).getTime() - new Date(a.mostRecentAppearanceDate).getTime()
  )
  .slice(0, 10)
  .map((item) => ({
    name: item.name,
    appearances: item.appearancesCount,
    latestAppearance: item.mostRecentAppearanceDate,
    sourcePodcast: podcast.title,
  }));
if (summary.episodesCount === 0) {
  console.info('No analyzed episodes. Try a wider window or another show.');
} else if (!shortlist.length) {
  console.info('No sponsors returned from the analyzed episodes.');
} else {
  console.table(shortlist);
}
1

Find brands appearing on a similar show

Choose a show whose audience shares interests with yours. Brands mentioned as sponsors or advertisers on that show are a starting point for researching potential partners.

Choose your language and SDK or HTTP above. Run the setup first, then append each step to the same file. Replace the example podcast slug with your chosen show.

Request the Podcast Sponsors endpoint with sinceDays=90. In the HTTP response, the summary is at data.sponsors, with the brands at data.sponsors.sponsors. Results include both sponsors and advertisers.

const podcastIdOrSlug = 'this-week-in-startups';
const { podcast, sponsors: summary } = await pe.podcasts.getPodcastSponsors({ podcastIdOrSlug, sinceDays: 90 });
console.table([
  {
    podcast: podcast.title,
    analyzedEpisodes: summary.episodesCount,
    oldestAnalyzedEpisode: summary.oldestEpisodeDate,
    newestAnalyzedEpisode: summary.mostRecentEpisodeDate,
  },
]);
2

Prioritize brands to research

Append this code to the same file. It ranks brands by their returned appearance counts, using the latest appearance to break ties, and keeps ten prospects.

Review the analyzed episode count and date range before comparing shows. A show with more analyzed episodes has more opportunities to surface sponsor mentions. An empty list does not establish that the show has no sponsors; when no analyzed episodes are included, the summary dates are null.

const shortlist = [...summary.sponsors]
  .sort(
    (a, b) =>
      b.appearancesCount - a.appearancesCount ||
      new Date(b.mostRecentAppearanceDate).getTime() - new Date(a.mostRecentAppearanceDate).getTime()
  )
  .slice(0, 10)
  .map((item) => ({
    name: item.name,
    appearances: item.appearancesCount,
    latestAppearance: item.mostRecentAppearanceDate,
    sourcePodcast: podcast.title,
  }));
if (summary.episodesCount === 0) {
  console.info('No analyzed episodes. Try a wider window or another show.');
} else if (!shortlist.length) {
  console.info('No sponsors returned from the analyzed episodes.');
} else {
  console.table(shortlist);
}
3

Prepare a pitch around audience fit

Repeat the request for a few comparable podcasts and keep each brand's source show and latest appearance in your research notes. Check brand identity before merging names from different shows.

For each promising brand, review the relevant podcast and the brand's current product offering. Write down why your listeners would benefit, then prepare a pitch with your audience profile, episode format, and a specific sponsorship idea.

Use the brand's public partnerships or advertising contact channel for outreach. The summary provides brand names, appearance counts, and dates; it does not include contact details, rates, or confirmation that the brand wants to sponsor your show.