SFOLN

Catalogue / Documents & media

YouTube Video Summarizer – AI + Transcript

sfoln/youtube-transcript-summary · AI, Videos, Automation On request

Summarize YouTube videos with AI from their captions: a summary in your style, about 8 timestamped chapters, key takeaways, quotes and topics, plus the transcript. $5 per 1,000 transcripts + $8 per 1,000 AI summaries; videos without captions are free.

About

What it does

YouTube Video Summarizer – AI + Transcript turns YouTube links into a ready-to-read summary of each video: a summary in the style you choose (brief, detailed or bullet points), ≈8 timestamped chapters with titles and one-line summaries, key takeaways, up to five verbatim quotes with timestamps, and topic labels. Summaries are generated from the video's own captions, in the language you ask for. Built for researchers, marketers, students, newsletter writers and AI agents that need the gist of long videos without watching them.

Price

Price per delivered record

EventPricePer 1,000Charged for
YouTube transcript
youtube-transcript-retrieved
$0.005$5 / 1,000Charged once per video for which a caption transcript was returned. Videos without captions, missing or blocked videos and failed requests are not charged.
Video summary
youtube-summary
$0.008$8 / 1,000Charged once per video for which the AI summary (summary, chapters, takeaways, quotes, topics) was generated.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~youtube-transcript-summary/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videos":["https://www.youtube.com/watch?v=jNQXAC9IVRw"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/youtube-transcript-summary"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~youtube-transcript-summary/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Summarize https://www.youtube.com/watch?v=jNQXAC9IVRw in bullet points with timestamped chapters and the key takeaways.

Input

Input fields

List YouTube videos. Each video produces one dataset record with its transcript-based summary.

FieldTypeDefaultMeaning
videos *arrayrequiredVideos
YouTube video / Shorts URLs or 11-character video IDs, one per line. Accounts on the Apify free plan can process up to 10 videos per run.
stylestring"brief"Summary style
brief: one short paragraph and 3–5 takeaways; detailed: 200–300 words and 5–10 takeaways; bullet: summary as 5–8 bullet points. One of "brief", "detailed", "bullet".
summaryLanguagestring—Summary language
Language for the summary, chapters and takeaways, e.g. "English" or "es". Empty = the transcript's language.
transcriptLanguagestring—Caption language
Caption track to read, e.g. "en". Empty = the video's original (or auto-generated) track.
includeTranscriptbooleanfalseInclude transcript text
Also return the full transcript as plain text.
summarizebooleantrueSummarize with AI
Turn off to return only transcript statistics (and the transcript with includeTranscript) without the AI summary.
maxVideosinteger500Max videos
Safety cap on how many videos are processed in this run. Range 1–5000.
concurrencyinteger4Concurrency
Videos processed in parallel (1–8). Range 1–8.
Example input
{
  "videos": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The input item this record corresponds to.
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan
chargedbooleanCharged
Whether the record's main event was charged.
chargedEventstring | nullCharged event
Event charged by the runner for this record, if any.
sourcestringSource
Upstream data source.
fetchedAtstringFetched at
ISO timestamp.
warningsarray | nullWarnings
Non-fatal problems (pages not reachable, truncation, budget limits).
errorobject | nullError
{ code, message, provider?, status? } when status is not ok.
videoIdstring | nullVideo ID
11-character YouTube video ID.
urlstring | nullURL
Canonical watch URL.
languagestring | nullCaption language
Caption track language as named by YouTube (e.g. "English").
transcriptWordCountinteger | nullTranscript words
Words in the transcript.
segmentCountinteger | nullCaption segments
Number of timed caption segments.
durationSecsnumber | nullDuration (s, approx.)
End of the last caption segment in seconds.
stylestring | nullStyle
brief | detailed | bullet.
summarystring | nullSummary
AI summary in the requested style.
chaptersarray | nullChapters
≈8 time-based chapters: [{ startSecs, endSecs, title, summary }]; times come from the captions.
keyTakeawaysarray | nullKey takeaways
Key takeaways (3–8 depending on style).
quotesarray | nullQuotes
Up to 5 verbatim quotes: [{ text, startSecs }].
topicsarray | nullTopics
Up to 10 topic labels.
summaryChargedboolean | nullSummary charged
true when youtube-summary was charged for this video.
transcriptTruncatedboolean | nullTranscript truncated
true when the transcript exceeded ≈10,000 tokens and each chapter was summarized from its opening part.
tokensUsedobject | nullTokens used
{ input, output } Mistral tokens for the summary.
transcriptTextstring | nullTranscript text
Full transcript (only with includeTranscript).
hasCaptionsboolean | nullHas captions
false on not_found records without captions.
Example record
{
  "input": "https://youtu.be/bjVIDXPP7Uk",
  "videoId": "bjVIDXPP7Uk",
  "url": "https://www.youtube.com/watch?v=bjVIDXPP7Uk",
  "language": "English",
  "transcriptWordCount": 1840,
  "segmentCount": 214,
  "durationSecs": 412,
  "style": "brief",
  "summary": "The creator revisits backyard bike trails built two years ago, rebuilds the jumps and explains ...",
  "chapters": [
    {
      "startSecs": 0,
      "endSecs": 52,
      "title": "Back at the farm",
      "summary": "Introduction to the trails and the plan for the day."
    },
    {
      "startSecs": 52,
      "endSecs": 103,
      "title": "Rebuilding the first jump",
      "summary": "Digging and shaping the take-off."
    }
  ],
  "keyTakeaways": [
    "Pack the dirt in thin layers",
    "Test jumps at low speed first"
  ],
  "quotes": [
    {
      "text": "the secret is patience and practice",
      "startSecs": 90
    }
  ],
  "topics": [
    "mountain biking",
    "trail building"
  ],
  "summaryCharged": true,
  "transcriptTruncated": false,
  "tokensUsed": {
    "input": 3120,
    "output": 410
  },
  "status": "ok",
  "charged": true,
  "chargedEvent": "youtube-transcript-retrieved",
  "source": "scrapecreators+mistral",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents