{
  "data": {
    "id": "p0RhqUcEm1QryIgKH",
    "actId": "9uJbBOcyQmzVkJGk7",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-03T21:36:57.640Z",
    "finishedAt": "2026-11-03T21:37:02.561Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4812,
      "runTimeSecs": 4.812,
      "computeUnits": 0.005346666666666666,
      "imageSizeBytes": 318975488
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Publisher & Show Episode Finder Input\",\n  \"description\": \"Look up Snapchat publishers, Snap Shows and episodes, or read the country Discover feed.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to collect: publisher catalogues, individual episodes, or the current Discover feed.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"byPublisher\",\n        \"byEpisodeUrl\",\n        \"discover\"\n      ],\n      \"enumTitles\": [\n        \"Publishers and shows\",\n        \"Episode URLs\",\n        \"Discover feed by country\"\n      ],\n      \"default\": \"byPublisher\",\n      \"prefill\": \"byPublisher\"\n    },\n    \"publisherUrlsOrIds\": {\n      \"title\": \"Publisher URLs or IDs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=byPublisher) Publisher or show page URLs, story.snapchat.com/p/{id} links, or bare businessProfileId UUIDs.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"efd8a13d-b69a-41d0-9c04-d19f87829798\"\n      ]\n    },\n    \"episodeUrls\": {\n      \"title\": \"Episode URLs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=byEpisodeUrl) Episode page URLs of the form snapchat.com/p/{publisherId}/{episodeId} or story.snapchat.com/p/{publisherId}/{episodeId}.\",\n      \"editor\": \"stringList\"\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Country context for episode requests and the Discover feed.\",\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        \"Curaçao\",\n        \"Cyprus\",\n        \"Czechia\",\n        \"Côte 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        \"Réunion\",\n        \"Saint Barthélemy\",\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        \"Türkiye\",\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        \"Åland Islands\"\n      ],\n      \"default\": \"US\",\n      \"prefill\": \"US\"\n    },\n    \"locale\": {\n      \"title\": \"Locale\",\n      \"type\": \"string\",\n      \"description\": \"(mode=discover) Language-region tag such as en-US, en-GB or de-DE. Invalid values fall back to en-US.\",\n      \"default\": \"en-US\",\n      \"prefill\": \"en-US\",\n      \"editor\": \"textfield\"\n    },\n    \"includeStories\": {\n      \"title\": \"Include full episode history\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Walk every season and return every publicly listed episode in episodes[]. The page's latest stories stay in premiumStories[] for compatibility.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeShowSeasons\": {\n      \"title\": \"Include season summary\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Include premiumShowSeasons[] with season IDs, numbers and declared episode counts.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeSpotlights\": {\n      \"title\": \"Include publisher Spotlights\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Include publisherSpotlights[] with media URLs, creator info and engagement stats.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeEpisodeMedia\": {\n      \"title\": \"Include episode media\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=byPublisher) Fetch episode-level HLS video tracks and snap media for each returned episode. Adds extra requests per episode.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxEpisodesPerPublisher\": {\n      \"title\": \"Max episodes per publisher\",\n      \"type\": \"integer\",\n      \"description\": \"(mode=byPublisher) Hard cap on episodes[] per publisher.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 100,\n      \"prefill\": 3\n    },\n    \"maxItems\": {\n      \"title\": \"Max dataset rows\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on dataset rows across all modes, including error rows.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 100,\n      \"prefill\": 1\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Snapchat Publisher & Show Episode Finder\n\nRead **Snapchat** publisher and Snap Show catalogues without logging in. Give the actor a publisher page URL, a bare business profile ID, or an episode URL and it returns the public profile, the latest page stories, every season, the full episode history, optional HLS media, and Spotlight cards. A Discover mode reads the current country feed with cursor-style pagination. HTTP-only, no cookies, no proxy setup.\n\n## What this actor does\n\n- **Three modes:** `byPublisher` for a profile and episode catalogue, `byEpisodeUrl` for one episode's snaps and HLS track, and `discover` for the country/locale feed\n- **Complete episode history:** walks every season with Snapchat's public `PublishedPremiumStories` cursor, not just the 13-14 stories embedded in the page\n- **Optional episode media:** adds the episode-level HLS `videoTrackUrl`, snap count and per-snap preview records\n- **Publisher Spotlights:** media URLs, creator details and engagement counters from the profile page\n- **Discover feed:** country and locale aware, paginated by tap IDs until the feed is exhausted or `maxItems` is reached\n- **Empty fields are omitted:** no nulls, no empty strings, no empty arrays and no 1970 placeholder dates\n\n## Output per publisher (`mode = byPublisher`)\n\n- `recordType: \"publisher\"`, `publisherId`, `pageUrl`\n- `displayName`, `username` — visible name and handle when the profile exposes one\n- `isVerified`, `subscriberCount`, `bio`\n- `profilePictureUrl`, `snapcodeImageUrl`, `squareHeroImageUrl`\n- `websiteUrl`, `category`, `subcategory`, `publisherType` (`SHOW` or `NORMAL` on publisher pages)\n- `primaryColor`, `hostUserId`, `address`, `mutableName`\n- `hasStory`, `hasCuratedHighlights`, `hasSpotlightHighlights`, `shouldHideUsername`\n- `seasonCount`, `episodeCount`\n- `premiumShowSeasons[]` — `seasonId`, `seasonNumber`, `episodeCount` declared by the page\n- `episodes[]` — `episodeId`, `episodeUrl`, `title`, `thumbnailUrl`, `publishedAt`, `seasonId`, `seasonNumber`, `episodeNumber`, plus `videoTrackUrl`, `snapCount` and `snaps[]` when media is enabled\n- `premiumStories[]` — the latest stories embedded in the page, kept for compatibility: `storyId`, `storyTitle`, `storyType`, `thumbnailUrl`, `episodeNumber`, `seasonNumber`, `postedAt`\n- `preselectedStory` — the featured episode, with `storyId`, `storyTitle`, `episodeNumber`, `seasonNumber`, `episodeUrl` and `snaps[]` when available\n- `publisherSpotlights[]` — `storyId`, `compositeStoryId`, `snapId`, `snapUrl`, `thumbnailUrl`, `videoUrl`, `imageUrl`, `durationSeconds`, `width`, `height`, `creatorUsername`, `creatorDisplayName`, `creatorFollowerCount`, `description`, `caption`, `lat`, `lng`, `geoDisplayName`, `engagementStats`, `createdAt`, `latestUpdatedAt`\n- `scrapedAt`\n\n## Output per episode (`mode = byEpisodeUrl`)\n\n- `recordType: \"episode\"`, `episodeId`, `episodeUrl`, `publisherId`\n- `displayName`, `username`, `subscriberCount`, `isVerified`, `profilePictureUrl`, `squareHeroImageUrl` — publisher context\n- `title`, `thumbnailUrl`, `publishedAt`, `episodeNumber`, `seasonNumber`\n- `videoTrackUrl` — the episode-level HLS track\n- `snapCount`, `snaps[]` — `snapId`, `index`, `mediaType`, `mediaUrl` when public, `previewUrl`, `intervalStartMs`\n- `scrapedAt`\n\n## Output per Discover story (`mode = discover`)\n\n- `recordType: \"discoverStory\"`, `storyId`, `storyType`, `title`, `publishedAt`, `tapId`\n- `thumbnailUrl`, `videoTrackUrl` when the feed supplies one\n- `pageUrl`, `publisherId`, `displayName`, `username`, `bio`, `profilePictureUrl`, `squareHeroImageUrl`, `snapcodeImageUrl`, `primaryColor`, `isVerified`\n- `snapCount`, `snaps[]`\n- `scrapedAt`\n\nRows that cannot be resolved are returned as `recordType: \"error\"` with `input`, optional `publisherId` / `episodeId`, `statusCode`, `error` and `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `byPublisher` | `byPublisher` / `byEpisodeUrl` / `discover` |\n| `publisherUrlsOrIds` | array | – | Publisher URLs, `story.snapchat.com/p/{id}` links or bare UUIDs (mode=byPublisher) |\n| `episodeUrls` | array | – | `snapchat.com/p/{publisherId}/{episodeId}` URLs (mode=byEpisodeUrl) |\n| `country` | string | `US` | ISO country code used for episode requests and the Discover feed |\n| `locale` | string | `en-US` | Language-region tag for Discover, e.g. `en-GB` or `de-DE` |\n| `includeStories` | boolean | `true` | Walk every season and fill `episodes[]` (mode=byPublisher); the latest page stories stay in `premiumStories[]` either way |\n| `includeShowSeasons` | boolean | `true` | Include `premiumShowSeasons[]` (mode=byPublisher) |\n| `includeSpotlights` | boolean | `true` | Include `publisherSpotlights[]` (mode=byPublisher) |\n| `includeEpisodeMedia` | boolean | `false` | Fetch HLS tracks and snaps for every returned episode (mode=byPublisher) |\n| `maxEpisodesPerPublisher` | integer | `100` | Hard cap on `episodes[]` per publisher (1–5000) |\n| `maxItems` | integer | `100` | Hard cap on dataset rows, including error rows (1–5000) |\n\n### Example: publisher profile with the latest page data only\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"efd8a13d-b69a-41d0-9c04-d19f87829798\"],\n  \"includeStories\": false,\n  \"includeShowSeasons\": false,\n  \"includeSpotlights\": false,\n  \"maxItems\": 1\n}\n```\n\n### Example: complete episode catalogue for a Snap Show\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"https://www.snapchat.com/p/f905ada7-32eb-4f9c-8ddf-daa529dcc79f\"],\n  \"includeStories\": true,\n  \"includeShowSeasons\": true,\n  \"includeSpotlights\": true,\n  \"includeEpisodeMedia\": false,\n  \"maxEpisodesPerPublisher\": 1000,\n  \"maxItems\": 10\n}\n```\n\n### Example: one episode with its HLS track and snaps\n\n```json\n{\n  \"mode\": \"byEpisodeUrl\",\n  \"episodeUrls\": [\n    \"https://www.snapchat.com/p/f905ada7-32eb-4f9c-8ddf-daa529dcc79f/3298969776404480\"\n  ],\n  \"country\": \"US\",\n  \"maxItems\": 1\n}\n```\n\n### Example: the Discover feed for a country\n\n```json\n{\n  \"mode\": \"discover\",\n  \"country\": \"GB\",\n  \"locale\": \"en-GB\",\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Media monitoring** — track subscriber counts, season structure and publishing cadence for news outlets and entertainment channels\n- **Show catalogues** — build a complete season and episode index for a Snap Show instead of the handful of episodes on the page\n- **Episode archives** — capture every episode URL, title, thumbnail, publication time and HLS track for downstream processing\n- **Content strategy research** — compare episode volume and Spotlight performance across publishers\n- **Discover trend tracking** — sample the current Discover feed per country and locale for editorial or partnership research\n- **Partnership scouting** — check publisher categories, websites and audience size before outreach\n\n## FAQ\n\n**Is this affiliated with Snapchat?**\nNo. This is an independent third-party actor that reads publicly accessible Snapchat pages and feed responses. It is not operated by or affiliated with Snapchat.\n\n**What is the difference between a publisher and a Snap Show?**\nA Snap Show is an episodic series with seasons and numbered episodes. A publisher is a media outlet or creator profile that may publish stories without a season structure. Both use `snapchat.com/p/{id}`, and `publisherType` tells you which kind of profile the page represents.\n\n**Where do I find a publisher ID?**\nIt is the UUID in the profile URL, for example `snapchat.com/p/{businessProfileId}`. A bare UUID is also accepted.\n\n**Why does `episodes[]` contain more episodes than `premiumStories[]`?**\n`premiumStories[]` is the short list embedded in the profile page for compatibility. `episodes[]` is the full public catalogue assembled season by season, so it can contain hundreds or thousands of rows.\n\n**Why is a season's declared episode count sometimes higher than the number returned?**\nSnapchat's season summary can declare more episodes than its public cursor returns. The actor reports the episodes it actually receives in `episodes[]` and keeps the page's declared count in `premiumShowSeasons[]`.\n\n**Why do some snaps have no `mediaUrl`?**\nSnapchat only exposes a direct media URL for a small subset of snaps. The episode-level `videoTrackUrl` is the reliable playable media, while `previewUrl` gives the snap thumbnail.\n\n**Why is `durationSeconds` sometimes missing from a Spotlight card?**\nSnapchat only sends a duration for some cards. When it is absent the field is omitted rather than set to zero.\n\n**Why does an invalid or removed publisher return an error row?**\nRemoved publishers, wrong IDs and region-restricted content would otherwise abort the run. The actor records them as typed error rows and continues with the next input.\n\n**Do I need a proxy or a Snapchat account?**\nNo. The actor works without cookies, logins or proxy setup. Country restrictions can still make some publishers unavailable from a given location, and those rows are reported as HTTP 451 errors.\n\n**How many rows can one run return?**\nUse `maxItems` to set the global cap and `maxEpisodesPerPublisher` to bound a single publisher's `episodes[]`. Both are hard limits, and error rows count toward `maxItems`.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-publisher-and-show-episode-finder",
      "title": "Snapchat Publisher & Show Episode Finder",
      "description": "Map Snapchat publisher and Snap Show catalogues by URL or ID: subscriber counts, every season and episode, optional HLS media, Spotlight cards and the country Discover feed. No login or proxy needed.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Snapchat Publisher & Show Episode Finder Input",
        "description": "Look up Snapchat publishers, Snap Shows and episodes, or read the country Discover feed.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to collect: publisher catalogues, individual episodes, or the current Discover feed.",
            "editor": "select",
            "enum": [
              "byPublisher",
              "byEpisodeUrl",
              "discover"
            ],
            "enumTitles": [
              "Publishers and shows",
              "Episode URLs",
              "Discover feed by country"
            ],
            "default": "byPublisher",
            "prefill": "byPublisher"
          },
          "publisherUrlsOrIds": {
            "title": "Publisher URLs or IDs",
            "type": "array",
            "description": "(mode=byPublisher) Publisher or show page URLs, story.snapchat.com/p/{id} links, or bare businessProfileId UUIDs.",
            "editor": "stringList",
            "prefill": [
              "efd8a13d-b69a-41d0-9c04-d19f87829798"
            ]
          },
          "episodeUrls": {
            "title": "Episode URLs",
            "type": "array",
            "description": "(mode=byEpisodeUrl) Episode page URLs of the form snapchat.com/p/{publisherId}/{episodeId} or story.snapchat.com/p/{publisherId}/{episodeId}.",
            "editor": "stringList"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Country context for episode requests and the Discover feed.",
            "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",
              "Curaçao",
              "Cyprus",
              "Czechia",
              "Côte 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",
              "Réunion",
              "Saint Barthélemy",
              "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",
              "Türkiye",
              "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",
              "Åland Islands"
            ],
            "default": "US",
            "prefill": "US"
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "(mode=discover) Language-region tag such as en-US, en-GB or de-DE. Invalid values fall back to en-US.",
            "default": "en-US",
            "prefill": "en-US",
            "editor": "textfield"
          },
          "includeStories": {
            "title": "Include full episode history",
            "type": "boolean",
            "description": "(mode=byPublisher) Walk every season and return every publicly listed episode in episodes[]. The page's latest stories stay in premiumStories[] for compatibility.",
            "default": true,
            "prefill": false
          },
          "includeShowSeasons": {
            "title": "Include season summary",
            "type": "boolean",
            "description": "(mode=byPublisher) Include premiumShowSeasons[] with season IDs, numbers and declared episode counts.",
            "default": true,
            "prefill": false
          },
          "includeSpotlights": {
            "title": "Include publisher Spotlights",
            "type": "boolean",
            "description": "(mode=byPublisher) Include publisherSpotlights[] with media URLs, creator info and engagement stats.",
            "default": true,
            "prefill": false
          },
          "includeEpisodeMedia": {
            "title": "Include episode media",
            "type": "boolean",
            "description": "(mode=byPublisher) Fetch episode-level HLS video tracks and snap media for each returned episode. Adds extra requests per episode.",
            "default": false,
            "prefill": false
          },
          "maxEpisodesPerPublisher": {
            "title": "Max episodes per publisher",
            "type": "integer",
            "description": "(mode=byPublisher) Hard cap on episodes[] per publisher.",
            "minimum": 1,
            "maximum": 5000,
            "default": 100,
            "prefill": 3
          },
          "maxItems": {
            "title": "Max dataset rows",
            "type": "integer",
            "description": "Hard cap on dataset rows across all modes, including error rows.",
            "minimum": 1,
            "maximum": 5000,
            "default": 100,
            "prefill": 1
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Publisher & Show Episode Finder Output",
        "description": "Snapchat publisher and Snap Show profiles with subscriber counts, full season and episode catalogues, HLS media, Spotlight cards and Discover feed stories.",
        "properties": {
          "publishers": {
            "type": "string",
            "title": "Snapchat publisher, episode and Discover rows",
            "description": "Dataset containing scraped Snapchat publisher, episode, Discover story and error rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "readme": "# Snapchat Publisher & Show Episode Finder\n\nRead **Snapchat** publisher and Snap Show catalogues without logging in. Give the actor a publisher page URL, a bare business profile ID, or an episode URL and it returns the public profile, the latest page stories, every season, the full episode history, optional HLS media, and Spotlight cards. A Discover mode reads the current country feed with cursor-style pagination. HTTP-only, no cookies, no proxy setup.\n\n## What this actor does\n\n- **Three modes:** `byPublisher` for a profile and episode catalogue, `byEpisodeUrl` for one episode's snaps and HLS track, and `discover` for the country/locale feed\n- **Complete episode history:** walks every season with Snapchat's public `PublishedPremiumStories` cursor, not just the 13-14 stories embedded in the page\n- **Optional episode media:** adds the episode-level HLS `videoTrackUrl`, snap count and per-snap preview records\n- **Publisher Spotlights:** media URLs, creator details and engagement counters from the profile page\n- **Discover feed:** country and locale aware, paginated by tap IDs until the feed is exhausted or `maxItems` is reached\n- **Empty fields are omitted:** no nulls, no empty strings, no empty arrays and no 1970 placeholder dates\n\n## Output per publisher (`mode = byPublisher`)\n\n- `recordType: \"publisher\"`, `publisherId`, `pageUrl`\n- `displayName`, `username` — visible name and handle when the profile exposes one\n- `isVerified`, `subscriberCount`, `bio`\n- `profilePictureUrl`, `snapcodeImageUrl`, `squareHeroImageUrl`\n- `websiteUrl`, `category`, `subcategory`, `publisherType` (`SHOW` or `NORMAL` on publisher pages)\n- `primaryColor`, `hostUserId`, `address`, `mutableName`\n- `hasStory`, `hasCuratedHighlights`, `hasSpotlightHighlights`, `shouldHideUsername`\n- `seasonCount`, `episodeCount`\n- `premiumShowSeasons[]` — `seasonId`, `seasonNumber`, `episodeCount` declared by the page\n- `episodes[]` — `episodeId`, `episodeUrl`, `title`, `thumbnailUrl`, `publishedAt`, `seasonId`, `seasonNumber`, `episodeNumber`, plus `videoTrackUrl`, `snapCount` and `snaps[]` when media is enabled\n- `premiumStories[]` — the latest stories embedded in the page, kept for compatibility: `storyId`, `storyTitle`, `storyType`, `thumbnailUrl`, `episodeNumber`, `seasonNumber`, `postedAt`\n- `preselectedStory` — the featured episode, with `storyId`, `storyTitle`, `episodeNumber`, `seasonNumber`, `episodeUrl` and `snaps[]` when available\n- `publisherSpotlights[]` — `storyId`, `compositeStoryId`, `snapId`, `snapUrl`, `thumbnailUrl`, `videoUrl`, `imageUrl`, `durationSeconds`, `width`, `height`, `creatorUsername`, `creatorDisplayName`, `creatorFollowerCount`, `description`, `caption`, `lat`, `lng`, `geoDisplayName`, `engagementStats`, `createdAt`, `latestUpdatedAt`\n- `scrapedAt`\n\n## Output per episode (`mode = byEpisodeUrl`)\n\n- `recordType: \"episode\"`, `episodeId`, `episodeUrl`, `publisherId`\n- `displayName`, `username`, `subscriberCount`, `isVerified`, `profilePictureUrl`, `squareHeroImageUrl` — publisher context\n- `title`, `thumbnailUrl`, `publishedAt`, `episodeNumber`, `seasonNumber`\n- `videoTrackUrl` — the episode-level HLS track\n- `snapCount`, `snaps[]` — `snapId`, `index`, `mediaType`, `mediaUrl` when public, `previewUrl`, `intervalStartMs`\n- `scrapedAt`\n\n## Output per Discover story (`mode = discover`)\n\n- `recordType: \"discoverStory\"`, `storyId`, `storyType`, `title`, `publishedAt`, `tapId`\n- `thumbnailUrl`, `videoTrackUrl` when the feed supplies one\n- `pageUrl`, `publisherId`, `displayName`, `username`, `bio`, `profilePictureUrl`, `squareHeroImageUrl`, `snapcodeImageUrl`, `primaryColor`, `isVerified`\n- `snapCount`, `snaps[]`\n- `scrapedAt`\n\nRows that cannot be resolved are returned as `recordType: \"error\"` with `input`, optional `publisherId` / `episodeId`, `statusCode`, `error` and `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `byPublisher` | `byPublisher` / `byEpisodeUrl` / `discover` |\n| `publisherUrlsOrIds` | array | – | Publisher URLs, `story.snapchat.com/p/{id}` links or bare UUIDs (mode=byPublisher) |\n| `episodeUrls` | array | – | `snapchat.com/p/{publisherId}/{episodeId}` URLs (mode=byEpisodeUrl) |\n| `country` | string | `US` | ISO country code used for episode requests and the Discover feed |\n| `locale` | string | `en-US` | Language-region tag for Discover, e.g. `en-GB` or `de-DE` |\n| `includeStories` | boolean | `true` | Walk every season and fill `episodes[]` (mode=byPublisher); the latest page stories stay in `premiumStories[]` either way |\n| `includeShowSeasons` | boolean | `true` | Include `premiumShowSeasons[]` (mode=byPublisher) |\n| `includeSpotlights` | boolean | `true` | Include `publisherSpotlights[]` (mode=byPublisher) |\n| `includeEpisodeMedia` | boolean | `false` | Fetch HLS tracks and snaps for every returned episode (mode=byPublisher) |\n| `maxEpisodesPerPublisher` | integer | `100` | Hard cap on `episodes[]` per publisher (1–5000) |\n| `maxItems` | integer | `100` | Hard cap on dataset rows, including error rows (1–5000) |\n\n### Example: publisher profile with the latest page data only\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"efd8a13d-b69a-41d0-9c04-d19f87829798\"],\n  \"includeStories\": false,\n  \"includeShowSeasons\": false,\n  \"includeSpotlights\": false,\n  \"maxItems\": 1\n}\n```\n\n### Example: complete episode catalogue for a Snap Show\n\n```json\n{\n  \"mode\": \"byPublisher\",\n  \"publisherUrlsOrIds\": [\"https://www.snapchat.com/p/f905ada7-32eb-4f9c-8ddf-daa529dcc79f\"],\n  \"includeStories\": true,\n  \"includeShowSeasons\": true,\n  \"includeSpotlights\": true,\n  \"includeEpisodeMedia\": false,\n  \"maxEpisodesPerPublisher\": 1000,\n  \"maxItems\": 10\n}\n```\n\n### Example: one episode with its HLS track and snaps\n\n```json\n{\n  \"mode\": \"byEpisodeUrl\",\n  \"episodeUrls\": [\n    \"https://www.snapchat.com/p/f905ada7-32eb-4f9c-8ddf-daa529dcc79f/3298969776404480\"\n  ],\n  \"country\": \"US\",\n  \"maxItems\": 1\n}\n```\n\n### Example: the Discover feed for a country\n\n```json\n{\n  \"mode\": \"discover\",\n  \"country\": \"GB\",\n  \"locale\": \"en-GB\",\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Media monitoring** — track subscriber counts, season structure and publishing cadence for news outlets and entertainment channels\n- **Show catalogues** — build a complete season and episode index for a Snap Show instead of the handful of episodes on the page\n- **Episode archives** — capture every episode URL, title, thumbnail, publication time and HLS track for downstream processing\n- **Content strategy research** — compare episode volume and Spotlight performance across publishers\n- **Discover trend tracking** — sample the current Discover feed per country and locale for editorial or partnership research\n- **Partnership scouting** — check publisher categories, websites and audience size before outreach\n\n## FAQ\n\n**Is this affiliated with Snapchat?**\nNo. This is an independent third-party actor that reads publicly accessible Snapchat pages and feed responses. It is not operated by or affiliated with Snapchat.\n\n**What is the difference between a publisher and a Snap Show?**\nA Snap Show is an episodic series with seasons and numbered episodes. A publisher is a media outlet or creator profile that may publish stories without a season structure. Both use `snapchat.com/p/{id}`, and `publisherType` tells you which kind of profile the page represents.\n\n**Where do I find a publisher ID?**\nIt is the UUID in the profile URL, for example `snapchat.com/p/{businessProfileId}`. A bare UUID is also accepted.\n\n**Why does `episodes[]` contain more episodes than `premiumStories[]`?**\n`premiumStories[]` is the short list embedded in the profile page for compatibility. `episodes[]` is the full public catalogue assembled season by season, so it can contain hundreds or thousands of rows.\n\n**Why is a season's declared episode count sometimes higher than the number returned?**\nSnapchat's season summary can declare more episodes than its public cursor returns. The actor reports the episodes it actually receives in `episodes[]` and keeps the page's declared count in `premiumShowSeasons[]`.\n\n**Why do some snaps have no `mediaUrl`?**\nSnapchat only exposes a direct media URL for a small subset of snaps. The episode-level `videoTrackUrl` is the reliable playable media, while `previewUrl` gives the snap thumbnail.\n\n**Why is `durationSeconds` sometimes missing from a Spotlight card?**\nSnapchat only sends a duration for some cards. When it is absent the field is omitted rather than set to zero.\n\n**Why does an invalid or removed publisher return an error row?**\nRemoved publishers, wrong IDs and region-restricted content would otherwise abort the run. The actor records them as typed error rows and continues with the next input.\n\n**Do I need a proxy or a Snapchat account?**\nNo. The actor works without cookies, logins or proxy setup. Country restrictions can still make some publishers unavailable from a given location, and those rows are reported as HTTP 451 errors.\n\n**How many rows can one run return?**\nUse `maxItems` to set the global cap and `maxEpisodesPerPublisher` to bound a single publisher's `episodes[]`. Both are hard limits, and error rows count toward `maxItems`.\n",
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Snapchat Publisher, Episodes and Discover",
          "fields": {
            "type": "object",
            "properties": {
              "recordType": {
                "type": "string",
                "description": "Row type: publisher, episode, discoverStory or error"
              },
              "publisherId": {
                "type": "string",
                "description": "Publisher business profile ID (UUID)"
              },
              "pageUrl": {
                "type": "string",
                "description": "Canonical publisher or creator page URL"
              },
              "displayName": {
                "type": "string",
                "description": "Publisher display name or show title"
              },
              "username": {
                "type": "string",
                "description": "Snapchat username when the publisher has one"
              },
              "isVerified": {
                "type": "boolean",
                "description": "Whether the publisher has a verification badge"
              },
              "subscriberCount": {
                "type": "integer",
                "description": "Publisher subscriber count"
              },
              "bio": {
                "type": "string",
                "description": "Publisher bio or show description"
              },
              "profilePictureUrl": {
                "type": "string",
                "description": "Publisher profile or show logo URL"
              },
              "squareHeroImageUrl": {
                "type": "string",
                "description": "Square hero or banner image URL"
              },
              "snapcodeImageUrl": {
                "type": "string",
                "description": "Snapcode image URL"
              },
              "websiteUrl": {
                "type": "string",
                "description": "Publisher website URL"
              },
              "category": {
                "type": "string",
                "description": "Publisher category identifier when exposed"
              },
              "subcategory": {
                "type": "string",
                "description": "Publisher subcategory identifier when exposed"
              },
              "publisherType": {
                "type": "string",
                "description": "Publisher type, for example SHOW or NORMAL"
              },
              "primaryColor": {
                "type": "string",
                "description": "Publisher primary brand color"
              },
              "hostUserId": {
                "type": "string",
                "description": "Internal host user UUID when exposed"
              },
              "address": {
                "type": "string",
                "description": "Publisher address when exposed"
              },
              "mutableName": {
                "type": "string",
                "description": "Mutable display name when exposed"
              },
              "shouldHideUsername": {
                "type": "boolean",
                "description": "Whether the profile hides its username"
              },
              "hasStory": {
                "type": "boolean",
                "description": "Whether the publisher currently has a story"
              },
              "hasCuratedHighlights": {
                "type": "boolean",
                "description": "Whether the publisher has curated highlights"
              },
              "hasSpotlightHighlights": {
                "type": "boolean",
                "description": "Whether the publisher has Spotlight highlights"
              },
              "seasonCount": {
                "type": "integer",
                "description": "Number of seasons listed for the publisher"
              },
              "episodeCount": {
                "type": "integer",
                "description": "Number of episodes returned for the publisher"
              },
              "premiumShowSeasons": {
                "type": "array",
                "description": "Season summary with IDs, numbers and declared episode counts",
                "items": {
                  "type": "object",
                  "properties": {
                    "seasonId": {
                      "type": "string"
                    },
                    "seasonNumber": {
                      "type": "integer"
                    },
                    "episodeCount": {
                      "type": "integer"
                    }
                  }
                }
              },
              "episodes": {
                "type": "array",
                "description": "Complete episode history for the publisher",
                "items": {
                  "type": "object",
                  "properties": {
                    "episodeId": {
                      "type": "string"
                    },
                    "episodeUrl": {
                      "type": "string"
                    },
                    "episodeNumber": {
                      "type": "integer"
                    },
                    "seasonNumber": {
                      "type": "integer"
                    },
                    "seasonId": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "thumbnailUrl": {
                      "type": "string"
                    },
                    "publishedAt": {
                      "type": "string"
                    },
                    "videoTrackUrl": {
                      "type": "string"
                    },
                    "snapCount": {
                      "type": "integer"
                    },
                    "snaps": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "snapId": {
                            "type": "string"
                          },
                          "index": {
                            "type": "integer"
                          },
                          "mediaType": {
                            "type": "string"
                          },
                          "mediaUrl": {
                            "type": "string"
                          },
                          "previewUrl": {
                            "type": "string"
                          },
                          "intervalStartMs": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "premiumStories": {
                "type": "array",
                "description": "Latest stories embedded in the publisher page for backward compatibility",
                "items": {
                  "type": "object",
                  "properties": {
                    "storyId": {
                      "type": "string"
                    },
                    "storyTitle": {
                      "type": "string"
                    },
                    "storyType": {
                      "type": "integer"
                    },
                    "thumbnailUrl": {
                      "type": "string"
                    },
                    "episodeNumber": {
                      "type": "integer"
                    },
                    "seasonNumber": {
                      "type": "integer"
                    },
                    "postedAt": {
                      "type": "string"
                    }
                  }
                }
              },
              "preselectedStory": {
                "type": "object",
                "description": "Featured episode with snap media when the page exposes one",
                "properties": {
                  "storyId": {
                    "type": "string"
                  },
                  "storyTitle": {
                    "type": "string"
                  },
                  "episodeNumber": {
                    "type": "integer"
                  },
                  "seasonNumber": {
                    "type": "integer"
                  },
                  "episodeUrl": {
                    "type": "string"
                  },
                  "snaps": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    }
                  }
                }
              },
              "publisherSpotlights": {
                "type": "array",
                "description": "Publisher Spotlight story cards with media, creator and engagement data",
                "items": {
                  "type": "object",
                  "properties": {
                    "storyId": {
                      "type": "string"
                    },
                    "compositeStoryId": {
                      "type": "string"
                    },
                    "snapId": {
                      "type": "string"
                    },
                    "snapUrl": {
                      "type": "string"
                    },
                    "thumbnailUrl": {
                      "type": "string"
                    },
                    "videoUrl": {
                      "type": "string"
                    },
                    "imageUrl": {
                      "type": "string"
                    },
                    "durationSeconds": {
                      "type": "number"
                    },
                    "width": {
                      "type": "integer"
                    },
                    "height": {
                      "type": "integer"
                    },
                    "creatorUsername": {
                      "type": "string"
                    },
                    "creatorDisplayName": {
                      "type": "string"
                    },
                    "creatorFollowerCount": {
                      "type": "integer"
                    },
                    "description": {
                      "type": "string"
                    },
                    "caption": {
                      "type": "string"
                    },
                    "lat": {
                      "type": "number"
                    },
                    "lng": {
                      "type": "number"
                    },
                    "geoDisplayName": {
                      "type": "string"
                    },
                    "engagementStats": {
                      "type": "object"
                    },
                    "createdAt": {
                      "type": "string"
                    },
                    "latestUpdatedAt": {
                      "type": "string"
                    }
                  }
                }
              },
              "storyId": {
                "type": "string",
                "description": "Discover story ID"
              },
              "storyType": {
                "type": "string",
                "description": "Discover story type, for example SHOW or PUBLIC_USER_STORY"
              },
              "title": {
                "type": "string",
                "description": "Episode or Discover story title"
              },
              "publishedAt": {
                "type": "string",
                "description": "ISO 8601 UTC publication time"
              },
              "tapId": {
                "type": "string",
                "description": "Discover feed tap ID used for pagination"
              },
              "thumbnailUrl": {
                "type": "string",
                "description": "Episode or story thumbnail URL"
              },
              "videoTrackUrl": {
                "type": "string",
                "description": "Episode HLS video track URL"
              },
              "snapCount": {
                "type": "integer",
                "description": "Number of snaps attached to an episode or story"
              },
              "snaps": {
                "type": "array",
                "description": "Snap preview and media records",
                "items": {
                  "type": "object"
                }
              },
              "episodeId": {
                "type": "string",
                "description": "Episode story ID"
              },
              "episodeUrl": {
                "type": "string",
                "description": "Canonical episode page URL"
              },
              "episodeNumber": {
                "type": "integer",
                "description": "Episode number within its season"
              },
              "seasonNumber": {
                "type": "integer",
                "description": "Season number"
              },
              "seasonId": {
                "type": "string",
                "description": "Season UUID"
              },
              "input": {
                "type": "string",
                "description": "Original input value on an error row"
              },
              "statusCode": {
                "type": "integer",
                "description": "HTTP status code on an error row"
              },
              "error": {
                "type": "string",
                "description": "Error message on an error row"
              },
              "scrapedAt": {
                "type": "string",
                "description": "ISO 8601 UTC timestamp when the row was scraped"
              }
            }
          }
        }
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 300,
        "memoryMbytes": 1024
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "2ee9da2a9aeb561d03c170cffc978d23e6ccb78ee09b7bdd9c9efff5797f3ce0",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.005346666666666666
    }
  }
}