Skip to main content
Browse podcast guests across the catalog, in two opinionated modes:
  • directory (default): the guest directory ranked by lifetime appearances (guests with 2+ appearances).
  • trends: who’s making the rounds right now — guests with appearances on 2+ distinct podcasts in the last 30 days, which surfaces cross-show press tours rather than show regulars. The press-tour shape is enforced by several baked filters: every in-window appearance must be on a different podcast (no stacking repeats on one show), each appearance needs 5+ minutes of identified speaking time, mononymous catch-all people are excluded, and the in-window rate must be at least a 2× spike over the guest’s lifetime baseline. A guest matching the headline criteria but failing any of these will not appear.
podcast_slug switches the listing from the corpus to one show’s guest roster: every guest who has appeared on that podcast, ranked by appearances on the show — with no lifetime-appearance floor, so one-off guests are included. It only combines with the default directory mode (trends is corpus-wide and has no podcast filter — combining them is an invalid_input error). topic_slug narrows either corpus mode to guests appearing on episodes about that topic (it is ignored when podcast_slug is set). Guest identifiers are person handles — usually the canonical person slug, falling back to the encoded person ID when a slug hasn’t been backfilled yet (both forms are accepted everywhere a person is taken). Feed them into particle_podcast_get_guest for the appearance profile or particle_person_get for the person profile.

Filtering by expertise

The directory takes speaker-expertise filters: occupation, field, standing, seniority, practicing, capacity and employer, plus appeared_since for guests seen recently. occupation and field take a code, slug or title from particle_expertise_resolve, and a broad code covers everything below it. include: ["expertise"] adds each guest’s read on one line: standing, seniority, most specific occupation and field, and organization.
  • One-off guests are kept. An expertise filter already says who belongs, so a filtered directory drops the two-appearance floor: a practicing cardiologist who guested once is the answer.
  • practicing needs a detailed SOC 2018 occupation, such as 29-1212 Cardiologists. With a broader code, or with no occupation, it returns validation_error.
  • With podcast_slug, the filters list that show’s guests through the directory, so the rows carry directory stats rather than roster stats; one-off guests are kept, as on the roster. Without any filter, podcast_slug returns the plain roster as before.
  • These filters, appeared_since and include are directory-only. Combining any of them with mode="trends" returns invalid_input.
  • An occupation or field that names nothing returns unresolved_reference with the closest codes as did-you-mean suggestions.
Beyond the expertise filters, this surface is deliberately minimal: a podcast filter (podcast_slug for one show’s roster), a topic filter, and pagination. The unfiltered directory uses lifetime appearance counts (floor of 2 appearances); trends uses a 30-day window with a 2+ distinct-podcast bar. The full filter surface lives on the REST API.

Inputs

Output

A markdown document with ## Podcast guests — <mode> (N) (or ## Guest roster — <podcast_slug> (N) when podcast_slug is set) and a flat bullet list — one bullet per guest, formatted **Name** (slug) — <stats>. In directory mode <stats> is N appearances across M podcasts, last YYYY-MM-DD; in trends mode it is N podcasts in the last 30 days, M lifetime appearances, last YYYY-MM-DD. The parenthesized identifier is the canonical person slug when one has been backfilled, otherwise the encoded person ID — both forms are accepted everywhere a person is taken (guest_slug, person_slug, particle_person_get). Each bullet of a guest with an expertise profile ends with — expertise: <Occupation> (<code>), practicing · field <Field> (<code>) · <standing> · <seniority>; with include: ["expertise"] (directory mode) the suffix widens to <standing> · <seniority> · <Occupation> (<code>), <flags> · field <Field> (<code>) · at <Organization>. Either leaves out any part the read does not have; a guest not read yet has no suffix. When more pages exist, a horizontal rule and a **Cursor:** <value> line are appended. Sample (mode=trends, limit=3):
Sample (occupation="29-1212", practicing=true, appeared_since="2026-09-01", include=["expertise"], limit=2):

Example

Practicing cardiologists who guested recently: