{
  "data": {
    "id": "ckps3hivvjQEj1a8K",
    "actId": "7YZlGlAToX668i4b0",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-11T18:42:51.019Z",
    "finishedAt": "2026-11-11T18:43:02.598Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11536,
      "runTimeSecs": 11.536,
      "computeUnits": 0.012817777777777779,
      "imageSizeBytes": 319249408
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Discover Publisher Show Extractor Input\",\n  \"description\": \"Collect Snapchat's public Discover feed, publisher/show profiles, and episode media without a Snapchat login. Pick a mode and the fields it uses.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to collect: the current Discover feed, publisher/show profiles, or individual episode URLs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"discover\",\n        \"byPublisher\",\n        \"byEpisodeUrl\"\n      ],\n      \"enumTitles\": [\n        \"Discover feed (current stories)\",\n        \"Publishers and shows (URLs or IDs)\",\n        \"Episode URLs (snaps and media)\"\n      ],\n      \"default\": \"discover\",\n      \"prefill\": \"discover\"\n    },\n    \"maxStories\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum dataset records this run may push. In Discover mode this counts stories; in the other modes it counts publisher or episode records. Nested episode lists are not counted separately.\",\n      \"default\": 50,\n      \"prefill\": 20,\n      \"minimum\": 1,\n      \"maximum\": 500\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"ISO 3166-1 alpha-2 country context used for the Discover feed and episode requests. Availability is set by Snapchat and some publishers are region-restricted.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"AF\",\n        \"AL\",\n        \"DZ\",\n        \"AS\",\n        \"AD\",\n        \"AO\",\n        \"AI\",\n        \"AQ\",\n        \"AG\",\n        \"AR\",\n        \"AM\",\n        \"AW\",\n        \"AU\",\n        \"AT\",\n        \"AZ\",\n        \"BS\",\n        \"BH\",\n        \"BD\",\n        \"BB\",\n        \"BY\",\n        \"BE\",\n        \"BZ\",\n        \"BJ\",\n        \"BM\",\n        \"BT\",\n        \"BO\",\n        \"BQ\",\n        \"BA\",\n        \"BW\",\n        \"BV\",\n        \"BR\",\n        \"IO\",\n        \"BN\",\n        \"BG\",\n        \"BF\",\n        \"BI\",\n        \"CV\",\n        \"KH\",\n        \"CM\",\n        \"CA\",\n        \"KY\",\n        \"CF\",\n        \"TD\",\n        \"CL\",\n        \"CN\",\n        \"CX\",\n        \"CC\",\n        \"CO\",\n        \"KM\",\n        \"CG\",\n        \"CD\",\n        \"CK\",\n        \"CR\",\n        \"HR\",\n        \"CU\",\n        \"CW\",\n        \"CY\",\n        \"CZ\",\n        \"CI\",\n        \"DK\",\n        \"DJ\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"EG\",\n        \"SV\",\n        \"GQ\",\n        \"ER\",\n        \"EE\",\n        \"SZ\",\n        \"ET\",\n        \"FK\",\n        \"FO\",\n        \"FJ\",\n        \"FI\",\n        \"FR\",\n        \"GF\",\n        \"PF\",\n        \"TF\",\n        \"GA\",\n        \"GM\",\n        \"GE\",\n        \"DE\",\n        \"GH\",\n        \"GI\",\n        \"GR\",\n        \"GL\",\n        \"GD\",\n        \"GP\",\n        \"GU\",\n        \"GT\",\n        \"GG\",\n        \"GN\",\n        \"GW\",\n        \"GY\",\n        \"HT\",\n        \"HM\",\n        \"VA\",\n        \"HN\",\n        \"HK\",\n        \"HU\",\n        \"IS\",\n        \"IN\",\n        \"ID\",\n        \"IR\",\n        \"IQ\",\n        \"IE\",\n        \"IM\",\n        \"IL\",\n        \"IT\",\n        \"JM\",\n        \"JP\",\n        \"JE\",\n        \"JO\",\n        \"KZ\",\n        \"KE\",\n        \"KI\",\n        \"KP\",\n        \"KR\",\n        \"KW\",\n        \"KG\",\n        \"LA\",\n        \"LV\",\n        \"LB\",\n        \"LS\",\n        \"LR\",\n        \"LY\",\n        \"LI\",\n        \"LT\",\n        \"LU\",\n        \"MO\",\n        \"MG\",\n        \"MW\",\n        \"MY\",\n        \"MV\",\n        \"ML\",\n        \"MT\",\n        \"MH\",\n        \"MQ\",\n        \"MR\",\n        \"MU\",\n        \"YT\",\n        \"MX\",\n        \"FM\",\n        \"MD\",\n        \"MC\",\n        \"MN\",\n        \"ME\",\n        \"MS\",\n        \"MA\",\n        \"MZ\",\n        \"MM\",\n        \"NA\",\n        \"NR\",\n        \"NP\",\n        \"NL\",\n        \"NC\",\n        \"NZ\",\n        \"NI\",\n        \"NE\",\n        \"NG\",\n        \"NU\",\n        \"NF\",\n        \"MK\",\n        \"MP\",\n        \"NO\",\n        \"OM\",\n        \"PK\",\n        \"PW\",\n        \"PS\",\n        \"PA\",\n        \"PG\",\n        \"PY\",\n        \"PE\",\n        \"PH\",\n        \"PN\",\n        \"PL\",\n        \"PT\",\n        \"PR\",\n        \"QA\",\n        \"RO\",\n        \"RU\",\n        \"RW\",\n        \"RE\",\n        \"BL\",\n        \"SH\",\n        \"KN\",\n        \"LC\",\n        \"MF\",\n        \"PM\",\n        \"VC\",\n        \"WS\",\n        \"SM\",\n        \"ST\",\n        \"SA\",\n        \"SN\",\n        \"RS\",\n        \"SC\",\n        \"SL\",\n        \"SG\",\n        \"SX\",\n        \"SK\",\n        \"SI\",\n        \"SB\",\n        \"SO\",\n        \"ZA\",\n        \"GS\",\n        \"SS\",\n        \"ES\",\n        \"LK\",\n        \"SD\",\n        \"SR\",\n        \"SJ\",\n        \"SE\",\n        \"CH\",\n        \"SY\",\n        \"TW\",\n        \"TJ\",\n        \"TZ\",\n        \"TH\",\n        \"TL\",\n        \"TG\",\n        \"TK\",\n        \"TO\",\n        \"TT\",\n        \"TN\",\n        \"TM\",\n        \"TC\",\n        \"TV\",\n        \"TR\",\n        \"UG\",\n        \"UA\",\n        \"AE\",\n        \"GB\",\n        \"US\",\n        \"UM\",\n        \"UY\",\n        \"UZ\",\n        \"VU\",\n        \"VE\",\n        \"VN\",\n        \"VG\",\n        \"VI\",\n        \"WF\",\n        \"EH\",\n        \"YE\",\n        \"ZM\",\n        \"ZW\",\n        \"AX\"\n      ],\n      \"enumTitles\": [\n        \"Afghanistan\",\n        \"Albania\",\n        \"Algeria\",\n        \"American Samoa\",\n        \"Andorra\",\n        \"Angola\",\n        \"Anguilla\",\n        \"Antarctica\",\n        \"Antigua and Barbuda\",\n        \"Argentina\",\n        \"Armenia\",\n        \"Aruba\",\n        \"Australia\",\n        \"Austria\",\n        \"Azerbaijan\",\n        \"Bahamas\",\n        \"Bahrain\",\n        \"Bangladesh\",\n        \"Barbados\",\n        \"Belarus\",\n        \"Belgium\",\n        \"Belize\",\n        \"Benin\",\n        \"Bermuda\",\n        \"Bhutan\",\n        \"Bolivia, Plurinational State of\",\n        \"Bonaire, Sint Eustatius and Saba\",\n        \"Bosnia and Herzegovina\",\n        \"Botswana\",\n        \"Bouvet Island\",\n        \"Brazil\",\n        \"British Indian Ocean Territory\",\n        \"Brunei Darussalam\",\n        \"Bulgaria\",\n        \"Burkina Faso\",\n        \"Burundi\",\n        \"Cabo Verde\",\n        \"Cambodia\",\n        \"Cameroon\",\n        \"Canada\",\n        \"Cayman Islands\",\n        \"Central African Republic\",\n        \"Chad\",\n        \"Chile\",\n        \"China\",\n        \"Christmas Island\",\n        \"Cocos (Keeling) Islands\",\n        \"Colombia\",\n        \"Comoros\",\n        \"Congo\",\n        \"Congo, The Democratic Republic of the\",\n        \"Cook Islands\",\n        \"Costa Rica\",\n        \"Croatia\",\n        \"Cuba\",\n        \"Curacao\",\n        \"Cyprus\",\n        \"Czechia\",\n        \"Cote d'Ivoire\",\n        \"Denmark\",\n        \"Djibouti\",\n        \"Dominica\",\n        \"Dominican Republic\",\n        \"Ecuador\",\n        \"Egypt\",\n        \"El Salvador\",\n        \"Equatorial Guinea\",\n        \"Eritrea\",\n        \"Estonia\",\n        \"Eswatini\",\n        \"Ethiopia\",\n        \"Falkland Islands (Malvinas)\",\n        \"Faroe Islands\",\n        \"Fiji\",\n        \"Finland\",\n        \"France\",\n        \"French Guiana\",\n        \"French Polynesia\",\n        \"French Southern Territories\",\n        \"Gabon\",\n        \"Gambia\",\n        \"Georgia\",\n        \"Germany\",\n        \"Ghana\",\n        \"Gibraltar\",\n        \"Greece\",\n        \"Greenland\",\n        \"Grenada\",\n        \"Guadeloupe\",\n        \"Guam\",\n        \"Guatemala\",\n        \"Guernsey\",\n        \"Guinea\",\n        \"Guinea-Bissau\",\n        \"Guyana\",\n        \"Haiti\",\n        \"Heard Island and McDonald Islands\",\n        \"Holy See (Vatican City State)\",\n        \"Honduras\",\n        \"Hong Kong\",\n        \"Hungary\",\n        \"Iceland\",\n        \"India\",\n        \"Indonesia\",\n        \"Iran, Islamic Republic of\",\n        \"Iraq\",\n        \"Ireland\",\n        \"Isle of Man\",\n        \"Israel\",\n        \"Italy\",\n        \"Jamaica\",\n        \"Japan\",\n        \"Jersey\",\n        \"Jordan\",\n        \"Kazakhstan\",\n        \"Kenya\",\n        \"Kiribati\",\n        \"Korea, Democratic People's Republic of\",\n        \"Korea, Republic of\",\n        \"Kuwait\",\n        \"Kyrgyzstan\",\n        \"Lao People's Democratic Republic\",\n        \"Latvia\",\n        \"Lebanon\",\n        \"Lesotho\",\n        \"Liberia\",\n        \"Libya\",\n        \"Liechtenstein\",\n        \"Lithuania\",\n        \"Luxembourg\",\n        \"Macao\",\n        \"Madagascar\",\n        \"Malawi\",\n        \"Malaysia\",\n        \"Maldives\",\n        \"Mali\",\n        \"Malta\",\n        \"Marshall Islands\",\n        \"Martinique\",\n        \"Mauritania\",\n        \"Mauritius\",\n        \"Mayotte\",\n        \"Mexico\",\n        \"Micronesia, Federated States of\",\n        \"Moldova, Republic of\",\n        \"Monaco\",\n        \"Mongolia\",\n        \"Montenegro\",\n        \"Montserrat\",\n        \"Morocco\",\n        \"Mozambique\",\n        \"Myanmar\",\n        \"Namibia\",\n        \"Nauru\",\n        \"Nepal\",\n        \"Netherlands\",\n        \"New Caledonia\",\n        \"New Zealand\",\n        \"Nicaragua\",\n        \"Niger\",\n        \"Nigeria\",\n        \"Niue\",\n        \"Norfolk Island\",\n        \"North Macedonia\",\n        \"Northern Mariana Islands\",\n        \"Norway\",\n        \"Oman\",\n        \"Pakistan\",\n        \"Palau\",\n        \"Palestine, State of\",\n        \"Panama\",\n        \"Papua New Guinea\",\n        \"Paraguay\",\n        \"Peru\",\n        \"Philippines\",\n        \"Pitcairn\",\n        \"Poland\",\n        \"Portugal\",\n        \"Puerto Rico\",\n        \"Qatar\",\n        \"Romania\",\n        \"Russian Federation\",\n        \"Rwanda\",\n        \"Reunion\",\n        \"Saint Barthelemy\",\n        \"Saint Helena, Ascension and Tristan da Cunha\",\n        \"Saint Kitts and Nevis\",\n        \"Saint Lucia\",\n        \"Saint Martin (French part)\",\n        \"Saint Pierre and Miquelon\",\n        \"Saint Vincent and the Grenadines\",\n        \"Samoa\",\n        \"San Marino\",\n        \"Sao Tome and Principe\",\n        \"Saudi Arabia\",\n        \"Senegal\",\n        \"Serbia\",\n        \"Seychelles\",\n        \"Sierra Leone\",\n        \"Singapore\",\n        \"Sint Maarten (Dutch part)\",\n        \"Slovakia\",\n        \"Slovenia\",\n        \"Solomon Islands\",\n        \"Somalia\",\n        \"South Africa\",\n        \"South Georgia and the South Sandwich Islands\",\n        \"South Sudan\",\n        \"Spain\",\n        \"Sri Lanka\",\n        \"Sudan\",\n        \"Suriname\",\n        \"Svalbard and Jan Mayen\",\n        \"Sweden\",\n        \"Switzerland\",\n        \"Syrian Arab Republic\",\n        \"Taiwan, Province of China\",\n        \"Tajikistan\",\n        \"Tanzania, United Republic of\",\n        \"Thailand\",\n        \"Timor-Leste\",\n        \"Togo\",\n        \"Tokelau\",\n        \"Tonga\",\n        \"Trinidad and Tobago\",\n        \"Tunisia\",\n        \"Turkmenistan\",\n        \"Turks and Caicos Islands\",\n        \"Tuvalu\",\n        \"Turkiye\",\n        \"Uganda\",\n        \"Ukraine\",\n        \"United Arab Emirates\",\n        \"United Kingdom\",\n        \"United States\",\n        \"United States Minor Outlying Islands\",\n        \"Uruguay\",\n        \"Uzbekistan\",\n        \"Vanuatu\",\n        \"Venezuela, Bolivarian Republic of\",\n        \"Viet Nam\",\n        \"Virgin Islands, British\",\n        \"Virgin Islands, U.S.\",\n        \"Wallis and Futuna\",\n        \"Western Sahara\",\n        \"Yemen\",\n        \"Zambia\",\n        \"Zimbabwe\",\n        \"Aland Islands\"\n      ],\n      \"default\": \"US\",\n      \"prefill\": \"US\"\n    },\n    \"locale\": {\n      \"title\": \"Locale\",\n      \"type\": \"string\",\n      \"description\": \"Language and region hint for the Discover feed, for example en-US or de-DE. Snapchat decides which stories match.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en-US\",\n        \"en-GB\",\n        \"en-CA\",\n        \"en-AU\",\n        \"en-IN\",\n        \"en-PK\",\n        \"en-NZ\",\n        \"en-IE\",\n        \"en-ZA\",\n        \"en-PH\",\n        \"en-SG\",\n        \"es-ES\",\n        \"es-MX\",\n        \"es-AR\",\n        \"es-CO\",\n        \"pt-BR\",\n        \"pt-PT\",\n        \"fr-FR\",\n        \"fr-CA\",\n        \"de-DE\",\n        \"de-AT\",\n        \"de-CH\",\n        \"it-IT\",\n        \"nl-NL\",\n        \"nl-BE\",\n        \"pl-PL\",\n        \"tr-TR\",\n        \"ru-RU\",\n        \"uk-UA\",\n        \"sv-SE\",\n        \"nb-NO\",\n        \"da-DK\",\n        \"fi-FI\",\n        \"cs-CZ\",\n        \"sk-SK\",\n        \"hu-HU\",\n        \"ro-RO\",\n        \"bg-BG\",\n        \"hr-HR\",\n        \"sr-RS\",\n        \"sl-SI\",\n        \"el-GR\",\n        \"he-IL\",\n        \"ar-SA\",\n        \"ar-AE\",\n        \"ar-EG\",\n        \"fa-IR\",\n        \"ur-PK\",\n        \"hi-IN\",\n        \"bn-BD\",\n        \"ta-IN\",\n        \"te-IN\",\n        \"id-ID\",\n        \"ms-MY\",\n        \"th-TH\",\n        \"vi-VN\",\n        \"ja-JP\",\n        \"ko-KR\",\n        \"zh-CN\",\n        \"zh-TW\",\n        \"fil-PH\"\n      ],\n      \"enumTitles\": [\n        \"English (United States)\",\n        \"English (United Kingdom)\",\n        \"English (Canada)\",\n        \"English (Australia)\",\n        \"English (India)\",\n        \"English (Pakistan)\",\n        \"English (New Zealand)\",\n        \"English (Ireland)\",\n        \"English (South Africa)\",\n        \"English (Philippines)\",\n        \"English (Singapore)\",\n        \"Spanish (Spain)\",\n        \"Spanish (Mexico)\",\n        \"Spanish (Argentina)\",\n        \"Spanish (Colombia)\",\n        \"Portuguese (Brazil)\",\n        \"Portuguese (Portugal)\",\n        \"French (France)\",\n        \"French (Canada)\",\n        \"German (Germany)\",\n        \"German (Austria)\",\n        \"German (Switzerland)\",\n        \"Italian (Italy)\",\n        \"Dutch (Netherlands)\",\n        \"Dutch (Belgium)\",\n        \"Polish (Poland)\",\n        \"Turkish (Turkey)\",\n        \"Russian (Russia)\",\n        \"Ukrainian (Ukraine)\",\n        \"Swedish (Sweden)\",\n        \"Norwegian (Norway)\",\n        \"Danish (Denmark)\",\n        \"Finnish (Finland)\",\n        \"Czech (Czechia)\",\n        \"Slovak (Slovakia)\",\n        \"Hungarian (Hungary)\",\n        \"Romanian (Romania)\",\n        \"Bulgarian (Bulgaria)\",\n        \"Croatian (Croatia)\",\n        \"Serbian (Serbia)\",\n        \"Slovenian (Slovenia)\",\n        \"Greek (Greece)\",\n        \"Hebrew (Israel)\",\n        \"Arabic (Saudi Arabia)\",\n        \"Arabic (United Arab Emirates)\",\n        \"Arabic (Egypt)\",\n        \"Persian (Iran)\",\n        \"Urdu (Pakistan)\",\n        \"Hindi (India)\",\n        \"Bengali (Bangladesh)\",\n        \"Tamil (India)\",\n        \"Telugu (India)\",\n        \"Indonesian (Indonesia)\",\n        \"Malay (Malaysia)\",\n        \"Thai (Thailand)\",\n        \"Vietnamese (Vietnam)\",\n        \"Japanese (Japan)\",\n        \"Korean (South Korea)\",\n        \"Chinese (Simplified)\",\n        \"Chinese (Traditional)\",\n        \"Filipino (Philippines)\"\n      ],\n      \"default\": \"en-US\",\n      \"prefill\": \"en-US\"\n    },\n    \"storyTypes\": {\n      \"title\": \"Story types\",\n      \"type\": \"string\",\n      \"description\": \"(mode=discover) Keep every story, only publisher shows, only public user stories, or only publisher stories.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"shows\",\n        \"publicUserStories\",\n        \"publishers\"\n      ],\n      \"enumTitles\": [\n        \"All stories\",\n        \"Publisher shows only\",\n        \"Public user stories only\",\n        \"Publisher stories only\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"publisherUrlsOrIds\": {\n      \"title\": \"Publisher URLs or IDs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=byPublisher) Publisher or show page URLs (snapchat.com/p/<id>), story.snapchat.com links, or bare businessProfileId UUIDs. One record is produced per publisher, with the latest episodes nested inside.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"episodeUrls\": {\n      \"title\": \"Episode URLs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=byEpisodeUrl) Episode page URLs of the form snapchat.com/p/<publisherId>/<storyId>. Each URL returns one episode record with its snap list and playable HLS URL.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"includeEpisodes\": {\n      \"title\": \"Expand full season history\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Fetch every season's full episode history instead of only the 13-14 episodes embedded in the page. Adds one request per 50 episodes and respects the episode cap.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxEpisodesPerPublisher\": {\n      \"title\": \"Maximum episodes per publisher\",\n      \"type\": \"integer\",\n      \"description\": \"(mode=byPublisher with includeEpisodes) Maximum episodes collected across all seasons of one publisher.\",\n      \"default\": 100,\n      \"prefill\": 10,\n      \"minimum\": 1,\n      \"maximum\": 2000\n    },\n    \"includeEpisodeMedia\": {\n      \"title\": \"Include episode media\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Fetch each episode's snap list and HLS video URL. Adds one request per episode; off by default.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional advanced override. The actor works without a proxy; set this only if you want to route requests through a specific Apify Proxy configuration.\",\n      \"editor\": \"proxy\",\n      \"nullable\": true\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Snapchat Discover Publisher Show Extractor\n\nRead Snapchat's public Discover surface without a Snapchat account. This actor collects the current Discover feed for a chosen country and locale, looks up publisher and show pages, expands a show's full season history, and pulls the snaps and HLS video URL of individual episodes.\n\nEverything is read from public, anonymous web endpoints. No cookies, login, API key, or proxy setup is needed.\n\n## What this actor does\n\n- **Three modes** - the Discover feed, publisher/show profiles, or individual episode pages\n- **Country and locale aware** - choose from 249 countries and 61 Snapchat locales\n- **Story filters** - shows, public user stories, publishers or all\n- **Publisher depth** - profile, subscriber count, seasons, latest episodes and optional full history\n- **Episode media** - HLS playback URLs and every snap preview, with optional per-episode enrichment\n- **Reliable pagination** - tap-ID cursor pagination with retries, host fallback, a circuit breaker and migration-safe state\n- **Empty fields are omitted** - never `null`, blank or placeholder values\n\n## Data source\n\nSnapchat serves Discover as a server-rendered page plus a public web GraphQL endpoint used by its own web player. This actor reads both:\n\n- `snapchat.com/discover` for a small embedded snapshot (used as an automatic fallback)\n- the public web-stories GraphQL endpoint for the paginated Discover feed, publisher season lists, and episode media\n- `snapchat.com/p/<publisherId>` for publisher profiles and the latest episodes\n\nAll requests are ordinary HTTP requests from the actor container. Media links point at Snapchat's public CDN and were verified to return `200` from a clean client.\n\n## Modes\n\n| Mode | What you get | Typical input |\n|---|---|---|\n| `discover` (default) | One row per story currently in the Discover feed. Shows include the episode title, creator profile, preview snap, and HLS track. | `country`, `locale`, `storyTypes`, `maxStories` |\n| `byPublisher` | One row per publisher/show: profile, subscriber count, season summary, the latest episodes, and optionally every episode in every season plus episode media. | `publisherUrlsOrIds`, `includeEpisodes`, `maxEpisodesPerPublisher`, `includeEpisodeMedia` |\n| `byEpisodeUrl` | One row per episode URL with publisher context, every snap preview, and the playable HLS URL. | `episodeUrls` |\n\nThe Discover feed is paginated automatically: the actor keeps requesting the next batch and stops at `maxStories`, when Snapchat returns no new stories, or when the safety round limit is reached.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `discover` | Which surface to collect. |\n| `maxStories` | integer (1-500) | `50` | Maximum records pushed. Discover stories, publisher rows, and episode rows all count one each. |\n| `country` | select | `US` | ISO 3166-1 alpha-2 country context. All countries are listed. |\n| `locale` | select | `en-US` | Language and region hint for the Discover feed (61 common Snapchat locales). |\n| `storyTypes` | select | `all` | `all`, `shows`, `publicUserStories`, or `publishers`. Discover mode only. |\n| `publisherUrlsOrIds` | string list | `[]` | Publisher/show page URLs, `story.snapchat.com` links, or bare business profile UUIDs. `byPublisher` only. |\n| `episodeUrls` | string list | `[]` | Episode URLs shaped like `snapchat.com/p/<publisherId>/<storyId>`. `byEpisodeUrl` only. |\n| `includeEpisodes` | boolean | `false` | Expand every season into its full episode list. `byPublisher` only. |\n| `maxEpisodesPerPublisher` | integer (1-2000) | `100` | Episode cap across all seasons of one publisher. |\n| `includeEpisodeMedia` | boolean | `false` | Fetch each episode's snap list and HLS URL. `byPublisher` only. |\n| `proxyConfiguration` | proxy | empty | Optional advanced override. Leave empty; the actor works without a proxy. |\n\n### Example: Discover feed\n\n```json\n{\n  \"mode\": \"discover\",\n  \"country\": \"US\",\n  \"locale\": \"en-US\",\n  \"storyTypes\": \"shows\",\n  \"maxStories\": 40\n}\n```\n\n### Example: publisher with full episode history\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"https://www.snapchat.com/p/efd8a13d-b69a-41d0-9c04-d19f87829798\"],\n  \"includeEpisodes\": true,\n  \"maxEpisodesPerPublisher\": 80\n}\n```\n\n### Example: one episode\n\n```json\n{\n  \"mode\": \"byEpisodeUrl\",\n  \"episodeUrls\": [\"https://www.snapchat.com/p/dcb36ae8-b313-4eef-b24c-ccc20fe4d872/3137397659916288\"]\n}\n```\n\n## Output per record type\n\nThe dataset contains one object per record. Every record has a `recordType`, a `sourceUrl`, and a `scrapedAt` timestamp. Empty fields are omitted instead of written as `null`.\n\n### `recordType: \"discoverStory\"`\n\n| Field | Description |\n|---|---|\n| `storyKey`, `storyId`, `storyType`, `title`, `tapId` | Story identity and type (`SHOW`, `PUBLIC_USER_STORY`, or `PUBLISHER`). `storyKey` is the unique feed key; `storyId` is Snapchat's story ID and equals the creator's username for public user stories, so it can repeat when one creator has several stories in the feed. |\n| `thumbnailUrl` | Cover image URL. |\n| `publishedAt` | Publish time in ISO 8601 UTC. |\n| `videoTrackUrl` | HLS playlist for show episodes. |\n| `creator` | `businessProfileId`, `title`, `bio`, `username`, `badge`, profile images, `primaryColor`. |\n| `previewSnap` | `snapId`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `index`. |\n| `totalSnaps` | Number of snaps in the story. |\n\n### `recordType: \"publisher\"`\n\n| Field | Description |\n|---|---|\n| `publisherId`, `publisherTitle`, `publisherUrl` | Publisher identity and public page. |\n| `bio`, `subscriberCount`, `publisherType`, `username`, `badge` | Profile metadata. |\n| `profilePictureUrl`, `squareHeroImageUrl`, `snapcodeImageUrl`, `primaryColor` | Brand images and color. |\n| `websiteUrl` | Present only when the profile lists one. |\n| `seasonCount`, `seasons` | Season IDs, season numbers, declared episode counts, and actual counts when expanded. |\n| `declaredEpisodeCount` | Sum of the season list's declared counts. |\n| `latestEpisodes` | The 13-14 latest episodes embedded in the page. |\n| `episodes`, `episodesReturned` | Full season history and its size when `includeEpisodes` is on. |\n| `episode objects` | `storyId`, `title`, `storyType`, `thumbnailUrl`, `videoTrackUrl`, `publishedAt`, `seasonNumber`, `episodeNumber`, `storyUrl`; with `includeEpisodeMedia`: `snapCount` and `snaps[]`. |\n\n### `recordType: \"episode\"`\n\n| Field | Description |\n|---|---|\n| `storyId`, `title`, `storyType`, `storyUrl` | Episode identity. |\n| `publisherId`, `publisherTitle` | Publisher context. |\n| `seasonNumber`, `episodeNumber` | Present when the publisher page exposes them. |\n| `thumbnailUrl`, `videoTrackUrl` | Cover image and playable HLS URL. |\n| `snapCount`, `snaps` | Each snap's `snapId`, `index`, `mediaType`, `mediaUrl`, `mediaPreviewUrl`, `intervalStartTimeMs`. |\n\n### `recordType: \"error\"`\n\nInvalid or unavailable inputs produce a diagnostic row instead of failing the run:\n\n```json\n{\n  \"recordType\": \"error\",\n  \"status\": \"not_found\",\n  \"message\": \"Snapchat has no public publisher page for this ID.\",\n  \"sourceUrl\": \"https://www.snapchat.com/p/3c33e049-a638-4b4e-9960-78a2b87a9992\",\n  \"scrapedAt\": \"2026-11-11T14:00:00+00:00\"\n}\n```\n\n## Use cases\n\n- **Media monitoring** - track which publishers and shows are on Discover\n- **Publisher research** - profile publishers, their subscriber counts and season output\n- **Content benchmarking** - compare show formats, episode cadence and media availability\n- **Trend analysis** - collect regional Discover feeds over time\n- **Episode and media archives** - resolve episode pages into snap previews and HLS playback URLs\n\n## FAQ\n\n**Do I need a Snapchat account, cookies, or a proxy?**\nNo. Every surface used here is public and works anonymously. The optional proxy field exists only for users who want a specific connection.\n\n**Why does the Discover feed return fewer rows than `maxStories`?**\nThe feed is finite and changes constantly. The actor keeps paginating until Snapchat returns no new stories. A run that asks for 500 rows can legitimately end with the size of the current feed.\n\n**Why do some publisher IDs return a `not_found` error?**\nDiscover contains public user stories and retired shows that do not have a publisher page. The actor reports the missing page per input and continues with the remaining inputs.\n\n**Why is `videoTrackUrl` missing from some publisher season rows?**\nSnapchat's season list does not include the HLS track. Enable `includeEpisodeMedia` to fetch each episode's media detail, or use `byEpisodeUrl` for a single episode.\n\n**Can I get every episode of a long-running show?**\nYes. Set `includeEpisodes` to `true` and raise `maxEpisodesPerPublisher`. The actor walks each season's cursor. A small number of rows can differ from the season list's declared count because Snapchat's declaration and its episode endpoint do not always agree.\n\n**Are the media URLs permanent?**\nThey are public CDN URLs that returned `200` during verification. Snapchat may rotate or expire individual assets; the actor stores the URL it received, not a copy of the media.\n\n## Limitations\n\n- Discover availability and publisher pages depend on the country context. Some pages answer `451` (region-restricted); the actor reports that as an error row.\n- Per-snap `mediaUrl` is populated by Snapchat for only a small subset of snaps (usually the first snaps of an episode). Preview images are available for almost every snap.\n- Publisher season lists occasionally declare more episodes than the season endpoint returns. The actor reports both numbers.\n- Snapchat's web GraphQL schema is undocumented and can change. The `/discover` server-rendered snapshot is kept as an automatic fallback, but it only carries a small number of stories.\n- Spotlight posts, creator profiles, comments, and transcripts are separate surfaces and are not part of this actor.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-discover-publisher-show-extractor",
      "title": "Snapchat Discover Publisher Show Extractor",
      "description": "Collect Snapchat's public Discover feed, publisher and show profiles, complete season episode history, and episode media without a Snapchat login.",
      "version": "1.0",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Snapchat Discover Publisher Show Extractor Input",
        "description": "Collect Snapchat's public Discover feed, publisher/show profiles, and episode media without a Snapchat login. Pick a mode and the fields it uses.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to collect: the current Discover feed, publisher/show profiles, or individual episode URLs.",
            "editor": "select",
            "enum": [
              "discover",
              "byPublisher",
              "byEpisodeUrl"
            ],
            "enumTitles": [
              "Discover feed (current stories)",
              "Publishers and shows (URLs or IDs)",
              "Episode URLs (snaps and media)"
            ],
            "default": "discover",
            "prefill": "discover"
          },
          "maxStories": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Maximum dataset records this run may push. In Discover mode this counts stories; in the other modes it counts publisher or episode records. Nested episode lists are not counted separately.",
            "default": 50,
            "prefill": 20,
            "minimum": 1,
            "maximum": 500
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country context used for the Discover feed and episode requests. Availability is set by Snapchat and some publishers are region-restricted.",
            "editor": "select",
            "enum": [
              "AF",
              "AL",
              "DZ",
              "AS",
              "AD",
              "AO",
              "AI",
              "AQ",
              "AG",
              "AR",
              "AM",
              "AW",
              "AU",
              "AT",
              "AZ",
              "BS",
              "BH",
              "BD",
              "BB",
              "BY",
              "BE",
              "BZ",
              "BJ",
              "BM",
              "BT",
              "BO",
              "BQ",
              "BA",
              "BW",
              "BV",
              "BR",
              "IO",
              "BN",
              "BG",
              "BF",
              "BI",
              "CV",
              "KH",
              "CM",
              "CA",
              "KY",
              "CF",
              "TD",
              "CL",
              "CN",
              "CX",
              "CC",
              "CO",
              "KM",
              "CG",
              "CD",
              "CK",
              "CR",
              "HR",
              "CU",
              "CW",
              "CY",
              "CZ",
              "CI",
              "DK",
              "DJ",
              "DM",
              "DO",
              "EC",
              "EG",
              "SV",
              "GQ",
              "ER",
              "EE",
              "SZ",
              "ET",
              "FK",
              "FO",
              "FJ",
              "FI",
              "FR",
              "GF",
              "PF",
              "TF",
              "GA",
              "GM",
              "GE",
              "DE",
              "GH",
              "GI",
              "GR",
              "GL",
              "GD",
              "GP",
              "GU",
              "GT",
              "GG",
              "GN",
              "GW",
              "GY",
              "HT",
              "HM",
              "VA",
              "HN",
              "HK",
              "HU",
              "IS",
              "IN",
              "ID",
              "IR",
              "IQ",
              "IE",
              "IM",
              "IL",
              "IT",
              "JM",
              "JP",
              "JE",
              "JO",
              "KZ",
              "KE",
              "KI",
              "KP",
              "KR",
              "KW",
              "KG",
              "LA",
              "LV",
              "LB",
              "LS",
              "LR",
              "LY",
              "LI",
              "LT",
              "LU",
              "MO",
              "MG",
              "MW",
              "MY",
              "MV",
              "ML",
              "MT",
              "MH",
              "MQ",
              "MR",
              "MU",
              "YT",
              "MX",
              "FM",
              "MD",
              "MC",
              "MN",
              "ME",
              "MS",
              "MA",
              "MZ",
              "MM",
              "NA",
              "NR",
              "NP",
              "NL",
              "NC",
              "NZ",
              "NI",
              "NE",
              "NG",
              "NU",
              "NF",
              "MK",
              "MP",
              "NO",
              "OM",
              "PK",
              "PW",
              "PS",
              "PA",
              "PG",
              "PY",
              "PE",
              "PH",
              "PN",
              "PL",
              "PT",
              "PR",
              "QA",
              "RO",
              "RU",
              "RW",
              "RE",
              "BL",
              "SH",
              "KN",
              "LC",
              "MF",
              "PM",
              "VC",
              "WS",
              "SM",
              "ST",
              "SA",
              "SN",
              "RS",
              "SC",
              "SL",
              "SG",
              "SX",
              "SK",
              "SI",
              "SB",
              "SO",
              "ZA",
              "GS",
              "SS",
              "ES",
              "LK",
              "SD",
              "SR",
              "SJ",
              "SE",
              "CH",
              "SY",
              "TW",
              "TJ",
              "TZ",
              "TH",
              "TL",
              "TG",
              "TK",
              "TO",
              "TT",
              "TN",
              "TM",
              "TC",
              "TV",
              "TR",
              "UG",
              "UA",
              "AE",
              "GB",
              "US",
              "UM",
              "UY",
              "UZ",
              "VU",
              "VE",
              "VN",
              "VG",
              "VI",
              "WF",
              "EH",
              "YE",
              "ZM",
              "ZW",
              "AX"
            ],
            "enumTitles": [
              "Afghanistan",
              "Albania",
              "Algeria",
              "American Samoa",
              "Andorra",
              "Angola",
              "Anguilla",
              "Antarctica",
              "Antigua and Barbuda",
              "Argentina",
              "Armenia",
              "Aruba",
              "Australia",
              "Austria",
              "Azerbaijan",
              "Bahamas",
              "Bahrain",
              "Bangladesh",
              "Barbados",
              "Belarus",
              "Belgium",
              "Belize",
              "Benin",
              "Bermuda",
              "Bhutan",
              "Bolivia, Plurinational State of",
              "Bonaire, Sint Eustatius and Saba",
              "Bosnia and Herzegovina",
              "Botswana",
              "Bouvet Island",
              "Brazil",
              "British Indian Ocean Territory",
              "Brunei Darussalam",
              "Bulgaria",
              "Burkina Faso",
              "Burundi",
              "Cabo Verde",
              "Cambodia",
              "Cameroon",
              "Canada",
              "Cayman Islands",
              "Central African Republic",
              "Chad",
              "Chile",
              "China",
              "Christmas Island",
              "Cocos (Keeling) Islands",
              "Colombia",
              "Comoros",
              "Congo",
              "Congo, The Democratic Republic of the",
              "Cook Islands",
              "Costa Rica",
              "Croatia",
              "Cuba",
              "Curacao",
              "Cyprus",
              "Czechia",
              "Cote d'Ivoire",
              "Denmark",
              "Djibouti",
              "Dominica",
              "Dominican Republic",
              "Ecuador",
              "Egypt",
              "El Salvador",
              "Equatorial Guinea",
              "Eritrea",
              "Estonia",
              "Eswatini",
              "Ethiopia",
              "Falkland Islands (Malvinas)",
              "Faroe Islands",
              "Fiji",
              "Finland",
              "France",
              "French Guiana",
              "French Polynesia",
              "French Southern Territories",
              "Gabon",
              "Gambia",
              "Georgia",
              "Germany",
              "Ghana",
              "Gibraltar",
              "Greece",
              "Greenland",
              "Grenada",
              "Guadeloupe",
              "Guam",
              "Guatemala",
              "Guernsey",
              "Guinea",
              "Guinea-Bissau",
              "Guyana",
              "Haiti",
              "Heard Island and McDonald Islands",
              "Holy See (Vatican City State)",
              "Honduras",
              "Hong Kong",
              "Hungary",
              "Iceland",
              "India",
              "Indonesia",
              "Iran, Islamic Republic of",
              "Iraq",
              "Ireland",
              "Isle of Man",
              "Israel",
              "Italy",
              "Jamaica",
              "Japan",
              "Jersey",
              "Jordan",
              "Kazakhstan",
              "Kenya",
              "Kiribati",
              "Korea, Democratic People's Republic of",
              "Korea, Republic of",
              "Kuwait",
              "Kyrgyzstan",
              "Lao People's Democratic Republic",
              "Latvia",
              "Lebanon",
              "Lesotho",
              "Liberia",
              "Libya",
              "Liechtenstein",
              "Lithuania",
              "Luxembourg",
              "Macao",
              "Madagascar",
              "Malawi",
              "Malaysia",
              "Maldives",
              "Mali",
              "Malta",
              "Marshall Islands",
              "Martinique",
              "Mauritania",
              "Mauritius",
              "Mayotte",
              "Mexico",
              "Micronesia, Federated States of",
              "Moldova, Republic of",
              "Monaco",
              "Mongolia",
              "Montenegro",
              "Montserrat",
              "Morocco",
              "Mozambique",
              "Myanmar",
              "Namibia",
              "Nauru",
              "Nepal",
              "Netherlands",
              "New Caledonia",
              "New Zealand",
              "Nicaragua",
              "Niger",
              "Nigeria",
              "Niue",
              "Norfolk Island",
              "North Macedonia",
              "Northern Mariana Islands",
              "Norway",
              "Oman",
              "Pakistan",
              "Palau",
              "Palestine, State of",
              "Panama",
              "Papua New Guinea",
              "Paraguay",
              "Peru",
              "Philippines",
              "Pitcairn",
              "Poland",
              "Portugal",
              "Puerto Rico",
              "Qatar",
              "Romania",
              "Russian Federation",
              "Rwanda",
              "Reunion",
              "Saint Barthelemy",
              "Saint Helena, Ascension and Tristan da Cunha",
              "Saint Kitts and Nevis",
              "Saint Lucia",
              "Saint Martin (French part)",
              "Saint Pierre and Miquelon",
              "Saint Vincent and the Grenadines",
              "Samoa",
              "San Marino",
              "Sao Tome and Principe",
              "Saudi Arabia",
              "Senegal",
              "Serbia",
              "Seychelles",
              "Sierra Leone",
              "Singapore",
              "Sint Maarten (Dutch part)",
              "Slovakia",
              "Slovenia",
              "Solomon Islands",
              "Somalia",
              "South Africa",
              "South Georgia and the South Sandwich Islands",
              "South Sudan",
              "Spain",
              "Sri Lanka",
              "Sudan",
              "Suriname",
              "Svalbard and Jan Mayen",
              "Sweden",
              "Switzerland",
              "Syrian Arab Republic",
              "Taiwan, Province of China",
              "Tajikistan",
              "Tanzania, United Republic of",
              "Thailand",
              "Timor-Leste",
              "Togo",
              "Tokelau",
              "Tonga",
              "Trinidad and Tobago",
              "Tunisia",
              "Turkmenistan",
              "Turks and Caicos Islands",
              "Tuvalu",
              "Turkiye",
              "Uganda",
              "Ukraine",
              "United Arab Emirates",
              "United Kingdom",
              "United States",
              "United States Minor Outlying Islands",
              "Uruguay",
              "Uzbekistan",
              "Vanuatu",
              "Venezuela, Bolivarian Republic of",
              "Viet Nam",
              "Virgin Islands, British",
              "Virgin Islands, U.S.",
              "Wallis and Futuna",
              "Western Sahara",
              "Yemen",
              "Zambia",
              "Zimbabwe",
              "Aland Islands"
            ],
            "default": "US",
            "prefill": "US"
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "Language and region hint for the Discover feed, for example en-US or de-DE. Snapchat decides which stories match.",
            "editor": "select",
            "enum": [
              "en-US",
              "en-GB",
              "en-CA",
              "en-AU",
              "en-IN",
              "en-PK",
              "en-NZ",
              "en-IE",
              "en-ZA",
              "en-PH",
              "en-SG",
              "es-ES",
              "es-MX",
              "es-AR",
              "es-CO",
              "pt-BR",
              "pt-PT",
              "fr-FR",
              "fr-CA",
              "de-DE",
              "de-AT",
              "de-CH",
              "it-IT",
              "nl-NL",
              "nl-BE",
              "pl-PL",
              "tr-TR",
              "ru-RU",
              "uk-UA",
              "sv-SE",
              "nb-NO",
              "da-DK",
              "fi-FI",
              "cs-CZ",
              "sk-SK",
              "hu-HU",
              "ro-RO",
              "bg-BG",
              "hr-HR",
              "sr-RS",
              "sl-SI",
              "el-GR",
              "he-IL",
              "ar-SA",
              "ar-AE",
              "ar-EG",
              "fa-IR",
              "ur-PK",
              "hi-IN",
              "bn-BD",
              "ta-IN",
              "te-IN",
              "id-ID",
              "ms-MY",
              "th-TH",
              "vi-VN",
              "ja-JP",
              "ko-KR",
              "zh-CN",
              "zh-TW",
              "fil-PH"
            ],
            "enumTitles": [
              "English (United States)",
              "English (United Kingdom)",
              "English (Canada)",
              "English (Australia)",
              "English (India)",
              "English (Pakistan)",
              "English (New Zealand)",
              "English (Ireland)",
              "English (South Africa)",
              "English (Philippines)",
              "English (Singapore)",
              "Spanish (Spain)",
              "Spanish (Mexico)",
              "Spanish (Argentina)",
              "Spanish (Colombia)",
              "Portuguese (Brazil)",
              "Portuguese (Portugal)",
              "French (France)",
              "French (Canada)",
              "German (Germany)",
              "German (Austria)",
              "German (Switzerland)",
              "Italian (Italy)",
              "Dutch (Netherlands)",
              "Dutch (Belgium)",
              "Polish (Poland)",
              "Turkish (Turkey)",
              "Russian (Russia)",
              "Ukrainian (Ukraine)",
              "Swedish (Sweden)",
              "Norwegian (Norway)",
              "Danish (Denmark)",
              "Finnish (Finland)",
              "Czech (Czechia)",
              "Slovak (Slovakia)",
              "Hungarian (Hungary)",
              "Romanian (Romania)",
              "Bulgarian (Bulgaria)",
              "Croatian (Croatia)",
              "Serbian (Serbia)",
              "Slovenian (Slovenia)",
              "Greek (Greece)",
              "Hebrew (Israel)",
              "Arabic (Saudi Arabia)",
              "Arabic (United Arab Emirates)",
              "Arabic (Egypt)",
              "Persian (Iran)",
              "Urdu (Pakistan)",
              "Hindi (India)",
              "Bengali (Bangladesh)",
              "Tamil (India)",
              "Telugu (India)",
              "Indonesian (Indonesia)",
              "Malay (Malaysia)",
              "Thai (Thailand)",
              "Vietnamese (Vietnam)",
              "Japanese (Japan)",
              "Korean (South Korea)",
              "Chinese (Simplified)",
              "Chinese (Traditional)",
              "Filipino (Philippines)"
            ],
            "default": "en-US",
            "prefill": "en-US"
          },
          "storyTypes": {
            "title": "Story types",
            "type": "string",
            "description": "(mode=discover) Keep every story, only publisher shows, only public user stories, or only publisher stories.",
            "editor": "select",
            "enum": [
              "all",
              "shows",
              "publicUserStories",
              "publishers"
            ],
            "enumTitles": [
              "All stories",
              "Publisher shows only",
              "Public user stories only",
              "Publisher stories only"
            ],
            "default": "all",
            "prefill": "all"
          },
          "publisherUrlsOrIds": {
            "title": "Publisher URLs or IDs",
            "type": "array",
            "description": "(mode=byPublisher) Publisher or show page URLs (snapchat.com/p/<id>), story.snapchat.com links, or bare businessProfileId UUIDs. One record is produced per publisher, with the latest episodes nested inside.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "episodeUrls": {
            "title": "Episode URLs",
            "type": "array",
            "description": "(mode=byEpisodeUrl) Episode page URLs of the form snapchat.com/p/<publisherId>/<storyId>. Each URL returns one episode record with its snap list and playable HLS URL.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeEpisodes": {
            "title": "Expand full season history",
            "type": "boolean",
            "description": "(mode=byPublisher) Fetch every season's full episode history instead of only the 13-14 episodes embedded in the page. Adds one request per 50 episodes and respects the episode cap.",
            "default": false,
            "prefill": false
          },
          "maxEpisodesPerPublisher": {
            "title": "Maximum episodes per publisher",
            "type": "integer",
            "description": "(mode=byPublisher with includeEpisodes) Maximum episodes collected across all seasons of one publisher.",
            "default": 100,
            "prefill": 10,
            "minimum": 1,
            "maximum": 2000
          },
          "includeEpisodeMedia": {
            "title": "Include episode media",
            "type": "boolean",
            "description": "(mode=byPublisher) Fetch each episode's snap list and HLS video URL. Adds one request per episode; off by default.",
            "default": false,
            "prefill": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional advanced override. The actor works without a proxy; set this only if you want to route requests through a specific Apify Proxy configuration.",
            "editor": "proxy",
            "nullable": true
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Discover Publisher Show Extractor Output",
        "description": "One dataset containing Discover story records, publisher/show records with nested episodes, or episode records with snap media. Every record carries a recordType field and no empty values.",
        "properties": {
          "stories": {
            "type": "string",
            "title": "Discover stories",
            "description": "Dataset items with recordType=discoverStory: the current Snapchat Discover feed for the selected country and locale.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "publishers": {
            "type": "string",
            "title": "Publishers and shows",
            "description": "Dataset items with recordType=publisher: profile, season summary, latest episodes, and optional full season history.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "episodes": {
            "type": "string",
            "title": "Episodes",
            "description": "Dataset items with recordType=episode: one episode per input URL, with its snap list and playable HLS URL.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "readme": "# Snapchat Discover Publisher Show Extractor\n\nRead Snapchat's public Discover surface without a Snapchat account. This actor collects the current Discover feed for a chosen country and locale, looks up publisher and show pages, expands a show's full season history, and pulls the snaps and HLS video URL of individual episodes.\n\nEverything is read from public, anonymous web endpoints. No cookies, login, API key, or proxy setup is needed.\n\n## What this actor does\n\n- **Three modes** - the Discover feed, publisher/show profiles, or individual episode pages\n- **Country and locale aware** - choose from 249 countries and 61 Snapchat locales\n- **Story filters** - shows, public user stories, publishers or all\n- **Publisher depth** - profile, subscriber count, seasons, latest episodes and optional full history\n- **Episode media** - HLS playback URLs and every snap preview, with optional per-episode enrichment\n- **Reliable pagination** - tap-ID cursor pagination with retries, host fallback, a circuit breaker and migration-safe state\n- **Empty fields are omitted** - never `null`, blank or placeholder values\n\n## Data source\n\nSnapchat serves Discover as a server-rendered page plus a public web GraphQL endpoint used by its own web player. This actor reads both:\n\n- `snapchat.com/discover` for a small embedded snapshot (used as an automatic fallback)\n- the public web-stories GraphQL endpoint for the paginated Discover feed, publisher season lists, and episode media\n- `snapchat.com/p/<publisherId>` for publisher profiles and the latest episodes\n\nAll requests are ordinary HTTP requests from the actor container. Media links point at Snapchat's public CDN and were verified to return `200` from a clean client.\n\n## Modes\n\n| Mode | What you get | Typical input |\n|---|---|---|\n| `discover` (default) | One row per story currently in the Discover feed. Shows include the episode title, creator profile, preview snap, and HLS track. | `country`, `locale`, `storyTypes`, `maxStories` |\n| `byPublisher` | One row per publisher/show: profile, subscriber count, season summary, the latest episodes, and optionally every episode in every season plus episode media. | `publisherUrlsOrIds`, `includeEpisodes`, `maxEpisodesPerPublisher`, `includeEpisodeMedia` |\n| `byEpisodeUrl` | One row per episode URL with publisher context, every snap preview, and the playable HLS URL. | `episodeUrls` |\n\nThe Discover feed is paginated automatically: the actor keeps requesting the next batch and stops at `maxStories`, when Snapchat returns no new stories, or when the safety round limit is reached.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `discover` | Which surface to collect. |\n| `maxStories` | integer (1-500) | `50` | Maximum records pushed. Discover stories, publisher rows, and episode rows all count one each. |\n| `country` | select | `US` | ISO 3166-1 alpha-2 country context. All countries are listed. |\n| `locale` | select | `en-US` | Language and region hint for the Discover feed (61 common Snapchat locales). |\n| `storyTypes` | select | `all` | `all`, `shows`, `publicUserStories`, or `publishers`. Discover mode only. |\n| `publisherUrlsOrIds` | string list | `[]` | Publisher/show page URLs, `story.snapchat.com` links, or bare business profile UUIDs. `byPublisher` only. |\n| `episodeUrls` | string list | `[]` | Episode URLs shaped like `snapchat.com/p/<publisherId>/<storyId>`. `byEpisodeUrl` only. |\n| `includeEpisodes` | boolean | `false` | Expand every season into its full episode list. `byPublisher` only. |\n| `maxEpisodesPerPublisher` | integer (1-2000) | `100` | Episode cap across all seasons of one publisher. |\n| `includeEpisodeMedia` | boolean | `false` | Fetch each episode's snap list and HLS URL. `byPublisher` only. |\n| `proxyConfiguration` | proxy | empty | Optional advanced override. Leave empty; the actor works without a proxy. |\n\n### Example: Discover feed\n\n```json\n{\n  \"mode\": \"discover\",\n  \"country\": \"US\",\n  \"locale\": \"en-US\",\n  \"storyTypes\": \"shows\",\n  \"maxStories\": 40\n}\n```\n\n### Example: publisher with full episode history\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"https://www.snapchat.com/p/efd8a13d-b69a-41d0-9c04-d19f87829798\"],\n  \"includeEpisodes\": true,\n  \"maxEpisodesPerPublisher\": 80\n}\n```\n\n### Example: one episode\n\n```json\n{\n  \"mode\": \"byEpisodeUrl\",\n  \"episodeUrls\": [\"https://www.snapchat.com/p/dcb36ae8-b313-4eef-b24c-ccc20fe4d872/3137397659916288\"]\n}\n```\n\n## Output per record type\n\nThe dataset contains one object per record. Every record has a `recordType`, a `sourceUrl`, and a `scrapedAt` timestamp. Empty fields are omitted instead of written as `null`.\n\n### `recordType: \"discoverStory\"`\n\n| Field | Description |\n|---|---|\n| `storyKey`, `storyId`, `storyType`, `title`, `tapId` | Story identity and type (`SHOW`, `PUBLIC_USER_STORY`, or `PUBLISHER`). `storyKey` is the unique feed key; `storyId` is Snapchat's story ID and equals the creator's username for public user stories, so it can repeat when one creator has several stories in the feed. |\n| `thumbnailUrl` | Cover image URL. |\n| `publishedAt` | Publish time in ISO 8601 UTC. |\n| `videoTrackUrl` | HLS playlist for show episodes. |\n| `creator` | `businessProfileId`, `title`, `bio`, `username`, `badge`, profile images, `primaryColor`. |\n| `previewSnap` | `snapId`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `index`. |\n| `totalSnaps` | Number of snaps in the story. |\n\n### `recordType: \"publisher\"`\n\n| Field | Description |\n|---|---|\n| `publisherId`, `publisherTitle`, `publisherUrl` | Publisher identity and public page. |\n| `bio`, `subscriberCount`, `publisherType`, `username`, `badge` | Profile metadata. |\n| `profilePictureUrl`, `squareHeroImageUrl`, `snapcodeImageUrl`, `primaryColor` | Brand images and color. |\n| `websiteUrl` | Present only when the profile lists one. |\n| `seasonCount`, `seasons` | Season IDs, season numbers, declared episode counts, and actual counts when expanded. |\n| `declaredEpisodeCount` | Sum of the season list's declared counts. |\n| `latestEpisodes` | The 13-14 latest episodes embedded in the page. |\n| `episodes`, `episodesReturned` | Full season history and its size when `includeEpisodes` is on. |\n| `episode objects` | `storyId`, `title`, `storyType`, `thumbnailUrl`, `videoTrackUrl`, `publishedAt`, `seasonNumber`, `episodeNumber`, `storyUrl`; with `includeEpisodeMedia`: `snapCount` and `snaps[]`. |\n\n### `recordType: \"episode\"`\n\n| Field | Description |\n|---|---|\n| `storyId`, `title`, `storyType`, `storyUrl` | Episode identity. |\n| `publisherId`, `publisherTitle` | Publisher context. |\n| `seasonNumber`, `episodeNumber` | Present when the publisher page exposes them. |\n| `thumbnailUrl`, `videoTrackUrl` | Cover image and playable HLS URL. |\n| `snapCount`, `snaps` | Each snap's `snapId`, `index`, `mediaType`, `mediaUrl`, `mediaPreviewUrl`, `intervalStartTimeMs`. |\n\n### `recordType: \"error\"`\n\nInvalid or unavailable inputs produce a diagnostic row instead of failing the run:\n\n```json\n{\n  \"recordType\": \"error\",\n  \"status\": \"not_found\",\n  \"message\": \"Snapchat has no public publisher page for this ID.\",\n  \"sourceUrl\": \"https://www.snapchat.com/p/3c33e049-a638-4b4e-9960-78a2b87a9992\",\n  \"scrapedAt\": \"2026-11-11T14:00:00+00:00\"\n}\n```\n\n## Use cases\n\n- **Media monitoring** - track which publishers and shows are on Discover\n- **Publisher research** - profile publishers, their subscriber counts and season output\n- **Content benchmarking** - compare show formats, episode cadence and media availability\n- **Trend analysis** - collect regional Discover feeds over time\n- **Episode and media archives** - resolve episode pages into snap previews and HLS playback URLs\n\n## FAQ\n\n**Do I need a Snapchat account, cookies, or a proxy?**\nNo. Every surface used here is public and works anonymously. The optional proxy field exists only for users who want a specific connection.\n\n**Why does the Discover feed return fewer rows than `maxStories`?**\nThe feed is finite and changes constantly. The actor keeps paginating until Snapchat returns no new stories. A run that asks for 500 rows can legitimately end with the size of the current feed.\n\n**Why do some publisher IDs return a `not_found` error?**\nDiscover contains public user stories and retired shows that do not have a publisher page. The actor reports the missing page per input and continues with the remaining inputs.\n\n**Why is `videoTrackUrl` missing from some publisher season rows?**\nSnapchat's season list does not include the HLS track. Enable `includeEpisodeMedia` to fetch each episode's media detail, or use `byEpisodeUrl` for a single episode.\n\n**Can I get every episode of a long-running show?**\nYes. Set `includeEpisodes` to `true` and raise `maxEpisodesPerPublisher`. The actor walks each season's cursor. A small number of rows can differ from the season list's declared count because Snapchat's declaration and its episode endpoint do not always agree.\n\n**Are the media URLs permanent?**\nThey are public CDN URLs that returned `200` during verification. Snapchat may rotate or expire individual assets; the actor stores the URL it received, not a copy of the media.\n\n## Limitations\n\n- Discover availability and publisher pages depend on the country context. Some pages answer `451` (region-restricted); the actor reports that as an error row.\n- Per-snap `mediaUrl` is populated by Snapchat for only a small subset of snaps (usually the first snaps of an episode). Preview images are available for almost every snap.\n- Publisher season lists occasionally declare more episodes than the season endpoint returns. The actor reports both numbers.\n- Snapchat's web GraphQL schema is undocumented and can change. The `/discover` server-rendered snapshot is kept as an automatic fallback, but it only carries a small number of stories.\n- Spotlight posts, creator profiles, comments, and transcripts are separate surfaces and are not part of this actor.\n"
    },
    "buildNumber": "1.0.2",
    "imageDigest": "7e99e4e434f5dcee309688e54386d653feb96a18f5077183ff321be66f539ac9",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012817777777777779
    }
  }
}