YouTube Video to Article avatar

YouTube Video to Article

Under maintenance

Pricing

from $100.00 / 1,000 articles

Go to Apify Store
YouTube Video to Article

YouTube Video to Article

Under maintenance

Transforms YouTube videos into longform blog articles using multimodal LLMs. Extracts video transcripts, interprets content semantically, and synthesizes a coherent longform article.

Pricing

from $100.00 / 1,000 articles

Rating

0.0

(0)

Developer

Hikayat Labs

Hikayat Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

⚠️ ALPHA SOFTWARE — Expect breaking changes, bugs, and evolving features. Report issues →

YouTube Video to Article transforms YouTube videos into longform articles using multimodal AI. It extracts video transcripts, interprets content semantically, and synthesizes a coherent article.

Works best with educational content, talks, interviews, and explainers.

Language support: Only English is supported at the moment. Videos must have English subtitles or transcripts (manual, not auto-generated). Videos in other languages will return a NO_TRANSCRIPT error.

How it works

Three-stage pipeline:

  1. Extract — Invoke YouTube Scraper to fetch video metadata and transcript
  2. Interpret — Semantic analysis of transcript content (key arguments, structure, claims)
  3. Synthesize — Generate a structured article grounded in the source material

Processing takes ~20–40 seconds per video, depending on transcript length.

Cost

Pay-per-event pricing:

EventCost
YouTube extraction (via YouTube Scraper)Billed by that actor — see its pricing
Article synthesis~$0.1 per article

Input

{
"videoUrls": [
{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
{ "url": "https://www.youtube.com/watch?v=abc123" }
],
"synthesisTemplate": "article",
"synthesisGuide": "Write in a neutral journalistic tone",
"includeExtracted": false,
"includeInterpretation": false
}

Parameters

ParameterTypeRequiredDefaultDescription
videoUrlsarrayYouTube video URLs to process. Each item is an object with url (required).
synthesisTemplatestringNo"article"Preset output style. Options: article, newsletter, social_thread, none.
synthesisGuidestringNoCustom instructions for tone, focus, style. Appended to template instructions.
includeExtractedbooleanNofalseInclude raw extraction data (metadata + transcript) in output.
includeInterpretationbooleanNofalseInclude semantic blueprint in output.

Synthesis Templates

Templates provide base instructions for the LLM. synthesisGuide extends or refines them.

TemplateOutput style
articleGeneral purpose — structured with headings, conversational voice
newsletterConcise, scannable, hook intro, call-to-action ending
social_threadPunchy, short paragraphs, engaging hooks — LinkedIn/Twitter style
noneNo template — only custom synthesisGuide (if any) is sent

Output

Each processed video produces one dataset item:

{
"sourceUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Generated Article Title",
"body": "# Markdown article content...",
"wordCount": 1250,
"error": null,
"errorMessage": null
}
FieldDescription
sourceUrlOriginal YouTube video URL
titleGenerated article title (plain text)
bodyFull article body in markdown
wordCountWord count of generated article
errorError code if failed: SCRAPE_FAILED, NO_TRANSCRIPT, INTERPRETATION_FAILED, LLM_ERROR, TIMEOUT, CONFIG_ERROR, INTERNAL_ERROR
errorMessageDetailed error description
extracted(only if includeExtracted: true) Raw video metadata and transcript
interpretation(only if includeInterpretation: true) Semantic blueprint

Failed videos still produce a dataset item with error and errorMessage populated. The actor continues processing remaining URLs.

API Usage

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("actor-id").call(
run_input={
"videoUrls": [{"url": "https://www.youtube.com/watch?v=EXAMPLE"}],
"synthesisTemplate": "article"
}
)
for item in client.dataset(run["defaultDatasetId"]).list_items().items:
print(item["title"], item["wordCount"])
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client
.actor("actor-id")
.call({
videoUrls: [{ url: "https://www.youtube.com/watch?v=EXAMPLE" }],
synthesisTemplate: "article",
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(item.title, item.wordCount);
}
apify call actor-id \
'{"videoUrls":[{"url":"https://www.youtube.com/watch?v=EXAMPLE"}],"synthesisTemplate":"article"}'

FAQ

What videos work best? Educational content, talks, interviews, explainers, and any video with a clear English transcript. Music videos and content without English subtitles won't produce useful results.

What if a video has no English transcript? The actor returns a NO_TRANSCRIPT error for that video and continues processing the rest. Auto-generated subtitles are not used — only manual subtitles are accepted.

Does it support other languages? Not yet. The actor currently only processes English transcripts. Support for additional languages is planned.

Can I customize the output? Yes — use synthesisTemplate for a preset style and synthesisGuide for custom instructions on tone, structure, and focus.

What if a video fails? The actor continues processing remaining URLs. Check error and errorMessage in the output for details.

Can I automate runs? Yes. Use Apify scheduling, webhooks, or the API.

Your Feedback

This is alpha software. Bug reports and feature requests help us improve:

  • 🐛 Create an issue with the run ID, input parameters, and expected vs actual behavior

By Hikayat Labs