YouTube distribution agent
Each finished explainer goes to our YouTube channel twice a week, checked, scheduled and read back, with the day it went live logged where we measure AI answers.
When buyers ask about AI search, AI engines cite YouTube explainers: in our own measurements GPT-6 Sol cited a YouTube video in 24 of its 200 answers. Our video creation agent makes two explainers a week, and until they are on YouTube, with titles and descriptions in the words buyers use, no engine can find them.
Running on our own company since Oct 21, 2026 · YouTube · Risk: Medium. Everything on this page is public; there is nothing to sign in for.
Tasks and outputs
What it takes on
Check it
Checks the files, YouTube’s limits, every number against the facts list, the links, the disclosures and the music licence, then has the content review read the title and description.
Upload and schedule
Uploads the video private through the YouTube Data API with a random publish time that morning, sets the captions and the thumbnail, and reads every field back.
Read back and log
On the next run, confirms the video went public and logs the date in the AI readout’s table of changes.
Who it is for: Teams that make their own explainer videos and want them published on a fixed schedule through the official API, with every number in the description checked against its source and the date each video went live logged where their AI visibility is measured.
How we use it: We built it in October 2026 for ClawWorld’s own YouTube channel. The first video, A01 (AEO vs SEO for a startup), was uploaded on 2026-10-21, private, and scheduled to go public at 9:05 AM US Eastern on 2026-10-22, with a thumbnail the agent made from the video’s opening argument. From 2026-10-23 it runs on Tuesdays and Fridays at 6:30 AM US Eastern: each run takes the oldest finished video that is not on hold and schedules it for a random minute between 9:00 and 12:00 that morning. YouTube’s own documentation disagrees on whether uploads from an unaudited API project are locked private (its reference page changed in October 2026, its help page did not), so every scheduled video is read back after its time.
What every upload is held to
01A video held back for a fact error, or with no render, is never uploaded. Videos marked ready and videos marked as needing review both go out on these checks.
02Every number in the title and description appears in the video’s facts list, every link is one of our pages and opens, and the disclosure lines are in the description.
03The title and description pass the content review before upload; a send-back holds the video.
04Uploads go through the YouTube Data API only. No browser is driven.
05Every video is uploaded private with a publish time at least two hours away, so a person can stop it: one video a run and one a day.
06After its time, every scheduled video is read back. One that stayed private stops further uploads until a person checks.
07A record holds only what YouTube reported back: no local path, no account, no email address.
The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.
Workflow
How a run goes, step by step
Pick a step to see what goes in, what comes out, and where a person is involved.
Step 1 of 6
Read back
Reads every video it scheduled before. Public: recorded as live, and a row goes into the AI readout’s table of changes with the date. Private past its time: withdrawn if a person stopped it, a suspected lock if its schedule is still set.
web/content/youtube-videos.json
Live or withdrawn entries; a row in Workflows/ai-visibility/changes.md
None. A suspected lock is emailed to a person.
Step 2 of 6
Pick
Takes the oldest folder the video creation agent finished, whose run record is in the repository, that is not on YouTube yet and not on the hold list.
The video creation agent’s media folder and the configuration
One video
A person puts a folder on the hold list to keep it back.
Step 3 of 6
Check
Scripts check the files, YouTube’s limits on the title, description and tags, every number in the title and description against the facts list, the links, the disclosure lines and the music licence.
The handoff, the facts list and the files
A pass, or the reasons it waits
None. A hard problem keeps the video off YouTube, and the email says why.
Step 4 of 6
Review
The content review agent lints the title and description, and a separate session judges them with quotes.
The title and description
A row in the review ledger
A send-back holds the video; a person can publish it as it is.
Step 5 of 6
Upload
Uploads the video private with a publish time drawn at random between 9:00 and 12:00 US Eastern, adds the English captions, sets the thumbnail, flags the synthetic narration, and reads every field back.
The video, captions and thumbnail
A scheduled video on YouTube
A person can set it back to Private in Studio before its time.
Step 6 of 6
Record
Writes the registry entry this log is built from, commits it with the review and change rows, deploys the site and emails what went up and when it goes public.
What YouTube reported back
This log and the email
None.
Before you start
What you’ll need to bring
Company material
The videos and their copy from your own video pipeline: the render, captions, thumbnail, title, description and a facts list for the numbers in it.
Source material
One folder per video with a handoff file, which the agent reads and never writes.
Platform account
A YouTube channel, phone verified, and a Google Cloud project with the YouTube Data API enabled and an OAuth client.
Run environment
A machine with Node.js and ffprobe, and Claude Code for the content review. The runs are meant to start from Windows Task Scheduler.
Run log
Recent runs, as they happened
The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.
View the full run logGuides and files
Set it up yourself
The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.
- 01
Runtime
- Node.js 22 for the scripts, with no packages to install, and ffprobe for the file checks.
- Claude Code, only for the content review session the review script starts. The upload itself runs no model.
- 02
Browser setup
- None while it runs. The one-time sign-in (the OAuth consent) and the channel’s phone verification happen by hand, in a browser signed in to the channel.
- 03
Account setup
- A YouTube channel, phone verified so that it can set custom thumbnails.
- A Google Cloud project with the YouTube Data API v3 enabled and an OAuth client. The agent asks for one scope, youtube.force-ssl; the app is not verified by Google, so the consent screen warns once. Each video takes one call in the upload quota and about 500 of the 10,000 daily units, at no charge.
- Amazon SES for the run’s email, optional.
- 04
Configuration
- The publish window and time zone, how many videos a run publishes, the hold list, the statuses that may go out, captions, thumbnail and the synthetic-content flag, in one configuration file.
- The media folder the video creation agent writes, read and never written.
- The refresh token from the sign-in, kept in the user profile and never in the repository.
- 05
First run
- Sign in once and check that the token acts for your channel; the sign-in script refuses a consent given for any other.
- Run the wrapper as a dry run: it checks and reviews the next video and prints the exact upload request, sending nothing.
- Upload one video by hand with a publish time a few hours away, read it back, and watch it go public before you register the schedule.
run.mjs
Script · Node. One run: read back, pick, check, review, upload and record.
check.mjs
Script · Node. The checks before upload: files, limits, numbers against the facts list, links, disclosures and the music licence.
schedule.mjs
Script · Node. The publish time: a random minute in the window, at least two hours away, one video a day.
request.mjs
Script · Node. The exact upload request, and the field-by-field read-back comparison.
api.mjs
Script · Node. The YouTube Data API calls: upload, thumbnail, captions and read-back.
login.mjs
Script · Node. The one-time sign-in. It refuses a consent given for any other channel.
changes-row.mjs
Script · Node. The row a go-live adds to the AI readout’s table of changes.
config.md
Config · Markdown. The publish window, the hold list, the statuses that may go out, captions, thumbnail and the disclosure flag.
run-youtube-distribution.ps1
Scheduler · PowerShell. What the scheduler calls: takes the lock, runs the agent, commits the records, deploys and emails.
Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.
Rather have us run it?
Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.
Good to know
Where it stops and asks for you
- A number in the description is not in the facts list, a link is dead, or a disclosure is missing. The video is not uploaded. The email lists why, once.
- The content review sends the text back. The video waits until a person publishes it as it is or the text is fixed.
- YouTube refuses the upload. The run stops with YouTube’s reason; nothing else is tried.
- A scheduled video is still private past its time. Uploads stop, and a person gets an upload kit by email instead, until someone checks.
- The sign-in no longer works. The run stops and asks for the one-time sign-in again.
Risk notice
What to watch for
- Uploads from an unaudited API project may be locked private. Since October 2026 YouTube’s reference page says they are not; its help page still says they are. Every scheduled video is read back, and one that stays private stops further uploads.
- No person watches a video before it goes out. The checks catch a wrong number, a dead link or a missing disclosure; they do not judge whether a video is good. The reviewer’s scores so far are 6 and 7 out of 10.
- The narration is synthetic and every video follows the same template. YouTube’s spam policy covers mass-produced, repetitive content; two videos a week, each answering a different question with our own data, is the line we keep to.
- The music licence covers YouTube only. The same video posted anywhere else needs its track checked again.
FAQ
Questions about this agent
Why does no person approve each video first?
We decided on 2026-10-20 to publish on the agent’s checks alone. The facts were checked when the video was made, the numbers in the description are checked again here, and the content review reads the text. A person can still stop any video in Studio before its time, and a video held back for a fact error never goes out.
Why the API and not a browser?
YouTube’s terms forbid using the service by automated means beyond what YouTube allows, and the Data API is the route it allows. A browser script would also have to upload a real video every time it was tested.
Why a random minute?
So the videos do not appear at the same minute twice a week. The window, 9:00 to 12:00 US Eastern, is morning for US buyers, and uploading at 6:30 leaves a person time to stop a video.
Why log the go-live date with the AI readout?
Each video answers questions the AI Visibility agent asks every day. Without the date, a change in those readings could not be told apart from the engines drifting.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to usOther agents