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.

Goes inThe oldest finished video in the video creation agent’s folder: the render, captions, thumbnail, title, description and its facts list
Comes outA video on the ClawWorld YouTube channel, scheduled for a random minute between 9:00 and 12:00 US Eastern; a record for this log; a row in the AI readout’s table of changes once it is public; an email
Human stepNone to publish. A person can stop a scheduled video in Studio, hold a video back in the configuration, or publish one the content review sent back
Runs onA machine you control: Node.js and the YouTube Data API, Tuesday and Friday at 6:30 AM US Eastern

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.

A pass, or the reason it waits

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.

A scheduled video

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.

A live video and a change row

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.

Workflows/youtube-distribution/config.mdRules every upload follows

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.

Read from the configuration and the scriptsOne video a run

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.

Goes in

web/content/youtube-videos.json

Comes out

Live or withdrawn entries; a row in Workflows/ai-visibility/changes.md

Where a person steps in

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.

Goes in

The video creation agent’s media folder and the configuration

Comes out

One video

Where a person steps in

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.

Goes in

The handoff, the facts list and the files

Comes out

A pass, or the reasons it waits

Where a person steps in

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.

Goes in

The title and description

Comes out

A row in the review ledger

Where a person steps in

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.

Goes in

The video, captions and thumbnail

Comes out

A scheduled video on YouTube

Where a person steps in

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.

Goes in

What YouTube reported back

Comes out

This log and the email

Where a person steps in

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.

Guides 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.

Open · no account neededNode scripts for the checks, the publish time, the upload request and its read-back, the YouTube API calls, the one-time sign-in, the AI change row and setting a thumbnail afterwards; a configuration file; and the PowerShell wrapper the scheduler calls. Not packaged for public download yet. The setup guide below describes what they do.
Setup guide
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
Files · 9

run.mjs

Script · Node. One run: read back, pick, check, review, upload and record.

Script

check.mjs

Script · Node. The checks before upload: files, limits, numbers against the facts list, links, disclosures and the music licence.

Script

schedule.mjs

Script · Node. The publish time: a random minute in the window, at least two hours away, one video a day.

Script

request.mjs

Script · Node. The exact upload request, and the field-by-field read-back comparison.

Script

api.mjs

Script · Node. The YouTube Data API calls: upload, thumbnail, captions and read-back.

Script

login.mjs

Script · Node. The one-time sign-in. It refuses a consent given for any other channel.

Script

changes-row.mjs

Script · Node. The row a go-live adds to the AI readout’s table of changes.

Script

config.md

Config · Markdown. The publish window, the hold list, the statuses that may go out, captions, thumbnail and the disclosure flag.

Config

run-youtube-distribution.ps1

Scheduler · PowerShell. What the scheduler calls: takes the lock, runs the agent, commits the records, deploys and emails.

Scheduler

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.