{
  "data": {
    "id": "LulWkQbhoV6gIZUhD",
    "actId": "awepzbjt4Zv29dF9p",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-28T08:02:01.147Z",
    "finishedAt": "2026-10-28T08:02:04.854Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3558,
      "runTimeSecs": 3.558,
      "computeUnits": 0.003953333333333333,
      "imageSizeBytes": 318701568
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Twitch Scraper Input\",\n  \"description\": \"Search Twitch, fetch top live streams, browse categories and category VODs, or look up channels, videos, and clips by ID or URL. No Twitch login is required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch.\",\n      \"editor\": \"select\",\n      \"sectionCaption\": \"Mode & Query\",\n      \"enum\": [\n        \"topStreams\",\n        \"topGames\",\n        \"search\",\n        \"byChannel\",\n        \"byCategory\",\n        \"byCategoryVideos\",\n        \"topClips\",\n        \"byVideo\",\n        \"byClip\",\n        \"byUrl\"\n      ],\n      \"enumTitles\": [\n        \"Top live streams\",\n        \"Top games / categories\",\n        \"Search Twitch (channels / categories / videos)\",\n        \"Channel info + recent VODs + clips + schedule\",\n        \"Browse a category (live streams)\",\n        \"Browse a category (VODs)\",\n        \"Top clips for a category\",\n        \"Lookup VODs by video ID\",\n        \"Lookup clips by slug\",\n        \"Resolve Twitch URLs\"\n      ],\n      \"default\": \"topStreams\",\n      \"prefill\": \"topStreams\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Free-text query for `mode=search` — matches channels, categories, and videos.\",\n      \"editor\": \"textfield\",\n      \"default\": \"lirik\",\n      \"prefill\": \"lirik\"\n    },\n    \"searchType\": {\n      \"title\": \"Search result type (mode=search)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict search results to one index. `all` returns channels, categories, and videos.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"channel\",\n        \"game\",\n        \"video\"\n      ],\n      \"enumTitles\": [\n        \"All result types\",\n        \"Channels only\",\n        \"Categories only\",\n        \"Videos only\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"channelName\": {\n      \"title\": \"Channel login (mode=byChannel)\",\n      \"type\": \"string\",\n      \"description\": \"Twitch channel login or channel URL, e.g. `lirik` or `https://www.twitch.tv/lirik`.\",\n      \"editor\": \"textfield\"\n    },\n    \"channelNames\": {\n      \"title\": \"Channel logins or URLs (mode=byChannel)\",\n      \"type\": \"array\",\n      \"description\": \"Batch channel logins or channel URLs. Duplicates and the single `channelName` are merged.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"categorySlug\": {\n      \"title\": \"Category slug, name, or URL (mode=byCategory, byCategoryVideos, topClips)\",\n      \"type\": \"string\",\n      \"description\": \"Category slug (`just-chatting`), exact name (`Just Chatting`), or directory URL.\",\n      \"editor\": \"textfield\"\n    },\n    \"videoId\": {\n      \"title\": \"Video ID (mode=byVideo)\",\n      \"type\": \"string\",\n      \"description\": \"Twitch VOD ID or VOD URL, e.g. `2766365638`.\",\n      \"editor\": \"textfield\"\n    },\n    \"videoIds\": {\n      \"title\": \"Video IDs or URLs (mode=byVideo)\",\n      \"type\": \"array\",\n      \"description\": \"Batch VOD IDs or VOD URLs. Duplicates and the single `videoId` are merged.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"clipSlug\": {\n      \"title\": \"Clip slug (mode=byClip)\",\n      \"type\": \"string\",\n      \"description\": \"Twitch clip slug or clip URL, e.g. `AcceptablePleasantAuberginePanicVis-EVdxDQ1vsQAQZpBS`.\",\n      \"editor\": \"textfield\"\n    },\n    \"clipSlugs\": {\n      \"title\": \"Clip slugs or URLs (mode=byClip)\",\n      \"type\": \"array\",\n      \"description\": \"Batch clip slugs or clip URLs. Duplicates and the single `clipSlug` are merged.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"twitchUrls\": {\n      \"title\": \"Twitch URLs (mode=byUrl)\",\n      \"type\": \"array\",\n      \"description\": \"Channel, VOD, clip, or category URLs. Category and channel `/videos` and `/clips` tabs are supported.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"language\": {\n      \"title\": \"Broadcast language\",\n      \"type\": \"string\",\n      \"description\": \"Filter live streams, VODs, and clips to one broadcast language. Leave on `(any)` for no filter.\",\n      \"editor\": \"select\",\n      \"sectionCaption\": \"Filters & Sorting\",\n      \"enum\": [\n        \"\",\n        \"EN\",\n        \"ES\",\n        \"DE\",\n        \"FR\",\n        \"PT\",\n        \"RU\",\n        \"JA\",\n        \"KO\",\n        \"ZH\",\n        \"IT\",\n        \"TR\",\n        \"PL\",\n        \"AR\",\n        \"TH\",\n        \"ID\",\n        \"VI\",\n        \"NL\",\n        \"SV\",\n        \"FI\",\n        \"DA\",\n        \"NO\",\n        \"CS\",\n        \"HU\",\n        \"EL\",\n        \"RO\",\n        \"BG\",\n        \"UK\",\n        \"HE\",\n        \"MS\",\n        \"TL\",\n        \"ASL\",\n        \"OTHER\"\n      ],\n      \"enumTitles\": [\n        \"(any)\",\n        \"English (EN)\",\n        \"Spanish (ES)\",\n        \"German (DE)\",\n        \"French (FR)\",\n        \"Portuguese (PT)\",\n        \"Russian (RU)\",\n        \"Japanese (JA)\",\n        \"Korean (KO)\",\n        \"Chinese (ZH)\",\n        \"Italian (IT)\",\n        \"Turkish (TR)\",\n        \"Polish (PL)\",\n        \"Arabic (AR)\",\n        \"Thai (TH)\",\n        \"Indonesian (ID)\",\n        \"Vietnamese (VI)\",\n        \"Dutch (NL)\",\n        \"Swedish (SV)\",\n        \"Finnish (FI)\",\n        \"Danish (DA)\",\n        \"Norwegian (NO)\",\n        \"Czech (CS)\",\n        \"Hungarian (HU)\",\n        \"Greek (EL)\",\n        \"Romanian (RO)\",\n        \"Bulgarian (BG)\",\n        \"Ukrainian (UK)\",\n        \"Hebrew (HE)\",\n        \"Malay (MS)\",\n        \"Tagalog (TL)\",\n        \"American Sign Language (ASL)\",\n        \"Other\"\n      ],\n      \"default\": \"EN\",\n      \"prefill\": \"EN\"\n    },\n    \"streamSort\": {\n      \"title\": \"Live stream order\",\n      \"type\": \"string\",\n      \"description\": \"Sort live streams by viewers (high to low or low to high), recently started, or recommended.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"VIEWER_COUNT\",\n        \"VIEWER_COUNT_ASC\",\n        \"RECENT\",\n        \"RELEVANCE\"\n      ],\n      \"enumTitles\": [\n        \"Most viewers first\",\n        \"Fewest viewers first\",\n        \"Recently started first\",\n        \"Recommended\"\n      ],\n      \"default\": \"VIEWER_COUNT\",\n      \"prefill\": \"VIEWER_COUNT\"\n    },\n    \"streamTags\": {\n      \"title\": \"Stream tags\",\n      \"type\": \"array\",\n      \"description\": \"Only live streams carrying all of these freeform tags, e.g. `English`, `DropsEnabled`, `NoBackseating`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"streamType\": {\n      \"title\": \"VOD type\",\n      \"type\": \"string\",\n      \"description\": \"Restrict channel or category VODs to one broadcast type. Leave blank for all types.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"ARCHIVE\",\n        \"HIGHLIGHT\",\n        \"UPLOAD\",\n        \"PAST_PREMIERE\",\n        \"PREMIERE_UPLOAD\"\n      ],\n      \"enumTitles\": [\n        \"(any)\",\n        \"Archive (past broadcast)\",\n        \"Highlight\",\n        \"Upload\",\n        \"Past Premiere\",\n        \"Premiere Upload\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"videoSort\": {\n      \"title\": \"VOD order\",\n      \"type\": \"string\",\n      \"description\": \"Sort channel or category VODs by publish time or view count.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"TIME\",\n        \"VIEWS\"\n      ],\n      \"enumTitles\": [\n        \"Newest first (TIME)\",\n        \"Most viewed first (VIEWS)\"\n      ],\n      \"default\": \"TIME\",\n      \"prefill\": \"TIME\"\n    },\n    \"clipPeriod\": {\n      \"title\": \"Clip time window\",\n      \"type\": \"string\",\n      \"description\": \"Time window over which clips were created.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"LAST_DAY\",\n        \"LAST_WEEK\",\n        \"LAST_MONTH\",\n        \"ALL_TIME\"\n      ],\n      \"enumTitles\": [\n        \"Last 24 hours\",\n        \"Last 7 days\",\n        \"Last 30 days\",\n        \"All time\"\n      ],\n      \"default\": \"LAST_WEEK\",\n      \"prefill\": \"LAST_WEEK\"\n    },\n    \"clipSort\": {\n      \"title\": \"Clip order\",\n      \"type\": \"string\",\n      \"description\": \"Sort clips by views or trending score.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"VIEWS_DESC\",\n        \"TRENDING\"\n      ],\n      \"enumTitles\": [\n        \"Most viewed first\",\n        \"Trending\"\n      ],\n      \"default\": \"VIEWS_DESC\",\n      \"prefill\": \"VIEWS_DESC\"\n    },\n    \"includeChannelClips\": {\n      \"title\": \"Include clips (mode=byChannel)\",\n      \"type\": \"boolean\",\n      \"description\": \"Also fetch and emit top clips for each channel.\",\n      \"default\": true,\n      \"prefill\": true,\n      \"sectionCaption\": \"Channel Enrichment\"\n    },\n    \"includeChannelVideos\": {\n      \"title\": \"Include VODs (mode=byChannel)\",\n      \"type\": \"boolean\",\n      \"description\": \"Also fetch and emit recent VODs for each channel.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"minViewersCount\": {\n      \"title\": \"Minimum concurrent viewers\",\n      \"type\": \"integer\",\n      \"description\": \"Drop live streams (and categories) below this viewer count.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"minViewCount\": {\n      \"title\": \"Minimum total views\",\n      \"type\": \"integer\",\n      \"description\": \"Drop VODs and clips below this total view count.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"minFollowersCount\": {\n      \"title\": \"Minimum followers\",\n      \"type\": \"integer\",\n      \"description\": \"Drop channels and live streams below this follower count. VODs and clips are unaffected.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"maxFollowersCount\": {\n      \"title\": \"Maximum followers\",\n      \"type\": \"integer\",\n      \"description\": \"Drop channels and live streams above this follower count. Useful for finding smaller creators.\",\n      \"minimum\": 0,\n      \"maximum\": 100000000\n    },\n    \"onlyLive\": {\n      \"title\": \"Only live channels\",\n      \"type\": \"boolean\",\n      \"description\": \"Drop channel profile records for channels that are not live right now. Their VODs and clips are still returned.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"containsKeyword\": {\n      \"title\": \"Title contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Case-insensitive substring filter on stream, VOD, and clip titles.\",\n      \"editor\": \"textfield\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records. Twitch source caps still apply (e.g. about 1,000 clips per category).\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 50,\n      \"prefill\": 3,\n      \"sectionCaption\": \"Limits\"\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Twitch Live Stream, Channel & VOD Metadata Extractor\n\nCollect **Twitch** metadata without a login, OAuth app, or API key: live streams, channel profiles with social links and published schedules, category directories, category VODs, individual VODs and clips, search results, and resolved twitch.tv links. Every record is public data returned in clean JSON, with empty fields omitted.\n\n## What this actor does\n\n- Returns the live directory globally or inside one category, with viewer counts, language, start time, tags, broadcaster followers, partner status, and stream quality details\n- Builds channel profiles with bio, images, follower count, roles, social links, About panels, primary team, upcoming schedule, total VOD count, and emails published in the bio\n- Pages channel VODs and clips deeply, with VOD type/sort and clip period/sort controls\n- Searches Twitch channels, categories, and videos with independent deep pagination for each index\n- Adds category VODs, batch channel/VOD/clip lookup, multi-URL resolution, and category stats on stream records\n- Omits empty values at every depth instead of returning `null`, empty strings, or empty objects\n\n## Modes\n\n| Mode | What you get |\n|---|---|\n| `topStreams` | Current live streams across Twitch, with language, tag, viewer, and sort filters |\n| `topGames` | Categories sorted by current viewers, with follower and broadcaster counts |\n| `search` | Channels, categories, and videos from Twitch search, with per-index pagination |\n| `byChannel` | One or more channel profiles, plus optional recent VODs and clips |\n| `byCategory` | Live streams in a category, with category viewer/follower/broadcaster stats attached |\n| `byCategoryVideos` | VODs for a category, filtered by type, language, and sort order |\n| `topClips` | Top clips for a category over a chosen time window, sorted by views or trending |\n| `byVideo` | One or many VODs by numeric ID or VOD URL |\n| `byClip` | One or many clips by slug or clip URL |\n| `byUrl` | Resolves channel, VOD, clip, and category URLs, including `/videos` and `/clips` tabs |\n\n## Output per record\n\nEvery record carries a `recordType` of `stream`, `channel`, `video`, `clip`, or `game`, plus `scrapedAt`. Invalid URLs produce a typed `error` row, which does not count toward `maxItems`.\n\n### Live stream (`recordType: \"stream\"`)\n\n| Field | Description |\n|---|---|\n| `streamId` | Twitch stream ID |\n| `title` | Stream title |\n| `viewersCount` | Current concurrent viewers |\n| `streamType` | Broadcast type |\n| `language` | Broadcast language code |\n| `startedAt` | Stream start timestamp |\n| `previewImageURL` | Live preview thumbnail |\n| `channelId` / `channelName` / `displayName` | Broadcaster identifiers |\n| `followersCount` | Broadcaster follower count |\n| `isPartner` / `isAffiliate` | Broadcaster role flags, when true |\n| `gameId` / `gameName` / `gameSlug` | Category identifiers |\n| `tags` | Freeform stream tags |\n| `isMature` | Mature-content flag |\n| `averageFPS` / `height` / `width` | Stream quality details |\n| `contentClassificationLabels` | Twitch content labels, when present |\n| `broadcaster` | Broadcaster object with images, color, followers, roles, social links |\n| `game` | Category object with artwork and category stats when available |\n| `url` | Channel URL |\n\n### Channel (`recordType: \"channel\"`)\n\n| Field | Description |\n|---|---|\n| `channelId` / `channelName` / `displayName` | Channel identifiers |\n| `description` | Public channel bio |\n| `language` | Channel broadcast language |\n| `createdAt` | Account creation date |\n| `profileImageURL` / `bannerImageURL` / `offlineImageURL` | Channel images |\n| `primaryColorHex` | Brand color |\n| `isPartner` / `isAffiliate` / `isStaff` | Role flags, when true |\n| `followersCount` | Total followers |\n| `streamTitle` / `currentGame` | Configured stream title and category |\n| `isLive` | Whether the channel is live |\n| `liveStream` | Nested live-stream details when live |\n| `lastBroadcast` | Most recent broadcast details |\n| `socialLinks[]` | Social links shown on the channel page |\n| `panels[]` | About-page panels with title, text, image, and link |\n| `primaryTeam` | Primary Twitch team, when set |\n| `upcomingSchedule[]` | Published upcoming schedule segments |\n| `videosCount` | Total current VODs on the channel |\n| `contactEmails[]` | Emails published in the public bio |\n| `url` | Channel URL |\n\n### VOD (`recordType: \"video\"`)\n\n| Field | Description |\n|---|---|\n| `videoId` | VOD ID |\n| `title` / `description` | Title and description when published |\n| `lengthSeconds` | Duration in seconds |\n| `viewCount` | Total views |\n| `createdAt` / `publishedAt` / `updatedAt` / `recordedAt` | Relevant timestamps |\n| `previewImageURL` / `animatedPreviewURL` | Thumbnails |\n| `broadcastType` / `status` | VOD type and recording status |\n| `language` | Video language |\n| `contentTags[]` | Twitch content tags |\n| `gameId` / `gameName` / `gameSlug` / `game` | Associated category |\n| `channelId` / `channelName` / `displayName` / `owner` | Owning channel |\n| `url` | VOD URL |\n\n### Clip (`recordType: \"clip\"`)\n\n| Field | Description |\n|---|---|\n| `clipId` / `slug` | Clip identifiers |\n| `title` | Clip title |\n| `viewCount` | Total views |\n| `durationSeconds` | Clip length |\n| `createdAt` | Creation timestamp |\n| `language` | Clip language |\n| `isFeatured` | Featured flag, when true |\n| `thumbnailURL` / `embedURL` | Thumbnail and embed URL |\n| `videoOffsetSeconds` | Offset into the source broadcast, when known |\n| `gameId` / `gameName` / `gameSlug` / `game` | Associated category |\n| `channelId` / `channelName` / `displayName` / `broadcaster` | Broadcaster details |\n| `curator` | Who created the clip |\n| `sourceVideo` | Source VOD ID and title, when linked |\n| `url` | Clip URL |\n\n### Category (`recordType: \"game\"`)\n\n| Field | Description |\n|---|---|\n| `gameId` | Category ID |\n| `name` / `displayName` / `slug` | Category names and URL slug |\n| `viewersCount` / `followersCount` / `broadcastersCount` | Current category stats |\n| `boxArtURL` / `logoURL` / `coverURL` | Category artwork |\n| `description` | Category description |\n| `tags[]` | Category content tags |\n| `originalReleaseDate` | Release date when published |\n| `developers[]` / `publishers[]` | Companies when published |\n| `url` | Category directory URL |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `topStreams` | One of the ten modes above |\n| `searchQuery` | string | `lirik` | Search term for `search` |\n| `searchType` | string | `all` | `all`, `channel`, `game`, or `video` |\n| `channelName` | string | – | One channel login or URL for `byChannel` |\n| `channelNames` | array | `[]` | Batch channel logins or URLs |\n| `categorySlug` | string | – | Category slug, name, or directory URL |\n| `videoId` | string | – | One VOD ID or URL |\n| `videoIds` | array | `[]` | Batch VOD IDs or URLs |\n| `clipSlug` | string | – | One clip slug or URL |\n| `clipSlugs` | array | `[]` | Batch clip slugs or URLs |\n| `twitchUrls` | array | `[]` | URLs for `byUrl` |\n| `language` | string | `EN` | Broadcast language, or `(any)` |\n| `streamSort` | string | `VIEWER_COUNT` | Most viewers, fewest viewers, recently started, or recommended |\n| `streamTags` | array | `[]` | Require all listed freeform tags |\n| `streamType` | string | – | VOD type filter |\n| `videoSort` | string | `TIME` | Newest or most viewed |\n| `clipPeriod` | string | `LAST_WEEK` | Last day, week, month, or all time |\n| `clipSort` | string | `VIEWS_DESC` | Most viewed or trending |\n| `includeChannelClips` | boolean | `true` | Include clips in `byChannel` |\n| `includeChannelVideos` | boolean | `true` | Include VODs in `byChannel` |\n| `minViewersCount` | integer | – | Drop streams below this viewer count |\n| `minViewCount` | integer | – | Drop VODs and clips below this view count |\n| `minFollowersCount` | integer | – | Drop channels and streams below this follower count |\n| `maxFollowersCount` | integer | – | Drop channels and streams above this follower count |\n| `onlyLive` | boolean | `false` | Drop offline channel profiles |\n| `containsKeyword` | string | – | Title keyword filter |\n| `maxItems` | integer | `50` | Hard record cap (1–5000) |\n\n### Example: top live streams in English\n\n```json\n{\n  \"mode\": \"topStreams\",\n  \"language\": \"EN\",\n  \"streamSort\": \"VIEWER_COUNT\",\n  \"maxItems\": 50\n}\n```\n\n### Example: channel profiles with schedules and media\n\n```json\n{\n  \"mode\": \"byChannel\",\n  \"channelNames\": [\"lirik\", \"xqc\", \"pokimane\"],\n  \"includeChannelVideos\": true,\n  \"includeChannelClips\": true,\n  \"maxItems\": 60\n}\n```\n\n### Example: category VODs\n\n```json\n{\n  \"mode\": \"byCategoryVideos\",\n  \"categorySlug\": \"minecraft\",\n  \"streamType\": \"ARCHIVE\",\n  \"videoSort\": \"VIEWS\",\n  \"maxItems\": 100\n}\n```\n\n### Example: mixed URL resolution\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"twitchUrls\": [\n    \"https://www.twitch.tv/shroud\",\n    \"https://www.twitch.tv/videos/2766365638\",\n    \"https://www.twitch.tv/directory/category/just-chatting/videos\"\n  ],\n  \"maxItems\": 40\n}\n```\n\n## Use cases\n\n- **Creator discovery** — find channels by category, language, tags, follower range, or viewer count\n- **Sponsorship research** — compare live audiences and follower totals across streamers\n- **Clip curation** — pull top or trending clips for a category or channel over a chosen window\n- **VOD archives** — collect titles, durations, views, and categories for past broadcasts\n- **Market monitoring** — track category viewers, broadcaster counts, and changing top streams\n- **Link enrichment** — turn lists of Twitch links into structured channel, VOD, clip, or category rows\n\n## FAQ\n\n**Do I need a Twitch account, OAuth token, or API key?**\nNo. All modes work without a login or developer credentials.\n\n**Why does a run stop before `maxItems`?**\nTwitch sometimes has fewer matching rows than requested. Clip lists stop at about 1,000 rows, search categories at about 30 matches, search channels at about 1,000 per term, and search videos at Twitch's 10,000-match ceiling. In `byUrl`, the cap is shared across the supplied URLs, so a small `maxItems` can stop before every URL is expanded. The actor reports when the source ends or a cap is reached instead of padding the dataset.\n\n**Why are some channel fields missing?**\nSocial links, schedules, panels, teams, and bio emails are optional on Twitch. They are included when the channel publishes them and omitted otherwise.\n\n**How many live streams can one run return?**\nThe live directory pages in groups of up to 30. Requesting thousands of rows means many pages and a longer run; the prefill stays small to keep daily tests cheap.\n\n**Can this pull chat messages or video files?**\nNo. This actor covers stream, channel, VOD, clip, and category metadata only. Chat replays and media downloads are separate tasks.\n\n**What is the difference between `byCategory` and `byCategoryVideos`?**\n`byCategory` returns channels that are live in the category now. `byCategoryVideos` returns published VODs for that category.\n\n**How do I find a category slug?**\nOpen the category on Twitch and copy the last part of its URL, or use `topGames` and read `slug`.\n\n**Are duplicate records removed?**\nYes. Streams, channels, VODs, clips, and categories are deduplicated by their Twitch IDs across pages and batches.\n\n**Is this affiliated with Twitch?**\nNo. This actor reads public Twitch data and is not affiliated with, endorsed by, or sponsored by Twitch.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "twitch-live-stream-channel-and-vod-metadata",
      "title": "Twitch Live Stream, Channel & VOD Metadata Extractor",
      "description": "Get Twitch top live streams, channel profiles with socials and schedules, category directories and VODs, VOD and clip metadata, search results, or resolved twitch.tv URLs.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Twitch Live Stream, Channel & VOD Metadata Extractor\n\nCollect **Twitch** metadata without a login, OAuth app, or API key: live streams, channel profiles with social links and published schedules, category directories, category VODs, individual VODs and clips, search results, and resolved twitch.tv links. Every record is public data returned in clean JSON, with empty fields omitted.\n\n## What this actor does\n\n- Returns the live directory globally or inside one category, with viewer counts, language, start time, tags, broadcaster followers, partner status, and stream quality details\n- Builds channel profiles with bio, images, follower count, roles, social links, About panels, primary team, upcoming schedule, total VOD count, and emails published in the bio\n- Pages channel VODs and clips deeply, with VOD type/sort and clip period/sort controls\n- Searches Twitch channels, categories, and videos with independent deep pagination for each index\n- Adds category VODs, batch channel/VOD/clip lookup, multi-URL resolution, and category stats on stream records\n- Omits empty values at every depth instead of returning `null`, empty strings, or empty objects\n\n## Modes\n\n| Mode | What you get |\n|---|---|\n| `topStreams` | Current live streams across Twitch, with language, tag, viewer, and sort filters |\n| `topGames` | Categories sorted by current viewers, with follower and broadcaster counts |\n| `search` | Channels, categories, and videos from Twitch search, with per-index pagination |\n| `byChannel` | One or more channel profiles, plus optional recent VODs and clips |\n| `byCategory` | Live streams in a category, with category viewer/follower/broadcaster stats attached |\n| `byCategoryVideos` | VODs for a category, filtered by type, language, and sort order |\n| `topClips` | Top clips for a category over a chosen time window, sorted by views or trending |\n| `byVideo` | One or many VODs by numeric ID or VOD URL |\n| `byClip` | One or many clips by slug or clip URL |\n| `byUrl` | Resolves channel, VOD, clip, and category URLs, including `/videos` and `/clips` tabs |\n\n## Output per record\n\nEvery record carries a `recordType` of `stream`, `channel`, `video`, `clip`, or `game`, plus `scrapedAt`. Invalid URLs produce a typed `error` row, which does not count toward `maxItems`.\n\n### Live stream (`recordType: \"stream\"`)\n\n| Field | Description |\n|---|---|\n| `streamId` | Twitch stream ID |\n| `title` | Stream title |\n| `viewersCount` | Current concurrent viewers |\n| `streamType` | Broadcast type |\n| `language` | Broadcast language code |\n| `startedAt` | Stream start timestamp |\n| `previewImageURL` | Live preview thumbnail |\n| `channelId` / `channelName` / `displayName` | Broadcaster identifiers |\n| `followersCount` | Broadcaster follower count |\n| `isPartner` / `isAffiliate` | Broadcaster role flags, when true |\n| `gameId` / `gameName` / `gameSlug` | Category identifiers |\n| `tags` | Freeform stream tags |\n| `isMature` | Mature-content flag |\n| `averageFPS` / `height` / `width` | Stream quality details |\n| `contentClassificationLabels` | Twitch content labels, when present |\n| `broadcaster` | Broadcaster object with images, color, followers, roles, social links |\n| `game` | Category object with artwork and category stats when available |\n| `url` | Channel URL |\n\n### Channel (`recordType: \"channel\"`)\n\n| Field | Description |\n|---|---|\n| `channelId` / `channelName` / `displayName` | Channel identifiers |\n| `description` | Public channel bio |\n| `language` | Channel broadcast language |\n| `createdAt` | Account creation date |\n| `profileImageURL` / `bannerImageURL` / `offlineImageURL` | Channel images |\n| `primaryColorHex` | Brand color |\n| `isPartner` / `isAffiliate` / `isStaff` | Role flags, when true |\n| `followersCount` | Total followers |\n| `streamTitle` / `currentGame` | Configured stream title and category |\n| `isLive` | Whether the channel is live |\n| `liveStream` | Nested live-stream details when live |\n| `lastBroadcast` | Most recent broadcast details |\n| `socialLinks[]` | Social links shown on the channel page |\n| `panels[]` | About-page panels with title, text, image, and link |\n| `primaryTeam` | Primary Twitch team, when set |\n| `upcomingSchedule[]` | Published upcoming schedule segments |\n| `videosCount` | Total current VODs on the channel |\n| `contactEmails[]` | Emails published in the public bio |\n| `url` | Channel URL |\n\n### VOD (`recordType: \"video\"`)\n\n| Field | Description |\n|---|---|\n| `videoId` | VOD ID |\n| `title` / `description` | Title and description when published |\n| `lengthSeconds` | Duration in seconds |\n| `viewCount` | Total views |\n| `createdAt` / `publishedAt` / `updatedAt` / `recordedAt` | Relevant timestamps |\n| `previewImageURL` / `animatedPreviewURL` | Thumbnails |\n| `broadcastType` / `status` | VOD type and recording status |\n| `language` | Video language |\n| `contentTags[]` | Twitch content tags |\n| `gameId` / `gameName` / `gameSlug` / `game` | Associated category |\n| `channelId` / `channelName` / `displayName` / `owner` | Owning channel |\n| `url` | VOD URL |\n\n### Clip (`recordType: \"clip\"`)\n\n| Field | Description |\n|---|---|\n| `clipId` / `slug` | Clip identifiers |\n| `title` | Clip title |\n| `viewCount` | Total views |\n| `durationSeconds` | Clip length |\n| `createdAt` | Creation timestamp |\n| `language` | Clip language |\n| `isFeatured` | Featured flag, when true |\n| `thumbnailURL` / `embedURL` | Thumbnail and embed URL |\n| `videoOffsetSeconds` | Offset into the source broadcast, when known |\n| `gameId` / `gameName` / `gameSlug` / `game` | Associated category |\n| `channelId` / `channelName` / `displayName` / `broadcaster` | Broadcaster details |\n| `curator` | Who created the clip |\n| `sourceVideo` | Source VOD ID and title, when linked |\n| `url` | Clip URL |\n\n### Category (`recordType: \"game\"`)\n\n| Field | Description |\n|---|---|\n| `gameId` | Category ID |\n| `name` / `displayName` / `slug` | Category names and URL slug |\n| `viewersCount` / `followersCount` / `broadcastersCount` | Current category stats |\n| `boxArtURL` / `logoURL` / `coverURL` | Category artwork |\n| `description` | Category description |\n| `tags[]` | Category content tags |\n| `originalReleaseDate` | Release date when published |\n| `developers[]` / `publishers[]` | Companies when published |\n| `url` | Category directory URL |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `topStreams` | One of the ten modes above |\n| `searchQuery` | string | `lirik` | Search term for `search` |\n| `searchType` | string | `all` | `all`, `channel`, `game`, or `video` |\n| `channelName` | string | – | One channel login or URL for `byChannel` |\n| `channelNames` | array | `[]` | Batch channel logins or URLs |\n| `categorySlug` | string | – | Category slug, name, or directory URL |\n| `videoId` | string | – | One VOD ID or URL |\n| `videoIds` | array | `[]` | Batch VOD IDs or URLs |\n| `clipSlug` | string | – | One clip slug or URL |\n| `clipSlugs` | array | `[]` | Batch clip slugs or URLs |\n| `twitchUrls` | array | `[]` | URLs for `byUrl` |\n| `language` | string | `EN` | Broadcast language, or `(any)` |\n| `streamSort` | string | `VIEWER_COUNT` | Most viewers, fewest viewers, recently started, or recommended |\n| `streamTags` | array | `[]` | Require all listed freeform tags |\n| `streamType` | string | – | VOD type filter |\n| `videoSort` | string | `TIME` | Newest or most viewed |\n| `clipPeriod` | string | `LAST_WEEK` | Last day, week, month, or all time |\n| `clipSort` | string | `VIEWS_DESC` | Most viewed or trending |\n| `includeChannelClips` | boolean | `true` | Include clips in `byChannel` |\n| `includeChannelVideos` | boolean | `true` | Include VODs in `byChannel` |\n| `minViewersCount` | integer | – | Drop streams below this viewer count |\n| `minViewCount` | integer | – | Drop VODs and clips below this view count |\n| `minFollowersCount` | integer | – | Drop channels and streams below this follower count |\n| `maxFollowersCount` | integer | – | Drop channels and streams above this follower count |\n| `onlyLive` | boolean | `false` | Drop offline channel profiles |\n| `containsKeyword` | string | – | Title keyword filter |\n| `maxItems` | integer | `50` | Hard record cap (1–5000) |\n\n### Example: top live streams in English\n\n```json\n{\n  \"mode\": \"topStreams\",\n  \"language\": \"EN\",\n  \"streamSort\": \"VIEWER_COUNT\",\n  \"maxItems\": 50\n}\n```\n\n### Example: channel profiles with schedules and media\n\n```json\n{\n  \"mode\": \"byChannel\",\n  \"channelNames\": [\"lirik\", \"xqc\", \"pokimane\"],\n  \"includeChannelVideos\": true,\n  \"includeChannelClips\": true,\n  \"maxItems\": 60\n}\n```\n\n### Example: category VODs\n\n```json\n{\n  \"mode\": \"byCategoryVideos\",\n  \"categorySlug\": \"minecraft\",\n  \"streamType\": \"ARCHIVE\",\n  \"videoSort\": \"VIEWS\",\n  \"maxItems\": 100\n}\n```\n\n### Example: mixed URL resolution\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"twitchUrls\": [\n    \"https://www.twitch.tv/shroud\",\n    \"https://www.twitch.tv/videos/2766365638\",\n    \"https://www.twitch.tv/directory/category/just-chatting/videos\"\n  ],\n  \"maxItems\": 40\n}\n```\n\n## Use cases\n\n- **Creator discovery** — find channels by category, language, tags, follower range, or viewer count\n- **Sponsorship research** — compare live audiences and follower totals across streamers\n- **Clip curation** — pull top or trending clips for a category or channel over a chosen window\n- **VOD archives** — collect titles, durations, views, and categories for past broadcasts\n- **Market monitoring** — track category viewers, broadcaster counts, and changing top streams\n- **Link enrichment** — turn lists of Twitch links into structured channel, VOD, clip, or category rows\n\n## FAQ\n\n**Do I need a Twitch account, OAuth token, or API key?**\nNo. All modes work without a login or developer credentials.\n\n**Why does a run stop before `maxItems`?**\nTwitch sometimes has fewer matching rows than requested. Clip lists stop at about 1,000 rows, search categories at about 30 matches, search channels at about 1,000 per term, and search videos at Twitch's 10,000-match ceiling. In `byUrl`, the cap is shared across the supplied URLs, so a small `maxItems` can stop before every URL is expanded. The actor reports when the source ends or a cap is reached instead of padding the dataset.\n\n**Why are some channel fields missing?**\nSocial links, schedules, panels, teams, and bio emails are optional on Twitch. They are included when the channel publishes them and omitted otherwise.\n\n**How many live streams can one run return?**\nThe live directory pages in groups of up to 30. Requesting thousands of rows means many pages and a longer run; the prefill stays small to keep daily tests cheap.\n\n**Can this pull chat messages or video files?**\nNo. This actor covers stream, channel, VOD, clip, and category metadata only. Chat replays and media downloads are separate tasks.\n\n**What is the difference between `byCategory` and `byCategoryVideos`?**\n`byCategory` returns channels that are live in the category now. `byCategoryVideos` returns published VODs for that category.\n\n**How do I find a category slug?**\nOpen the category on Twitch and copy the last part of its URL, or use `topGames` and read `slug`.\n\n**Are duplicate records removed?**\nYes. Streams, channels, VODs, clips, and categories are deduplicated by their Twitch IDs across pages and batches.\n\n**Is this affiliated with Twitch?**\nNo. This actor reads public Twitch data and is not affiliated with, endorsed by, or sponsored by Twitch.\n",
      "input": {
        "title": "Twitch Scraper Input",
        "description": "Search Twitch, fetch top live streams, browse categories and category VODs, or look up channels, videos, and clips by ID or URL. No Twitch login is required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch.",
            "editor": "select",
            "sectionCaption": "Mode & Query",
            "enum": [
              "topStreams",
              "topGames",
              "search",
              "byChannel",
              "byCategory",
              "byCategoryVideos",
              "topClips",
              "byVideo",
              "byClip",
              "byUrl"
            ],
            "enumTitles": [
              "Top live streams",
              "Top games / categories",
              "Search Twitch (channels / categories / videos)",
              "Channel info + recent VODs + clips + schedule",
              "Browse a category (live streams)",
              "Browse a category (VODs)",
              "Top clips for a category",
              "Lookup VODs by video ID",
              "Lookup clips by slug",
              "Resolve Twitch URLs"
            ],
            "default": "topStreams",
            "prefill": "topStreams"
          },
          "searchQuery": {
            "title": "Search query (mode=search)",
            "type": "string",
            "description": "Free-text query for `mode=search` — matches channels, categories, and videos.",
            "editor": "textfield",
            "default": "lirik",
            "prefill": "lirik"
          },
          "searchType": {
            "title": "Search result type (mode=search)",
            "type": "string",
            "description": "Restrict search results to one index. `all` returns channels, categories, and videos.",
            "editor": "select",
            "enum": [
              "all",
              "channel",
              "game",
              "video"
            ],
            "enumTitles": [
              "All result types",
              "Channels only",
              "Categories only",
              "Videos only"
            ],
            "default": "all",
            "prefill": "all"
          },
          "channelName": {
            "title": "Channel login (mode=byChannel)",
            "type": "string",
            "description": "Twitch channel login or channel URL, e.g. `lirik` or `https://www.twitch.tv/lirik`.",
            "editor": "textfield"
          },
          "channelNames": {
            "title": "Channel logins or URLs (mode=byChannel)",
            "type": "array",
            "description": "Batch channel logins or channel URLs. Duplicates and the single `channelName` are merged.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "categorySlug": {
            "title": "Category slug, name, or URL (mode=byCategory, byCategoryVideos, topClips)",
            "type": "string",
            "description": "Category slug (`just-chatting`), exact name (`Just Chatting`), or directory URL.",
            "editor": "textfield"
          },
          "videoId": {
            "title": "Video ID (mode=byVideo)",
            "type": "string",
            "description": "Twitch VOD ID or VOD URL, e.g. `2766365638`.",
            "editor": "textfield"
          },
          "videoIds": {
            "title": "Video IDs or URLs (mode=byVideo)",
            "type": "array",
            "description": "Batch VOD IDs or VOD URLs. Duplicates and the single `videoId` are merged.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "clipSlug": {
            "title": "Clip slug (mode=byClip)",
            "type": "string",
            "description": "Twitch clip slug or clip URL, e.g. `AcceptablePleasantAuberginePanicVis-EVdxDQ1vsQAQZpBS`.",
            "editor": "textfield"
          },
          "clipSlugs": {
            "title": "Clip slugs or URLs (mode=byClip)",
            "type": "array",
            "description": "Batch clip slugs or clip URLs. Duplicates and the single `clipSlug` are merged.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "twitchUrls": {
            "title": "Twitch URLs (mode=byUrl)",
            "type": "array",
            "description": "Channel, VOD, clip, or category URLs. Category and channel `/videos` and `/clips` tabs are supported.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "language": {
            "title": "Broadcast language",
            "type": "string",
            "description": "Filter live streams, VODs, and clips to one broadcast language. Leave on `(any)` for no filter.",
            "editor": "select",
            "sectionCaption": "Filters & Sorting",
            "enum": [
              "",
              "EN",
              "ES",
              "DE",
              "FR",
              "PT",
              "RU",
              "JA",
              "KO",
              "ZH",
              "IT",
              "TR",
              "PL",
              "AR",
              "TH",
              "ID",
              "VI",
              "NL",
              "SV",
              "FI",
              "DA",
              "NO",
              "CS",
              "HU",
              "EL",
              "RO",
              "BG",
              "UK",
              "HE",
              "MS",
              "TL",
              "ASL",
              "OTHER"
            ],
            "enumTitles": [
              "(any)",
              "English (EN)",
              "Spanish (ES)",
              "German (DE)",
              "French (FR)",
              "Portuguese (PT)",
              "Russian (RU)",
              "Japanese (JA)",
              "Korean (KO)",
              "Chinese (ZH)",
              "Italian (IT)",
              "Turkish (TR)",
              "Polish (PL)",
              "Arabic (AR)",
              "Thai (TH)",
              "Indonesian (ID)",
              "Vietnamese (VI)",
              "Dutch (NL)",
              "Swedish (SV)",
              "Finnish (FI)",
              "Danish (DA)",
              "Norwegian (NO)",
              "Czech (CS)",
              "Hungarian (HU)",
              "Greek (EL)",
              "Romanian (RO)",
              "Bulgarian (BG)",
              "Ukrainian (UK)",
              "Hebrew (HE)",
              "Malay (MS)",
              "Tagalog (TL)",
              "American Sign Language (ASL)",
              "Other"
            ],
            "default": "EN",
            "prefill": "EN"
          },
          "streamSort": {
            "title": "Live stream order",
            "type": "string",
            "description": "Sort live streams by viewers (high to low or low to high), recently started, or recommended.",
            "editor": "select",
            "enum": [
              "VIEWER_COUNT",
              "VIEWER_COUNT_ASC",
              "RECENT",
              "RELEVANCE"
            ],
            "enumTitles": [
              "Most viewers first",
              "Fewest viewers first",
              "Recently started first",
              "Recommended"
            ],
            "default": "VIEWER_COUNT",
            "prefill": "VIEWER_COUNT"
          },
          "streamTags": {
            "title": "Stream tags",
            "type": "array",
            "description": "Only live streams carrying all of these freeform tags, e.g. `English`, `DropsEnabled`, `NoBackseating`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "streamType": {
            "title": "VOD type",
            "type": "string",
            "description": "Restrict channel or category VODs to one broadcast type. Leave blank for all types.",
            "editor": "select",
            "enum": [
              "",
              "ARCHIVE",
              "HIGHLIGHT",
              "UPLOAD",
              "PAST_PREMIERE",
              "PREMIERE_UPLOAD"
            ],
            "enumTitles": [
              "(any)",
              "Archive (past broadcast)",
              "Highlight",
              "Upload",
              "Past Premiere",
              "Premiere Upload"
            ],
            "default": "",
            "prefill": ""
          },
          "videoSort": {
            "title": "VOD order",
            "type": "string",
            "description": "Sort channel or category VODs by publish time or view count.",
            "editor": "select",
            "enum": [
              "TIME",
              "VIEWS"
            ],
            "enumTitles": [
              "Newest first (TIME)",
              "Most viewed first (VIEWS)"
            ],
            "default": "TIME",
            "prefill": "TIME"
          },
          "clipPeriod": {
            "title": "Clip time window",
            "type": "string",
            "description": "Time window over which clips were created.",
            "editor": "select",
            "enum": [
              "LAST_DAY",
              "LAST_WEEK",
              "LAST_MONTH",
              "ALL_TIME"
            ],
            "enumTitles": [
              "Last 24 hours",
              "Last 7 days",
              "Last 30 days",
              "All time"
            ],
            "default": "LAST_WEEK",
            "prefill": "LAST_WEEK"
          },
          "clipSort": {
            "title": "Clip order",
            "type": "string",
            "description": "Sort clips by views or trending score.",
            "editor": "select",
            "enum": [
              "VIEWS_DESC",
              "TRENDING"
            ],
            "enumTitles": [
              "Most viewed first",
              "Trending"
            ],
            "default": "VIEWS_DESC",
            "prefill": "VIEWS_DESC"
          },
          "includeChannelClips": {
            "title": "Include clips (mode=byChannel)",
            "type": "boolean",
            "description": "Also fetch and emit top clips for each channel.",
            "default": true,
            "prefill": true,
            "sectionCaption": "Channel Enrichment"
          },
          "includeChannelVideos": {
            "title": "Include VODs (mode=byChannel)",
            "type": "boolean",
            "description": "Also fetch and emit recent VODs for each channel.",
            "default": true,
            "prefill": true
          },
          "minViewersCount": {
            "title": "Minimum concurrent viewers",
            "type": "integer",
            "description": "Drop live streams (and categories) below this viewer count.",
            "minimum": 0,
            "maximum": 1000000
          },
          "minViewCount": {
            "title": "Minimum total views",
            "type": "integer",
            "description": "Drop VODs and clips below this total view count.",
            "minimum": 0,
            "maximum": 100000000
          },
          "minFollowersCount": {
            "title": "Minimum followers",
            "type": "integer",
            "description": "Drop channels and live streams below this follower count. VODs and clips are unaffected.",
            "minimum": 0,
            "maximum": 100000000
          },
          "maxFollowersCount": {
            "title": "Maximum followers",
            "type": "integer",
            "description": "Drop channels and live streams above this follower count. Useful for finding smaller creators.",
            "minimum": 0,
            "maximum": 100000000
          },
          "onlyLive": {
            "title": "Only live channels",
            "type": "boolean",
            "description": "Drop channel profile records for channels that are not live right now. Their VODs and clips are still returned.",
            "default": false,
            "prefill": false
          },
          "containsKeyword": {
            "title": "Title contains keyword",
            "type": "string",
            "description": "Case-insensitive substring filter on stream, VOD, and clip titles.",
            "editor": "textfield"
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on emitted records. Twitch source caps still apply (e.g. about 1,000 clips per category).",
            "minimum": 1,
            "maximum": 5000,
            "default": 50,
            "prefill": 3,
            "sectionCaption": "Limits"
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Twitch Live Stream, Channel & VOD Metadata Extractor Output",
        "description": "Twitch records — live streams, channels, videos (VODs), clips, and games (categories) with viewers, followers, durations, thumbnails, broadcaster details, socials, schedules, and direct URLs.",
        "properties": {
          "records": {
            "type": "string",
            "title": "Twitch records",
            "description": "Dataset containing all scraped Twitch records (streams, channels, videos, clips, games).",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Twitch records",
              "transformation": {
                "fields": [
                  "recordType",
                  "title",
                  "channelName",
                  "displayName",
                  "viewersCount",
                  "viewCount",
                  "gameName",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "598ce3268e492776a168bc0b1ebdd8b6efed415b1779ccdb9e2082268061d8c4",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.003953333333333333
    }
  }
}