Open the description under your best evergreen video, the one that still earns views every week, years after upload. It reads exactly as it did on upload day. The link block points at your homepage, or at a campaign that ended last year, or at nothing at all below the timestamps. And the newer video that should be catching this traffic, the one that answers the exact question a viewer has when this one ends, sits one search away with no mention here. The description did its job once, on upload day, and then froze.
Cross-linking a channel is the bulk job that refuses to be uniform. Every description needs a different link, in a different sentence, placed without disturbing the timestamp block or the disclosure line, and the older video of each pair needs the reverse link too. Studio edits one description at a time, and its bulk tool applies one identical text to every selected video, which is the opposite of what this job is. The fix is to treat the channel as a folder: every description a file on your laptop, your AI agent reading all of them, matching videos to each other and to your blog posts, writing both directions of every link, and showing you each change as a diff before anything reaches YouTube.
Your options
YouTube Studio, one video at a time
The pencil icon on the Content page deserves more credit than it gets. You see the full existing description before you save: the timestamps, the disclosure line, the sponsor link from 3 years ago you forgot was there. Nothing else on this page gives you that context for free, and it costs no quota and no money. The cost is arithmetic, and cross-linking makes the arithmetic worse than most bulk jobs, because the text differs per video and every pair needs both directions: video A gets a line about video B, then B needs reopening for its line back to A. A 200-video channel is 400 careful edits. Nobody finishes that in Studio.
Studio's bulk editor
Studio does ship a bulk editor: tick the checkboxes on the Content page, open Edit, choose Description, update. Google's help page confirms descriptions are bulk-editable and stops there; it does not document what the edit does to each video. Guides outside the documentation describe four operations, insert text at the beginning or end, replace the whole description, or remove an exact string, and all four apply the same text to every selected video. For boilerplate that is real value: append the new social links, strip a dead sponsor line channel-wide. For cross-linking it disqualifies itself, because the entire job is per-video text. There is no find and replace, no documented per-video preview, and no documented undo, and a replace-all takes your timestamp blocks and disclosure lines with it. The one set-it-once native feature, upload defaults, sets a description for future uploads only, never for the library you already have.
Scripts on the Data API
A spreadsheet plus the Data API gives you true per-video control: export video IDs and descriptions, write the new text in the sheet, push it back with videos.update. Google even ships an Apps Script sample that calls videos.update. Two documented catches. The call overwrites every field in the parts you send, so a script that resubmits the description but forgets the tags deletes the tags. And each update costs 50 quota units against a default 10,000 per day, which is about 200 videos a day; a 1,000-video channel is a week of runs, and errors spend quota too. The quieter limit: the script applies a mapping, and deciding which video should link to which is still you, row by row. No preview. No undo.
Channel-manager tools
A category of channel dashboards and browser extensions adds what Studio withholds: find and replace across every description, scheduling, templates. For mechanical swaps, the URL that appears on 300 videos, the expired coupon code, they are the right tool and faster than anything else here. But they run on rules, and a rule cannot decide that the 2022 keyboard review should hand its traffic to the 2025 buyer's guide, or write the sentence that earns the click. The trade is access and trust: a third-party app holding edit rights to your channel, applying changes whose preview and undo vary by vendor.
Scratch
Scratch pulls every description on the channel into files on your laptop, one video per file. Your agent reads all of them, not the most recent page, builds an index of what each video covers, scores which ones belong together, and writes a different link sentence into each file, both directions of every pair. If your blog sits in the folder next door, the posts join the same map. Every edit comes back as a word-level diff: the new line highlighted, the timestamps visibly untouched. Only the videos you approve publish back, one at a time, at YouTube's API pace, and any published change reverts per video. The trade is stated plainly: the review is real reading, a few hundred diffs of it, and Scratch will not skim them for you. On purpose.
| Option | Different text per video | Finds the matches | Review before live | Undo after publish |
|---|---|---|---|---|
| Studio, one at a time | Yes, by hand | You do | You are the review | No |
| Studio bulk editor | No, one text for all | No | No per-video preview documented | None documented |
| Script on the Data API | Yes, from your sheet | You do | Only if you build it | No |
| Channel-manager tools | Rules, not judgment | No | Varies | Varies |
| Scratch | Yes, written per video | Yes, your agent reads every video | Every change, as a diff | Per video |
How the loop works on your channel
- Scratch pulls your channel into files. Every video lands as a file in a folder on your laptop, its description in plain text: the timestamp block, the disclosure line, the links you forgot were there. Pull your blog into the folder beside it if you want posts in the map. Nothing on YouTube has changed.
- Your AI builds the link map and writes the edits. Point Claude, Codex, Cursor, or Copilot at the folder with the brief. Index every video by topic. Give each description a Watch next line with the 2 closest videos and the matching blog post, near the top, and do not move the timestamps or the disclosure line. The agent reads every description, scores the matches with a quick script if it wants one, and writes both directions of every link, file by file. It holds no YouTube credential, so it cannot touch the channel.
- You review every diff and publish. Each description appears next to its original, word by word, the new line highlighted, the timestamp block unmoved and visibly so. A validator, if you set one, fails any edit that touched the timestamps before you ever read it. Approve per video, and Scratch writes only those descriptions back through YouTube's API, one approved video at a time, at the API's own pace, with a log of what went out. The agent did 99% of the work; the 1% that decides what your viewers see is this screen. Regret a published change and it reverts, per video.
Start with your 20 most-viewed videos. The views are already arriving; give them somewhere to go.
Three things the new line must not break
The timestamp block. Chapters are not a separate feature; they are plain text in the description, and YouTube's rules are strict: the first stamp must be 0:00, with at least 3 stamps in ascending order. An edit that nudges that block breaks chapters on the player. The diff makes the block's survival visible per video; a validator can make it mandatory.
The disclosure line. YouTube's paid promotion flag is a setting, but if a sponsor agreement requires a written disclosure in the description, that sentence lives in exactly the text you are editing. A replace-all deletes it silently. A reviewed diff does not let anything leave silently.
The fold. Only the first lines of a description show before Show more, and that is the only part most viewers ever see. Where the new link lands matters as much as whether it exists. Put the placement in the brief, then check it in the diff.
Questions people ask
Can YouTube Studio bulk-edit descriptions?
Yes. Select videos on the Content page, open Edit, choose Description, and Studio applies one operation to all of them. Google's documentation confirms the field is bulk-editable but does not describe the behavior; outside guides describe insert, replace-all, and remove operations, each applying identical text to every selected video. Fine for boilerplate. Useless for links that differ per video.
Can Studio's bulk editor add a different link to each video?
No. Every documented and reported operation applies one uniform text to the whole selection. Cross-linking is the opposite shape: 200 videos need 200 different sentences, plus the reverse links. That is why this job needs an agent with judgment, not a paste.
How many descriptions can a Data API script update in a day?
About 200. Each videos.update call costs 50 units against the default 10,000 per day, the allowance resets at midnight Pacific, and failed calls spend from the same budget. A 1,000-video channel is roughly a week of runs, before debugging.
Will a script that edits only the description wipe my tags?
It can. videos.update overwrites every mutable field in the parts you send, so omitting tags from the snippet clears them, and omitting the title makes the call fail. The official documentation says this plainly, and it is the classic first-run surprise. In Scratch the write-back is the connector's job: what ships is the description you approved in the diff.
How does the AI know which videos to link to each other?
It reads all of them. With the channel as files, the agent can build an index of every video's topic, score similarity with a script, check which links already exist, and join against your blog folder for matching posts. Then it applies judgment to the shortlist. An API offers none of that; it offers endpoints.
Will my timestamps and disclosure lines survive?
Yes. And you can verify it instead of trusting it: the brief tells the agent to leave them, the word-level diff shows them unmoved on every video, and an optional validator fails any edit where the timestamp block changed. Three layers, and the last two do not depend on the agent having a good day.
Can I undo a change after it publishes?
Yes. Per video. Scratch keeps every version, so a published description rolls back to the one before it. The native routes are thinner: Studio's bulk editor and the Data API have no documented undo, which is why the cautious version of every script tutorial starts with an export.
Can the AI edit my titles, tags, or thumbnails too?
No. Scratch pulls and writes back YouTube video descriptions; titles, tags, thumbnails, captions, and comments are not supported. If your cleanup needs one of those, tell Curtis what you are trying to do.
Do I need to write code?
No. You install a desktop app, connect the channel, and write the brief in plain English; if the agent wants a script to score which of your videos belong together, it writes that itself. Your part is reading diffs and clicking approve, which is the part that should stay human anyway.
See it on your own channel
The fastest way to judge it is to watch your own descriptions land as files. See it run on your channel →, or download Scratch free and pull your channel this afternoon; reading what your top 20 descriptions currently say is a persuasive 10 minutes.