YouTube Data API
This page contains the setup guide and reference information for the YouTube Data API source connector.
This connector uses the YouTube Data API v3 to sync data about your YouTube channels, including video details, channel metadata, and comments. For more detailed analytics and reporting data, use the YouTube Analytics connector.
Prerequisites
- One or more YouTube Channel IDs you want to sync data from
- (For Airbyte Open Source) A Google Cloud project with the YouTube Data API v3 enabled, and one of the following authentication methods from that project:
- A Google API Key (public data only)
- OAuth 2.0 credentials (Client ID, Client Secret, and Refresh Token)
Setup guide
Find your YouTube Channel IDs
- Go to YouTube and navigate to the channel you want to sync.
- The Channel ID is in the URL:
https://www.youtube.com/channel/CHANNEL_ID. Channel IDs are 24 characters long and start withUC. A handle URL such ashttps://www.youtube.com/@handleisn't a Channel ID. - Alternatively, you can find it in YouTube Studio under Settings > Channel > Advanced settings.
The connector fails the connection check if any Channel ID doesn't resolve to an existing channel, so verify each ID before you set up the source.
For Airbyte Cloud
- Log into your Airbyte Cloud account.
- Click Sources and then click + New source.
- Select YouTube Data API from the list.
- Enter a name for your source.
- Choose your authentication method:
- For OAuth 2.0: Click Sign in with Google to authenticate your Google account.
- For API Key: Enter your Google API key.
- Enter one or more Channel IDs to sync data from.
- Click Set up source.
For Airbyte Open Source
Create credentials
You can authenticate using either an API Key or OAuth 2.0.
Option A: API Key (simpler setup, public data only)
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Navigate to APIs & Services > Library and enable the YouTube Data API v3.
- Go to APIs & Services > Credentials.
- Click Create Credentials > API key.
- Copy the generated API key.
- (Recommended) Click Restrict key to limit the key's usage to the YouTube Data API v3.
Option B: OAuth 2.0 (required for accessing private data)
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Navigate to APIs & Services > Library and enable the YouTube Data API v3.
- Go to APIs & Services > Credentials.
- Click Create Credentials > OAuth client ID.
- Configure the OAuth consent screen if prompted.
- Copy the Client ID and Client Secret.
- Use these credentials to obtain a refresh token. Refer to Google's OAuth 2.0 documentation for detailed instructions.
Set up the connector
- In Airbyte, go to Sources and click + New source.
- Select YouTube Data API from the list.
- Enter a name for your source.
- Choose your authentication method and enter the required credentials.
- Enter one or more Channel IDs to sync data from.
- Click Set up source.
Supported sync modes
The YouTube Data API source connector supports the following sync modes:
No stream supports incremental sync. Each sync re-reads all data for the configured channels, so the quota behavior described in Limitations and considerations applies to every sync. If you use Full Refresh - Append, video and channels records differ between syncs because YouTube updates their statistics (view, like, comment, and subscriber counts) in place; deduplicate on the primary key in your destination if you only want the latest values.
Supported streams
| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental |
|---|---|---|---|---|
| video | videoId | DefaultPaginator | Yes | No |
| videos | videoId | DefaultPaginator | Yes | No |
| channels | id | DefaultPaginator | Yes | No |
| comments | videoId, id | DefaultPaginator | Yes | No |
| channel_comments | channelId, id | DefaultPaginator | Yes | No |
Stream descriptions
- video: Detailed information about videos from the specified channels, from
videos.list. This stream uses thevideosparent stream to first discover video IDs, then fetches full video details for each. Data includes snippet information (title, description, thumbnails, publish date, tags, category, language settings), content details (duration, dimension, definition, caption availability, region restrictions), statistics (view count, like count, comment count), player information (embed HTML), and status (upload status, privacy status, license, embeddable, made for kids). Each record also includes adatetimefield that the connector sets to the time it fetched the record. It isn't a YouTube timestamp; use it to tell snapshots apart in Full Refresh - Append mode. - videos: The IDs of videos published by the specified channels, discovered with
search.listfiltered totype=video. Each record contains only the search result'sidobject:kind(alwaysyoutube#video) andvideoId, which is the primary key. Thevideoandcommentsstreams use this stream as their parent to identify which videos to fetch. YouTube returns at most 500 results per channel from this search, so channels with more than 500 videos are truncated invideos,video, andcomments. - channels: Information about the specified YouTube channels, from
channels.list. Data includes snippet information (title, description, custom URL, country, thumbnails), content details (related playlists), statistics (subscriber count, view count, video count), branding settings (channel keywords, trailer, default language), topic details (topic categories), status (privacy status, made for kids), localizations, and content owner details. - comments: Comment threads on individual videos from the specified channels, from
commentThreads.listfiltered byvideoId. For each video discovered by thevideosstream, this stream fetches the comment threads. Each record is one thread'ssnippet: the top-level comment is intopLevelComment,totalReplyCountgives the number of replies, and the connector copies the top-level comment's ID into a top-levelidfield to serve as part of the primary key. The replies themselves aren't included in the records. Videos with comments disabled and videos that no longer exist are skipped without failing the sync. - channel_comments: All comment threads related to the specified channels, from
commentThreads.listfiltered byallThreadsRelatedToChannelId. This includes comments on the channel's videos and on the channel page itself, so it provides a broader view of channel engagement than thecommentsstream. Because it doesn't depend on thevideossearch, it isn't subject to the 500-video limit. Records have the same shape ascomments, including the copiedidfield.
Comment records carry publishedAt and updatedAt timestamps only inside the nested topLevelComment.snippet object; there's no top-level timestamp field.
YouTube API Services usage disclosure
This connector uses YouTube API Services to retrieve data from YouTube. By using this connector, you agree to be bound by the YouTube Terms of Service.
YouTube API Services are provided by Google. For information about how Google handles data, review the Google Privacy Policy.
When using OAuth 2.0 authentication, this connector accesses authorized user data. You can revoke the connector's access to your Google account at any time through the Google security settings page. To delete stored data that was previously synced, remove the relevant connection in your Airbyte workspace or delete the data from your configured destination.
Limitations and considerations
Quota and rate limiting
The YouTube Data API enforces a daily quota per Google Cloud project. Google's documented default allocation is 100 search.list calls per day plus 10,000 quota units per day for all other endpoints; channels.list, videos.list, and commentThreads.list each cost 1 unit per request. Google notes that defaults are subject to change, so check the Quotas page for the YouTube Data API in the Google Cloud console to see what applies to your project. If you need more, request a quota extension from Google.
The videos stream, and therefore the video and comments streams that depend on it, uses search.list. Each search request returns up to 50 video IDs, so a project with the default 100-call allocation can enumerate at most about 5,000 videos per day across all channels and syncs that share the project.
The connector also paces its own requests as a burst guard: at most 3 search.list requests per minute, and at most 100 requests per minute combined to the channels, videos, and commentThreads endpoints. A request that would exceed these limits waits for the next free slot rather than failing. If YouTube still returns a quota or rate-limit error (quotaExceeded, dailyLimitExceeded, rateLimitExceeded, userRateLimitExceeded, or HTTP 429), the connector retries with backoff. A sync that exhausts the daily quota fails after the retries run out; run it again after the quota resets.
The connector's pacing applies to each Airbyte source separately, but Google meters quota per Google Cloud project. If several sources use API keys or OAuth clients from the same project, their requests add up against one quota. Use a separate project for each source, or request more quota.
Authentication
- API keys can only access public data. To access private data, you must use OAuth 2.0 authentication.
- When using OAuth 2.0, the connector requests the
youtube.force-sslscope, which provides read and write access to YouTube resources. This scope is required even though the connector only reads data. - When using OAuth 2.0, the connector refreshes the access token and retries if YouTube returns HTTP 401. If the 401 persists, the sync fails with a configuration error; re-authenticate with Google from the source settings. With an API key there's no token to refresh, so a persistent 401 fails the same way.
- The connector fails with a configuration error, rather than retrying, when YouTube reports that the API key is invalid, the token lacks the
youtube.force-sslscope, the YouTube Data API v3 isn't enabled for the project, or a configured Channel ID doesn't exist. Fix the credentials or Channel IDs and run the sync again. - The connector does not support service account authentication because the YouTube Data API does not support this method for most operations.
Data coverage
- The
videosstream returns at most 500 videos per channel because of a YouTubesearch.listlimit. Channels with more videos are truncated invideos,video, andcomments.channelsandchannel_commentsaren't affected. - The
commentsstream skips videos with comments disabled and deleted videos without producing records or errors.
IP allow list
If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.
Reference
Config fields reference
Changelog
Expand to review
| Version | Date | Pull Request | Subject |
|---|---|---|---|
| 1.0.3 | 2026-09-22 | 86891 | Update dependencies |
| 1.0.2 | 2026-09-21 | 86466 | Fix authentication failures (HTTP 401) on channels with many videos: refresh the access token and retry on 401, and shorten API budget windows so syncs no longer wait past the token lifetime |
| 1.0.1 | 2026-09-15 | 86306 | Update dependencies |
| 1.0.0 | 2026-09-10 | 85214 | Breaking: promote connector to certified — declare primary keys and timestamp formats and restrict videos to video results (see the migration guide) |
| 0.0.66 | 2026-09-08 | 85721 | Update dependencies |
| 0.0.65 | 2026-08-18 | 84813 | Update dependencies |
| 0.0.64 | 2026-08-11 | 84181 | Update dependencies |
| 0.0.63 | 2026-08-04 | 83693 | Update dependencies |
| 0.0.62 | 2026-07-28 | 83186 | Update dependencies |
| 0.0.61 | 2026-07-21 | 82663 | Update dependencies |
| 0.0.60 | 2026-07-14 | 82070 | Update dependencies |
| 0.0.59 | 2026-06-30 | 81317 | Update dependencies |
| 0.0.58 | 2026-06-23 | 80730 | Update dependencies |
| 0.0.57 | 2026-06-16 | 80123 | Update dependencies |
| 0.0.56 | 2026-06-09 | 79580 | Update dependencies |
| 0.0.55 | 2026-06-02 | 79000 | Update dependencies |
| 0.0.54 | 2026-04-28 | 77496 | Update dependencies |
| 0.0.53 | 2026-04-21 | 76818 | Update dependencies |
| 0.0.52 | 2026-04-08 | 75185 | Replace connector icon with updated YouTube logo |
| 0.0.51 | 2026-03-17 | 74392 | Migrate to scopes object array format |
| 0.0.50 | 2026-03-17 | 74698 | Update dependencies |
| 0.0.49 | 2026-03-03 | 73914 | Update dependencies |
| 0.0.48 | 2026-02-17 | 73507 | Update dependencies |
| 0.0.47 | 2026-02-10 | 73175 | Update dependencies |
| 0.0.46 | 2026-01-27 | 72066 | Update dependencies |
| 0.0.45 | 2026-01-14 | 70677 | Update dependencies |
| 0.0.44 | 2026-01-05 | 71016 | Fixed schemas |
| 0.0.43 | 2025-12-19 | 70971 | Add acceptance tests |
| 0.0.42 | 2025-12-16 | 69315 | Add OAuth 2.0 support |
| 0.0.41 | 2025-11-25 | 70079 | Update dependencies |
| 0.0.40 | 2025-11-18 | 69532 | Update dependencies |
| 0.0.39 | 2025-10-29 | 68942 | Update dependencies |
| 0.0.38 | 2025-10-21 | 68456 | Update dependencies |
| 0.0.37 | 2025-10-14 | 67987 | Update dependencies |
| 0.0.36 | 2025-10-07 | 67241 | Update dependencies |
| 0.0.35 | 2025-09-30 | 66846 | Update dependencies |
| 0.0.34 | 2025-09-24 | 66475 | Update dependencies |
| 0.0.33 | 2025-09-09 | 65731 | Update dependencies |
| 0.0.32 | 2025-08-24 | 65468 | Update dependencies |
| 0.0.31 | 2025-08-10 | 64863 | Update dependencies |
| 0.0.30 | 2025-08-02 | 64386 | Update dependencies |
| 0.0.29 | 2025-07-26 | 64056 | Update dependencies |
| 0.0.28 | 2025-07-19 | 63640 | Update dependencies |
| 0.0.27 | 2025-07-12 | 63216 | Update dependencies |
| 0.0.26 | 2025-07-05 | 62701 | Update dependencies |
| 0.0.25 | 2025-06-28 | 62233 | Update dependencies |
| 0.0.24 | 2025-06-21 | 61759 | Update dependencies |
| 0.0.23 | 2025-06-15 | 61171 | Update dependencies |
| 0.0.22 | 2025-05-24 | 60786 | Update dependencies |
| 0.0.21 | 2025-05-10 | 59968 | Update dependencies |
| 0.0.20 | 2025-05-04 | 59566 | Update dependencies |
| 0.0.19 | 2025-04-26 | 58930 | Update dependencies |
| 0.0.18 | 2025-04-19 | 58550 | Update dependencies |
| 0.0.17 | 2025-04-13 | 58052 | Update dependencies |
| 0.0.16 | 2025-04-05 | 57379 | Update dependencies |
| 0.0.15 | 2025-03-29 | 56821 | Update dependencies |
| 0.0.14 | 2025-03-22 | 56338 | Update dependencies |
| 0.0.13 | 2025-03-09 | 55664 | Update dependencies |
| 0.0.12 | 2025-03-01 | 55162 | Update dependencies |
| 0.0.11 | 2025-02-23 | 54632 | Update dependencies |
| 0.0.10 | 2025-02-15 | 53087 | Update dependencies |
| 0.0.9 | 2025-01-25 | 52387 | Update dependencies |
| 0.0.8 | 2025-01-18 | 52006 | Update dependencies |
| 0.0.7 | 2025-01-11 | 51380 | Update dependencies |
| 0.0.6 | 2025-01-04 | 50753 | Update dependencies |
| 0.0.5 | 2024-12-21 | 50326 | Update dependencies |
| 0.0.4 | 2024-12-14 | 49756 | Update dependencies |
| 0.0.3 | 2024-12-12 | 49403 | Update dependencies |
| 0.0.2 | 2024-12-11 | 49125 | Starting with this version, the Docker image is now rootless. Please note that this and future versions will not be compatible with Airbyte versions earlier than 0.64 |
| 0.0.1 | 2024-11-08 | Initial release by @bala-ceg via Connector Builder |