{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Shorts, TikTok & Reels Transcript Scraper",
    "description": "One run for all three platforms: YouTube Shorts, TikTok and Instagram Reels turned into text — transcript with timestamps, on-screen captions and the first-3-second hook. Shorts use YouTube's own captions, so they cost less. Links or whole profiles, no login.",
    "version": "0.1",
    "x-build-id": "8aIHzwdQnsD8pU1ap"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~tiktok-reels-shorts-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-tiktok-reels-shorts-transcript-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/lergassy~tiktok-reels-shorts-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-tiktok-reels-shorts-transcript-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/lergassy~tiktok-reels-shorts-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-tiktok-reels-shorts-transcript-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",
        "properties": {
          "videoUrls": {
            "title": "🔗 TikTok, Reels or Shorts URLs",
            "type": "array",
            "description": "Add one or more public video URLs — TikTok (tiktok.com/@user/video/...), Instagram Reels (instagram.com/reel/...) and YouTube Shorts. A profile link pasted here is understood too. No login or cookies needed.",
            "default": [
              "https://www.tiktok.com/@duolingo/video/7683994892506270989"
            ],
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "👤 Whole profiles",
            "type": "array",
            "description": "Give a TikTok handle (@duolingo), a TikTok profile link or a YouTube channel, and the Actor takes its latest videos — no need to collect links by hand. Instagram profiles need a login and are not supported; paste Reel URLs above instead.",
            "items": {
              "type": "string"
            }
          },
          "resultsLimitPerProfile": {
            "title": "🔢 Videos per profile",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many of the newest videos to take from each profile.",
            "default": 10
          },
          "onlyPostsNewerThan": {
            "title": "📅 Only videos newer than",
            "type": "string",
            "description": "Skip anything published before this date. Leave empty to take the newest videos whatever their date."
          },
          "transcriptionMode": {
            "title": "🎧 Transcription strategy",
            "enum": [
              "ai-only",
              "captions-first",
              "captions-only"
            ],
            "type": "string",
            "description": "Speech recognition is the default and works everywhere. The two caption modes are here for platforms that publish their own subtitles — as of September 2026 TikTok, Instagram and YouTube do not expose them, so leave this on speech recognition unless a run tells you otherwise.",
            "default": "ai-only"
          },
          "includeOnScreenText": {
            "title": "🖼️ Read on-screen text",
            "type": "boolean",
            "description": "Read the text burned into the picture — caption cards, title cards, hard subtitles — and split it from what the author actually says. No other Actor does this. It downloads the video and reads it frame by frame, so it is billed separately and takes several minutes per video. Off by default.",
            "default": false
          },
          "quality": {
            "title": "🎯 Speech recognition quality",
            "enum": [
              "fast",
              "balanced",
              "accurate"
            ],
            "type": "string",
            "description": "Only used when a video has no captions of its own. Fast is enough for clear speech in short video; accurate helps with noise, accents and music.",
            "default": "fast"
          },
          "language": {
            "title": "🗣️ Spoken language",
            "enum": [
              "auto",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "hi",
              "ar",
              "ja",
              "ko",
              "zh",
              "ru",
              "tr",
              "id",
              "vi",
              "th",
              "pl",
              "uk"
            ],
            "type": "string",
            "description": "Leave on Auto unless the video is short and the language is being guessed wrong.",
            "default": "auto"
          },
          "maximumVideoDurationSeconds": {
            "title": "⏳ Maximum video duration, seconds",
            "minimum": 0,
            "maximum": 36000,
            "type": "integer",
            "description": "Videos longer than this are skipped with a free error row, before anything is downloaded. 0 means no limit. Useful when a profile mixes Shorts with hour-long uploads.",
            "default": 0
          },
          "ocrFps": {
            "title": "🖼️ On-screen text sampling",
            "enum": [
              "1",
              "1.5",
              "2",
              "3"
            ],
            "type": "string",
            "description": "How often frames are read when “Read on-screen text” is on. On our labelled test video 1.5 frames per second found every caption card, while 1 lost three of six. Higher values cost more time, not more accuracy.",
            "default": "1.5"
          },
          "includeTranscriptSegments": {
            "title": "⏱️ Include timestamped segments",
            "type": "boolean",
            "description": "Return the transcript as timestamped segments in addition to the plain text. Turn off for a flatter table.",
            "default": true
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}