particle_podcast_search_transcripts
Search the podcast catalog by what is said in episodes — by meaning (semantic_search), by exact phrase (keyword_search), or both at once (hybrid ranking). This is THE way to retrieve relevant dialogue, segments, and clips: each result is one segment of one episode with bounded transcript windows pinpointing the highest-relevance lines, plus any highlight clips that overlap the segment inline on the match.
Segments partition an episode's transcript — where start_line and end_line are present, every spoken line belongs to exactly one segment and one segment's end_line + 1 is the next one's start_line. They are contiguous in transcript lines, not in wall-clock seconds: the seconds between one segment's end_seconds and the next's start_seconds contain no transcribed speech. These matches do not carry the line ranges themselves — fetch them with particle_podcast_get_episode and include: ["segments"], where their absence marks an episode segmented by an earlier version, a small share of which do leave lines uncovered. Clips are sparse, engagement-ranked highlights that overlap some segments. There is no separate clip-search tool — relevant clips arrive on these matches, and a known episode's full clip list is particle_podcast_get_episode with include: ["clips"].
A match window defaults to one line of context around each matched line; raise context to widen windows in place instead of fetching the full transcript.
Use this for "find dialogue about a topic". For "every line naming a person or company" use particle_podcast_find_mentions instead — person_slug and company_slug here narrow ranked results, they don't drive the ranking.
Choosing your query. At least one of semantic_search or keyword_search is required, and they do different jobs:
semantic_searchcarries the idea. Write it as a sentence describing what should be discussed, in the vocabulary a speaker would use. It is paraphrase-tolerant, so it finds the topic however it happens to be worded.keyword_searchcarries words that must be literally spoken. Every word must occur in the same passage, so it is for one or two exact tokens — a ticker, a product name — not for a description. Putting a sentence here returns nothing.Use both when a topic must also contain an exact term. The result is their intersection, which is narrow by design; if that comes back empty,
keyword_match: "ranked"relaxes the keyword side to a relevance hint.
Do not put a name in semantic_search. Resolve it (particle_person_resolve, particle_company_resolve, particle_entity_resolve) and pass the slug — searching for "Sam Altman" as text finds passages that sound like him, while person_slug finds the episodes actually featuring him.
Start broad, then narrow. Every filter compounds, and each one can silently remove all results. Issue the query with semantic_search alone first, then add filters once you know the topic has coverage. If a search returns nothing because of your filters, the error names the specific parameter responsible and the retry to make — act on it rather than re-issuing variations of the same query.
Note on role. It describes how someone relates to the episode: guest/host/panelist/correspondent mean they spoke, mention means they were talked about. Omitting role covers both and is almost always what you want.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | How the entity must relate to the episode. Speaking roles: 'guest', 'host', 'panelist', 'correspondent', or 'speaker' for any of them. 'mention' means the entity is talked about rather than speaking. Omit to match both — usually what you want. | |
| sort | No | Sort order. Defaults to relevance. | |
| limit | No | Results per page (1-50, default 10). | |
| since | No | Only segments from episodes published on or after this ISO 8601 date. | |
| until | No | Only segments from episodes published on or before this ISO 8601 date. | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| context | No | Lines of surrounding dialogue around each matched line (1-15, default 1). Widens each match window in place — use a larger value instead of fetching the full transcript when a match needs more context. | |
| language | No | Restrict to episodes of podcasts in this language — ISO 639-1 code (e.g. 'fr'). Matches the podcast's primary language subtag, so 'fr' covers 'fr-FR'. | |
| entity_slug | No | Knowledge-graph entity slug from particle_entity_resolve for the long tail that isn't a person or company — places, organizations, events, products, concepts (e.g. 'germany'). Use person_slug for people and company_slug for companies. | |
| entity_type | No | Narrow to dialogue in episodes that mention any entity of this category — e.g. 'book', 'company', 'movie', 'school'. Use for 'discussions of X that reference some book'. Ignored when person_slug/company_slug/entity_slug names a specific entity, which is strictly narrower. Categories come from particle_catalog. | |
| person_slug | No | Person slug or encoded person ID from particle_person_resolve, particle_entity_resolve, or the guest tools (e.g. 'sam-altman'). Filters results to dialogue featuring this person. For 'every line about X' use particle_podcast_find_mentions instead. | |
| company_slug | No | Company slug, domain, or ID. Resolves to the company's linked entity and applies as a filter. | |
| episode_slug | No | Filter to a specific episode by slug or ID. | |
| podcast_slug | No | Podcast slug, internal ID, or numeric iTunes ID. | |
| segment_type | No | Segment type filter. | |
| keyword_match | No | How UNQUOTED keyword_search words are applied. 'required' (default) excludes any passage missing one of them, which also makes a hybrid call an intersection with semantic_search. Switch to 'ranked' when keyword_search is a loose bag of related words that will not co-occur — then those words only steer relevance. Quoted phrases still filter in both modes: to relax a phrase, remove its quotes rather than switching mode. | |
| output_format | No | Output serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read. | |
| keyword_search | No | Words that must literally be spoken. Use for exact tokens a paraphrase would miss — tickers, product names, drug names, model numbers. Every word must appear in the same passage (see keyword_match), so keep it to the one or two words that must be said and put the rest of the idea in semantic_search. Wrap words in double quotes to also require them adjacent and in order in the segment's spoken dialogue — only for short exact strings, never for a sentence. A quoted name matches segments where the name appears in the dialogue, not segments that person speaks in; use person_slug or particle_podcast_find_mentions for a person's appearances. There is no boolean OR: 'a OR b' requires the literal word 'OR', so issue one call per alternative. | |
| semantic_search | No | Vector-similarity search by meaning. Express the query the way you'd describe the topic to a colleague — paraphrase tolerant. Combine with keyword_search for hybrid ranking. Describe a topic, not a name: to find a specific person/company/entity, filter with person_slug / company_slug / entity_slug (or use particle_podcast_find_mentions for every line about them) — and for an exact token like a ticker, use keyword_search. |