All notable changes to this project will be documented here.
The format is based on Keep a Changelog.
- Added a
FetchResulttype alias for fetch results that may containChannelData,VideoTranscript,VideoComments, orDLSnippetobjects. - Added
--transcripts-onlyand--snippets-onlyCLI fetch modes. - Added
FetchOptions.max_concurrent_requestsand the--max-concurrencyCLI option to control transcript request concurrency.
- Improved developer experience with returning empty list objects on some methods instead of
None. - Changed return types and values for
fetch_transcripts,fetch_snippetsandfetch_commentsto improve type hints. - Changed CLI comment flags:
--commentsand--comments-onlynow select the fetch mode, while--max-commentscontrols the number of comments per video. - Exporters,
PreviewRenderer, andchannel_data_to_rows()now accept any supported fetch result shape and normalize it internally. BaseExporternow creates directory for exporter path instead of raising.
- fix: ytfetcher raises an error if output directory could not found in
Exporterclass. - fix: inherit ExporterError from YTFetcherError for better exception hierarchy.
- fix: add newline parameter to file open for consistent line endings in exports.
- Available results are no longer lost when
IpBlockedis raised mid-fetch — collected transcripts are returned instead of raising an exception. - The video ID that triggers
IpBlockedis now correctly added toresult.failedinstead of silently disappearing. _cancel_tasks()no longer marks still-running futures as failed whencancel()returnsFalse— only successfully cancelled queued tasks are logged and counted.
- Added retry logic for
_fetch_singleusingtenacity.
- Changed retryable exceptions.
- Fixed general exceptions hides
video_idinformation. - Fixed ytfetcher retries IPBlocked exceptions which is not ideal.
- Added new exceptions for
_youtube_dlfile and it's classes. - Added new exceptions and improve error handling for
TranscriptFetcher. - Simplified logging by removing custom
logmethod and use built-inloggingfor colorful CLI logs. - Removed
--quietargument from CLI. - Updated
yt-dlpto latest version2026.03.17. - Added
YTFetcher.get_failed_transcripts()to expose structured failures (video_id,reason,message) after fetch calls. - Added explicit transient failure categories used by the retry and caching pipeline for transcript fetching.
- Used
ValidationErrorfrom pydantic instead of using generalExceptionclass. - Transcript fetching now performs an automatic retry pass for transient failures before marking them as final failures.
- Cache behavior now stores only permanent transcript failures, so transient failures can recover in future runs.
- Improved transcript result validation to guarantee successful transcript payloads are present before processing.
- Fixed transcript fetch return typing to consistently return
list[VideoTranscript]andlist[FailedTranscript]tuples.
- Added tab option for both CLI and Python API to fetch from different tabs for a channel. ('videos', 'shorts', 'streams')
- Verbose logging mode via
--verboseCLI flag. - Comprehensive debug and info logs for core operations.
- Updated transcript languages behavior for better UX and less friction.
- Improved log messages and levels for better clarity.
- Refactored filtering logic into a separate method.
- Fixed session resource leak by closing
requests.sessionproperly inTranscriptFetcher. - Improved CLI error handling for graceful exits on exceptions.
- Fix users will be forcing to fetch only english transcripts if they are not set a
languagesparameter. - Fixed possible data loss in
YoutubeDLFetcher.
- Added
convert_to_rowsutility method for convertingChannelDataobjects to Python dict for easily feed data to ML and RAG pipelines. - Added built-in cache strategy for fetching transcripts.
- Added CLI argument for channel fetcher and playlist fetcher;
--allargument now fetches ALL videos from a channel or playlist. - Added necessary tests for
PreviewRendererclass.
- Changed
max_resultsparameter to be optionally None which leads to fetch all videos from a channel if explicitly set. - Removed
timeoutparameter fromHTTPConfigclass. - Removed
httpxlibrary since it is unused.
- Fixed
PreviewRendererfails if metadata values are None.
- Introduced a new
FetchOptionsdata class for defining fetcher options likelanguages,filtersetc. - Added a
--sortargument for choosing top or new comments with CLI. - Added
from_searchmethod for both Python API and CLI. This method allows user to fetch based on aquery, similar to Youtube search. - Added a
--quiettag for CLI. - Added pre-fetch filters for
ytfetcher.
- Removed deprecated
Exporterclass. - No more network requests in init.
YTFetchernow initializes correctBaseYoutubeDLFetcherinside classmethods.TranscriptFetchercreatesSessionper thread for thread safety.TranscripFetchernow returnsVideoTranscriptinstead of returningChannelData.Exporterclass now do not writeNonevalues to file which reduces total file size and noise.- Changed main CLI arguments for easier usage and user experience.
- Python API for
ytfetcheris now completely silent as default. Logs and progress informations are only visible in CLI or by enablingverbosemode. - Changed
ytfetcherto be completely sync.
- Fixed a very critical bug that metadata, transcripts and comments are not aligned.
- Fixed
HTTPConfigclassInvalidHeadercheck. - Fixed VideoListFetcher performance issue with implementing
ThreadPoolExecutor. - Fixed
CommentFetcherdoesn't fetch top comments.
- Added preview mode in CLI for
ytfetcher. It's now default mode and exporting is optional with--format. Also dumping data possible with--stdoutargument in CLI.
- Exporter now optional in CLI if you don't define
--formatargument. - Categorized
ytfetcherarguments for better clarity and user experience.
- Added comment fetching feature. You can now fetch comments alongside with transcript data or fetch comments only.
- Added
Dockerfileanddocker-compose.ymlfor setup docker enviroment.
Exporterchanged to subclasses;JSONExporter,TXTExporterandCSVExporterfor better control over every export option.- Changed some log messages to be more professional and clear.
- Fix KeyError for missing 'url' in yt_dlp entry when fetching by video_ids.
- Added a flag for fetching only manually created transcripts.
- Transcript cleaner method does not clean
>>signs.
- Add
PlaylistFetcherfor CLI and Python API. - Add metadata choosing option for CLI.
- Add
no-timingargument for CLI for not choosing transcript timings. - Full url support for
PlaylistFetcherandChannelFetcher.
- Exporter now exports all available data as default.
- Users now can choose desired language for transcripts.
- Added progressive print statements for
CLI - Added more logging statements for better debug and information.
- (docs) Add documentation for choosing primary transcript language.
- Removed load_env module from
python-dotenvinconfig.__init__since it removed.
- Add progress bar support to from_video_ids method for YoutubeDL.
- Add print arg for allow users to print data to console.
- TranscriptFetcher now cleans transcripts that includes texts like
[Music],[Applause]etc. - Add official documentation website for ytfetcher.
- (docs) Add cli help output to readme.
- Updated package dependencies.
from_video_idsmethod does not work both in CLI and python API.
- Ytfetcher now runs without an api key.
- Added YoutubeDL for fetching video id's and snippets faster and without requiring an API key.
- Removed YoutubeV3 class since YoutubeDL is simpler and faster.
- Changed readme accordingly based on last changes.
- Add instructions to docs for how to find channel_handle and change
channel_nameargs with<CHANNEL_HANDLE>for better clarity. - Add quick usage section in README.
- Users now can save their api keys with
ytfetcher config <API_KEY>once and use it globally without writing everytime while using CLI.
- Add filename support for exporing data in CLI.
- Add thumbnail details to ChannelData Export.
- Make thumbnail metadata default.
- Change default timeout to
nullfor HTTPConfig class.
- Add tags and classifiers to pyproject.toml.
- Add issue templates for bug reports and feature requests.
- Add docs for http config in CLI.
- Update youtube-transcript-api 1.1.1 to 1.2.1
- Add Custom
http-timeoutandhttp-headersoptions for CLI.
- Video ids doesn't work with
from_video_idsmethod in CLI.
- HTTPConfig now takes
floatas timeout paramater instead ofhttpx.Timeoutwhich causes unnecessary complexity.
- Initial release: CLI to fetch and export YouTube transcripts
- Update docs for
get_metadatamethod. - Change default httpx.Timeout value to 4.0 to 2.0.