{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Full Channel Transcripts Scraper",
    "description": "Bulk YouTube channel transcript scraper. Extract subtitles/captions and video + channel metadata from all videos of a channel. Export or push to Notion, Slack & more.",
    "version": "0.1",
    "x-build-id": "IP1Yt6PQ6EGoU7TRa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/techforce.global~youtube-full-channel-transcripts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-techforce.global-youtube-full-channel-transcripts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/techforce.global~youtube-full-channel-transcripts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-techforce.global-youtube-full-channel-transcripts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/techforce.global~youtube-full-channel-transcripts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-techforce.global-youtube-full-channel-transcripts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "channelUrls"
        ],
        "properties": {
          "channelUrls": {
            "title": "Channel URLs",
            "type": "array",
            "description": "One or more YouTube channel URLs. Handle (https://www.youtube.com/@rajshamani), /channel/ID, /c/name, /user/name and full video URLs (the channel is resolved automatically) are all accepted.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxVideos": {
            "title": "Maximum videos",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of videos to scrape per channel. Set to 0 to scrape ALL videos of the channel.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Parallel videos",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many videos to process at the same time. Higher is faster but uses more proxy bandwidth and may increase the chance of rate-limiting. 8-12 is a good balance.",
            "default": 10
          },
          "transcriptLanguages": {
            "title": "Transcript languages",
            "type": "array",
            "description": "Preferred transcript language codes in priority order (e.g. en, hi, es). The scraper tries them in order and falls back to any available transcript (including auto-generated) if none match.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeTranscriptText": {
            "title": "Include full transcript text",
            "type": "boolean",
            "description": "Include the transcript joined into a single plain-text string.",
            "default": true
          },
          "includeTranscriptSegments": {
            "title": "Include timestamped transcript segments",
            "type": "boolean",
            "description": "Include the transcript as an array of {text, start, duration} segments with timestamps.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "YouTube blocks requests from Apify's shared datacenter IPs with a \"Sign in to confirm you're not a bot\" error. Use Apify Proxy with the RESIDENTIAL group to avoid this. Required for reliable scraping.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "cookies": {
            "title": "YouTube cookies (Netscape format)",
            "type": "string",
            "description": "Optional but recommended. Paste cookies exported from a logged-in YouTube session (e.g. via the 'Get cookies.txt LOCALLY' browser extension) in Netscape cookies.txt format. Helps bypass bot-check challenges that proxies alone don't solve."
          },
          "includeChannelName": {
            "title": "Channel Name",
            "type": "boolean",
            "description": "Include the channel name on each video row.",
            "default": true
          },
          "includeChannelId": {
            "title": "Channel ID",
            "type": "boolean",
            "description": "Include the channel ID on each video row.",
            "default": true
          },
          "includeDateText": {
            "title": "Date Text (Video)",
            "type": "boolean",
            "description": "Include the human-readable upload date text.",
            "default": false
          },
          "includeRelativeDateText": {
            "title": "Relative Date Text (Video)",
            "type": "boolean",
            "description": "Include the relative upload date text (e.g. \"2 months ago\").",
            "default": false
          },
          "includeDatePublished": {
            "title": "Date Published (Video)",
            "type": "boolean",
            "description": "Include the ISO publish date of the video.",
            "default": true
          },
          "includeViewCount": {
            "title": "View Count (Video)",
            "type": "boolean",
            "description": "Include the view count of the video.",
            "default": true
          },
          "includeLikes": {
            "title": "Likes (Video)",
            "type": "boolean",
            "description": "Include the like count of the video.",
            "default": false
          },
          "includeComments": {
            "title": "Comments (Video)",
            "type": "boolean",
            "description": "Include the comment count of the video.",
            "default": false
          },
          "includeKeywords": {
            "title": "Keywords (Video)",
            "type": "boolean",
            "description": "Include the video tags/keywords.",
            "default": false
          },
          "includeThumbnail": {
            "title": "Thumbnail (Video)",
            "type": "boolean",
            "description": "Include the video thumbnail URL.",
            "default": false
          },
          "includeDescription": {
            "title": "Description (Video)",
            "type": "boolean",
            "description": "Include the video description.",
            "default": false
          },
          "includeChannelHandle": {
            "title": "Channel Handle",
            "type": "boolean",
            "description": "Extract the channel @handle (extra request).",
            "default": false
          },
          "includeSubscriberCount": {
            "title": "Subscriber Count",
            "type": "boolean",
            "description": "Extract the channel subscriber count (extra request).",
            "default": true
          },
          "includeChannelCreationDate": {
            "title": "Channel Creation Date",
            "type": "boolean",
            "description": "Extract the channel creation/join date (extra request).",
            "default": false
          },
          "includeChannelCountry": {
            "title": "Channel Country",
            "type": "boolean",
            "description": "Extract the channel country (extra request).",
            "default": false
          },
          "includeChannelTotalViewCount": {
            "title": "Channel Total View Count",
            "type": "boolean",
            "description": "Extract the channel's total lifetime view count (extra request).",
            "default": false
          },
          "includeChannelTotalVideoCount": {
            "title": "Channel Total Video Count",
            "type": "boolean",
            "description": "Extract the channel's total number of videos (extra request).",
            "default": false
          },
          "mcpConnector": {
            "title": "Deliver to (MCP connector)",
            "type": "string",
            "description": "Optionally deliver each video's transcript into a connector you have authorized — Notion, Slack, Linear, Airtable, Jira, GitHub, or any MCP-compatible connector. Leave empty to only save the results to the dataset."
          },
          "deliveryMode": {
            "title": "Delivery mode",
            "enum": [
              "summary",
              "chunked",
              "perSegment",
              "none"
            ],
            "type": "string",
            "description": "How to deliver each video to the connector: 'summary' (one call with the full transcript), 'chunked' (split a long transcript across a few calls/pages so services like Notion never time out), 'perSegment' (one call per timestamped transcript segment — requires timestamped segments enabled), or 'none' (save to dataset only).",
            "default": "summary"
          },
          "mcpTool": {
            "title": "Connector tool name",
            "type": "string",
            "description": "Name of the tool to call on the connector (e.g. 'create_page' for Notion, 'send_message' for Slack, 'create_issue' for Jira/GitHub). If unsure, run once with a connector selected — the log lists the connector's available tools.",
            "default": ""
          },
          "mcpArguments": {
            "title": "Connector tool arguments",
            "type": "object",
            "description": "Arguments passed to the connector tool. String values support {placeholders}. Available in every mode: {videoUrl}, {videoId}, {title}, {channelName}, {channelId}, {datePublished}, {viewCount}, {subscriberCount}, {language}, {segmentCount}, {transcript} (full text) and {message} (the rendered template below). In 'chunked' mode {transcript} holds one part and {part}/{partCount} give the 1-based part number and total (e.g. 'Transcript {title} (part {part}/{partCount})'). In 'perSegment' mode also: {start}, {dur}/{duration} and {text}. Example for Slack: {\"channel\": \"#transcripts\", \"text\": \"{message}\"}.",
            "default": {}
          },
          "mcpMessageTemplate": {
            "title": "Message template",
            "type": "string",
            "description": "Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: '{title} ({videoUrl}) — {language}, {segmentCount} segments:\\n\\n{transcript}'. Per-segment example: '[{start}] {text}'.",
            "default": ""
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}