# How to connect YouTube to OpenClaw (no Google Cloud project)

> Connect YouTube to OpenClaw with ClawLink: no Google Cloud project, no OAuth consent screen to publish, no API key in openclaw.json. 47 YouTube tools your agent can call from chat.

Web version: https://claw-link.dev/openclaw/youtube

The usual route to YouTube access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical YouTube setup: install one ClawHub skill, connect YouTube in the browser, and OpenClaw can call real YouTube actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.

**Start here:** install the ClawLink plugin (`openclaw plugins install clawhub:clawlink-plugin`), pair it in the browser, then connect the app in the ClawLink dashboard. The interactive install prompt is on the web version of this page: https://claw-link.dev/openclaw/youtube

## Setup

It takes three steps to connect OpenClaw to YouTube.

1. **Install ClawLink** — add the plugin to OpenClaw once.
2. **Connect YouTube** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask OpenClaw in plain English.

**Alternative for any agent (no plugin needed):** if the OpenClaw plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect youtube  # connect YouTube (browser OAuth)
npx -y @useclawlink/cli actions youtube  # list available actions
npx -y @useclawlink/cli run youtube <action> --input '<json>'  # execute (add --confirm for writes)
```

### Install by command

The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:

```bash
openclaw plugins install clawhub:clawlink-plugin
```

Then ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say `done`. Finally, connect YouTube in the [ClawLink dashboard](https://claw-link.dev/dashboard) — a one-click OAuth approval, no API keys.

Verify the connection by asking OpenClaw:

> Use youtube_search_you_tube once for "\<topic>" with maxResults 25, then call youtube_get_video_details_batch on the returned ids. Give me a table of title, channel, views, and publish date sorted by views. Run exactly one search.

### Using a different agent?

The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

```bash
npx -y @useclawlink/cli login
```

`login` opens the same browser approval and stores a credential locally. Once YouTube is connected in the dashboard, that agent calls the same 47 YouTube tools over MCP. Full setup for MCP clients and shell agents: [connect apps to any AI agent](https://claw-link.dev/learn/connect-apps-to-any-ai-agent).

## YouTube MCP for OpenClaw

Looking for a YouTube MCP server for OpenClaw? ClawLink connects YouTube to OpenClaw and exposes 47 YouTube tools your agent can call over [MCP](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using Hermes instead? The [Hermes YouTube integration](https://claw-link.dev/hermes/youtube) works the same way.

The usual way to give an agent YouTube is to create a Google Cloud project, enable YouTube Data API v3, build an OAuth consent screen, and then discover your app is stuck in testing mode and its refresh token dies after seven days. None of that is about YouTube. ClawLink connects through Google's own consent screen using an app that is already registered, so you sign in, choose the channel, and OpenClaw can call the 47 tools below. The install is `openclaw plugins install clawhub:clawlink-plugin` (or `openclaw plugins install @useclawlink/openclaw-plugin` from npm), then you connect YouTube once in the dashboard and use it from the next message. Search results currently describe a different flow for this page that registers an API key by email and one-time code and writes it into `openclaw.json` — that is a different project, not this one.

## What the OpenClaw YouTube integration can do

47 YouTube tools are ready for OpenClaw once the account is connected. The 30 below are the ones people reach for most; your agent can call all 47.

### 30 of 47 YouTube tools for OpenClaw

| Tool | What it does |
|---|---|
| **Add video to playlist** `youtube_add_video_to_playlist` | Add a video to a YouTube playlist |
| **Create comment reply** `youtube_create_comment_reply` | Reply to a YouTube comment |
| **Create playlist** `youtube_create_playlist` | Create a YouTube playlist |
| **Get channel activities** `youtube_get_channel_activities` | List YouTube channel activities |
| **Get channel statistics** `youtube_get_channel_statistics` | Get YouTube channel statistics |
| **Get video details batch** `youtube_get_video_details_batch` | Get YouTube video metadata |
| **List channel videos** `youtube_list_channel_videos` | List YouTube videos for a channel |
| **List comment threads2** `youtube_list_comment_threads2` | List YouTube comment threads |
| **List comments** `youtube_list_comments` | List YouTube comments |
| **List user playlists** `youtube_list_user_playlists` | List YouTube playlists |
| **Multipart upload video** `youtube_multipart_upload_video` | Upload a large video to YouTube via multipart |
| **Post comment** `youtube_post_comment` | Post a comment on a YouTube video |
| **Rate video** `youtube_rate_video` | Rate a YouTube video |
| **Search you tube** `youtube_search_you_tube` | Search YouTube videos and channels |
| **Subscribe channel** `youtube_subscribe_channel` | Subscribe to a YouTube channel |
| **Unsubscribe channel** `youtube_unsubscribe_channel` | Unsubscribe from a YouTube channel |
| **Update playlist** `youtube_update_playlist` | Update a YouTube playlist |
| **Update video** `youtube_update_video` | Update YouTube video metadata |
| **Upload video** `youtube_upload_video` | Upload a video to YouTube |
| **Get channel ID by handle** `youtube_get_channel_id_by_handle` | Retrieves the YouTube Channel ID for a specific YouTube channel handle |
| **Get video rating** `youtube_get_video_rating` | Retrieves the ratings that the authorized user gave to a list of specified videos |
| **List caption track** `youtube_list_caption_track` | Retrieves a list of caption tracks for a YouTube video |
| **List channel sections** `youtube_list_channel_sections` | Retrieve channel sections from YouTube |
| **List i18n languages** `youtube_list_i18n_languages` | Returns a list of application languages that the YouTube website supports |
| **List i18n regions** `youtube_list_i18n_regions` | Retrieve a list of content regions that the YouTube website supports |
| **List live chat messages** `youtube_list_live_chat_messages` | List live chat messages for a specific chat |
| **List playlist images** `youtube_list_playlist_images` | Retrieve playlist images associated with a specific playlist |
| **List playlist items** `youtube_list_playlist_items` | List videos in a playlist, with pagination support |
| **List super chat events** `youtube_list_super_chat_events` | Lists Super Chat events for a channel, showing supporter purchases during live streams |
| **List user subscriptions** `youtube_list_user_subscriptions` | Retrieves the authenticated user's YouTube channel subscriptions, allowing specification of |

## Example prompts

**Research a topic without burning search quota**

> Use youtube_search_you_tube once for "\<topic>" with maxResults 25, then call youtube_get_video_details_batch on the returned ids. Give me a table of title, channel, views, and publish date sorted by views. Run exactly one search.

**Audit my channel**

> Run youtube_get_channel_statistics for my channel, then youtube_list_channel_videos for the last 50 uploads. Tell me which five have the worst view-to-subscriber ratio and what their titles have in common.

**Upload as private, publish later**

> Upload ~/videos/\<file>.mp4 with youtube_upload_video. Title it "\<title>", write the description from the notes I paste next, and set privacy to private. Give me the video id when it finishes — I will publish it myself.

**Triage recent comments**

> Use youtube_list_comment_threads2 on my newest video, show me the ten most recent comments, and draft a reply to each. Do not post anything until I approve, then use youtube_create_comment_reply.

## How the YouTube tools behave

Argument-level facts from the manifest, plus the quota rules that decide whether a prompt succeeds on the first try.

- **Search has its own daily counter.** Google documents 100 `search.list` calls a day, separate from the 10,000-unit pool. `youtube_search_you_tube` is the only tool that spends it; `youtube_list_channel_videos` and `youtube_get_video_details_batch` draw on the shared pool instead, so channel enumeration is effectively free by comparison.
- **Batch reads exist and most prompts ignore them.** `youtube_get_video_details_batch` takes many video ids in one call. An agent looping one video at a time spends budget it did not need to.
- **`youtube_get_channel_id_by_handle` resolves an @handle to a channel id.** Channel ids are UC-prefixed strings and are not guessable, so this is the discovery step before any channel-scoped call. An agent that invents one gets a not-found or permissions error on a perfectly healthy connection.
- **Two upload tools, same consequence.** `youtube_upload_video` and `youtube_multipart_upload_video` both write to your channel and both count against the documented 100 `videos.insert` calls a day. Both honour whatever privacy value the prompt sets, so say `private` explicitly if you want to review before it is public.
- **Tool names already carry the integration prefix.** They are `youtube_search_you_tube` and `youtube_list_channel_videos`; an agent that adds another prefix produces a `youtube_youtube_*` name that has never existed. That is a naming error, not a missing tool, and the error lists the closest real names.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want YouTube working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Connection flow** | Register a YouTube app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect YouTube through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for YouTube. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| **Agent usability** | You still need to expose the right YouTube actions to the runtime in a format your agent can reliably use. | 47 tools for YouTube are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes YouTube to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect YouTube in the browser, and the 47 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### OpenClaw installed the YouTube skill but can't call the tools
The ClawHub skill teaches OpenClaw about YouTube, but the calls run through the ClawLink plugin and your connected account. Make sure YouTube is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

### Connection succeeds but no tools appear
Reconnect YouTube from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

### "Tool schema not loaded yet" error when calling YouTube tools
YouTube tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every YouTube call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

### YouTube returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

### YouTube returns "quotaExceeded" or "The request cannot be completed because you have exceeded your quota"
First, the disambiguation, because search results for this phrase plus OpenClaw mostly return LLM rate-limit posts: this is YouTube Data API quota, not your OpenClaw or model-provider rate limit. A 429 from your model provider stops the agent mid-thought; this error comes back inside a tool result while the agent is otherwise fine. Reconnecting does not help and neither does waiting a few minutes — Google's quota resets at midnight Pacific Time. Per Google's current documentation a project gets 100 search.list calls, 100 videos.insert calls, and 10,000 units a day for the remaining endpoints, and searching burns its own counter fastest. The fix is to change the shape of the work rather than retry it: search once, keep the ids, then use youtube_get_video_details_batch for many videos in one call and youtube_list_channel_videos to enumerate a channel without touching the search allocation. Note that most guides and AI answers still quote Google's older table, which charged 100 units per search and 1,600 per upload; the numbers here are the ones on Google's getting-started page today.

Ask the agent to diagnose it:

```text
List exactly which YouTube tools you called in the last few minutes and how many times each. Do not call any more YouTube tools until I reply.
```

### YouTube returns 403 "insufficientPermissions" or "Request had insufficient authentication scopes"
On a self-built integration this means your own OAuth client asked for the wrong scopes, and search results answer it with a Google Cloud checklist: add youtube.force-ssl, delete cached tokens, publish the app out of testing mode. On a hosted connection those are not your levers and the cause is usually one of two others. The first is a partial approval: Google's consent screen lets you untick individual permissions, which leaves the connection active but unable to do that class of action, so reads succeed and writes fail. Reconnect and accept the full set. The second is channel scope — the grant is bound to the channel you chose at sign-in, so acting on a different channel returns a permissions error rather than an empty list. There is also one thing you genuinely cannot work around: YouTube supports service accounts only for content owners who manage multiple channels, such as record labels and movie studios, so an ordinary channel has no unattended path and must go through a user consent flow.

Ask the agent to diagnose it:

```text
Run youtube_get_channel_statistics and tell me the exact channel title and id you are connected to. Then run youtube_list_channel_videos and report how many videos you can see. Do not retry the failed call yet.
```

### YouTube worked last week and now every call fails with an expired or revoked token
If you built the integration yourself, check the publishing status of your OAuth consent screen before anything else. Google issues a refresh token that expires after seven days to any Cloud project whose external consent screen is still in Testing, unless the only scopes requested are name, email, and profile — which YouTube's are not. That is why a DIY YouTube agent reliably works for a week and then stops, and the fix is to publish the app, not to re-run the auth flow. On a ClawLink connection there is no consent screen of yours to publish, so this failure shape does not apply; a connection that stops working here is a revoked grant instead, and reconnecting from the dashboard restores it.

### OAuth finished in the browser but the account is still missing
Try reconnecting YouTube and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

### Is there a OpenClaw YouTube integration?
Yes. ClawLink is the fastest way to connect OpenClaw to YouTube: link your YouTube account once in the browser and OpenClaw can call the YouTube API through 47 ready-made tools — no custom code or token handling.

### How do I add YouTube to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink YouTube skill from ClawHub, then you click Connect in the dashboard to authorize YouTube. OpenClaw calls the tools from the next message — no config files or API keys to manage.

### How long does it take to connect YouTube to OpenClaw?
About two minutes. Sign in, click Connect next to YouTube in the dashboard, authenticate, and OpenClaw can use it from the next chat message.

### Why use ClawLink instead of wiring YouTube up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want YouTube working from chat.

### Can OpenClaw upload to my channel without my own Google Cloud project?
Yes, and that is the main reason to use a hosted connection for this provider. Building it yourself means enabling YouTube Data API v3 in a project you own, configuring an OAuth consent screen, and going through Google's verification before anyone outside your own test list can use it — because YouTube's upload and channel-management scopes are sensitive. ClawLink runs the connection through an app that is already registered and verified, so the only screen you see is Google's consent screen asking whether to grant access to your channel. Uploads then run through youtube_upload_video or youtube_multipart_upload_video like any other tool call.

### Does "no API keys" mean OpenClaw does not need a model key either?
No, and this is worth separating because the two get conflated constantly. It means there is no YouTube or Google API key: no key to generate, no client secret, and nothing added to openclaw.json for this integration. Whatever you already use to run OpenClaw itself — a hosted model provider or a local one — is unchanged by connecting YouTube. The two credentials are unrelated, and so are their limits: OpenClaw's own rate limits and your YouTube Data API quota are separate systems that fail in different ways.

### Whose YouTube quota does the agent spend?
Google allocates quota per project. Per Google's current documentation, a project that enables the YouTube Data API gets 100 search.list calls, 100 videos.insert calls, and 10,000 units a day for every other endpoint. Because the connection runs through a shared registered app rather than a project you own, you are not administering that allocation and cannot raise it from your side. In practice the ceiling people hit first is the search call count, since it has its own counter — an agent refining an open-ended question will search several times per answer. Ask it to search once and then work from the returned ids with youtube_get_video_details_batch.

### Does this work with a Brand Account channel?
Yes, but the channel is chosen during the Google sign-in, not afterwards. If your Google login manages more than one channel, Google shows a channel chooser and the grant attaches to whichever one you pick. The symptom of picking wrong is that the agent reports your videos do not exist while the connection itself looks healthy — it is reading a different channel. Reconnect from the dashboard and select the Brand Account on that screen.

### OpenClaw installed the YouTube skill but can't call the tools
The ClawHub skill teaches OpenClaw about YouTube, but the calls run through the ClawLink plugin and your connected account. Make sure YouTube is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

## Related

- [OpenClaw Stack Exchange integration](https://claw-link.dev/openclaw/stack-exchange) — Search and browse questions, answers, and developer knowledge
- [OpenClaw Facebook integration](https://claw-link.dev/openclaw/facebook) — Read Facebook Page posts and engagement
- [Connect Instagram](https://claw-link.dev/openclaw/instagram) — Publish posts and manage media
