I put together a small Make (Integromat) workflow to automatically fetch YouTube transcripts using Apify, and thought it might be useful for others here.
What it does:
- Accepts a YouTube URL via webhook
- Sends it to an Apify actor (YouTube transcript extractor)
- Fetches the dataset output
- Returns structured data (title, video info, transcript, etc.) as a response
Flow breakdown:
- Custom Webhook → receives
videoUrl - Apify Actor (run sync) → extracts transcript
- Fetch Dataset Items → gets results in JSON
- Webhook Response → returns clean structured output
Output example includes:
- video_id
- video_url
- video_title
- published_at
- thumbnail
- full transcript
Why this is useful:
- Plug into AI pipelines (summarization, content repurposing, etc.)
- Automate transcript extraction without dealing with YouTube APIs
- Works well for bulk or real-time processing
json make template:
{
"name": "Integration Webhooks, Apify",
"flow": [
{
"id": 1,
"module": "gateway:CustomWebHook",
"version": 1,
"parameters": {
"hook": 2692381,
"maxResults": 1
},
"mapper": {},
"metadata": {
"designer": {
"x": 0,
"y": 0
},
"restore": {
"parameters": {
"hook": {
"data": {
"editable": "true"
},
"label": "youtube-transcript-extractor-apify"
}
}
},
"parameters": [
{
"name": "hook",
"type": "hook:gateway-webhook",
"label": "Webhook",
"required": true
},
{
"name": "maxResults",
"type": "number",
"label": "Maximum number of results"
}
]
}
},
{
"id": 2,
"module": "apify:runActorNew",
"version": 1,
"parameters": {
"__IMTCONN__": 4429358
},
"mapper": {
"actorId": "bbqmsPr0r519A0ZaV",
"runSync": true,
"actor_search_type": "user",
"inputBodybbqmsPr0r519A0ZaV": "{\n \"videoUrl\": \"{{1.url}}\",\n \"language\": \"en\"\n}"
},
"metadata": {
"designer": {
"x": 300,
"y": 0
},
"restore": {
"expect": {
"memory": {
"mode": "chose",
"label": "Empty"
},
"actorId": {
"mode": "chose",
"label": "YouTube Transcript Scraper- Fast & Accurate (akash9078/youtube-transcript-extractor)"
},
"runSync": {
"mode": "chose"
},
"actor_search_type": {
"label": "Recently used Actors"
}
},
"parameters": {
"__IMTCONN__": {
"data": {
"scoped": "true",
"connection": "apify"
},
"label": "healthy.living (healthyliving.workout@gmail.com)"
}
}
},
"parameters": [
{
"name": "__IMTCONN__",
"type": "account:apify2,apify",
"label": "Connection",
"required": true
}
],
"expect": [
{
"name": "actor_search_type",
"type": "select",
"label": "Search Actors from",
"required": true,
"validate": {
"enum": [
"user",
"store"
]
}
},
{
"name": "runSync",
"type": "boolean",
"label": "Run synchronously",
"required": true
},
{
"name": "build",
"type": "text",
"label": "Build"
},
{
"name": "timeout",
"type": "uinteger",
"label": "Timeout"
},
{
"name": "memory",
"type": "select",
"label": "Memory",
"validate": {
"enum": [
128,
256,
512,
1024,
2048,
4096,
8192,
16384,
32768
]
}
},
{
"name": "actorId",
"type": "select",
"label": "Actor",
"required": true
},
{
"name": "inputBodybbqmsPr0r519A0ZaV",
"type": "text",
"label": "Input JSON",
"required": true
},
{
"name": "maxTotalChargeUsd",
"type": "number",
"label": "Maximum cost per run"
},
{
"name": "maxItems",
"type": "hidden",
"label": "Maximum charged results"
}
]
}
},
{
"id": 6,
"module": "apify:fetchDatasetItems",
"version": 1,
"parameters": {
"__IMTCONN__": 4429358
},
"filter": null,
"mapper": {
"type": "clean",
"limit": "100",
"format": "json",
"datasetId": "{{2.defaultDatasetId}}"
},
"metadata": {
"designer": {
"x": 600,
"y": 0
},
"restore": {
"expect": {
"type": {
"mode": "chose",
"label": "Clean"
},
"format": {
"mode": "chose",
"label": "JSON"
}
},
"parameters": {
"__IMTCONN__": {
"data": {
"scoped": "true",
"connection": "apify"
},
"label": "healthy.living (healthyliving.workout@gmail.com)"
}
}
},
"parameters": [
{
"name": "__IMTCONN__",
"type": "account:apify2,apify",
"label": "Connection",
"required": true
}
],
"expect": [
{
"name": "datasetId",
"type": "text",
"label": "Dataset ID",
"required": true
},
{
"name": "type",
"type": "select",
"label": "Data transformation",
"required": true,
"validate": {
"enum": [
"clean",
"simplified",
"none"
]
}
},
{
"name": "format",
"type": "select",
"label": "Format",
"required": true,
"validate": {
"enum": [
"json",
"csv",
"html",
"xml",
"rss",
"xlsx"
]
}
},
{
"name": "limit",
"type": "uinteger",
"label": "Limit",
"validate": {
"max": 100000,
"min": 1
}
},
{
"name": "offset",
"type": "uinteger",
"label": "Offset",
"validate": {
"min": 0
}
},
{
"name": "fields",
"type": "text",
"label": "Fields"
},
{
"name": "omit",
"type": "text",
"label": "Omit Fields"
}
]
}
},
{
"id": 5,
"module": "gateway:WebhookRespond",
"version": 1,
"parameters": {},
"mapper": {
"body": "video_id: {{6.video_id}}\nvideo_url: {{6.video_url}}\nvideo_title: {{6.video_title}}\npublished_at: {{6.published_at}}\nthumbnail: {{6.thumbnail_max_hd_url}}\ntranscript: {{6.transcript}}",
"status": "200",
"headers": []
},
"metadata": {
"designer": {
"x": 900,
"y": 0
},
"restore": {
"expect": {
"headers": {
"mode": "chose"
}
}
},
"expect": [
{
"name": "status",
"type": "uinteger",
"label": "Status",
"required": true,
"validate": {
"min": 100
}
},
{
"name": "body",
"type": "any",
"label": "Body"
},
{
"name": "headers",
"spec": [
{
"name": "key",
"type": "text",
"label": "Key",
"required": true,
"validate": {
"max": 256
}
},
{
"name": "value",
"type": "text",
"label": "Value",
"required": true,
"validate": {
"max": 4096
}
}
],
"type": "array",
"label": "Custom headers",
"validate": {
"maxItems": 16
}
}
]
}
}
],
"metadata": {
"instant": true,
"version": 1,
"scenario": {
"roundtrips": 1,
"maxErrors": 3,
"autoCommit": true,
"autoCommitTriggerLast": true,
"sequential": false,
"slots": null,
"confidential": false,
"dataloss": false,
"dlq": false,
"freshVariables": false
},
"designer": {
"orphans": []
},
"zone": "us1.make.com",
"notes": []
}
}