YouTube Search API
One POST resolves a keyword search into a page of YouTube videos, each with a url the transcript and batch endpoints accept as-is. YouTube is the default platform, and it is the one platform where the search takes filters: upload date, duration, captions only, and sort by relevance or views. type finds channels or playlists instead of videos. No YouTube Data API key, quota or OAuth is involved.
Each page of results is one credit, however many videos it lists; pass next_cursor back as cursor for the next page. Failed requests are free.
On this platform
- upload_date, duration, captions and sort filter and order YouTube video results; type channel or playlist returns a channel_list or playlist_list instead.
- captions true keeps only videos with a caption track, whose transcripts will come from captions rather than audio transcription.
- One page costs 1 credit; pass next_cursor back as cursor for the next page.
/api/v2/transcripts/searchidempotentSearch for videos, channels or playlists
Resolve a keyword search into a paginated list of videos (metadata only). Searches YouTube by default; set platform to search TikTok or Instagram instead. Every video row carries a url the transcript endpoint accepts unchanged, plus duration and publish time where the source provides them. On YouTube, upload_date, duration and captions filter the videos and sort orders them, and type finds channels (data.kind channel_list) or playlists (data.kind playlist_list) instead, whose rows' urls the channel and playlist endpoints accept as-is.
Body parameters
querystringrequiredplatformstring (enum)optionaltype"video" | "channel" | "playlist"optionalupload_date"hour" | "today" | "week" | "month" | "year"optionalduration"short" | "medium" | "long"optionalsort"relevance" | "views"optionalcaptionsbooleanoptionallimitinteger (1–50)optionalcursorstringoptionalRequest example
Responses
{
"ok": true,
"request_id": "req_…",
"data": {
"kind": "video_list",
"source": "search",
"platform": "youtube",
"videos": [
{
"videoId": "Hq3Lz8pVt2K",
"url": "https://www.youtube.com/watch?v=Hq3Lz8pVt2K",
"title": "Transformers, explained step by step",
"duration": 1580,
"channel": "Example Channel",
"publishedAt": "2026-09-08T00:00:00Z",
"stats": {
"plays": 184000
}
}
],
"next_cursor": "eyJvIjoxMH0"
},
"usage": {
"credits_spent": 1,
"balance": 656,
"bytes": 0
}
}Every YouTube endpoint
Frequently asked questions
- Is this the YouTube Data API's search.list?
- No. It is TranscriptFetch's own search endpoint: no Google project, API key, OAuth or daily quota. One page of results costs 1 credit, and every row's url can go straight to the transcript endpoint.
- Which filters does YouTube search support?
- upload_date (hour, today, week, month, year), duration (short, medium, long), captions (true keeps only captioned videos) and sort (relevance or views). These are YouTube-only; TikTok and Instagram search take the query alone.
- Can I search for channels or playlists rather than videos?
- Yes. Send type channel or type playlist. The response's data.kind becomes channel_list or playlist_list, and each row's url is accepted by the channel or playlist endpoint as-is.
- How do I page through results?
- Each response carries data.next_cursor. Send it back as cursor to get the following page; limit sets the page size, up to 50. Stop when next_cursor is null.