{
  "data": {
    "id": "sV6PG2PO8kfbf5pyj",
    "actId": "6pQ65KR9K8cz8V4OA",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-22T07:06:23.029Z",
    "finishedAt": "2026-10-22T07:07:30.178Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 67023,
      "runTimeSecs": 67.023,
      "computeUnits": 0.07447,
      "imageSizeBytes": 1235207680
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"TikTok Transcript Scraper Input\",\n  \"description\": \"Extract TikTok subtitles and transcripts as timestamped segments and plain text. One row per language per video.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"postUrls\": {\n      \"title\": \"Video URLs\",\n      \"type\": \"array\",\n      \"description\": \"TikTok video URLs to process. Full video URLs, @user/photo URLs, short share links, and bare numeric IDs are accepted. Duplicate IDs are processed once.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [\n        \"https://www.tiktok.com/@asapscience/video/7642449638045256978\"\n      ]\n    },\n    \"postIds\": {\n      \"title\": \"Video IDs\",\n      \"type\": \"array\",\n      \"description\": \"Numeric TikTok video IDs as strings, as an alternative to postUrls.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"languages\": {\n      \"title\": \"Languages\",\n      \"type\": \"array\",\n      \"description\": \"Optional language filter. Accepts TikTok codes (eng-US, spa-ES) and ISO/English aliases (en, English, es, Spanish). Listed languages missing from the video are requested as best-effort TikTok translations. Leave empty for every track on the default page.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": []\n    },\n    \"includeAllTranslations\": {\n      \"title\": \"Include All Translations\",\n      \"type\": \"boolean\",\n      \"description\": \"Best-effort: request TikTok's machine translation for every supported target language. Coverage varies by video and this adds up to 20 extra requests per video.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeVtt\": {\n      \"title\": \"Include WebVTT\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the original or generated WebVTT text in each transcript row.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeSrt\": {\n      \"title\": \"Include SRT\",\n      \"type\": \"boolean\",\n      \"description\": \"Include generated SRT subtitles in each transcript row.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"useWhisperFallback\": {\n      \"title\": \"Use Whisper Fallback\",\n      \"type\": \"boolean\",\n      \"description\": \"Transcribe videos with no native captions using local Whisper. Slower and opt-in; detected language is best-effort, especially on short clips.\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": []\n}",
    "readme": "# TikTok Video Subtitle & Transcript Extractor\n\nPull the captions TikTok already has for a public video — automatic speech recognition, the creator's own caption track, and TikTok's machine translations — as timestamped segments and a clean plain-text transcript. Paste a batch of video URLs or IDs and get one row per language, with source flags, available languages, video metadata and optional VTT/SRT output. No account, login, cookies, or proxy setup.\n\n## What this actor does\n\n- Accepts full TikTok video URLs, `@user/photo` URLs, short share links, and bare numeric video IDs; duplicates are processed once\n- Returns one row per language, not one row per raw caption file\n- Reads both WebVTT captions and TikTok's creator-caption JSON format, so manually authored captions are not lost\n- Classifies every track from TikTok's raw labels as automatic, machine-translated, or creator-provided, with `isAutoGenerated`, `isOriginalCaption`, and `isTranslation`\n- Lists `availableLanguages` on every row and keeps the original language first\n- Includes the video's author, caption, publish date, duration, post type, and engagement counts\n- Can request TikTok's machine translations for listed languages (`languages`) or all 20 supported targets (`includeAllTranslations`); coverage varies by video and is best-effort\n- Can include ready-to-use `vtt` and `srt` fields\n- Can transcribe videos that have no captions with an optional local Whisper fallback; language detection is best-effort\n- Empty fields are omitted; the dataset never contains nulls, empty strings, or placeholder rows\n\n## Output per transcript row\n\n- `postId` — TikTok video ID\n- `postUrl` — canonical video URL\n- `username` — author's TikTok username\n- `displayName` — author's display name\n- `caption` — video description or caption\n- `createdAt` — publish timestamp (ISO 8601 UTC)\n- `duration` — video duration in seconds\n- `postType` — `video` or `slideshow`\n- `authorId` — TikTok author ID\n- `authorVerified` — whether the author is verified\n- `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount` — engagement counts\n- `languageCode` — TikTok subtitle language code (e.g. `eng-US`, `spa-ES`, `urd-PK`)\n- `languageId` — TikTok's internal language ID\n- `originalLanguageCode` — the video's original spoken-language code (e.g. `en`, `ur`, `my`)\n- `availableLanguages` — every subtitle language obtained for the video\n- `subtitleFormat` — `webvtt`, `creator_caption`, or `whisper_asr`\n- `source` — raw source code: `ASR`, `MT`, `LC`, `MU`, or `Whisper`\n- `sourceType` — `automatic`, `machine_translation`, `creator`, or `unknown`\n- `isAutoGenerated`, `isOriginalCaption`, `isTranslation` — TikTok's flags, copied per track\n- `version`, `variant` — TikTok's subtitle version and variant labels\n- `subtitleUrl` — direct signed subtitle file URL (expires)\n- `subtitleUrlExpiresAt` — expiry of that URL (ISO 8601 UTC)\n- `segments` — `[{ \"start\": 0.0, \"end\": 2.5, \"text\": \"...\" }, ...]` with seconds\n- `segmentCount` — number of cues\n- `transcript` — full joined plain-text transcript\n- `transcriptDuration` — end time of the last cue in seconds\n- `wordCount` — approximate whitespace-delimited word count\n- `vtt`, `srt` — optional subtitle files when those toggles are on\n- `scrapedAt` — collection time (ISO 8601 UTC)\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `postUrls` | array of strings | — | TikTok video URLs, photo URLs, short share links, or bare IDs. Duplicates are processed once. |\n| `postIds` | array of strings | — | Numeric video IDs as an alternative to `postUrls`. |\n| `languages` | array of strings | – | Languages to keep. Accepts TikTok codes (`eng-US`, `spa-ES`) and ISO/English aliases (`en`, `English`, `es`). Missing languages that TikTok can translate are requested best-effort (20 targets total); other values only filter. A filter that matches nothing yields no row and is reported as `no_transcript`. Empty means every track on the default page. |\n| `includeAllTranslations` | boolean | `false` | Request TikTok's machine translation for every supported target language. Best-effort and slower; not every target exists for every video. |\n| `includeVtt` | boolean | `false` | Include WebVTT text in each row. |\n| `includeSrt` | boolean | `false` | Include generated SRT text in each row. |\n| `useWhisperFallback` | boolean | `false` | Transcribe videos with no native captions using local Whisper. Roughly 1–3 minutes per short video including model load (longer videos add transcription time); detected language is best-effort. |\n\n### Example: all native tracks for a video\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@natgeo/video/7637581966396656909\"]\n}\n```\n\n### Example: manual and translated captions\n\n```json\n{\n  \"postUrls\": [\n    \"https://www.tiktok.com/@asapscience/video/7642449638045256978\",\n    \"https://www.tiktok.com/@blingbeauty85/video/7631960233966832918\"\n  ],\n  \"includeVtt\": true,\n  \"includeSrt\": true\n}\n```\n\n### Example: only Spanish, with a best-effort translation\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@natgeo/video/7637581966396656909\"],\n  \"languages\": [\"es\"]\n}\n```\n\n### Example: every available translation\n\n```json\n{\n  \"postIds\": [\"7631960233966832918\"],\n  \"includeAllTranslations\": true,\n  \"includeVtt\": true\n}\n```\n\n### Example: no-caption video with Whisper\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@_readultery_/video/7544740407691791623\"],\n  \"useWhisperFallback\": true\n}\n```\n\n## Use cases\n\n- **Content repurposing** — turn a batch of TikToks into blog posts, newsletters, or scripts using the transcript field\n- **Multi-language research** — compare the original wording with TikTok's translations across markets\n- **Accessibility and compliance** — archive captions and timed segments for audits or caption-quality reviews\n- **Social listening** — search what creators actually say, beyond the text caption\n- **Translation and dubbing pipelines** — feed timestamped segments into translation or voice tools\n- **Creator research** — collect every video's available languages and caption provenance at scale\n\n## FAQ\n\n**Do I need a TikTok account or cookies?**\nNo. The actor reads public pages and public subtitle files without authentication.\n\n**Why does one video produce more rows than another?**\nOne row is emitted per language obtained. A video with only its original caption produces one row; a video with an original track plus a translation produces two. Slideshows usually have no caption track, and videos without captions produce no rows unless Whisper is enabled. Caption coverage is not universal: in an independent October 2026 sample of 391 public videos across niches, 47.6% had at least one native caption track (51.8% excluding slideshows).\n\n**What is the difference between ASR, MT, LC, and MU?**\n`ASR` is TikTok's automatic speech recognition. `MT` is normally a machine translation. `LC` is TikTok's label on the creator-caption tracks seen in this actor; `MU` is another label TikTok uses on the converted WebVTT twin of those tracks. Because those raw labels are not perfectly documented, use `sourceType`, `isAutoGenerated`, `isOriginalCaption`, and `isTranslation` for filtering. A small number of original-language tracks are labelled `MT` by TikTok (version `whisper_lid`); the actor preserves that raw label, so `isOriginalCaption` can be true on the same row as `isTranslation`. Use `originalLanguageCode`/`languageCode` to identify the original.\n\n**Why do some translations not appear?**\nTikTok does not precompute every target language for every video. The actor requests English and Spanish through TikTok's translation endpoint and a fixed set of 18 more targets by refetching the video with the requested locale. Targets outside that set (for example German or Japanese) are not requested, even if TikTok's player lists them. The actor reports only the languages it actually obtained and never fabricates a track.\n\n**Why is `subtitleUrl` missing or expired?**\nNative subtitle files are signed links that usually expire in about 48 hours. Links returned by TikTok's translation endpoint expire in about 6 hours. `subtitleUrlExpiresAt` gives the exact expiry for each row. The parsed `segments` and `transcript` are stored in the dataset permanently; use `includeVtt` or `includeSrt` if you need a portable file.\n\n**What happens when a video has no captions?**\nNo dataset row is added by default. The run status and the `ERRORS` key-value record report `no_transcript`. If a `languages` filter removes every available track, the video is also reported as `no_transcript`. Enable `useWhisperFallback` to transcribe the audio instead. Other `ERRORS` reasons are `invalid`, `private`, `unavailable`, `blocked`, `fetch_failed`, `parse_failed`, and `translation_unavailable`.\n\n**Does Whisper detect the language reliably?**\nNot always. It is best on clear, longer speech; short or mixed-language clips can be mislabeled. The detected code is reported on the row and should be treated as a hint.\n\n**Can I scrape private, deleted, or region-restricted videos?**\nNo. Those videos do not expose a public video record, so they are reported as unavailable and no row is added.\n\n**How fresh is the data?**\nCaptions, metadata, and translation availability are read when the run executes. A video may gain captions or translations later; run it again to pick them up.\n\n**Is this affiliated with TikTok?**\nNo. This is a third-party actor using publicly available TikTok pages and subtitle files.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "tiktok-video-subtitle-and-transcript-extractor",
      "title": "TikTok Video Subtitle & Transcript Extractor",
      "description": "Extract every TikTok subtitle track — automatic, translated and creator captions — as timestamped segments and plain text. Batch URLs or IDs, optional VTT/SRT and Whisper fallback.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# TikTok Video Subtitle & Transcript Extractor\n\nPull the captions TikTok already has for a public video — automatic speech recognition, the creator's own caption track, and TikTok's machine translations — as timestamped segments and a clean plain-text transcript. Paste a batch of video URLs or IDs and get one row per language, with source flags, available languages, video metadata and optional VTT/SRT output. No account, login, cookies, or proxy setup.\n\n## What this actor does\n\n- Accepts full TikTok video URLs, `@user/photo` URLs, short share links, and bare numeric video IDs; duplicates are processed once\n- Returns one row per language, not one row per raw caption file\n- Reads both WebVTT captions and TikTok's creator-caption JSON format, so manually authored captions are not lost\n- Classifies every track from TikTok's raw labels as automatic, machine-translated, or creator-provided, with `isAutoGenerated`, `isOriginalCaption`, and `isTranslation`\n- Lists `availableLanguages` on every row and keeps the original language first\n- Includes the video's author, caption, publish date, duration, post type, and engagement counts\n- Can request TikTok's machine translations for listed languages (`languages`) or all 20 supported targets (`includeAllTranslations`); coverage varies by video and is best-effort\n- Can include ready-to-use `vtt` and `srt` fields\n- Can transcribe videos that have no captions with an optional local Whisper fallback; language detection is best-effort\n- Empty fields are omitted; the dataset never contains nulls, empty strings, or placeholder rows\n\n## Output per transcript row\n\n- `postId` — TikTok video ID\n- `postUrl` — canonical video URL\n- `username` — author's TikTok username\n- `displayName` — author's display name\n- `caption` — video description or caption\n- `createdAt` — publish timestamp (ISO 8601 UTC)\n- `duration` — video duration in seconds\n- `postType` — `video` or `slideshow`\n- `authorId` — TikTok author ID\n- `authorVerified` — whether the author is verified\n- `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount` — engagement counts\n- `languageCode` — TikTok subtitle language code (e.g. `eng-US`, `spa-ES`, `urd-PK`)\n- `languageId` — TikTok's internal language ID\n- `originalLanguageCode` — the video's original spoken-language code (e.g. `en`, `ur`, `my`)\n- `availableLanguages` — every subtitle language obtained for the video\n- `subtitleFormat` — `webvtt`, `creator_caption`, or `whisper_asr`\n- `source` — raw source code: `ASR`, `MT`, `LC`, `MU`, or `Whisper`\n- `sourceType` — `automatic`, `machine_translation`, `creator`, or `unknown`\n- `isAutoGenerated`, `isOriginalCaption`, `isTranslation` — TikTok's flags, copied per track\n- `version`, `variant` — TikTok's subtitle version and variant labels\n- `subtitleUrl` — direct signed subtitle file URL (expires)\n- `subtitleUrlExpiresAt` — expiry of that URL (ISO 8601 UTC)\n- `segments` — `[{ \"start\": 0.0, \"end\": 2.5, \"text\": \"...\" }, ...]` with seconds\n- `segmentCount` — number of cues\n- `transcript` — full joined plain-text transcript\n- `transcriptDuration` — end time of the last cue in seconds\n- `wordCount` — approximate whitespace-delimited word count\n- `vtt`, `srt` — optional subtitle files when those toggles are on\n- `scrapedAt` — collection time (ISO 8601 UTC)\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `postUrls` | array of strings | — | TikTok video URLs, photo URLs, short share links, or bare IDs. Duplicates are processed once. |\n| `postIds` | array of strings | — | Numeric video IDs as an alternative to `postUrls`. |\n| `languages` | array of strings | – | Languages to keep. Accepts TikTok codes (`eng-US`, `spa-ES`) and ISO/English aliases (`en`, `English`, `es`). Missing languages that TikTok can translate are requested best-effort (20 targets total); other values only filter. A filter that matches nothing yields no row and is reported as `no_transcript`. Empty means every track on the default page. |\n| `includeAllTranslations` | boolean | `false` | Request TikTok's machine translation for every supported target language. Best-effort and slower; not every target exists for every video. |\n| `includeVtt` | boolean | `false` | Include WebVTT text in each row. |\n| `includeSrt` | boolean | `false` | Include generated SRT text in each row. |\n| `useWhisperFallback` | boolean | `false` | Transcribe videos with no native captions using local Whisper. Roughly 1–3 minutes per short video including model load (longer videos add transcription time); detected language is best-effort. |\n\n### Example: all native tracks for a video\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@natgeo/video/7637581966396656909\"]\n}\n```\n\n### Example: manual and translated captions\n\n```json\n{\n  \"postUrls\": [\n    \"https://www.tiktok.com/@asapscience/video/7642449638045256978\",\n    \"https://www.tiktok.com/@blingbeauty85/video/7631960233966832918\"\n  ],\n  \"includeVtt\": true,\n  \"includeSrt\": true\n}\n```\n\n### Example: only Spanish, with a best-effort translation\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@natgeo/video/7637581966396656909\"],\n  \"languages\": [\"es\"]\n}\n```\n\n### Example: every available translation\n\n```json\n{\n  \"postIds\": [\"7631960233966832918\"],\n  \"includeAllTranslations\": true,\n  \"includeVtt\": true\n}\n```\n\n### Example: no-caption video with Whisper\n\n```json\n{\n  \"postUrls\": [\"https://www.tiktok.com/@_readultery_/video/7544740407691791623\"],\n  \"useWhisperFallback\": true\n}\n```\n\n## Use cases\n\n- **Content repurposing** — turn a batch of TikToks into blog posts, newsletters, or scripts using the transcript field\n- **Multi-language research** — compare the original wording with TikTok's translations across markets\n- **Accessibility and compliance** — archive captions and timed segments for audits or caption-quality reviews\n- **Social listening** — search what creators actually say, beyond the text caption\n- **Translation and dubbing pipelines** — feed timestamped segments into translation or voice tools\n- **Creator research** — collect every video's available languages and caption provenance at scale\n\n## FAQ\n\n**Do I need a TikTok account or cookies?**\nNo. The actor reads public pages and public subtitle files without authentication.\n\n**Why does one video produce more rows than another?**\nOne row is emitted per language obtained. A video with only its original caption produces one row; a video with an original track plus a translation produces two. Slideshows usually have no caption track, and videos without captions produce no rows unless Whisper is enabled. Caption coverage is not universal: in an independent October 2026 sample of 391 public videos across niches, 47.6% had at least one native caption track (51.8% excluding slideshows).\n\n**What is the difference between ASR, MT, LC, and MU?**\n`ASR` is TikTok's automatic speech recognition. `MT` is normally a machine translation. `LC` is TikTok's label on the creator-caption tracks seen in this actor; `MU` is another label TikTok uses on the converted WebVTT twin of those tracks. Because those raw labels are not perfectly documented, use `sourceType`, `isAutoGenerated`, `isOriginalCaption`, and `isTranslation` for filtering. A small number of original-language tracks are labelled `MT` by TikTok (version `whisper_lid`); the actor preserves that raw label, so `isOriginalCaption` can be true on the same row as `isTranslation`. Use `originalLanguageCode`/`languageCode` to identify the original.\n\n**Why do some translations not appear?**\nTikTok does not precompute every target language for every video. The actor requests English and Spanish through TikTok's translation endpoint and a fixed set of 18 more targets by refetching the video with the requested locale. Targets outside that set (for example German or Japanese) are not requested, even if TikTok's player lists them. The actor reports only the languages it actually obtained and never fabricates a track.\n\n**Why is `subtitleUrl` missing or expired?**\nNative subtitle files are signed links that usually expire in about 48 hours. Links returned by TikTok's translation endpoint expire in about 6 hours. `subtitleUrlExpiresAt` gives the exact expiry for each row. The parsed `segments` and `transcript` are stored in the dataset permanently; use `includeVtt` or `includeSrt` if you need a portable file.\n\n**What happens when a video has no captions?**\nNo dataset row is added by default. The run status and the `ERRORS` key-value record report `no_transcript`. If a `languages` filter removes every available track, the video is also reported as `no_transcript`. Enable `useWhisperFallback` to transcribe the audio instead. Other `ERRORS` reasons are `invalid`, `private`, `unavailable`, `blocked`, `fetch_failed`, `parse_failed`, and `translation_unavailable`.\n\n**Does Whisper detect the language reliably?**\nNot always. It is best on clear, longer speech; short or mixed-language clips can be mislabeled. The detected code is reported on the row and should be treated as a hint.\n\n**Can I scrape private, deleted, or region-restricted videos?**\nNo. Those videos do not expose a public video record, so they are reported as unavailable and no row is added.\n\n**How fresh is the data?**\nCaptions, metadata, and translation availability are read when the run executes. A video may gain captions or translations later; run it again to pick them up.\n\n**Is this affiliated with TikTok?**\nNo. This is a third-party actor using publicly available TikTok pages and subtitle files.\n",
      "input": {
        "title": "TikTok Transcript Scraper Input",
        "description": "Extract TikTok subtitles and transcripts as timestamped segments and plain text. One row per language per video.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "postUrls": {
            "title": "Video URLs",
            "type": "array",
            "description": "TikTok video URLs to process. Full video URLs, @user/photo URLs, short share links, and bare numeric IDs are accepted. Duplicate IDs are processed once.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": [
              "https://www.tiktok.com/@asapscience/video/7642449638045256978"
            ]
          },
          "postIds": {
            "title": "Video IDs",
            "type": "array",
            "description": "Numeric TikTok video IDs as strings, as an alternative to postUrls.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Optional language filter. Accepts TikTok codes (eng-US, spa-ES) and ISO/English aliases (en, English, es, Spanish). Listed languages missing from the video are requested as best-effort TikTok translations. Leave empty for every track on the default page.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": []
          },
          "includeAllTranslations": {
            "title": "Include All Translations",
            "type": "boolean",
            "description": "Best-effort: request TikTok's machine translation for every supported target language. Coverage varies by video and this adds up to 20 extra requests per video.",
            "default": false,
            "prefill": false
          },
          "includeVtt": {
            "title": "Include WebVTT",
            "type": "boolean",
            "description": "Include the original or generated WebVTT text in each transcript row.",
            "default": false,
            "prefill": false
          },
          "includeSrt": {
            "title": "Include SRT",
            "type": "boolean",
            "description": "Include generated SRT subtitles in each transcript row.",
            "default": false,
            "prefill": false
          },
          "useWhisperFallback": {
            "title": "Use Whisper Fallback",
            "type": "boolean",
            "description": "Transcribe videos with no native captions using local Whisper. Slower and opt-in; detected language is best-effort, especially on short clips.",
            "default": false,
            "prefill": false
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "TikTok Video Subtitle & Transcript Extractor Output",
        "description": "One row per video language with timestamped caption segments, full transcript, source flags, available languages and optional VTT/SRT.",
        "properties": {
          "transcripts": {
            "type": "string",
            "title": "Scraped Transcripts",
            "description": "Dataset containing all transcripts extracted from TikTok videos",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultMemoryMbytes": 1024,
      "minMemoryMbytes": 1024,
      "categories": [
        "SOCIAL_MEDIA"
      ],
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "TikTok Transcripts",
          "fields": {
            "postId": {
              "type": "string",
              "title": "Post ID",
              "description": "Unique TikTok video ID"
            },
            "postUrl": {
              "type": "string",
              "title": "Post URL",
              "description": "Canonical TikTok video URL"
            },
            "username": {
              "type": "string",
              "title": "Username",
              "description": "Author's TikTok username"
            },
            "displayName": {
              "type": "string",
              "title": "Display Name",
              "description": "Author's display name"
            },
            "caption": {
              "type": "string",
              "title": "Caption",
              "description": "Video description or caption"
            },
            "createdAt": {
              "type": "string",
              "title": "Created At",
              "description": "Video publish time (ISO 8601 UTC)"
            },
            "duration": {
              "type": "integer",
              "title": "Duration",
              "description": "Video duration in seconds"
            },
            "postType": {
              "type": "string",
              "title": "Post Type",
              "description": "video or slideshow"
            },
            "authorId": {
              "type": "string",
              "title": "Author ID",
              "description": "TikTok author ID"
            },
            "authorVerified": {
              "type": "boolean",
              "title": "Author Verified",
              "description": "Whether the author is verified"
            },
            "playCount": {
              "type": "integer",
              "title": "Plays",
              "description": "Video play count"
            },
            "likeCount": {
              "type": "integer",
              "title": "Likes",
              "description": "Video like count"
            },
            "commentCount": {
              "type": "integer",
              "title": "Comments",
              "description": "Video comment count"
            },
            "shareCount": {
              "type": "integer",
              "title": "Shares",
              "description": "Video share count"
            },
            "collectCount": {
              "type": "integer",
              "title": "Saves",
              "description": "Video save count"
            },
            "languageCode": {
              "type": "string",
              "title": "Language Code",
              "description": "TikTok subtitle language code (e.g. eng-US, spa-ES)"
            },
            "languageId": {
              "type": "string",
              "title": "Language ID",
              "description": "TikTok internal language ID"
            },
            "subtitleFormat": {
              "type": "string",
              "title": "Subtitle Format",
              "description": "webvtt, creator_caption, whisper_asr"
            },
            "source": {
              "type": "string",
              "title": "Source",
              "description": "Raw source code: ASR, MT, LC, MU or Whisper"
            },
            "sourceType": {
              "type": "string",
              "title": "Source Type",
              "description": "automatic, machine_translation, creator or unknown"
            },
            "isAutoGenerated": {
              "type": "boolean",
              "title": "Automatic",
              "description": "Whether the track is machine-generated"
            },
            "isOriginalCaption": {
              "type": "boolean",
              "title": "Original Caption",
              "description": "Whether the track is the video's original language"
            },
            "isTranslation": {
              "type": "boolean",
              "title": "Translation",
              "description": "Whether the track is a machine translation"
            },
            "availableLanguages": {
              "type": "array",
              "title": "Available Languages",
              "description": "All subtitle language codes obtained for the video"
            },
            "originalLanguageCode": {
              "type": "string",
              "title": "Original Language",
              "description": "TikTok's original spoken-language code (e.g. en, ur, my)"
            },
            "version": {
              "type": "string",
              "title": "Version",
              "description": "TikTok subtitle version string"
            },
            "variant": {
              "type": "string",
              "title": "Variant",
              "description": "TikTok subtitle variant"
            },
            "subtitleUrl": {
              "type": "string",
              "title": "Subtitle URL",
              "description": "Direct signed subtitle file URL (expires in about 48 hours)"
            },
            "subtitleUrlExpiresAt": {
              "type": "string",
              "title": "Subtitle URL Expires At",
              "description": "Expiry of subtitleUrl (ISO 8601 UTC)"
            },
            "segments": {
              "type": "array",
              "title": "Segments",
              "description": "Timestamped subtitle segments",
              "items": {
                "type": "object",
                "properties": {
                  "start": {
                    "type": "number",
                    "description": "Start time in seconds"
                  },
                  "end": {
                    "type": "number",
                    "description": "End time in seconds"
                  },
                  "text": {
                    "type": "string",
                    "description": "Segment text"
                  }
                }
              }
            },
            "segmentCount": {
              "type": "integer",
              "title": "Segment Count",
              "description": "Number of subtitle segments"
            },
            "transcript": {
              "type": "string",
              "title": "Transcript",
              "description": "Full transcript as plain text"
            },
            "transcriptDuration": {
              "type": "number",
              "title": "Transcript Duration",
              "description": "End time of the last segment in seconds"
            },
            "wordCount": {
              "type": "integer",
              "title": "Word Count",
              "description": "Approximate whitespace-delimited word count"
            },
            "vtt": {
              "type": "string",
              "title": "WebVTT",
              "description": "Original or generated WebVTT (when enabled)"
            },
            "srt": {
              "type": "string",
              "title": "SRT",
              "description": "Generated SRT subtitles (when enabled)"
            },
            "scrapedAt": {
              "type": "string",
              "title": "Scraped At",
              "description": "Collection time (ISO 8601 UTC)"
            }
          },
          "views": {
            "overview": {
              "title": "Transcripts",
              "transformation": {
                "fields": [
                  "username",
                  "languageCode",
                  "source",
                  "segmentCount",
                  "duration",
                  "transcript",
                  "postUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "languageCode": {
                    "label": "Language",
                    "format": "text"
                  },
                  "source": {
                    "label": "Source",
                    "format": "text"
                  },
                  "segmentCount": {
                    "label": "Segments",
                    "format": "number"
                  },
                  "duration": {
                    "label": "Duration (s)",
                    "format": "number"
                  },
                  "transcript": {
                    "label": "Transcript",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  }
                }
              }
            },
            "manualCaptions": {
              "title": "Creator Captions",
              "transformation": {
                "fields": [
                  "username",
                  "languageCode",
                  "sourceType",
                  "segmentCount",
                  "transcript",
                  "postUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "languageCode": {
                    "label": "Language",
                    "format": "text"
                  },
                  "sourceType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "segmentCount": {
                    "label": "Segments",
                    "format": "number"
                  },
                  "transcript": {
                    "label": "Transcript",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  }
                }
              }
            },
            "translated": {
              "title": "Translations",
              "transformation": {
                "fields": [
                  "username",
                  "languageCode",
                  "source",
                  "isTranslation",
                  "transcript",
                  "postUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "languageCode": {
                    "label": "Language",
                    "format": "text"
                  },
                  "source": {
                    "label": "Source",
                    "format": "text"
                  },
                  "isTranslation": {
                    "label": "Translation",
                    "format": "text"
                  },
                  "transcript": {
                    "label": "Transcript",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  }
                }
              }
            },
            "withFiles": {
              "title": "With VTT / SRT",
              "transformation": {
                "fields": [
                  "username",
                  "languageCode",
                  "vtt",
                  "srt",
                  "postUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "languageCode": {
                    "label": "Language",
                    "format": "text"
                  },
                  "vtt": {
                    "label": "WebVTT",
                    "format": "text"
                  },
                  "srt": {
                    "label": "SRT",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "2.0.1",
    "imageDigest": "2a113b8a6dd1d03083d0425f03afeb624b6dcaa843ff8b9ae57d4fe44189925d",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.07447
    }
  }
}