{
  "data": {
    "id": "oMu5xPu9KJDoORDdT",
    "actId": "FpzhExyefgz9gLqBd",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-04T13:57:49.606Z",
    "finishedAt": "2026-11-04T13:57:52.838Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3011,
      "runTimeSecs": 3.011,
      "computeUnits": 0.0033455555555555556,
      "imageSizeBytes": 321665024
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Creator Profile & Highlights Extractor Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"usernames\": {\n      \"title\": \"Usernames or profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"Snapchat usernames or profile URLs. Accepts brentrivera, @brentrivera, https://www.snapchat.com/add/brentrivera and https://www.snapchat.com/@brentrivera.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"brentrivera\"\n      ]\n    },\n    \"includeLenses\": {\n      \"title\": \"Include AR lenses\",\n      \"type\": \"boolean\",\n      \"description\": \"Include lenses published by the profile.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeSpotlightMeta\": {\n      \"title\": \"Include Spotlight metadata\",\n      \"type\": \"boolean\",\n      \"description\": \"Merge each Spotlight's view, share, comment, boost and recommend counts, caption, hashtags and AI metadata into the record.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeActiveStory\": {\n      \"title\": \"Include active story snaps\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the currently live public story snaps with media and preview URLs.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeHighlightSnaps\": {\n      \"title\": \"Include every highlight snap\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the full snap list to each curated highlight. Can make records much larger.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeComments\": {\n      \"title\": \"Include embedded Spotlight comments\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the public comment threads Snapchat embeds on the profile page. Full thread pagination is a separate actor.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxRelatedAccounts\": {\n      \"title\": \"Max related accounts per profile\",\n      \"type\": \"integer\",\n      \"description\": \"Cap the related accounts listed inside each record. 0 excludes them. Leave blank for no limit.\",\n      \"minimum\": 0,\n      \"nullable\": true\n    },\n    \"maxHighlightsPerUser\": {\n      \"title\": \"Max highlights per profile\",\n      \"type\": \"integer\",\n      \"description\": \"Cap curated highlights and Spotlight slots per profile. 0 excludes both. Leave blank for no limit.\",\n      \"minimum\": 0,\n      \"nullable\": true\n    },\n    \"maxSnapsPerHighlight\": {\n      \"title\": \"Max snaps per highlight\",\n      \"type\": \"integer\",\n      \"description\": \"Used only when includeHighlightSnaps is on. 0 means no limit; 1-500 caps each highlight.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 500\n    },\n    \"maxItems\": {\n      \"title\": \"Max profiles\",\n      \"type\": \"integer\",\n      \"description\": \"Stop after this many profile records. Leave blank for no cap.\",\n      \"minimum\": 1,\n      \"maximum\": 10000\n    },\n    \"relatedProfilesLimit\": {\n      \"title\": \"Scrape related profiles\",\n      \"type\": \"integer\",\n      \"description\": \"After the supplied profiles, scrape up to this many unique accounts from their related lists (one hop only). 0 disables expansion.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 50\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. Public Snapchat profiles work without a proxy.\",\n      \"editor\": \"proxy\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"usernames\"\n  ]\n}",
    "readme": "# Snapchat Creator Profile & Highlights Extractor\n\nPaste a list of Snapchat usernames or profile links and receive one structured record per account: identity, bio and links, subscriber and verification signals, curated highlights, Spotlight videos with captions and engagement, active story snaps, lenses, contacts and the accounts Snapchat lists as related. No Snapchat login, cookies or API key is needed.\n\n## What this actor does\n\n- Normalises bare usernames, `@username`, `/add/` links and `https://www.snapchat.com/@username` links, then reads the public profile page once per account.\n- Builds a flat, joinable record instead of dumping raw page data: identity, coverage, flags, counts, highlights, Spotlight, story, lenses, comments, contacts and related accounts.\n- Merges each Spotlight card with its metadata, so every entry carries the real `storyId`, `spotlightUrl`, view/share/comment/boost/recommend counts, caption, hashtags, AI title/description/keywords and a transcript URL when one exists.\n- Drops empty Spotlight slots, placeholder rows, `1970` timestamps, negative sentinel counts and empty strings at every depth. A field the source genuinely lacks is omitted, never zero-filled.\n- Derives `hasStory` from the actual active story snaps instead of the stale page flag.\n- Can expand one hop into related accounts, with `isSeed`, `sourceUsername` and `discoveryDepth` recorded so seed rows and discovered rows stay distinguishable.\n- Supports optional full highlight snap lists with a per-highlight snap cap, and caps the total number of profile records.\n\n## Output per profile\n\n### Core fields\n\n| Field | Description |\n|---|---|\n| `username` | Snapchat username. |\n| `displayName` | Public display name. |\n| `accountType` | `\"public\"` or `\"private\"` (personal account). |\n| `profileStatus` | `\"public\"`, `\"personal\"`, `\"not_found\"` or `\"invalid\"`. |\n| `recordType` | `\"profile\"` for profile rows, `\"error\"` for failed entries. |\n| `isVerified` | Whether the account carries Snapchat's verification badge. |\n| `subscriberCount` | Subscriber count when Snapchat publishes it. Hidden counts are omitted. |\n| `bio` / `websiteUrl` | Profile bio and linked website, when present. |\n| `profileUrl` | Canonical profile URL (`/@username`). |\n| `profilePictureUrl` / `snapcodeImageUrl` / `squareHeroImageUrl` | Avatar, Snapcode and hero image URLs. |\n| `category` / `subcategory` / `publisherType` | Content category and publisher identifiers. |\n| `businessProfileId` / `hostUserId` | Business profile and host identifiers, when exposed. |\n| `address` / `mutableName` / `primaryColor` | Optional profile presentation fields. |\n| `shouldHideUsername` | Whether Snapchat hides the username in its own UI. |\n| `hasStory` / `hasCuratedHighlights` / `hasSpotlightHighlights` | Whether each content type is present now. |\n| `storySnapCount` / `curatedHighlightCount` / `spotlightCount` / `lensCount` / `relatedAccountCount` | Flat counts. `storySnapCount` and `lensCount` describe the profile even when those sections are disabled; `curatedHighlightCount`, `spotlightCount` and `relatedAccountCount` reflect the entries returned after caps. |\n| `createdAt` / `lastUpdatedAt` | Account creation and last-update timestamps in ISO 8601 UTC. |\n| `sameAsLinks` | Cross-platform links listed for the profile. |\n| `contacts` | Locally parsed emails, phones, social handles, Linktree and website URLs. |\n| `engagementSummary` | Spotlight totals for the returned entries (after `maxHighlightsPerUser`): views, shares, comments, boosts, recommends and average views. |\n| `isSeed` / `sourceUsername` / `discoveryDepth` | `isSeed` is set on every profile row; `sourceUsername` and `discoveryDepth` appear on discovered rows. |\n| `scrapedAt` | Timestamp this actor fetched the record (ISO 8601 UTC). |\n\n### `curatedHighlights[]`\n\nEach entry keeps `highlightId`, `storyTitle`, `thumbnailUrl`, `snapCount`, `firstSnapUrl` and `firstSnapType`. With `includeHighlightSnaps` enabled, each entry also contains `snaps[]` with `snapIndex`, `snapId` (only when non-empty), `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `postedAt`, `snapTitle`, `lat`, `lng`, `isSponsored`, `hasAttachment` and `transcriptUrl`.\n\n### `spotlightHighlights[]`\n\nThe canonical Spotlight list. Every entry has a `storyId` and `spotlightUrl`, plus `thumbnailUrl`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `transcriptUrl`, `uploadedAt`, `durationMs`, `width`, `height`, `caption`, `hashtags`, `viewCount`, `shareCount`, `commentCount`, `boostCount`, `recommendCount`, creator fields, `aiTitle`, `aiDescription`, `aiKeywords`, `contentKeywords`, `contextCards` and `detectedLanguages` when the page provides them.\n\n### `spotlightMetadata[]` (when `includeSpotlightMeta` is true)\n\nA backward-compatible metadata array with the same placeholder and sentinel fixes, plus `storyId` and `spotlightUrl`. It is capped by `maxHighlightsPerUser`. `spotlightHighlights[]` is the recommended, merged view.\n\n### `activeStorySnaps[]` and `activeStoryMeta` (when `includeActiveStory` is true)\n\nPer snap: `snapIndex`, `snapId`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `postedAt`, `snapTitle`, `lat`, `lng`, `hasAttachment`, `audioTranscriptionObjectUrl`, `isSponsored` and `storySource`. Story-level metadata appears in `activeStoryMeta` when the page exposes it.\n\n### `lenses[]` (when `includeLenses` is true)\n\n`scannableUuid`, `lensName`, `lensCreatorDisplayName`, `lensCreatorUsername`, `lensId`, `lensPreviewImageUrl`, `lensPreviewVideoUrl`, `iconUrl`, `unlockUrl`, `userProfileUrl`, `lensCreatorSearchTags`, `isOfficialSnapLens`, `lastUpdatedAt` and `lensUrl`. The UUID is recovered from the unlock link when the page omits the dedicated field.\n\n### `spotlightComments[]` (when `includeComments` is true)\n\n`commentId`, `snapId`, `replyText`, `reactionCounts`, `likeCount`, `commenterDisplayName`, `commenterBitmojiAvatarId`, `commenterBitmojiSelfieId`, `commenterProfileLogoUrl`, `commenterId`, `commenterProfileId`, `approvalState`, `postedAt`, `updatedAt`, `rankingScore`, `threadedReplyCount` and `reportCount`. Duplicate comments are removed within a profile.\n\n### `relatedAccounts[]`\n\n`username`, `displayName`, `profileUrl`, `profilePictureUrl`, `isVerified`, `subscriberCount` (only when published), `bio`, `snapcodeImageUrl`, `category`, `websiteUrl`, presence flags and `subscribeLink` with `oneLinkBaseUrl`, `deepLinkUrl` and `iosAppStoreUrl`.\n\n### Personal and error records\n\nPersonal accounts return `username`, `displayName`, `profileUrl`, `snapcodeImageUrl`, optional Bitmoji URLs, `accountType: \"private\"`, `profileStatus: \"personal\"`, `isVerified: false`, `recordType` and `scrapedAt`.\n\nAn unknown or unparseable profile returns `inputUsername`, `profileStatus`, `recordType: \"error\"`, `error` and `scrapedAt`. Error rows count toward `maxItems`.\n\n### Legacy `cursors`\n\n`cursors` is retained for compatibility: `curatedHighlightsCursor`, `spotlightHighlightsCursor` and `lensCursor`. It is a raw cursor object and is not required to read the records.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `usernames` | Array of strings | – | Required. Snapchat usernames or profile URLs: `brentrivera`, `@brentrivera`, `https://www.snapchat.com/add/brentrivera`, `https://www.snapchat.com/@brentrivera`. |\n| `includeLenses` | Boolean | `true` | Include lenses published by the profile. |\n| `includeSpotlightMeta` | Boolean | `true` | Merge Spotlight metadata into `spotlightHighlights[]` and keep the legacy metadata array. |\n| `includeActiveStory` | Boolean | `true` | Include the current public story snaps. |\n| `includeHighlightSnaps` | Boolean | `false` | Add the full snap list to each curated highlight. |\n| `includeComments` | Boolean | `false` | Include embedded Spotlight comments. |\n| `maxRelatedAccounts` | Integer | – | Cap related accounts per profile. `0` excludes them. |\n| `maxHighlightsPerUser` | Integer | – | Cap curated highlights, Spotlight entries and legacy `spotlightMetadata[]` rows per profile. `0` excludes all three; counts and engagement totals follow the capped list. |\n| `maxSnapsPerHighlight` | Integer | `0` | With `includeHighlightSnaps`, cap snaps per highlight. `0` means no cap, maximum `500`. |\n| `maxItems` | Integer | – | Stop after this many profile rows, including error rows. |\n| `relatedProfilesLimit` | Integer | `0` | Scrape up to this many unique related accounts after the supplied profiles. One hop only. |\n| `proxyConfiguration` | Object | – | Optional proxy configuration. Public profiles work without one. |\n\n### Example: quick profile lookup\n\n```json\n{\n  \"usernames\": [\"brentrivera\", \"https://www.snapchat.com/@khaby.lame\"]\n}\n```\n\n### Example: lightweight run\n\n```json\n{\n  \"usernames\": [\"teamsnapchat\"],\n  \"includeLenses\": false,\n  \"includeSpotlightMeta\": false,\n  \"includeActiveStory\": false,\n  \"maxRelatedAccounts\": 0\n}\n```\n\n### Example: full enrichment with comments and highlight snaps\n\n```json\n{\n  \"usernames\": [\"kyliejenner\"],\n  \"includeLenses\": true,\n  \"includeSpotlightMeta\": true,\n  \"includeActiveStory\": true,\n  \"includeHighlightSnaps\": true,\n  \"maxSnapsPerHighlight\": 10,\n  \"includeComments\": true,\n  \"maxHighlightsPerUser\": 5\n}\n```\n\n### Example: related-account discovery\n\n```json\n{\n  \"usernames\": [\"nba\"],\n  \"relatedProfilesLimit\": 3,\n  \"maxItems\": 4\n}\n```\n\n## Use cases\n\n- **Influencer vetting** — check verification, published subscriber counts, recent Spotlight performance and the links a creator lists.\n- **Campaign benchmarking** — compare total Spotlight views, shares and comments across a roster of accounts.\n- **Contact discovery** — collect public emails, phone numbers and social handles from bios and linked pages without extra requests.\n- **Content research** — export captions, hashtags, AI titles and transcript URLs for a creator's current Spotlight catalog.\n- **Network mapping** — expand one hop into the accounts Snapchat associates with a brand, with provenance on every discovered row.\n- **Media archiving** — capture highlight, story and Spotlight media URLs for a point-in-time snapshot.\n\n## FAQ\n\n**Do I need a Snapchat account or cookies?**\nNo. The actor reads the same public profile page that opens in a browser without signing in.\n\n**Why is `subscriberCount` missing on some records?**\nSnapchat hides the count on some accounts. A hidden count is omitted rather than written as `0`. When Snapchat publishes a count it is rounded by Snapchat, commonly to the nearest 100.\n\n**Why does a Spotlight entry have no view count?**\nSome entries have no public engagement data. A count is included only when Snapchat supplies a non-negative value; negative sentinels are dropped.\n\n**What is the difference between `curatedHighlights` and `spotlightHighlights`?**\nCurated highlights are albums saved from the creator's story. Spotlight highlights are Spotlight videos pinned to the profile. Both are limited to what the public profile page exposes.\n\n**How many highlights, Spotlights, lenses or related accounts can a profile have?**\nThe public page currently exposes about 30 Spotlight slots, about 18 curated highlights, up to 16 lenses and up to 3 related accounts per profile. The actor reports exactly what the page returns; it does not promise full history.\n\n**Why are some media URLs no longer playable later?**\nSnapchat's CDN links can carry expiring tokens. Download or cache media promptly after a run.\n\n**Does a personal account return highlights or stories?**\nPersonal accounts expose very little publicly. They return identity, Snapcode and Bitmoji assets when available, and `profileStatus: \"personal\"` explains the reduced record.\n\n**How does related-account expansion work?**\nSet `relatedProfilesLimit` above `0`. The actor reads the related list from the supplied profiles, de-duplicates usernames, and scrapes one hop only. Discovered profiles keep `isSeed: false`, `sourceUsername` and `discoveryDepth: 1`.\n\n**Are empty fields written as null?**\nNo. Empty strings, nulls, empty arrays and empty objects are removed at every depth. Legitimate `false` values and numeric `0` from the source are preserved.\n\n**Is this affiliated with Snapchat?**\nNo. This actor reads public profile pages and is not affiliated with, endorsed by, or supported by Snap Inc.\n\n## Limitations\n\n- Subscriber counts are rounded by Snapchat and hidden on some accounts.\n- The profile page exposes a fixed batch of highlights and Spotlight entries, not the account's full history.\n- Full comment-thread pagination and transcript text are owned by separate actors; this actor returns the embedded comments and transcript URLs only.\n- Personal accounts expose minimal public data.\n- Snapchat can change its page format at any time. When the page cannot be parsed, the actor returns an explicit error row instead of invented values.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-creator-profile-and-highlights-extractor",
      "title": "Snapchat Creator Profile & Highlights Extractor",
      "description": "Turn Snapchat usernames into structured profile records with identity, contacts, highlight and Spotlight media, captions, AI metadata, engagement totals, counts and one-hop related creators.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python"
      },
      "input": {
        "title": "Snapchat Creator Profile & Highlights Extractor Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "usernames": {
            "title": "Usernames or profile URLs",
            "type": "array",
            "description": "Snapchat usernames or profile URLs. Accepts brentrivera, @brentrivera, https://www.snapchat.com/add/brentrivera and https://www.snapchat.com/@brentrivera.",
            "editor": "stringList",
            "prefill": [
              "brentrivera"
            ]
          },
          "includeLenses": {
            "title": "Include AR lenses",
            "type": "boolean",
            "description": "Include lenses published by the profile.",
            "default": true,
            "prefill": false
          },
          "includeSpotlightMeta": {
            "title": "Include Spotlight metadata",
            "type": "boolean",
            "description": "Merge each Spotlight's view, share, comment, boost and recommend counts, caption, hashtags and AI metadata into the record.",
            "default": true,
            "prefill": false
          },
          "includeActiveStory": {
            "title": "Include active story snaps",
            "type": "boolean",
            "description": "Include the currently live public story snaps with media and preview URLs.",
            "default": true,
            "prefill": false
          },
          "includeHighlightSnaps": {
            "title": "Include every highlight snap",
            "type": "boolean",
            "description": "Add the full snap list to each curated highlight. Can make records much larger.",
            "default": false,
            "prefill": false
          },
          "includeComments": {
            "title": "Include embedded Spotlight comments",
            "type": "boolean",
            "description": "Include the public comment threads Snapchat embeds on the profile page. Full thread pagination is a separate actor.",
            "default": false,
            "prefill": false
          },
          "maxRelatedAccounts": {
            "title": "Max related accounts per profile",
            "type": "integer",
            "description": "Cap the related accounts listed inside each record. 0 excludes them. Leave blank for no limit.",
            "minimum": 0,
            "nullable": true
          },
          "maxHighlightsPerUser": {
            "title": "Max highlights per profile",
            "type": "integer",
            "description": "Cap curated highlights and Spotlight slots per profile. 0 excludes both. Leave blank for no limit.",
            "minimum": 0,
            "nullable": true
          },
          "maxSnapsPerHighlight": {
            "title": "Max snaps per highlight",
            "type": "integer",
            "description": "Used only when includeHighlightSnaps is on. 0 means no limit; 1-500 caps each highlight.",
            "default": 0,
            "minimum": 0,
            "maximum": 500
          },
          "maxItems": {
            "title": "Max profiles",
            "type": "integer",
            "description": "Stop after this many profile records. Leave blank for no cap.",
            "minimum": 1,
            "maximum": 10000
          },
          "relatedProfilesLimit": {
            "title": "Scrape related profiles",
            "type": "integer",
            "description": "After the supplied profiles, scrape up to this many unique accounts from their related lists (one hop only). 0 disables expansion.",
            "default": 0,
            "minimum": 0,
            "maximum": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Public Snapchat profiles work without a proxy.",
            "editor": "proxy",
            "nullable": true
          }
        },
        "required": [
          "usernames"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Creator Profile & Highlights Extractor Output",
        "description": "One record per Snapchat profile with identity fields, highlight and Spotlight media, contacts, engagement totals, related accounts and an explicit status for personal or not-found accounts.",
        "properties": {
          "profiles": {
            "type": "string",
            "title": "Profile records",
            "description": "Dataset containing one record per requested Snapchat profile.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# Snapchat Creator Profile & Highlights Extractor\n\nPaste a list of Snapchat usernames or profile links and receive one structured record per account: identity, bio and links, subscriber and verification signals, curated highlights, Spotlight videos with captions and engagement, active story snaps, lenses, contacts and the accounts Snapchat lists as related. No Snapchat login, cookies or API key is needed.\n\n## What this actor does\n\n- Normalises bare usernames, `@username`, `/add/` links and `https://www.snapchat.com/@username` links, then reads the public profile page once per account.\n- Builds a flat, joinable record instead of dumping raw page data: identity, coverage, flags, counts, highlights, Spotlight, story, lenses, comments, contacts and related accounts.\n- Merges each Spotlight card with its metadata, so every entry carries the real `storyId`, `spotlightUrl`, view/share/comment/boost/recommend counts, caption, hashtags, AI title/description/keywords and a transcript URL when one exists.\n- Drops empty Spotlight slots, placeholder rows, `1970` timestamps, negative sentinel counts and empty strings at every depth. A field the source genuinely lacks is omitted, never zero-filled.\n- Derives `hasStory` from the actual active story snaps instead of the stale page flag.\n- Can expand one hop into related accounts, with `isSeed`, `sourceUsername` and `discoveryDepth` recorded so seed rows and discovered rows stay distinguishable.\n- Supports optional full highlight snap lists with a per-highlight snap cap, and caps the total number of profile records.\n\n## Output per profile\n\n### Core fields\n\n| Field | Description |\n|---|---|\n| `username` | Snapchat username. |\n| `displayName` | Public display name. |\n| `accountType` | `\"public\"` or `\"private\"` (personal account). |\n| `profileStatus` | `\"public\"`, `\"personal\"`, `\"not_found\"` or `\"invalid\"`. |\n| `recordType` | `\"profile\"` for profile rows, `\"error\"` for failed entries. |\n| `isVerified` | Whether the account carries Snapchat's verification badge. |\n| `subscriberCount` | Subscriber count when Snapchat publishes it. Hidden counts are omitted. |\n| `bio` / `websiteUrl` | Profile bio and linked website, when present. |\n| `profileUrl` | Canonical profile URL (`/@username`). |\n| `profilePictureUrl` / `snapcodeImageUrl` / `squareHeroImageUrl` | Avatar, Snapcode and hero image URLs. |\n| `category` / `subcategory` / `publisherType` | Content category and publisher identifiers. |\n| `businessProfileId` / `hostUserId` | Business profile and host identifiers, when exposed. |\n| `address` / `mutableName` / `primaryColor` | Optional profile presentation fields. |\n| `shouldHideUsername` | Whether Snapchat hides the username in its own UI. |\n| `hasStory` / `hasCuratedHighlights` / `hasSpotlightHighlights` | Whether each content type is present now. |\n| `storySnapCount` / `curatedHighlightCount` / `spotlightCount` / `lensCount` / `relatedAccountCount` | Flat counts. `storySnapCount` and `lensCount` describe the profile even when those sections are disabled; `curatedHighlightCount`, `spotlightCount` and `relatedAccountCount` reflect the entries returned after caps. |\n| `createdAt` / `lastUpdatedAt` | Account creation and last-update timestamps in ISO 8601 UTC. |\n| `sameAsLinks` | Cross-platform links listed for the profile. |\n| `contacts` | Locally parsed emails, phones, social handles, Linktree and website URLs. |\n| `engagementSummary` | Spotlight totals for the returned entries (after `maxHighlightsPerUser`): views, shares, comments, boosts, recommends and average views. |\n| `isSeed` / `sourceUsername` / `discoveryDepth` | `isSeed` is set on every profile row; `sourceUsername` and `discoveryDepth` appear on discovered rows. |\n| `scrapedAt` | Timestamp this actor fetched the record (ISO 8601 UTC). |\n\n### `curatedHighlights[]`\n\nEach entry keeps `highlightId`, `storyTitle`, `thumbnailUrl`, `snapCount`, `firstSnapUrl` and `firstSnapType`. With `includeHighlightSnaps` enabled, each entry also contains `snaps[]` with `snapIndex`, `snapId` (only when non-empty), `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `postedAt`, `snapTitle`, `lat`, `lng`, `isSponsored`, `hasAttachment` and `transcriptUrl`.\n\n### `spotlightHighlights[]`\n\nThe canonical Spotlight list. Every entry has a `storyId` and `spotlightUrl`, plus `thumbnailUrl`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `transcriptUrl`, `uploadedAt`, `durationMs`, `width`, `height`, `caption`, `hashtags`, `viewCount`, `shareCount`, `commentCount`, `boostCount`, `recommendCount`, creator fields, `aiTitle`, `aiDescription`, `aiKeywords`, `contentKeywords`, `contextCards` and `detectedLanguages` when the page provides them.\n\n### `spotlightMetadata[]` (when `includeSpotlightMeta` is true)\n\nA backward-compatible metadata array with the same placeholder and sentinel fixes, plus `storyId` and `spotlightUrl`. It is capped by `maxHighlightsPerUser`. `spotlightHighlights[]` is the recommended, merged view.\n\n### `activeStorySnaps[]` and `activeStoryMeta` (when `includeActiveStory` is true)\n\nPer snap: `snapIndex`, `snapId`, `mediaUrl`, `mediaPreviewUrl`, `mediaType`, `postedAt`, `snapTitle`, `lat`, `lng`, `hasAttachment`, `audioTranscriptionObjectUrl`, `isSponsored` and `storySource`. Story-level metadata appears in `activeStoryMeta` when the page exposes it.\n\n### `lenses[]` (when `includeLenses` is true)\n\n`scannableUuid`, `lensName`, `lensCreatorDisplayName`, `lensCreatorUsername`, `lensId`, `lensPreviewImageUrl`, `lensPreviewVideoUrl`, `iconUrl`, `unlockUrl`, `userProfileUrl`, `lensCreatorSearchTags`, `isOfficialSnapLens`, `lastUpdatedAt` and `lensUrl`. The UUID is recovered from the unlock link when the page omits the dedicated field.\n\n### `spotlightComments[]` (when `includeComments` is true)\n\n`commentId`, `snapId`, `replyText`, `reactionCounts`, `likeCount`, `commenterDisplayName`, `commenterBitmojiAvatarId`, `commenterBitmojiSelfieId`, `commenterProfileLogoUrl`, `commenterId`, `commenterProfileId`, `approvalState`, `postedAt`, `updatedAt`, `rankingScore`, `threadedReplyCount` and `reportCount`. Duplicate comments are removed within a profile.\n\n### `relatedAccounts[]`\n\n`username`, `displayName`, `profileUrl`, `profilePictureUrl`, `isVerified`, `subscriberCount` (only when published), `bio`, `snapcodeImageUrl`, `category`, `websiteUrl`, presence flags and `subscribeLink` with `oneLinkBaseUrl`, `deepLinkUrl` and `iosAppStoreUrl`.\n\n### Personal and error records\n\nPersonal accounts return `username`, `displayName`, `profileUrl`, `snapcodeImageUrl`, optional Bitmoji URLs, `accountType: \"private\"`, `profileStatus: \"personal\"`, `isVerified: false`, `recordType` and `scrapedAt`.\n\nAn unknown or unparseable profile returns `inputUsername`, `profileStatus`, `recordType: \"error\"`, `error` and `scrapedAt`. Error rows count toward `maxItems`.\n\n### Legacy `cursors`\n\n`cursors` is retained for compatibility: `curatedHighlightsCursor`, `spotlightHighlightsCursor` and `lensCursor`. It is a raw cursor object and is not required to read the records.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `usernames` | Array of strings | – | Required. Snapchat usernames or profile URLs: `brentrivera`, `@brentrivera`, `https://www.snapchat.com/add/brentrivera`, `https://www.snapchat.com/@brentrivera`. |\n| `includeLenses` | Boolean | `true` | Include lenses published by the profile. |\n| `includeSpotlightMeta` | Boolean | `true` | Merge Spotlight metadata into `spotlightHighlights[]` and keep the legacy metadata array. |\n| `includeActiveStory` | Boolean | `true` | Include the current public story snaps. |\n| `includeHighlightSnaps` | Boolean | `false` | Add the full snap list to each curated highlight. |\n| `includeComments` | Boolean | `false` | Include embedded Spotlight comments. |\n| `maxRelatedAccounts` | Integer | – | Cap related accounts per profile. `0` excludes them. |\n| `maxHighlightsPerUser` | Integer | – | Cap curated highlights, Spotlight entries and legacy `spotlightMetadata[]` rows per profile. `0` excludes all three; counts and engagement totals follow the capped list. |\n| `maxSnapsPerHighlight` | Integer | `0` | With `includeHighlightSnaps`, cap snaps per highlight. `0` means no cap, maximum `500`. |\n| `maxItems` | Integer | – | Stop after this many profile rows, including error rows. |\n| `relatedProfilesLimit` | Integer | `0` | Scrape up to this many unique related accounts after the supplied profiles. One hop only. |\n| `proxyConfiguration` | Object | – | Optional proxy configuration. Public profiles work without one. |\n\n### Example: quick profile lookup\n\n```json\n{\n  \"usernames\": [\"brentrivera\", \"https://www.snapchat.com/@khaby.lame\"]\n}\n```\n\n### Example: lightweight run\n\n```json\n{\n  \"usernames\": [\"teamsnapchat\"],\n  \"includeLenses\": false,\n  \"includeSpotlightMeta\": false,\n  \"includeActiveStory\": false,\n  \"maxRelatedAccounts\": 0\n}\n```\n\n### Example: full enrichment with comments and highlight snaps\n\n```json\n{\n  \"usernames\": [\"kyliejenner\"],\n  \"includeLenses\": true,\n  \"includeSpotlightMeta\": true,\n  \"includeActiveStory\": true,\n  \"includeHighlightSnaps\": true,\n  \"maxSnapsPerHighlight\": 10,\n  \"includeComments\": true,\n  \"maxHighlightsPerUser\": 5\n}\n```\n\n### Example: related-account discovery\n\n```json\n{\n  \"usernames\": [\"nba\"],\n  \"relatedProfilesLimit\": 3,\n  \"maxItems\": 4\n}\n```\n\n## Use cases\n\n- **Influencer vetting** — check verification, published subscriber counts, recent Spotlight performance and the links a creator lists.\n- **Campaign benchmarking** — compare total Spotlight views, shares and comments across a roster of accounts.\n- **Contact discovery** — collect public emails, phone numbers and social handles from bios and linked pages without extra requests.\n- **Content research** — export captions, hashtags, AI titles and transcript URLs for a creator's current Spotlight catalog.\n- **Network mapping** — expand one hop into the accounts Snapchat associates with a brand, with provenance on every discovered row.\n- **Media archiving** — capture highlight, story and Spotlight media URLs for a point-in-time snapshot.\n\n## FAQ\n\n**Do I need a Snapchat account or cookies?**\nNo. The actor reads the same public profile page that opens in a browser without signing in.\n\n**Why is `subscriberCount` missing on some records?**\nSnapchat hides the count on some accounts. A hidden count is omitted rather than written as `0`. When Snapchat publishes a count it is rounded by Snapchat, commonly to the nearest 100.\n\n**Why does a Spotlight entry have no view count?**\nSome entries have no public engagement data. A count is included only when Snapchat supplies a non-negative value; negative sentinels are dropped.\n\n**What is the difference between `curatedHighlights` and `spotlightHighlights`?**\nCurated highlights are albums saved from the creator's story. Spotlight highlights are Spotlight videos pinned to the profile. Both are limited to what the public profile page exposes.\n\n**How many highlights, Spotlights, lenses or related accounts can a profile have?**\nThe public page currently exposes about 30 Spotlight slots, about 18 curated highlights, up to 16 lenses and up to 3 related accounts per profile. The actor reports exactly what the page returns; it does not promise full history.\n\n**Why are some media URLs no longer playable later?**\nSnapchat's CDN links can carry expiring tokens. Download or cache media promptly after a run.\n\n**Does a personal account return highlights or stories?**\nPersonal accounts expose very little publicly. They return identity, Snapcode and Bitmoji assets when available, and `profileStatus: \"personal\"` explains the reduced record.\n\n**How does related-account expansion work?**\nSet `relatedProfilesLimit` above `0`. The actor reads the related list from the supplied profiles, de-duplicates usernames, and scrapes one hop only. Discovered profiles keep `isSeed: false`, `sourceUsername` and `discoveryDepth: 1`.\n\n**Are empty fields written as null?**\nNo. Empty strings, nulls, empty arrays and empty objects are removed at every depth. Legitimate `false` values and numeric `0` from the source are preserved.\n\n**Is this affiliated with Snapchat?**\nNo. This actor reads public profile pages and is not affiliated with, endorsed by, or supported by Snap Inc.\n\n## Limitations\n\n- Subscriber counts are rounded by Snapchat and hidden on some accounts.\n- The profile page exposes a fixed batch of highlights and Spotlight entries, not the account's full history.\n- Full comment-thread pagination and transcript text are owned by separate actors; this actor returns the embedded comments and transcript URLs only.\n- Personal accounts expose minimal public data.\n- Snapchat can change its page format at any time. When the page cannot be parsed, the actor returns an explicit error row instead of invented values.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Snapchat Profiles",
          "views": {
            "overview": {
              "title": "Profile Overview",
              "transformation": {
                "fields": [
                  "username",
                  "displayName",
                  "accountType",
                  "isVerified",
                  "subscriberCount",
                  "bio",
                  "profileUrl",
                  "profilePictureUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "displayName": {
                    "label": "Display Name",
                    "format": "text"
                  },
                  "accountType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "isVerified": {
                    "label": "Verified",
                    "format": "text"
                  },
                  "subscriberCount": {
                    "label": "Subscribers",
                    "format": "number"
                  },
                  "bio": {
                    "label": "Bio",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "profilePictureUrl": {
                    "label": "Avatar",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "username",
                  "displayName",
                  "accountType",
                  "isVerified",
                  "subscriberCount",
                  "bio",
                  "profileUrl",
                  "profilePictureUrl",
                  "snapcodeImageUrl",
                  "squareHeroImageUrl",
                  "websiteUrl",
                  "category",
                  "subcategory",
                  "address",
                  "mutableName",
                  "primaryColor",
                  "shouldHideUsername",
                  "hostUserId",
                  "hasStory",
                  "hasCuratedHighlights",
                  "hasSpotlightHighlights",
                  "createdAt",
                  "lastUpdatedAt",
                  "sameAsLinks",
                  "relatedAccounts",
                  "curatedHighlights",
                  "spotlightHighlights",
                  "cursors",
                  "lenses",
                  "spotlightMetadata",
                  "activeStorySnaps",
                  "spotlightComments",
                  "scrapedAt",
                  "error",
                  "recordType",
                  "profileStatus",
                  "storySnapCount",
                  "curatedHighlightCount",
                  "spotlightCount",
                  "lensCount",
                  "relatedAccountCount",
                  "contacts",
                  "engagementSummary",
                  "isSeed",
                  "sourceUsername",
                  "discoveryDepth"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "displayName": {
                    "label": "Display Name",
                    "format": "text"
                  },
                  "accountType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "isVerified": {
                    "label": "Verified",
                    "format": "text"
                  },
                  "subscriberCount": {
                    "label": "Subscribers",
                    "format": "number"
                  },
                  "bio": {
                    "label": "Bio",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "profilePictureUrl": {
                    "label": "Avatar",
                    "format": "link"
                  },
                  "snapcodeImageUrl": {
                    "label": "Snapcode",
                    "format": "link"
                  },
                  "squareHeroImageUrl": {
                    "label": "Hero Image",
                    "format": "link"
                  },
                  "websiteUrl": {
                    "label": "Website",
                    "format": "link"
                  },
                  "category": {
                    "label": "Category",
                    "format": "text"
                  },
                  "subcategory": {
                    "label": "Subcategory",
                    "format": "text"
                  },
                  "address": {
                    "label": "Address",
                    "format": "text"
                  },
                  "mutableName": {
                    "label": "Mutable Name",
                    "format": "text"
                  },
                  "primaryColor": {
                    "label": "Primary Color",
                    "format": "text"
                  },
                  "shouldHideUsername": {
                    "label": "Hide Username",
                    "format": "text"
                  },
                  "hostUserId": {
                    "label": "Host User ID",
                    "format": "text"
                  },
                  "hasStory": {
                    "label": "Has Story",
                    "format": "text"
                  },
                  "hasCuratedHighlights": {
                    "label": "Has Highlights",
                    "format": "text"
                  },
                  "hasSpotlightHighlights": {
                    "label": "Has Spotlight",
                    "format": "text"
                  },
                  "createdAt": {
                    "label": "Created At",
                    "format": "text"
                  },
                  "lastUpdatedAt": {
                    "label": "Last Updated",
                    "format": "text"
                  },
                  "sameAsLinks": {
                    "label": "Social Links",
                    "format": "text"
                  },
                  "relatedAccounts": {
                    "label": "Related Accounts",
                    "format": "text"
                  },
                  "curatedHighlights": {
                    "label": "Highlights",
                    "format": "text"
                  },
                  "spotlightHighlights": {
                    "label": "Spotlight",
                    "format": "text"
                  },
                  "cursors": {
                    "label": "Pagination Cursors",
                    "format": "text"
                  },
                  "lenses": {
                    "label": "AR Lenses",
                    "format": "text"
                  },
                  "spotlightMetadata": {
                    "label": "Spotlight Metadata",
                    "format": "text"
                  },
                  "activeStorySnaps": {
                    "label": "Active Story Snaps",
                    "format": "text"
                  },
                  "spotlightComments": {
                    "label": "Spotlight Comments",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  },
                  "error": {
                    "label": "Error",
                    "format": "text"
                  },
                  "recordType": {
                    "label": "recordType",
                    "format": "text"
                  },
                  "profileStatus": {
                    "label": "Status",
                    "format": "text"
                  },
                  "spotlightCount": {
                    "label": "spotlight Count",
                    "format": "text"
                  },
                  "engagementSummary": {
                    "label": "engagementSummary",
                    "format": "text"
                  },
                  "contacts": {
                    "label": "contacts",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "defaultRunOptions": {
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "75fda32cdf4eeb82a683424afe943fca2dc01030d62ee5c39be9c0826654875a",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0033455555555555556
    }
  }
}