n8n · YouTube Node

YouTube transcript node for n8n —
any URL, every format.

Map any YouTube URL into the YouTube operation and get back a clean transcript. Watch URLs, youtu.be share links, /shorts/, mobile, and live replays all resolve automatically. Need per-line timestamps? Flip Output Format to Raw.

npm n8n-nodes-transcriptmagic
1 credit per call Normalized or Raw output AI agent compatible Resource: Transcript
Supported

What the operation handles.

Every public YouTube URL format resolves automatically — the node parses the video ID internally. No regex node upstream, no URL cleanup. Just point at the URL field from your trigger.

01
Standard videos
youtube.com/watch?v=… — long-form, 30 seconds to multi-hour.
02
YouTube Shorts
youtube.com/shorts/… — vertical short-form. Great for hook analysis and TikTok cross-posting workflows.
03
youtu.be share links
youtu.be/<id> — the format YouTube's share button copies. No URL cleanup needed before the node.
04
Mobile &amp; live replays
m.youtube.com URLs and completed live streams with captions resolve out of the box. Useful for podcast and webinar archives.
Response

Two output modes — pick what your workflow needs.

The default Normalized output is identical-shaped across every platform, so one downstream chain handles YouTube, TikTok, Instagram, and Facebook. Switch to Raw when you need YouTube's per-line timestamps or platform-specific metadata.

Default Output Format: Normalized
{
  "text": "We're no strangers to love...",
  "platform": "youtube",
  "url": "https://youtu.be/dQw4w9WgXcQ",
  "credits": 482
}
Reference {{ $json.text }} downstream. Same shape on every platform.
Optional Output Format: Raw
{
  "transcript": [
    { "start": 0.0,  "end": 2.4,  "text": "We're no strangers to love" },
    { "start": 2.4,  "end": 4.8,  "text": "You know the rules and so do I" }
  ],
  "videoUrls": { ... },
  "language": "en"
}
Per-line segments with start, end, text. Use for chapters, quote-mining, search-by-timestamp.
Workflows

Recipes people actually build.

Each row is a chain of n8n nodes you can recreate in minutes. Bolded nodes are the TranscriptMagic node (Resource: Transcript, Operation: YouTube); the rest are stock n8n blocks (triggers, transformers, destinations).

Blog auto-publisher
RSS (channel feed) → TranscriptMagic: YouTube → OpenAI (rewrite as 800-word post) → WordPress (draft)
Schedules every new upload into your CMS as a draft. Editor reviews, hits publish.
Show notes pipeline
YouTube upload trigger → TranscriptMagic: YouTube → Claude (chapters + pull-quotes + summary) → Notion (new page)
Generates publishable show notes within seconds of an episode going live. Switch the node to Raw output to get per-line timestamps for chapter markers.
Competitor monitor
Cron (daily) → HTTP Request (channel videos) → SplitInBatches → TranscriptMagic: YouTube → Sheets (append row)
Tracks competitor hooks, intros, and CTAs in a sheet you can sort and filter.
Lecture → study guide
Form trigger (paste URL) → TranscriptMagic: YouTube → OpenAI (Q&A + flashcards) → Email (markdown attachment)
Self-serve study tool for a school or course-creator audience. Webhook variant for embedding on a site.
Quote-mining
TranscriptMagic: YouTube (Raw) → Function (regex on segments) → Slack (post matches to #research)
Raw mode returns per-line segments with timestamps. Drop a URL, get every line where a keyword appears posted to your team.
AI agent tool
Chat trigger → AI Agent (with TranscriptMagic: YouTube as a tool) → Reply
The agent decides when to call the node based on URLs in the user's message. No conditional routing needed.
Node config

Four fields, that's it.

Once the TranscriptMagic credential is set, the node has almost nothing to configure — pick the operation, point at the URL, run.

Resource
Transcript
Operation
YouTube
URL
{{ $json.videoUrl }}
Map from the trigger node — webhook payload, RSS item, Sheets row, anything with a URL field.
Credential
TranscriptMagic API
Set once. Stores your sk_live_… key and is reused across every TranscriptMagic node in the workflow.
Options → Output Format (optional)
Normalized · Raw
Defaults to Normalized ({ text, platform, credits, url }). Switch to Raw when you need per-line segments with timestamps or platform-specific metadata fields.
FAQ

Questions people ask.

For anything else, email [email protected] or open an issue on GitHub.

Which YouTube URL formats does the n8n node support?

All public formats: youtube.com/watch?v=<id>, youtu.be/<id> share links, youtube.com/shorts/<id>, m.youtube.com mobile, and completed live replays with captions. Map any of them straight from a previous node — the operation handles URL parsing internally.

What is the difference between Normalized and Raw output?

Normalized (default) returns { text, platform, credits, url } — a flat shape that's identical across YouTube, TikTok, Instagram, and Facebook, so the same downstream nodes work for any platform. Raw returns the upstream API response verbatim — for YouTube that includes the per-line transcript array with start, end, and text for every line, plus videoUrls and language metadata. Switch via Options → Output Format on the node.

How do I get per-line timestamps?

Set Options → Output Format to Raw. The response includes a transcript array where every item has start, end, and text in seconds. Use SplitInBatches on {{ $json.transcript }} to process line-by-line, or filter for keyword matches and post matching timestamps to Slack/Sheets.

How do I extract just the text in n8n?

On the default Normalized output, reference {{ $json.text }} in any downstream node. No parsing needed — that field is the full joined transcript string.

Can the n8n AI agent use this node as a tool?

Yes. Add the TranscriptMagic node alongside the AI Agent node and expose the YouTube operation as a tool. The agent reads URLs from user messages, decides when transcription is needed, and calls the operation on its own — no manual routing.

What about age-restricted or unlisted videos?

Unlisted works as long as your workflow has the full URL. Age-restricted videos that require sign-in to view are not supported — only publicly viewable captions can be fetched. Private videos are out by definition.

How fast is each call, and what is the rate limit?

A few seconds for most videos under an hour, slightly longer for multi-hour streams. Cached results return faster on repeat calls. The API rate limit is 120 requests/minute per key — for batch workflows, use SplitInBatches with a small batch size (4–8) so you stay under it comfortably.

How do I handle errors in the workflow?

In the node settings, set On Error → Continue (using error output). Pipe the error branch to a Slack/email notifier or a retry loop. Common errors are 4xx (private/deleted video, captions disabled by uploader) — those are not transient, so retrying won't help. Use the error output to log and move on.

Should I use this n8n node or the YouTube transcript REST API directly?

If your workflow lives in n8n, use the node — you skip credential management, URL parsing, error retries, and JSON shaping. If you are calling from your own code, use the YouTube transcript REST API instead. Same backend, same credits.

Related

Other ways to get YouTube transcripts.

Build the workflow — under ten minutes.

Free credits on signup. The same key powers every TranscriptMagic node, the MCP server, the REST API, and the web app.

Dashboard Pricing API MCP Get Extension
User