{
  "data": {
    "id": "jnoJZ0OjjNipIstNX",
    "actId": "o0TuUXYFScTreiGzG",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-06T11:27:52.661Z",
    "finishedAt": "2026-11-06T11:27:56.125Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3326,
      "runTimeSecs": 3.326,
      "computeUnits": 0.0036955555555555557,
      "imageSizeBytes": 321835520
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat User Stories Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape. profiles = look up usernames or profile URLs and collect their highlights and active story. urls = process pasted profile, highlight or active-story snap links, including highlights that are not on the rendered profile page.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"profiles\",\n        \"urls\"\n      ],\n      \"enumTitles\": [\n        \"Profiles by username\",\n        \"Pasted profile / highlight / story links\"\n      ],\n      \"default\": \"profiles\",\n      \"prefill\": \"profiles\"\n    },\n    \"usernames\": {\n      \"title\": \"Usernames or Profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=profiles) One or more Snapchat usernames or profile URLs. Accepts bare username (brentrivera), @-prefixed (@brentrivera), add URL (https://www.snapchat.com/add/brentrivera) and profile URL (https://www.snapchat.com/@brentrivera).\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"khaby.lame\"\n      ]\n    },\n    \"startUrls\": {\n      \"title\": \"Profile, Highlight or Story Links\",\n      \"type\": \"array\",\n      \"description\": \"(mode=urls) Paste profile links, highlight links (https://www.snapchat.com/@user/highlight/<id>) or active-story snap links (https://www.snapchat.com/@user/<snapId>). Each link is resolved to exactly the content it names.\",\n      \"editor\": \"requestListSources\"\n    },\n    \"sources\": {\n      \"title\": \"Story Sources\",\n      \"type\": \"array\",\n      \"description\": \"Which story surfaces to collect in profiles mode. curatedHighlights = saved highlight albums. activeStory = the currently public 24-hour story. Highlight-link mode always returns the linked highlight.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"curatedHighlights\",\n          \"activeStory\"\n        ],\n        \"enumTitles\": [\n          \"Curated highlights\",\n          \"Active story\"\n        ]\n      },\n      \"default\": [\n        \"curatedHighlights\",\n        \"activeStory\"\n      ],\n      \"prefill\": [\n        \"curatedHighlights\",\n        \"activeStory\"\n      ]\n    },\n    \"maxSnapsPerUser\": {\n      \"title\": \"Max Snaps Per Target\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum snaps to save per profile, highlight or story-snap target. Supports large highlight albums up to the clip length shown by Snapchat.\",\n      \"default\": 50,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"editor\": \"number\"\n    },\n    \"maxHighlightsPerUser\": {\n      \"title\": \"Max Highlights Per Profile\",\n      \"type\": \"integer\",\n      \"description\": \"How many of a profile's saved highlight albums to read, in the order Snapchat renders them. 0 uses every highlight on the page.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 100,\n      \"editor\": \"number\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max Records\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on snap records saved in the run across all targets. The actor stops cleanly when it reaches this number.\",\n      \"default\": 5000,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 100000,\n      \"editor\": \"number\"\n    },\n    \"postedAfter\": {\n      \"title\": \"Posted After\",\n      \"type\": \"string\",\n      \"description\": \"Only keep snaps posted on or after this date (YYYY-MM-DD or full ISO 8601). Saved highlights can stay live for years, so set this to your last run date when you only want new snaps. Leave empty for everything.\",\n      \"editor\": \"datepicker\",\n      \"nullable\": true\n    },\n    \"downloadMedia\": {\n      \"title\": \"Store Durable Media Copies\",\n      \"type\": \"boolean\",\n      \"description\": \"Download each image/video into this run's Apify key-value store and return permanent public URLs. The original Snapchat CDN URL stays in a matching *Original field. Capped at 200 files and 50 MB per file per run; failures keep the direct URL. Costs extra storage and bandwidth; off by default because Snapchat CDN links work for immediate downloads.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional Apify proxy override. Public Snapchat profiles work without a proxy.\",\n      \"editor\": \"proxy\",\n      \"nullable\": true\n    }\n  }\n}",
    "readme": "# Snapchat Highlight & Story Media Downloader\n\nCollect the individual snaps inside public Snapchat highlight albums and active stories, then download them from the direct media URLs in each record. Add creator profile details, captions, timestamps and parent-story metadata without a Snapchat login, cookies or an API key. Point it at usernames or paste highlight/story links — one row per snap.\n\n## What this actor does\n\n- **Two modes:** `profiles` for a list of usernames/profile URLs, and `urls` for pasted profile, highlight or active-story snap links.\n- **Both story surfaces:** saved curated highlights and the creator's current public story, with a `storySource` value on every row.\n- **Download-ready media:** direct `mediaUrl` (MP4 or JPEG), `mediaPreviewUrl`, plus optional `overlayUrl` and `attachmentUrl`.\n- **Durable copies:** `downloadMedia` downloads each snap file and preview, plus the avatar, hero image, snapcode, cover, overlay and transcription into the run's Apify key-value store, returns a permanent public URL and keeps the original CDN link in a `*Original` field (up to 200 files and 50 MB per file per run).\n- **Creator context:** display name, verification, subscribers, bio, avatar, website, category, address, hero image and profile timestamps repeat on every snap.\n- **Incremental runs:** `postedAfter` skips long-lived highlight snaps you already collected, and `maxItems`, `maxSnapsPerUser` and `maxHighlightsPerUser` keep every run bounded.\n- **Clean rows:** empty fields are omitted — a snap without geotags, captions or a sponsorship flag simply has no such key.\n\n## Output per snap\n\n- `recordId` — stable natural key: the snap ID for active stories, or highlight ID + snap position for saved highlights\n- `recordType`, `targetType`, `profileStatus` — `snap` / `profile`, `highlightUrl` or `storySnapUrl`; public/private/notFound/noContent/unavailable\n- `username`, `displayName`, `isVerified`, `profileUrl` — creator identity\n- `subscriberCount`, `bio`, `profilePictureUrl` — public profile details\n- `websiteUrl`, `address`, `profileCategory`, `profileSubcategory` — public profile extras when present\n- `snapcodeImageUrl`, `profileHeroImageUrl` — Snapcode and profile hero image\n- `profileCreatedAt`, `profileUpdatedAt` — profile history timestamps\n- `storySource` — `curatedHighlight` or `activeStory`\n- `storyId`, `storyType`, `highlightId`, `storyTitle`, `highlightThumbnailUrl` — parent story identity and cover\n- `highlightIndex`, `highlightSnapCount` — position and size of the parent highlight\n- `snapIndex`, `snapId`, `snapMediaType`, `mediaType` — position, raw type and normalised `image`/`video`\n- `mediaUrl`, `mediaPreviewUrl`, `overlayUrl`, `attachmentUrl` — direct download and preview files\n- `postedAt`, `intervalStartTimeMs` — post time and any interval start supplied by Snapchat\n- `snapTitle`, `snapSubtitles`, `lat`, `lng`, `hasAttachment`, `isSponsored` — per-snap details when present\n- `audioTranscriptionObjectUrl` — transcription file link when Snapchat supplies one\n- `storySubtitle`, `storyShareId`, `emoji`, `storyTapId`, `canonicalUrlSuffix`, `videoTrackUrl`, `isAttributed`, `thumbnailTiles` — parent-story extras\n- `mediaContentType`, `mediaSizeBytes` — MIME type and byte size when `downloadMedia` is on\n- `mediaUrlOriginal`, `mediaPreviewUrlOriginal`, `overlayUrlOriginal`, `attachmentUrlOriginal`, `profilePictureUrlOriginal`, `profileHeroImageUrlOriginal`, `snapcodeImageUrlOriginal`, `highlightThumbnailUrlOriginal`, `videoTrackUrlOriginal`, `audioTranscriptionObjectUrlOriginal` — original CDN URLs kept when a field is rehosted\n- `sourceUrl` — the profile, highlight or story-snap page this row came from\n- `scrapedAt` — when the record was fetched\n- `inputUsername`, `error` — present instead of the snap fields on a failed target\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `profiles` | `profiles` or `urls`. |\n| `usernames` | array | – | Usernames or profile URLs (mode=profiles). Bare, `@name`, `/add/name` and `/@name` forms work. |\n| `startUrls` | array | – | Profile, highlight or story-snap links (mode=urls). |\n| `sources` | array | `[\"curatedHighlights\", \"activeStory\"]` | `curatedHighlights` and/or `activeStory`. |\n| `maxSnapsPerUser` | int | `50` | Maximum snaps per target (1–10,000). |\n| `maxHighlightsPerUser` | int | `0` | How many highlights to read per profile; `0` means all rendered highlights (max 100). |\n| `maxItems` | int | `5000` | Hard cap on records across the whole run (1–100,000). |\n| `postedAfter` | string | – | Keep snaps posted on or after this date (`YYYY-MM-DD` or ISO 8601). |\n| `downloadMedia` | boolean | `false` | Download media into the run's key-value store and return permanent public URLs. Capped at 200 files and 50 MB per file per run; failures fall back to the direct URL. |\n| `proxyConfiguration` | object | – | Optional Apify proxy override; public profiles need no proxy. |\n\n### Example: every snap from a creator\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"brentrivera\", \"nba\"],\n  \"sources\": [\"curatedHighlights\", \"activeStory\"],\n  \"maxSnapsPerUser\": 300,\n  \"maxItems\": 600\n}\n```\n\n### Example: paste a shared highlight link\n\n```json\n{\n  \"mode\": \"urls\",\n  \"startUrls\": [\n    { \"url\": \"https://www.snapchat.com/@kyliejenner/highlight/367bdbd7-d19a-4bf1-bc81-c3e73f7b1809\" }\n  ],\n  \"maxSnapsPerUser\": 100\n}\n```\n\n### Example: only new snaps since the last run\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"khaby.lame\"],\n  \"sources\": [\"curatedHighlights\"],\n  \"postedAfter\": \"2026-10-01\",\n  \"maxItems\": 100\n}\n```\n\n### Example: keep a durable copy of each file\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"fcbarcelona\"],\n  \"sources\": [\"activeStory\"],\n  \"maxSnapsPerUser\": 20,\n  \"downloadMedia\": true\n}\n```\n\n## Use cases\n\n- **Content archiving** — save a permanent copy of a creator's highlight reel before it is edited or removed.\n- **Influencer monitoring** — track what a creator posts across saved highlights and the live story in one dataset.\n- **Campaign research** — pull sponsored snaps across several creators with `isSponsored` intact.\n- **Social-listening pipelines** — feed structured snap metadata, captions and timestamps into analytics.\n- **Scheduled collection** — use `postedAfter` and `maxItems` to run daily or weekly without re-downloading the same old highlights.\n\n## FAQ\n\n**Do I need a Snapchat account or cookies?**\nNo. The actor reads public profile and highlight pages over plain HTTP.\n\n**What is the difference between a curated highlight and an active story?**\nHighlights are albums a creator saves and keeps on their profile. The active story is the current public 24-hour story. Both are collected by default; `sources` limits the run to one.\n\n**How many highlights can a profile have?**\nSnapchat renders up to 18 saved highlights on the public profile page, and that is the ceiling this actor can see from a username. If you have a direct link to another highlight, paste it in `urls` mode to retrieve its snaps.\n\n**Why did a pasted story link return an error?**\nActive stories are ephemeral. If the snap has expired, Snapchat no longer serves it and the actor records a `profileStatus: \"noContent\"` error row instead of failing the run.\n\n**Will `mediaUrl` still work later?**\nSnapchat CDN links carry rotating signature tokens. They work immediately and usually for some time, but they are not permanent. Set `downloadMedia` to true if you need links that keep working. Rehosting is limited to 200 files and 50 MB per file per run; anything over a limit keeps the direct CDN URL.\n\n**How does `maxSnapsPerUser` interact with `maxItems`?**\n`maxSnapsPerUser` caps each profile, highlight or story-snap target. `maxItems` caps the whole run across every target. The run stops cleanly when either limit is reached.\n\n**What happens to private or unknown accounts?**\nThe actor writes one diagnostic row per failed target with `inputUsername`, `error` and `profileStatus`, then continues with the remaining targets.\n\n**Are duplicate snaps possible?**\nEach row has a deterministic `recordId`. Repeated targets and any record whose `recordId` was already emitted in the run are dropped, so overlapping inputs do not create duplicate rows.\n\n**Does this actor collect Spotlight, comments or lenses?**\nNo. Those are separate Snapchat surfaces with their own actors.\n\n**Is this affiliated with Snapchat?**\nNo. It is an independent third-party actor that reads public Snapchat pages and is not operated by or affiliated with Snap Inc.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-highlight-and-story-media-downloader",
      "title": "Snapchat Highlight & Story Media Downloader",
      "description": "Collect individual snaps from public Snapchat highlights and active stories, including linked highlight and story-snap URLs. Returns direct media download URLs, previews and optional durable media copies, plus snap timestamps, titles, subtitles and the creator's public profile details.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python"
      },
      "input": {
        "title": "Snapchat User Stories Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to scrape. profiles = look up usernames or profile URLs and collect their highlights and active story. urls = process pasted profile, highlight or active-story snap links, including highlights that are not on the rendered profile page.",
            "editor": "select",
            "enum": [
              "profiles",
              "urls"
            ],
            "enumTitles": [
              "Profiles by username",
              "Pasted profile / highlight / story links"
            ],
            "default": "profiles",
            "prefill": "profiles"
          },
          "usernames": {
            "title": "Usernames or Profile URLs",
            "type": "array",
            "description": "(mode=profiles) One or more Snapchat usernames or profile URLs. Accepts bare username (brentrivera), @-prefixed (@brentrivera), add URL (https://www.snapchat.com/add/brentrivera) and profile URL (https://www.snapchat.com/@brentrivera).",
            "editor": "stringList",
            "prefill": [
              "khaby.lame"
            ]
          },
          "startUrls": {
            "title": "Profile, Highlight or Story Links",
            "type": "array",
            "description": "(mode=urls) Paste profile links, highlight links (https://www.snapchat.com/@user/highlight/<id>) or active-story snap links (https://www.snapchat.com/@user/<snapId>). Each link is resolved to exactly the content it names.",
            "editor": "requestListSources"
          },
          "sources": {
            "title": "Story Sources",
            "type": "array",
            "description": "Which story surfaces to collect in profiles mode. curatedHighlights = saved highlight albums. activeStory = the currently public 24-hour story. Highlight-link mode always returns the linked highlight.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "curatedHighlights",
                "activeStory"
              ],
              "enumTitles": [
                "Curated highlights",
                "Active story"
              ]
            },
            "default": [
              "curatedHighlights",
              "activeStory"
            ],
            "prefill": [
              "curatedHighlights",
              "activeStory"
            ]
          },
          "maxSnapsPerUser": {
            "title": "Max Snaps Per Target",
            "type": "integer",
            "description": "Maximum snaps to save per profile, highlight or story-snap target. Supports large highlight albums up to the clip length shown by Snapchat.",
            "default": 50,
            "prefill": 3,
            "minimum": 1,
            "maximum": 10000,
            "editor": "number"
          },
          "maxHighlightsPerUser": {
            "title": "Max Highlights Per Profile",
            "type": "integer",
            "description": "How many of a profile's saved highlight albums to read, in the order Snapchat renders them. 0 uses every highlight on the page.",
            "default": 0,
            "minimum": 0,
            "maximum": 100,
            "editor": "number"
          },
          "maxItems": {
            "title": "Max Records",
            "type": "integer",
            "description": "Hard cap on snap records saved in the run across all targets. The actor stops cleanly when it reaches this number.",
            "default": 5000,
            "prefill": 3,
            "minimum": 1,
            "maximum": 100000,
            "editor": "number"
          },
          "postedAfter": {
            "title": "Posted After",
            "type": "string",
            "description": "Only keep snaps posted on or after this date (YYYY-MM-DD or full ISO 8601). Saved highlights can stay live for years, so set this to your last run date when you only want new snaps. Leave empty for everything.",
            "editor": "datepicker",
            "nullable": true
          },
          "downloadMedia": {
            "title": "Store Durable Media Copies",
            "type": "boolean",
            "description": "Download each image/video into this run's Apify key-value store and return permanent public URLs. The original Snapchat CDN URL stays in a matching *Original field. Capped at 200 files and 50 MB per file per run; failures keep the direct URL. Costs extra storage and bandwidth; off by default because Snapchat CDN links work for immediate downloads.",
            "default": false,
            "prefill": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional Apify proxy override. Public Snapchat profiles work without a proxy.",
            "editor": "proxy",
            "nullable": true
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Story & Highlight Snaps Output",
        "description": "One row per Snapchat highlight or active-story snap, with direct media download URLs, snap timestamps and metadata, and the creator's public profile details.",
        "properties": {
          "snaps": {
            "type": "string",
            "title": "Snapchat snaps",
            "description": "Dataset containing all scraped Snapchat story and highlight snap records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# Snapchat Highlight & Story Media Downloader\n\nCollect the individual snaps inside public Snapchat highlight albums and active stories, then download them from the direct media URLs in each record. Add creator profile details, captions, timestamps and parent-story metadata without a Snapchat login, cookies or an API key. Point it at usernames or paste highlight/story links — one row per snap.\n\n## What this actor does\n\n- **Two modes:** `profiles` for a list of usernames/profile URLs, and `urls` for pasted profile, highlight or active-story snap links.\n- **Both story surfaces:** saved curated highlights and the creator's current public story, with a `storySource` value on every row.\n- **Download-ready media:** direct `mediaUrl` (MP4 or JPEG), `mediaPreviewUrl`, plus optional `overlayUrl` and `attachmentUrl`.\n- **Durable copies:** `downloadMedia` downloads each snap file and preview, plus the avatar, hero image, snapcode, cover, overlay and transcription into the run's Apify key-value store, returns a permanent public URL and keeps the original CDN link in a `*Original` field (up to 200 files and 50 MB per file per run).\n- **Creator context:** display name, verification, subscribers, bio, avatar, website, category, address, hero image and profile timestamps repeat on every snap.\n- **Incremental runs:** `postedAfter` skips long-lived highlight snaps you already collected, and `maxItems`, `maxSnapsPerUser` and `maxHighlightsPerUser` keep every run bounded.\n- **Clean rows:** empty fields are omitted — a snap without geotags, captions or a sponsorship flag simply has no such key.\n\n## Output per snap\n\n- `recordId` — stable natural key: the snap ID for active stories, or highlight ID + snap position for saved highlights\n- `recordType`, `targetType`, `profileStatus` — `snap` / `profile`, `highlightUrl` or `storySnapUrl`; public/private/notFound/noContent/unavailable\n- `username`, `displayName`, `isVerified`, `profileUrl` — creator identity\n- `subscriberCount`, `bio`, `profilePictureUrl` — public profile details\n- `websiteUrl`, `address`, `profileCategory`, `profileSubcategory` — public profile extras when present\n- `snapcodeImageUrl`, `profileHeroImageUrl` — Snapcode and profile hero image\n- `profileCreatedAt`, `profileUpdatedAt` — profile history timestamps\n- `storySource` — `curatedHighlight` or `activeStory`\n- `storyId`, `storyType`, `highlightId`, `storyTitle`, `highlightThumbnailUrl` — parent story identity and cover\n- `highlightIndex`, `highlightSnapCount` — position and size of the parent highlight\n- `snapIndex`, `snapId`, `snapMediaType`, `mediaType` — position, raw type and normalised `image`/`video`\n- `mediaUrl`, `mediaPreviewUrl`, `overlayUrl`, `attachmentUrl` — direct download and preview files\n- `postedAt`, `intervalStartTimeMs` — post time and any interval start supplied by Snapchat\n- `snapTitle`, `snapSubtitles`, `lat`, `lng`, `hasAttachment`, `isSponsored` — per-snap details when present\n- `audioTranscriptionObjectUrl` — transcription file link when Snapchat supplies one\n- `storySubtitle`, `storyShareId`, `emoji`, `storyTapId`, `canonicalUrlSuffix`, `videoTrackUrl`, `isAttributed`, `thumbnailTiles` — parent-story extras\n- `mediaContentType`, `mediaSizeBytes` — MIME type and byte size when `downloadMedia` is on\n- `mediaUrlOriginal`, `mediaPreviewUrlOriginal`, `overlayUrlOriginal`, `attachmentUrlOriginal`, `profilePictureUrlOriginal`, `profileHeroImageUrlOriginal`, `snapcodeImageUrlOriginal`, `highlightThumbnailUrlOriginal`, `videoTrackUrlOriginal`, `audioTranscriptionObjectUrlOriginal` — original CDN URLs kept when a field is rehosted\n- `sourceUrl` — the profile, highlight or story-snap page this row came from\n- `scrapedAt` — when the record was fetched\n- `inputUsername`, `error` — present instead of the snap fields on a failed target\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `profiles` | `profiles` or `urls`. |\n| `usernames` | array | – | Usernames or profile URLs (mode=profiles). Bare, `@name`, `/add/name` and `/@name` forms work. |\n| `startUrls` | array | – | Profile, highlight or story-snap links (mode=urls). |\n| `sources` | array | `[\"curatedHighlights\", \"activeStory\"]` | `curatedHighlights` and/or `activeStory`. |\n| `maxSnapsPerUser` | int | `50` | Maximum snaps per target (1–10,000). |\n| `maxHighlightsPerUser` | int | `0` | How many highlights to read per profile; `0` means all rendered highlights (max 100). |\n| `maxItems` | int | `5000` | Hard cap on records across the whole run (1–100,000). |\n| `postedAfter` | string | – | Keep snaps posted on or after this date (`YYYY-MM-DD` or ISO 8601). |\n| `downloadMedia` | boolean | `false` | Download media into the run's key-value store and return permanent public URLs. Capped at 200 files and 50 MB per file per run; failures fall back to the direct URL. |\n| `proxyConfiguration` | object | – | Optional Apify proxy override; public profiles need no proxy. |\n\n### Example: every snap from a creator\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"brentrivera\", \"nba\"],\n  \"sources\": [\"curatedHighlights\", \"activeStory\"],\n  \"maxSnapsPerUser\": 300,\n  \"maxItems\": 600\n}\n```\n\n### Example: paste a shared highlight link\n\n```json\n{\n  \"mode\": \"urls\",\n  \"startUrls\": [\n    { \"url\": \"https://www.snapchat.com/@kyliejenner/highlight/367bdbd7-d19a-4bf1-bc81-c3e73f7b1809\" }\n  ],\n  \"maxSnapsPerUser\": 100\n}\n```\n\n### Example: only new snaps since the last run\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"khaby.lame\"],\n  \"sources\": [\"curatedHighlights\"],\n  \"postedAfter\": \"2026-10-01\",\n  \"maxItems\": 100\n}\n```\n\n### Example: keep a durable copy of each file\n\n```json\n{\n  \"mode\": \"profiles\",\n  \"usernames\": [\"fcbarcelona\"],\n  \"sources\": [\"activeStory\"],\n  \"maxSnapsPerUser\": 20,\n  \"downloadMedia\": true\n}\n```\n\n## Use cases\n\n- **Content archiving** — save a permanent copy of a creator's highlight reel before it is edited or removed.\n- **Influencer monitoring** — track what a creator posts across saved highlights and the live story in one dataset.\n- **Campaign research** — pull sponsored snaps across several creators with `isSponsored` intact.\n- **Social-listening pipelines** — feed structured snap metadata, captions and timestamps into analytics.\n- **Scheduled collection** — use `postedAfter` and `maxItems` to run daily or weekly without re-downloading the same old highlights.\n\n## FAQ\n\n**Do I need a Snapchat account or cookies?**\nNo. The actor reads public profile and highlight pages over plain HTTP.\n\n**What is the difference between a curated highlight and an active story?**\nHighlights are albums a creator saves and keeps on their profile. The active story is the current public 24-hour story. Both are collected by default; `sources` limits the run to one.\n\n**How many highlights can a profile have?**\nSnapchat renders up to 18 saved highlights on the public profile page, and that is the ceiling this actor can see from a username. If you have a direct link to another highlight, paste it in `urls` mode to retrieve its snaps.\n\n**Why did a pasted story link return an error?**\nActive stories are ephemeral. If the snap has expired, Snapchat no longer serves it and the actor records a `profileStatus: \"noContent\"` error row instead of failing the run.\n\n**Will `mediaUrl` still work later?**\nSnapchat CDN links carry rotating signature tokens. They work immediately and usually for some time, but they are not permanent. Set `downloadMedia` to true if you need links that keep working. Rehosting is limited to 200 files and 50 MB per file per run; anything over a limit keeps the direct CDN URL.\n\n**How does `maxSnapsPerUser` interact with `maxItems`?**\n`maxSnapsPerUser` caps each profile, highlight or story-snap target. `maxItems` caps the whole run across every target. The run stops cleanly when either limit is reached.\n\n**What happens to private or unknown accounts?**\nThe actor writes one diagnostic row per failed target with `inputUsername`, `error` and `profileStatus`, then continues with the remaining targets.\n\n**Are duplicate snaps possible?**\nEach row has a deterministic `recordId`. Repeated targets and any record whose `recordId` was already emitted in the run are dropped, so overlapping inputs do not create duplicate rows.\n\n**Does this actor collect Spotlight, comments or lenses?**\nNo. Those are separate Snapchat surfaces with their own actors.\n\n**Is this affiliated with Snapchat?**\nNo. It is an independent third-party actor that reads public Snapchat pages and is not operated by or affiliated with Snap Inc.\n",
      "defaultRunOptions": {
        "memoryMbytes": 1024,
        "timeoutSecs": 3600
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Snapchat Story Snaps",
          "views": {
            "overview": {
              "title": "Story Overview",
              "transformation": {
                "fields": [
                  "username",
                  "displayName",
                  "storySource",
                  "storyTitle",
                  "snapIndex",
                  "mediaType",
                  "postedAt",
                  "mediaUrl",
                  "mediaPreviewUrl",
                  "sourceUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "displayName": {
                    "label": "Display Name",
                    "format": "text"
                  },
                  "storySource": {
                    "label": "Source",
                    "format": "text"
                  },
                  "storyTitle": {
                    "label": "Story",
                    "format": "text"
                  },
                  "snapIndex": {
                    "label": "#",
                    "format": "number"
                  },
                  "mediaType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "postedAt": {
                    "label": "Posted At",
                    "format": "text"
                  },
                  "mediaUrl": {
                    "label": "Media URL",
                    "format": "link"
                  },
                  "mediaPreviewUrl": {
                    "label": "Thumbnail",
                    "format": "link"
                  },
                  "sourceUrl": {
                    "label": "Source Page",
                    "format": "link"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "recordId",
                  "recordType",
                  "targetType",
                  "profileStatus",
                  "username",
                  "displayName",
                  "isVerified",
                  "subscriberCount",
                  "bio",
                  "profileUrl",
                  "profilePictureUrl",
                  "profilePictureUrlOriginal",
                  "websiteUrl",
                  "profileCategory",
                  "profileSubcategory",
                  "address",
                  "snapcodeImageUrl",
                  "snapcodeImageUrlOriginal",
                  "profileHeroImageUrl",
                  "profileHeroImageUrlOriginal",
                  "profileCreatedAt",
                  "profileUpdatedAt",
                  "storySource",
                  "storyType",
                  "storyId",
                  "highlightId",
                  "highlightIndex",
                  "highlightSnapCount",
                  "storyTitle",
                  "highlightThumbnailUrl",
                  "highlightThumbnailUrlOriginal",
                  "storySubtitle",
                  "storyShareId",
                  "canonicalUrlSuffix",
                  "emoji",
                  "storyTapId",
                  "videoTrackUrl",
                  "videoTrackUrlOriginal",
                  "isAttributed",
                  "thumbnailTiles",
                  "snapIndex",
                  "snapId",
                  "snapMediaType",
                  "mediaType",
                  "mediaUrl",
                  "mediaUrlOriginal",
                  "mediaPreviewUrl",
                  "mediaPreviewUrlOriginal",
                  "overlayUrl",
                  "overlayUrlOriginal",
                  "attachmentUrl",
                  "attachmentUrlOriginal",
                  "postedAt",
                  "intervalStartTimeMs",
                  "snapTitle",
                  "snapSubtitles",
                  "lat",
                  "lng",
                  "hasAttachment",
                  "isSponsored",
                  "audioTranscriptionObjectUrl",
                  "audioTranscriptionObjectUrlOriginal",
                  "mediaContentType",
                  "mediaSizeBytes",
                  "sourceUrl",
                  "scrapedAt",
                  "inputUsername",
                  "error"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "recordId": {
                    "label": "Record ID",
                    "format": "text"
                  },
                  "recordType": {
                    "label": "Record Type",
                    "format": "text"
                  },
                  "targetType": {
                    "label": "Target Type",
                    "format": "text"
                  },
                  "profileStatus": {
                    "label": "Profile Status",
                    "format": "text"
                  },
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "displayName": {
                    "label": "Display Name",
                    "format": "text"
                  },
                  "isVerified": {
                    "label": "Verified",
                    "format": "text"
                  },
                  "subscriberCount": {
                    "label": "Subscribers",
                    "format": "number"
                  },
                  "bio": {
                    "label": "Bio",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile",
                    "format": "link"
                  },
                  "profilePictureUrl": {
                    "label": "Avatar",
                    "format": "link"
                  },
                  "profilePictureUrlOriginal": {
                    "label": "Avatar (original)",
                    "format": "link"
                  },
                  "websiteUrl": {
                    "label": "Website",
                    "format": "link"
                  },
                  "profileCategory": {
                    "label": "Category",
                    "format": "text"
                  },
                  "profileSubcategory": {
                    "label": "Subcategory",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "snapcodeImageUrl": {
                    "label": "Snapcode",
                    "format": "link"
                  },
                  "snapcodeImageUrlOriginal": {
                    "label": "Snapcode (original)",
                    "format": "link"
                  },
                  "profileHeroImageUrl": {
                    "label": "Hero Image",
                    "format": "link"
                  },
                  "profileHeroImageUrlOriginal": {
                    "label": "Hero Image (original)",
                    "format": "link"
                  },
                  "profileCreatedAt": {
                    "label": "Profile Created",
                    "format": "text"
                  },
                  "profileUpdatedAt": {
                    "label": "Profile Updated",
                    "format": "text"
                  },
                  "storySource": {
                    "label": "Story Source",
                    "format": "text"
                  },
                  "storyType": {
                    "label": "Story Type",
                    "format": "number"
                  },
                  "storyId": {
                    "label": "Story ID",
                    "format": "text"
                  },
                  "highlightId": {
                    "label": "Highlight ID",
                    "format": "text"
                  },
                  "highlightIndex": {
                    "label": "Highlight #",
                    "format": "number"
                  },
                  "highlightSnapCount": {
                    "label": "Highlight Snaps",
                    "format": "number"
                  },
                  "storyTitle": {
                    "label": "Story Title",
                    "format": "text"
                  },
                  "highlightThumbnailUrl": {
                    "label": "Story Cover",
                    "format": "link"
                  },
                  "highlightThumbnailUrlOriginal": {
                    "label": "Story Cover (original)",
                    "format": "link"
                  },
                  "storySubtitle": {
                    "label": "Story Subtitle",
                    "format": "text"
                  },
                  "storyShareId": {
                    "label": "Story Share ID",
                    "format": "text"
                  },
                  "canonicalUrlSuffix": {
                    "label": "Canonical Suffix",
                    "format": "text"
                  },
                  "emoji": {
                    "label": "Emoji",
                    "format": "text"
                  },
                  "storyTapId": {
                    "label": "Story Tap ID",
                    "format": "text"
                  },
                  "videoTrackUrl": {
                    "label": "Video Track",
                    "format": "link"
                  },
                  "videoTrackUrlOriginal": {
                    "label": "Video Track (original)",
                    "format": "link"
                  },
                  "isAttributed": {
                    "label": "Attributed",
                    "format": "text"
                  },
                  "thumbnailTiles": {
                    "label": "Thumbnail Tiles",
                    "format": "text"
                  },
                  "snapIndex": {
                    "label": "Snap #",
                    "format": "number"
                  },
                  "snapId": {
                    "label": "Snap ID",
                    "format": "text"
                  },
                  "snapMediaType": {
                    "label": "Raw Media Type",
                    "format": "number"
                  },
                  "mediaType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "mediaUrl": {
                    "label": "Media URL",
                    "format": "link"
                  },
                  "mediaUrlOriginal": {
                    "label": "Media URL (original)",
                    "format": "link"
                  },
                  "mediaPreviewUrl": {
                    "label": "Preview",
                    "format": "link"
                  },
                  "mediaPreviewUrlOriginal": {
                    "label": "Preview (original)",
                    "format": "link"
                  },
                  "overlayUrl": {
                    "label": "Overlay",
                    "format": "link"
                  },
                  "overlayUrlOriginal": {
                    "label": "Overlay (original)",
                    "format": "link"
                  },
                  "attachmentUrl": {
                    "label": "Attachment",
                    "format": "link"
                  },
                  "attachmentUrlOriginal": {
                    "label": "Attachment (original)",
                    "format": "link"
                  },
                  "postedAt": {
                    "label": "Posted At",
                    "format": "text"
                  },
                  "intervalStartTimeMs": {
                    "label": "Interval Start (ms)",
                    "format": "number"
                  },
                  "snapTitle": {
                    "label": "Snap Title",
                    "format": "text"
                  },
                  "snapSubtitles": {
                    "label": "Snap Subtitles",
                    "format": "text"
                  },
                  "lat": {
                    "label": "Latitude",
                    "format": "number"
                  },
                  "lng": {
                    "label": "Longitude",
                    "format": "number"
                  },
                  "hasAttachment": {
                    "label": "Has Attachment",
                    "format": "text"
                  },
                  "isSponsored": {
                    "label": "Sponsored",
                    "format": "text"
                  },
                  "audioTranscriptionObjectUrl": {
                    "label": "Audio Transcription",
                    "format": "link"
                  },
                  "audioTranscriptionObjectUrlOriginal": {
                    "label": "Audio Transcription (original)",
                    "format": "link"
                  },
                  "mediaContentType": {
                    "label": "Media MIME",
                    "format": "text"
                  },
                  "mediaSizeBytes": {
                    "label": "Media Size",
                    "format": "number"
                  },
                  "sourceUrl": {
                    "label": "Source Page",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  },
                  "inputUsername": {
                    "label": "Input",
                    "format": "text"
                  },
                  "error": {
                    "label": "Error",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "fe4bea1129bca74f46a6a47da93ac3ad6e70c53187ea4849e8c9c94f4dbcf86a",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0036955555555555557
    }
  }
}