Listen Notes API

Podcast search with a number that says who is big

The Listen Notes API returns podcast and episode data from the largest podcast search engine as clean JSON.

no credit card1,000 free credits · instant API key · live in 10 seconds
Missing a Listen Notes endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
L
/listennotes/v1

6 active endpoints, on 0 and 1 credit tiers.

  • POST/listennotes/v1/search
  • POST/listennotes/v1/podcast
  • POST/listennotes/v1/episode
  • POST/listennotes/v1/best_podcasts
  • POST/listennotes/v1/genre
  • POST/listennotes/v1/genres

What Listen Notes endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

1 cr

Search Listen Notes for podcasts by keyword.

required
query
optional

podcast

1 cr

Full detail for one podcast by id (from search) or a Listen Notes podcast URL.

required
optional
id, url

episode

1 cr

Full detail for one episode by id or a Listen Notes episode URL.

required
optional
id, url

best_podcasts

1 cr

The curated 'best podcasts' list for a country, paginated.

required
optional
region, page

genre

1 cr

Browse the best podcasts in a genre, paginated.

required
genre_id
optional
page

genres

0 cr

The complete Listen Notes genre taxonomy.

required
optional

Every parameter, every allowed value →

Listen Notes API

3 of 6 endpoints, ready to run

View docs ↗

Podcasts and episodes matching a query, with the publisher, artwork and the show's identifier.

1 credit1 required · 0 optional
POST/listennotes/v1/search
ok742 ms · 10 records · sample
{
  "ok": true,
  "meta": {
    "api": "listennotes",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 742.4,
    "record_count": 10,
    "cache_hit": false
  },
  "data": {
    "podcasts": [
      {
        "id": "qV3no74EUuF",
        "uuid": "8486bdfbe6fb413c8cabde8b5809663a",
        "title": "Ozarks True Crime",
        "publisher": "editaudio, Anne Roderique-Jones",
        "image": "https://cdn-images-3.listennotes.com/podcasts/ozarks-true-crime-editaudio-anne-roderique-jVATh4_W0LR-qV3no74EUuF.1400x1400.jpg",
        "thumbnail": "https://cdn-images-3.listennotes.com/podcasts/ozarks-true-crime-editaudio-anne-roderique-WZF-nbrDIzX-qV3no74EUuF.300x300.jpg",
        "url": "https://www.listennotes.com/podcasts/ozarks-true-crime-editaudio-anne-roderique-qV3no74EUuF/",
        "is_claimed": false,
        "explicit": false
      },
      {
        "id": "kgW2I7C581u",
        "uuid": "fdfaed63444e42f7839f7450f84633ae",
        "title": "True Crime Germany",
        "publisher": "Christian Finck, Lena Degener, André Hecker, PodRiders Netzwerk",
        "image": "https://cdn-images-3.listennotes.com/podcasts/true-crime-germany-christian-finck-lena-HYKyWLCcip--kgW2I7C581u.1400x1400.jpg",
        "thumbnail": "https://cdn-images-3.listennotes.com/podcasts/true-crime-germany-christian-finck-lena-pE70a3yHNjD-kgW2I7C581u.300x300.jpg",
        "url": "https://www.listennotes.com/podcasts/true-crime-germany-christian-finck-lena-kgW2I7C581u/",
        "is_claimed": false,
        "explicit": false
      },
      {
        "id": "FH8KVmWBpXe",
        "uuid": "a32df098c8af43f5bef41d2cb54b5909",
        "title": "Dying Rose",
        "publisher": "True Crime Australia",
        "image": "https://cdn-images-3.listennotes.com/podcasts/dying-rose-FC38XhBKHTD-FH8KVmWBpXe.1400x1400.jpg",
        "thumbnail": "https://cdn-images-3.listennotes.com/podcasts/dying-rose-gUpT3OrcFS6-FH8KVmWBpXe.300x300.jpg",
        "url": "https://www.listennotes.com/podcasts/dying-rose-true-crime-australia-FH8KVmWBpXe/",
        "is_claimed": false,
        "explicit": false
      }
    ]
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Listen Notes API works

Listen Notes is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 184 engines.

02
Call
POST /listennotes/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Finding shows worth pitching, not just shows that exist

Podcast directories will return five hundred shows on any topic. Almost all of them have no listeners, and nothing in a directory listing tells you which.

01best_podcasts
POST/listennotes/v1/best_podcasts
{"region": "us"}

Ranked shows with a listen score and a global rank band — one we measured sat in the top 0.1 percent, which is a claim you can act on.

02search
POST/listennotes/v1/search
{"query": "your topic"}

Then search within the topic and cross-reference the scores, rather than ranking by whatever order the directory returns.

The listen score is the field that makes this usable for outreach: podcast download numbers are private, and this is the closest public proxy for reach.

request
curl -X POST https://api.reefapi.com/listennotes/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"startup"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "listennotes",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

The three id shapes, and the fields that are not the type you expect

Listen Notes hands out three different identifiers and they are not interchangeable, which is the usual reason a lookup 404s. Two more fields read as numbers and are not. Everything below was measured on live calls: The Daily (xp7nhsmSkX2, 2,961 episodes), The Startup Solution (PD732XsA50q), the full genres taxonomy and the US and Swedish best_podcasts lists.

FieldMeasured shapeWhere it comes from
podcast id11 characters, mixed case, with - and _ in the alphabet: xp7nhsmSkX2, PD732XsA50q, 1dILNU8oAB-every search, best_podcasts and genre row; this is what the podcast action takes
podcast uuid32 lowercase hex, a separate field on the same objectnot the id, and not accepted as one
episode id32 lowercase hex: 27e6e7b37155455bb76ba3a98e66c073latest_episodes[].episode_id inside a podcast response; feed it to the episode action
published (episode)ISO-8601 with an offset: "2026-08-26T02:45:00-07:00"not a unix millisecond timestamp. The offset is Listen Notes' own, so normalize to UTC before sorting across shows.
audio_length / audio_length_sec"00:50:06" and 3006the episode action. The same pair is named duration / duration_sec inside a podcast's latest_episodes, so the field names change between actions.
genre_idsintegers from the 159-entry taxonomy, ids running 68 to 266 and not contiguous93 Business, 127 Technology, 133 Comedy, 134 Music, 135 True Crime, 68 TV & Film, 144 Personal Finance. Call genres for the full list.
listen_score0-100 integer (measured 46, 52, 54, 60), or nullbest_podcasts and genre rows. Null across the whole Swedish list, populated across the US list.
global_ranka STRING band, not a number: "TOP 0.1%", "TOP 0.5%", "TOP 1%"same rows as listen_score, and null wherever listen_score is null
rating / rating_countfloat out of 5 plus a count (The Daily: 4.3 over 121,517 ratings)podcast action only; search rows carry neither
is_claimed / explicitbooleans on search rows (measured: claimed on 1 of 10, explicit on 1 of 10)explicit comes back null rather than false on the podcast detail object
rss / itunes_urlnull on both podcasts measured, with rss_login_required true alongsidepodcast action. Treat the feed URL as usually absent rather than usually present.

Page sizes are small and uneven: search returned 10 podcasts, best_podcasts returned 9 rows for se and 8 for us with has_more true, and genre 93 returned 7. Page until the list comes back empty rather than assuming a fixed page size.

What the ranking is, and what it is not

Measured on searches and the ranked listings.

The listen score is a relative rank, not a download count

Shows carry a score and a global rank band such as top 0.1 percent. Actual download numbers are private to publishers everywhere in this industry; this is a modelled ranking, and it is the best public signal available rather than a measurement.

Shows and episodes are both searchable

You can search for the show or for the episode. Finding the specific episode where a topic was discussed is a different job from finding shows about that topic, and both are supported.

The publisher is on the row

Networks matter in this medium — one publisher frequently owns a dozen shows in a genre. The publisher field is what reveals that the top five results are the same company.

Best-podcast rankings are per region

Ranking is regional, because listening is. A show that dominates one country is frequently absent from another's chart, so a single global list would be misleading.

It is a directory, not the audio

This returns metadata, artwork and feed information — the show and episode records. Transcripts and audio are not part of it; pair it with a transcription step if that is what you need.

What people build with Listen Notes

The jobs this data is most often used for.

6

endpoints

0/1

credits per call

01

Podcast apps call search to power in-app discovery across the full Listen Notes index.

02

Media-monitoring tools search episodes to find every show mentioning a brand or topic.

03

Researchers use best_podcasts and genre to map the top shows in any category.

What Listen Notes data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 184 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/listennotes/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"startup"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/listennotes/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "startup"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Listen Notes.

Get a free key →
Is published a unix timestamp in milliseconds?

No. A live episode lookup returned published as the string "2026-08-26T02:45:00-07:00", ISO-8601 with a UTC offset. A second episode on an unrelated show returned "2025-06-26T00:02:00-07:00", same shape. Parse it as a datetime with offset; do not divide it by 1000 or hand it to a unix-epoch constructor.

Why is global_rank a string like "TOP 0.5%" instead of a rank number?

Because that is what Listen Notes publishes. It is a percentile band, not an ordinal position, so there is no rank 1, 2, 3 to give you. Sort by listen_score, a 0-100 integer, when you need a numeric ordering, and expect ties inside a band: three of five measured US rows shared "TOP 0.5%" at listen scores of 52, 52 and 54.

listen_score and global_rank are null on my results. Is the field broken?

No. Listen Notes only assigns a Listen Score to part of its index, and non-US lists are thin. Measured: every row of best_podcasts for region us carried both fields, and every row for region se carried null for both. Null means unscored, not zero, so drop those rows from a ranking rather than treating them as the worst entries.

I have a podcast uuid. Can I pass it to the podcast action?

No. Three ids coexist and each action takes exactly one of them. The podcast action takes the 11-character id (xp7nhsmSkX2); the 32-hex uuid on the same object is a different identifier and is not a lookup key. The episode action takes a 32-hex episode id, which looks like a uuid but belongs to an episode, not a show. When in doubt, pass the full listennotes.com URL instead, which both actions accept.

What happens if I pass a genre id that does not exist?

You get a clean NOT_FOUND rather than an empty list. genre_id 999999 returned error code NOT_FOUND naming the 404 URL it tried. That distinction matters, because an empty 200 would look like "this genre has no podcasts", which is a different claim. Call genres first: it returned 159 entries with ids from 68 to 266, and the ids are not contiguous, so you cannot iterate a range.

Why do episode descriptions start with a timecode?

Listen Notes prefixes the episode description with the runtime, so the text arrives as "00:50:06 - This summer, the Democratic Socialists...". It is upstream formatting rather than a parsing artifact, and the same prefix appeared on episodes from two unrelated shows. Strip the leading "HH:MM:SS - " before you index the text or feed it to a model; the same number is already there as audio_length_sec.

Why is rss null when the podcast obviously has a feed?

Because Listen Notes puts the raw RSS URL behind its own login for most shows, and the response says so: rss was null on both podcasts measured, with rss_login_required true in the same object, and itunes_url was null alongside it. What you do get is extra_urls, which carried working Spotify, Amazon and Google links plus Twitter and Facebook handles for The Daily.

How many episodes does the podcast action return?

Ten, regardless of how many the show has. The Daily reported total_episodes 2961 and returned 10 rows in latest_episodes; The Startup Solution reported 41 and also returned 10. Those rows carry episode_id, title, audio, duration and duration_sec, which is enough to hand each one to the episode action for the full record including description and publish date.

What is the Listen Notes API?

Listen Notes API is a ReefAPI endpoint group for listen notes It returns live JSON through POST requests under /listennotes/v1.

Is the Listen Notes API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Listen Notes calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Listen Notes login or account?

No login to Listen Notes is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Listen Notes data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Listen Notes API use?

Listen Notes actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Listen Notes from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call listennotes actions with the same key, credit pool and JSON envelope used by normal REST requests.

25 Media, Film & Knowledge APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Listen Notes, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-30.