> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Listen Notes

The Listen Notes connector lets your AI agent act in each user's Listen Notes account. Each user connects their own Listen Notes API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 23 tools.

**Authentication:** API Key
**Categories:** Search, Media
**Tools:** 23: 23 read, 0 write, 0 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=LISTENNOTES)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Listen Notes connection

   In **AgentKit > Connections**, create a Listen Notes connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'listennotes'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Listen Notes:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'listennotes_get_podcasts_batch',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "listennotes"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Listen Notes:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="listennotes_get_podcasts_batch",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Listen Notes credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'listennotes_get_curated_list',
  toolInput: {
    id: '<id>',
  },
  connector: 'listennotes',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="listennotes_get_curated_list",
    tool_input={
        "id": "<id>",
    },
    connection_name="listennotes",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `listennotes_get_curated_list`

Get Curated Podcast List · Read-only

Get one curated podcast list with full metadata for every podcast in it. Same data as listennotes.com/curated-podcasts.
Returns id, title, description, source_url, source_domain, pub_date_ms, total and podcasts (id, title, publisher, description, listen_score and other metadata).
Use listennotes_get_curated_list once you have a list ID. Use listennotes_list_curated_lists or listennotes_search with type curated to find list IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Curated list ID, from listennotes_list_curated_lists or a listennotes_search result with type curated. Example: SDFKduyJ47r.

Example input: `{"id":"<id>"}`

### `listennotes_get_episode`

Get Episode · Read-only

Get one episode's full metadata, optionally with its transcript.
Returns title, description, audio URL, audio_length_sec, pub_date_ms, explicit_content, link, listennotes_url, the parent podcast's metadata and, when show_transcript is 1 and one exists, transcript. Fewer than 1% of episodes have transcripts, and transcripts need a PRO or ENTERPRISE plan.
Use listennotes_get_episode for one episode's details. Use listennotes_get_episodes_batch for basic metadata on up to 10 episodes at once.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Listen Notes episode ID (32-character hex string), from the id field of a search or podcast episode result. Example: 6b6d65930c5a4f71b254465871fed370.
- `show_transcript` (`integer`, optional): Set to 1 to include the transcript, when one exists. Off (0) by default because it makes the response large. Needs a PRO or ENTERPRISE plan. One of: `0`, `1`.

Example input: `{"id":"<id>"}`

### `listennotes_get_episode_recommendations`

Get Episode Recommendations · Read-only

Get up to 8 episodes similar to a given episode.
Returns recommendations: episodes with id, title, description, audio URL, length, pub_date_ms and parent podcast.
Use listennotes_get_episode_recommendations for 'more like this' episodes. Use listennotes_get_podcast_recommendations for similar podcasts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Listen Notes episode ID (32-character hex string), from the id field of a search or podcast episode result. Example: 6b6d65930c5a4f71b254465871fed370.
- `safe_mode` (`integer`, optional): Set to 1 to exclude episodes with explicit language; 0 (the default) keeps them. One of: `0`, `1`.

Example input: `{"id":"<id>"}`

### `listennotes_get_episodes_batch`

Get Episodes in Batch · Read-only

Get basic metadata for up to 10 episodes in one call. Needs a PRO or ENTERPRISE plan.
Returns episodes: id, title, description, audio URL, audio_length_sec, pub_date_ms and parent podcast for each ID found. IDs not found are left out.
Use listennotes_get_episodes_batch to load several known episodes at once, for example a saved list. Use listennotes_get_episode for one episode's full details or transcript.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ids` (`string`, required): Comma-separated Listen Notes episode IDs, up to 10. Example: c577d55b2b2b483c969fae3ceb58e362,0f34a9099579490993eec9e8c8cebb82.

Example input: `{"ids":"<ids>"}`

### `listennotes_get_playlist`

Get Playlist · Read-only

Get a playlist's details and its items, 20 at a time. Works for playlists the API account can access and for any public or unlisted playlist.
Returns id, name, description, visibility, type, total, total_audio_length_sec, last_timestamp_ms (the paging cursor) and items: id, type (episode, podcast or custom audio), notes, added_at_ms and the item's data.
Use listennotes_get_playlist to read a playlist's contents. Use listennotes_list_playlists to find playlist IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Playlist ID: 11 characters, also the last part of a playlist URL (listennotes.com/listen/podcasts-about-podcasting-m1pe7z60bsw has ID m1pe7z60bsw). Example: m1pe7z60bsw.
- `last_timestamp_ms` (`integer`, optional): For paging through items: pass last_timestamp_ms from the previous response (a Unix timestamp in milliseconds). Omit or use 0 for the first 20 items. Example: 1600000000000.
- `sort` (`string`, optional): Item order: recent_added_first (the default), oldest_added_first, recent_published_first or oldest_published_first. One of: `recent_added_first`, `oldest_added_first`, `recent_published_first`, `oldest_published_first`.
- `type` (`string`, optional): Which view to return: episode_list or podcast_list. Omit to use the playlist's saved default view. One of: `episode_list`, `podcast_list`.

Example input: `{"id":"<id>"}`

### `listennotes_get_podcast`

Get Podcast · Read-only

Get one podcast's full metadata and up to 10 of its episodes per call.
Returns title, publisher, description, website, rss, language, country, genre_ids, total_episodes, listen_score, social links (extra), looking_for, and episodes (id, title, description, audio URL, length, pub_date_ms), plus next_episode_pub_date for paging. An empty episodes array means there are no more episodes.
Use listennotes_get_podcast for one podcast and its episode list. Use listennotes_get_podcasts_batch for basic metadata on up to 10 podcasts at once.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Listen Notes podcast ID (32-character hex string), from the id field of a search, best-podcasts or other podcast result. Example: 4d3fe717742d4963a85562e9f84d8c79.
- `next_episode_pub_date` (`integer`, optional): For paging through episodes: pass next_episode_pub_date from the previous response (a Unix timestamp in milliseconds). Omit to get the newest or oldest 10, depending on sort. Example: 1479154463000.
- `sort` (`string`, optional): Episode order: recent_first (the default) or oldest_first. One of: `recent_first`, `oldest_first`.

Example input: `{"id":"<id>"}`

### `listennotes_get_podcast_audience`

Get Podcast Audience · Read-only

Get a podcast's audience breakdown by country, as measured on Listen Notes. Not every podcast has data.
Returns by_regions: a list of region names with the share (ratio) of the audience from each.
Use listennotes_get_podcast_audience to see where a podcast's listeners are. Use listennotes_get_podcast for the podcast's metadata and listen_score.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Listen Notes podcast ID (32-character hex string), from the id field of a search, best-podcasts or other podcast result. Example: 4d3fe717742d4963a85562e9f84d8c79.

Example input: `{"id":"<id>"}`

### `listennotes_get_podcast_recommendations`

Get Podcast Recommendations · Read-only

Get up to 8 podcasts similar to a given podcast.
Returns recommendations: podcasts with id, title, publisher, description, total_episodes, listen_score and other metadata.
Use listennotes_get_podcast_recommendations for 'more like this' podcasts. Use listennotes_get_episode_recommendations for similar episodes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): Listen Notes podcast ID (32-character hex string), from the id field of a search, best-podcasts or other podcast result. Example: 4d3fe717742d4963a85562e9f84d8c79.
- `safe_mode` (`integer`, optional): Set to 1 to exclude podcasts with explicit language; 0 (the default) keeps them. One of: `0`, `1`.

Example input: `{"id":"<id>"}`

### `listennotes_get_podcasts_batch`

Get Podcasts in Batch · Read-only

Get basic metadata for up to 10 podcasts in one call, identified by Listen Notes IDs, RSS URLs, Apple Podcasts IDs or Spotify IDs. Needs a PRO or ENTERPRISE plan.
Returns podcasts (id, title, publisher, rss, total_episodes, listen_score and other metadata, without episodes) and, when show_latest_episodes is 1, latest_episodes: up to 15 recent episodes across them, newest first. Identifiers not in the Listen Notes database are left out.
Use listennotes_get_podcasts_batch to resolve several podcasts at once, for example an OPML import or a list of Apple Podcasts IDs. Use listennotes_get_podcast for one podcast with its episodes. Give at least one of ids, rsses, itunes_ids or spotify_ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ids` (`string`, optional): Comma-separated Listen Notes podcast IDs. Example: 3302bc71139541baa46ecb27dbf6071a,68faf62be97149c280ebcc25178aa731.
- `itunes_ids` (`string`, optional): Comma-separated Apple Podcasts (iTunes) IDs. Example: 1457514703,1386234384.
- `next_episode_pub_date` (`integer`, optional): For paging through latest_episodes: pass next_episode_pub_date from the previous response (a Unix timestamp in milliseconds). Omit to get the latest 15. Example: 1557394247000.
- `rsses` (`string`, optional): Comma-separated podcast RSS feed URLs. Example: https://rss.art19.com/the-daily,https://www.npr.org/rss/podcast.php?id=510331.
- `show_latest_episodes` (`integer`, optional): Set to 1 to also return up to 15 of the latest episodes from these podcasts, newest first; 0 (the default) leaves them out. One of: `0`, `1`.
- `spotify_ids` (`string`, optional): Comma-separated Spotify show IDs. Example: 3DDfEsKDIDrTlnPOiG4ZF4,4qDNe5Gvl1XxdLinUGEXrC.

Example input: `{}`

### `listennotes_get_random_episode`

Get Random Episode · Read-only

Get one random podcast episode; recently published episodes are more likely.
Returns the episode's id, title, description, audio URL, audio_length_sec, pub_date_ms, link and basic podcast info (id, title, publisher, image).
Use listennotes_get_random_episode for a serendipitous pick. Use listennotes_search or listennotes_list_best_podcasts for targeted discovery.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `listennotes_list_best_podcasts`

List Best Podcasts · Read-only

List Listen Notes' editor-picked best podcasts, overall or for one genre, filtered by audience region, publisher region and language. Same data as listennotes.com/best-podcasts.
Returns the genre id and name, total, page_number, has_next, next_page_number and podcasts (id, title, publisher, description, total_episodes, listen_score and other metadata).
Use listennotes_list_best_podcasts to browse top podcasts in a genre or country. Use listennotes_search to find podcasts by keyword, and listennotes_get_podcast_recommendations for podcasts similar to one you have.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `genre_id` (`string`, optional): Genre ID from listennotes_list_genres. Omit for the overall best podcasts. Example: 93.
- `language` (`string`, optional): Only include podcasts in this language, by name from listennotes_list_languages. Example: English.
- `page` (`integer`, optional): Page number of results. Starts at 1. Use next_page_number from the previous response. Example: 2.
- `publisher_region` (`string`, optional): Country code of where the podcast is produced, from listennotes_list_regions. Set both region and publisher_region (for example jp and jp) for a country's best home-grown podcasts. Example: jp.
- `region` (`string`, optional): Country code of the audience the podcasts are popular with, from listennotes_list_regions. Defaults to us. A podcast popular in a country may be produced elsewhere. Example: gb.
- `safe_mode` (`integer`, optional): Set to 1 to exclude podcasts with explicit language; 0 (the default) keeps them. One of: `0`, `1`.
- `sort` (`string`, optional): Sort order: recent_added_first (the default), oldest_added_first, recent_published_first, oldest_published_first, or listen_score for popularity. One of: `recent_added_first`, `oldest_added_first`, `recent_published_first`, `oldest_published_first`, `listen_score`.

Example input: `{}`

### `listennotes_list_curated_lists`

List Curated Podcast Lists · Read-only

List curated podcast lists gathered from online media, newest first. New lists are added daily.
Returns total, page_number, has_next, next_page_number and curated_lists: id, title, description, source_url, source_domain, pub_date_ms, total and up to 5 sample podcasts each.
Use listennotes_list_curated_lists to browse lists. Use listennotes_get_curated_list for every podcast in one list, and listennotes_search with type curated to find lists by keyword.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of curated lists. Starts at 1 (the default). Use next_page_number from the previous response. Example: 2.

Example input: `{}`

### `listennotes_list_genres`

List Genres · Read-only

List the podcast genres Listen Notes supports.
Returns genres: id, name and parent_id for each genre.
Use listennotes_list_genres to look up the genre IDs that listennotes_search (genre_ids) and listennotes_list_best_podcasts (genre_id) take. The list rarely changes, so it can be cached.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `top_level_only` (`integer`, optional): Set to 1 to list only top-level genres; 0 (the default) lists all genres, including sub-genres. One of: `0`, `1`.

Example input: `{}`

### `listennotes_list_languages`

List Languages · Read-only

List the podcast languages in the Listen Notes database.
Returns languages: an array of language names, such as English or Japanese.
Use listennotes_list_languages to look up the language values that listennotes_search and listennotes_list_best_podcasts take.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `listennotes_list_playlists`

List Playlists · Read-only

List the playlists the API account owns or is a member of (Listen Later playlists on listennotes.com).
Returns total, page_number, has_next, next_page_number and playlists: id, name, description, visibility, type (episode_list or podcast_list), episode_count, podcast_count and listennotes_url.
Use listennotes_list_playlists to find playlist IDs. Use listennotes_get_playlist for the episodes or podcasts in one playlist.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of playlists. Starts at 1 (the default). Use next_page_number from the previous response. Example: 2.
- `sort` (`string`, optional): Sort order: recent_added_first (the default), oldest_added_first, name_a_to_z or name_z_to_a. One of: `recent_added_first`, `oldest_added_first`, `name_a_to_z`, `name_z_to_a`.

Example input: `{}`

### `listennotes_list_podcasts_by_domain`

List Podcasts by Publisher Domain · Read-only

List the podcasts published under a website domain, such as nytimes.com, wondery.com or npr.org, 10 per page.
Returns page_number, has_next, next_page_number and podcasts: id, title, publisher, description, website, total_episodes, listen_score and other metadata.
Use listennotes_list_podcasts_by_domain to find all shows from one publisher. Use listennotes_search to find podcasts by keyword.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain_name` (`string`, required): The publisher's domain name, without https:// or a path. Example: nytimes.com.
- `page` (`integer`, optional): Page number of podcasts. Starts at 1 (the default). Use next_page_number from the previous response. Example: 2.

Example input: `{"domain_name":"<domain_name>"}`

### `listennotes_list_regions`

List Regions · Read-only

List the countries and regions Listen Notes supports.
Returns regions: a map of country code (for example us, gb) to country name.
Use listennotes_list_regions to look up the region codes that listennotes_search and listennotes_list_best_podcasts take.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `listennotes_list_related_searches`

List Related Searches · Read-only

Suggest search terms related to a query. Needs a PRO or ENTERPRISE plan.
Returns terms: an array of related search strings, more than listennotes_typeahead gives.
Use listennotes_list_related_searches to broaden or explore a topic. Use listennotes_typeahead for autocomplete, and listennotes_spellcheck to fix typos.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Search term, such as a person, place or topic. Example: evergrande.

Example input: `{"q":"<q>"}`

### `listennotes_list_trending_searches`

List Trending Searches · Read-only

List up to 10 search terms currently trending on Listen Notes.
Returns terms: an array of search strings.
Use listennotes_list_trending_searches for what people are searching now. Use listennotes_list_related_searches for terms related to a query you have.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `listennotes_search`

Search Podcasts and Episodes · Read-only

Run a full-text search across podcast episodes, podcasts or curated podcast lists, with filters for genre, language, region, audio length, publish date and specific podcasts.
Returns total, count, next_offset and results: episodes (id, title, description, audio URL, length, pub_date_ms, parent podcast), podcasts (id, title, publisher, total_episodes, listen_score) or curated lists. Matches are highlighted in the *_highlighted fields. The FREE plan returns at most 30 results per query (offset below 30); PRO allows 300.
Use listennotes_search for keyword or topic search. Use listennotes_search_episode_titles to find one episode by its exact title, and listennotes_typeahead for autocomplete suggestions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Search term, such as a person, place or topic. Wrap it in double quotes for an exact-phrase match; otherwise matching is fuzzy. Example: star wars.
- `episode_count_max` (`integer`, optional): Maximum number of episodes a podcast may have. Applies only when type is podcast. Example: 500.
- `episode_count_min` (`integer`, optional): Minimum number of episodes a podcast must have. Applies only when type is podcast. Example: 50.
- `genre_ids` (`string`, optional): Comma-separated genre IDs to search within; omit for all genres. Get IDs from listennotes_list_genres. Applies to episode and podcast searches. Example: 68,82.
- `interviews_only` (`integer`, optional): Set to 1 to return only podcasts that have guest interviews. Applies only when type is podcast. Needs a PRO or ENTERPRISE plan. One of: `0`, `1`.
- `language` (`string`, optional): Only return results in this language, by name as listed by listennotes_list_languages. Applies to episode and podcast searches. Example: English.
- `len_max` (`integer`, optional): Maximum audio length in minutes. For type episode it filters episode length; for type podcast it filters the podcast's average episode length. Example: 30.
- `len_min` (`integer`, optional): Minimum audio length in minutes. For type episode it filters episode length; for type podcast it filters the podcast's average episode length. Example: 10.
- `ncid` (`string`, optional): Comma-separated podcast IDs (up to 5) to exclude from episode results. Applies only when type is episode. Example: 25212ac3c53240a880dd5032e547047b.
- `ocid` (`string`, optional): Comma-separated podcast IDs (up to 5) to limit episode results to. Applies only when type is episode. Example: 4d3fe717742d4963a85562e9f84d8c79.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Pass next_offset from the previous response. FREE plans can page only up to offset 29, PRO up to 299. Example: 10.
- `only_in` (`string`, optional): Comma-separated fields to search in: any of title, description, author and audio. Omit to search all fields. Use title,author for better podcast-name matches. Example: title,description.
- `page_size` (`integer`, optional): Number of results per page, from 1 to 10. The API default is 10. Example: 5.
- `published_after` (`integer`, optional): Only return items published after this time, as a Unix timestamp in milliseconds. Must be earlier than published_before when both are set. Example: 1580172454000.
- `published_before` (`integer`, optional): Only return items published before this time, as a Unix timestamp in milliseconds. Must be later than published_after when both are set. Example: 1700000000000.
- `region` (`string`, optional): Only return results from this region, by country code as listed by listennotes_list_regions. Applies to episode and podcast searches. Example: us.
- `safe_mode` (`integer`, optional): Set to 1 to exclude podcasts or episodes with explicit language; 0 (the default) keeps them. One of: `0`, `1`.
- `sort_by_date` (`integer`, optional): Set to 1 to sort by publish date, newest first; 0 (the default) sorts by relevance. One of: `0`, `1`.
- `sponsored_only` (`integer`, optional): Set to 1 to return only podcasts that have sponsors. Applies only when type is podcast. Needs a PRO or ENTERPRISE plan. One of: `0`, `1`.
- `type` (`string`, optional): What to search: episode (the default), podcast, or curated (curated lists of podcasts). One of: `episode`, `podcast`, `curated`.
- `unique_podcasts` (`integer`, optional): Set to 1 to keep only one episode per podcast in the results. Applies only when type is episode. One of: `0`, `1`.
- `update_freq_max` (`integer`, optional): Maximum hours between a podcast's new episodes. For weekly shows use 192 here with update_freq_min 144. Applies only when type is podcast. Example: 192.
- `update_freq_min` (`integer`, optional): Minimum hours between a podcast's new episodes. For weekly shows use 144 here with update_freq_max 192. Applies only when type is podcast. Example: 144.

Example input: `{"q":"<q>"}`

### `listennotes_search_episode_titles`

Search Episode Titles · Read-only

Search episodes by title only, optionally within one podcast identified by its Listen Notes, Apple Podcasts or Spotify ID or its RSS feed URL.
Returns total, count and results: matching episodes with id, title, description, audio URL, length, pub_date_ms and parent podcast.
Use listennotes_search_episode_titles to pin down a specific episode, for example one a user shared from Apple Podcasts or Spotify. Use listennotes_search for topic search across titles, descriptions and transcripts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The episode title to look for. Wrap it in double quotes for an exact match; otherwise matching is fuzzy. Example: Jerusalem Demsas on The Dispossessed.
- `podcast_id` (`string`, optional): Limit results to one podcast. The format depends on podcast_id_type: a Listen Notes ID (cda18f20f1be4ac7b3cce7d0eb168fff), an Apple Podcasts ID (983795625), a Spotify ID (0Z1234tGXD2hVhjFrrhJ7g) or an RSS URL (https://cowenconvos.libsyn.com/rss).
- `podcast_id_type` (`string`, optional): The kind of ID given in podcast_id: listennotes_id (the default), itunes_id (Apple Podcasts), spotify_id or rss. One of: `listennotes_id`, `itunes_id`, `spotify_id`, `rss`.

Example input: `{"q":"<q>"}`

### `listennotes_spellcheck`

Spell Check Search Term · Read-only

Suggest spelling corrections for a search term. Needs a PRO or ENTERPRISE plan.
Returns tokens (each misspelled token with its offset and suggestion) and corrected_text_html, the corrected query with fixes wrapped in <b> tags. An empty tokens array means nothing needed fixing.
Use listennotes_spellcheck when a search returns few or no results. Use listennotes_list_related_searches to explore related topics.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): Search term, such as a person, place or topic. Example: microsft stock.

Example input: `{"q":"<q>"}`

### `listennotes_typeahead`

Typeahead Suggestions · Read-only

Suggest search terms, and optionally genres and podcasts, for a partial query.
Returns terms (suggested search strings), genres (id, name, parent_id) when show_genres is 1, and up to 5 podcasts (id, title, publisher, image) when show_podcasts is 1.
Use listennotes_typeahead for autocomplete as a user types. Use listennotes_list_related_searches for a broader list of related terms, and listennotes_search for full results.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `q` (`string`, required): The partial search term to complete. With show_podcasts set to 1 you can also pass an Apple Podcasts (iTunes) ID to look up that podcast. Example: star wars.
- `safe_mode` (`integer`, optional): Set to 1 to exclude podcasts with explicit language from the podcast suggestions. Applies only when show_podcasts is 1. One of: `0`, `1`.
- `show_genres` (`integer`, optional): Set to 1 to also suggest matching genres; 0 (the default) leaves them out. One of: `0`, `1`.
- `show_podcasts` (`integer`, optional): Set to 1 to also suggest up to 5 podcasts, matched on title and publisher. Slower, so it is off (0) by default. One of: `0`, `1`.

Example input: `{"q":"<q>"}`

## Related

Other Search connectors ([all 51](/agentkit/connectors/?category=search)):

- [Supadata](/agentkit/connectors/supadata/): Scalekit connector, API key, 21 tools
- [Exa](/agentkit/connectors/exa/): Scalekit connector, API key, 21 tools
- [Brave Search](/agentkit/connectors/brave/): Scalekit connector, API key, 18 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
