YouTube Video to Article
Pricing
from $100.00 / 1,000 articles
YouTube Video to Article
Under maintenanceTransforms 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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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_TRANSCRIPTerror.
How it works
Three-stage pipeline:
- Extract — Invoke YouTube Scraper to fetch video metadata and transcript
- Interpret — Semantic analysis of transcript content (key arguments, structure, claims)
- 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:
| Event | Cost |
|---|---|
| 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
videoUrls | array | ✅ | — | YouTube video URLs to process. Each item is an object with url (required). |
synthesisTemplate | string | No | "article" | Preset output style. Options: article, newsletter, social_thread, none. |
synthesisGuide | string | No | — | Custom instructions for tone, focus, style. Appended to template instructions. |
includeExtracted | boolean | No | false | Include raw extraction data (metadata + transcript) in output. |
includeInterpretation | boolean | No | false | Include semantic blueprint in output. |
Synthesis Templates
Templates provide base instructions for the LLM. synthesisGuide extends or refines them.
| Template | Output style |
|---|---|
article | General purpose — structured with headings, conversational voice |
newsletter | Concise, scannable, hook intro, call-to-action ending |
social_thread | Punchy, short paragraphs, engaging hooks — LinkedIn/Twitter style |
none | No 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}
| Field | Description |
|---|---|
sourceUrl | Original YouTube video URL |
title | Generated article title (plain text) |
body | Full article body in markdown |
wordCount | Word count of generated article |
error | Error code if failed: SCRAPE_FAILED, NO_TRANSCRIPT, INTERPRETATION_FAILED, LLM_ERROR, TIMEOUT, CONFIG_ERROR, INTERNAL_ERROR |
errorMessage | Detailed 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 ApifyClientclient = 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