Vexaloom Labs

Snapchat Creator Profile & Highlights Extractor

Turn Snapchat usernames into structured profile records with bio, subscriber count, verification status, story highlights, Spotlight videos, AR lenses, and related creators.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
usernamesarrayrequiredSnapchat usernames or profile URLs. Accepts brentrivera, @brentrivera, https://www.snapchat.com/add/brentrivera and https://www.snapchat.com/@brentrivera.
includeLensesbooleanoptionalInclude lenses published by the profile.
includeSpotlightMetabooleanoptionalMerge each Spotlight's view, share, comment, boost and recommend counts, caption, hashtags and AI metadata into the record.
Show all input fields
FieldTypeRequiredDescription
usernamesarrayrequiredSnapchat usernames or profile URLs. Accepts brentrivera, @brentrivera, https://www.snapchat.com/add/brentrivera and https://www.snapchat.com/@brentrivera.
includeLensesbooleanoptionalInclude lenses published by the profile.
includeSpotlightMetabooleanoptionalMerge each Spotlight's view, share, comment, boost and recommend counts, caption, hashtags and AI metadata into the record.
includeActiveStorybooleanoptionalInclude the currently live public story snaps with media and preview URLs.
includeHighlightSnapsbooleanoptionalAdd the full snap list to each curated highlight. Can make records much larger.
includeCommentsbooleanoptionalInclude the public comment threads Snapchat embeds on the profile page. Full thread pagination is a separate actor.
maxRelatedAccountsintegeroptionalCap the related accounts listed inside each record. 0 excludes them. Leave blank for no limit.
maxHighlightsPerUserintegeroptionalCap curated highlights and Spotlight slots per profile. 0 excludes both. Leave blank for no limit.
maxSnapsPerHighlightintegeroptionalUsed only when includeHighlightSnaps is on. 0 means no limit; 1-500 caps each highlight.
maxItemsintegeroptionalStop after this many profile records. Leave blank for no cap.
relatedProfilesLimitintegeroptionalAfter the supplied profiles, scrape up to this many unique accounts from their related lists (one hop only). 0 disables expansion.
proxyConfigurationobjectoptionalOptional. Public Snapchat profiles work without a proxy.

Download the published input schema

View complete JSON
{
  "properties": {
    "includeActiveStory": {
      "default": true,
      "description": "Include the currently live public story snaps with media and preview URLs.",
      "prefill": false,
      "title": "Include active story snaps",
      "type": "boolean"
    },
    "includeComments": {
      "default": false,
      "description": "Include the public comment threads Snapchat embeds on the profile page. Full thread pagination is a separate actor.",
      "prefill": false,
      "title": "Include embedded Spotlight comments",
      "type": "boolean"
    },
    "includeHighlightSnaps": {
      "default": false,
      "description": "Add the full snap list to each curated highlight. Can make records much larger.",
      "prefill": false,
      "title": "Include every highlight snap",
      "type": "boolean"
    },
    "includeLenses": {
      "default": true,
      "description": "Include lenses published by the profile.",
      "prefill": false,
      "title": "Include AR lenses",
      "type": "boolean"
    },
    "includeSpotlightMeta": {
      "default": true,
      "description": "Merge each Spotlight's view, share, comment, boost and recommend counts, caption, hashtags and AI metadata into the record.",
      "prefill": false,
      "title": "Include Spotlight metadata",
      "type": "boolean"
    },
    "maxHighlightsPerUser": {
      "description": "Cap curated highlights and Spotlight slots per profile. 0 excludes both. Leave blank for no limit.",
      "minimum": 0,
      "nullable": true,
      "title": "Max highlights per profile",
      "type": "integer"
    },
    "maxItems": {
      "description": "Stop after this many profile records. Leave blank for no cap.",
      "maximum": 10000,
      "minimum": 1,
      "title": "Max profiles",
      "type": "integer"
    },
    "maxRelatedAccounts": {
      "description": "Cap the related accounts listed inside each record. 0 excludes them. Leave blank for no limit.",
      "minimum": 0,
      "nullable": true,
      "title": "Max related accounts per profile",
      "type": "integer"
    },
    "maxSnapsPerHighlight": {
      "default": 0,
      "description": "Used only when includeHighlightSnaps is on. 0 means no limit; 1-500 caps each highlight.",
      "maximum": 500,
      "minimum": 0,
      "title": "Max snaps per highlight",
      "type": "integer"
    },
    "proxyConfiguration": {
      "description": "Optional. Public Snapchat profiles work without a proxy.",
      "editor": "proxy",
      "nullable": true,
      "title": "Proxy configuration",
      "type": "object"
    },
    "relatedProfilesLimit": {
      "default": 0,
      "description": "After the supplied profiles, scrape up to this many unique accounts from their related lists (one hop only). 0 disables expansion.",
      "maximum": 50,
      "minimum": 0,
      "title": "Scrape related profiles",
      "type": "integer"
    },
    "usernames": {
      "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"
      ],
      "title": "Usernames or profile URLs",
      "type": "array"
    }
  },
  "required": [
    "usernames"
  ],
  "schemaVersion": 1,
  "title": "Snapchat Creator Profile & Highlights Extractor Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
profilesstringoptionalDataset containing one record per requested Snapchat profile.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "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": {
      "description": "Dataset containing one record per requested Snapchat profile.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Profile records",
      "type": "string"
    }
  },
  "title": "Snapchat Creator Profile & Highlights Extractor Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "Snapchat Profiles",
  "views": {
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "accountType": {
            "format": "text",
            "label": "Type"
          },
          "activeStorySnaps": {
            "format": "text",
            "label": "Active Story Snaps"
          },
          "address": {
            "format": "text",
            "label": "Address"
          },
          "bio": {
            "format": "text",
            "label": "Bio"
          },
          "category": {
            "format": "text",
            "label": "Category"
          },
          "contacts": {
            "format": "text",
            "label": "contacts"
          },
          "createdAt": {
            "format": "text",
            "label": "Created At"
          },
          "curatedHighlights": {
            "format": "text",
            "label": "Highlights"
          },
          "cursors": {
            "format": "text",
            "label": "Pagination Cursors"
          },
          "displayName": {
            "format": "text",
            "label": "Display Name"
          },
          "engagementSummary": {
            "format": "text",
            "label": "engagementSummary"
          },
          "error": {
            "format": "text",
            "label": "Error"
          },
          "hasCuratedHighlights": {
            "format": "text",
            "label": "Has Highlights"
          },
          "hasSpotlightHighlights": {
            "format": "text",
            "label": "Has Spotlight"
          },
          "hasStory": {
            "format": "text",
            "label": "Has Story"
          },
          "hostUserId": {
            "format": "text",
            "label": "Host User ID"
          },
          "isVerified": {
            "format": "text",
            "label": "Verified"
          },
          "lastUpdatedAt": {
            "format": "text",
            "label": "Last Updated"
          },
          "lenses": {
            "format": "text",
            "label": "AR Lenses"
          },
          "mutableName": {
            "format": "text",
            "label": "Mutable Name"
          },
          "primaryColor": {
            "format": "text",
            "label": "Primary Color"
          },
          "profilePictureUrl": {
            "format": "link",
            "label": "Avatar"
          },
          "profileStatus": {
            "format": "text",
            "label": "Status"
          },
          "profileUrl": {
            "format": "link",
            "label": "Profile URL"
          },
          "recordType": {
            "format": "text",
            "label": "recordType"
          },
          "relatedAccounts": {
            "format": "text",
            "label": "Related Accounts"
          },
          "sameAsLinks": {
            "format": "text",
            "label": "Social Links"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "shouldHideUsername": {
            "format": "text",
            "label": "Hide Username"
          },
          "snapcodeImageUrl": {
            "format": "link",
            "label": "Snapcode"
          },
          "spotlightComments": {
            "format": "text",
            "label": "Spotlight Comments"
          },
          "spotlightCount": {
            "format": "text",
            "label": "spotlight Count"
          },
          "spotlightHighlights": {
            "format": "text",
            "label": "Spotlight"
          },
          "spotlightMetadata": {
            "format": "text",
            "label": "Spotlight Metadata"
          },
          "squareHeroImageUrl": {
            "format": "link",
            "label": "Hero Image"
          },
          "subcategory": {
            "format": "text",
            "label": "Subcategory"
          },
          "subscriberCount": {
            "format": "number",
            "label": "Subscribers"
          },
          "username": {
            "format": "text",
            "label": "Username"
          },
          "websiteUrl": {
            "format": "link",
            "label": "Website"
          }
        }
      },
      "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"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "accountType": {
            "format": "text",
            "label": "Type"
          },
          "bio": {
            "format": "text",
            "label": "Bio"
          },
          "displayName": {
            "format": "text",
            "label": "Display Name"
          },
          "isVerified": {
            "format": "text",
            "label": "Verified"
          },
          "profilePictureUrl": {
            "format": "link",
            "label": "Avatar"
          },
          "profileUrl": {
            "format": "link",
            "label": "Profile URL"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "subscriberCount": {
            "format": "number",
            "label": "Subscribers"
          },
          "username": {
            "format": "text",
            "label": "Username"
          }
        }
      },
      "title": "Profile Overview",
      "transformation": {
        "fields": [
          "username",
          "displayName",
          "accountType",
          "isVerified",
          "subscriberCount",
          "bio",
          "profileUrl",
          "profilePictureUrl",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Snapchat Creator Profile & Highlights Extractor

Paste 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.

What this actor does

  • Normalises bare usernames, @username, /add/ links and https://www.snapchat.com/@username links, then reads the public profile page once per account.
  • Builds a flat, joinable record instead of dumping raw page data: identity, coverage, flags, counts, highlights, Spotlight, story, lenses, comments, contacts and related accounts.
  • 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.
  • 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.
  • Derives hasStory from the actual active story snaps instead of the stale page flag.
  • Can expand one hop into related accounts, with isSeed, sourceUsername and discoveryDepth recorded so seed rows and discovered rows stay distinguishable.
  • Supports optional full highlight snap lists with a per-highlight snap cap, and caps the total number of profile records.

Output per profile

Core fields

Field Description
username Snapchat username.
displayName Public display name.
accountType "public" or "private" (personal account).
profileStatus "public", "personal", "not_found" or "invalid".
recordType "profile" for profile rows, "error" for failed entries.
isVerified Whether the account carries Snapchat's verification badge.
subscriberCount Subscriber count when Snapchat publishes it. Hidden counts are omitted.
bio / websiteUrl Profile bio and linked website, when present.
profileUrl Canonical profile URL (/@username).
profilePictureUrl / snapcodeImageUrl / squareHeroImageUrl Avatar, Snapcode and hero image URLs.
category / subcategory / publisherType Content category and publisher identifiers.
businessProfileId / hostUserId Business profile and host identifiers, when exposed.
address / mutableName / primaryColor Optional profile presentation fields.
shouldHideUsername Whether Snapchat hides the username in its own UI.
hasStory / hasCuratedHighlights / hasSpotlightHighlights Whether each content type is present now.
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.
createdAt / lastUpdatedAt Account creation and last-update timestamps in ISO 8601 UTC.
sameAsLinks Cross-platform links listed for the profile.
contacts Locally parsed emails, phones, social handles, Linktree and website URLs.
engagementSummary Spotlight totals for the returned entries (after maxHighlightsPerUser): views, shares, comments, boosts, recommends and average views.
isSeed / sourceUsername / discoveryDepth isSeed is set on every profile row; sourceUsername and discoveryDepth appear on discovered rows.
scrapedAt Timestamp this actor fetched the record (ISO 8601 UTC).

curatedHighlights[]

Each 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.

spotlightHighlights[]

The 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.

spotlightMetadata[] (when includeSpotlightMeta is true)

A 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.

activeStorySnaps[] and activeStoryMeta (when includeActiveStory is true)

Per 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.

lenses[] (when includeLenses is true)

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.

spotlightComments[] (when includeComments is true)

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.

relatedAccounts[]

username, displayName, profileUrl, profilePictureUrl, isVerified, subscriberCount (only when published), bio, snapcodeImageUrl, category, websiteUrl, presence flags and subscribeLink with oneLinkBaseUrl, deepLinkUrl and iosAppStoreUrl.

Personal and error records

Personal accounts return username, displayName, profileUrl, snapcodeImageUrl, optional Bitmoji URLs, accountType: "private", profileStatus: "personal", isVerified: false, recordType and scrapedAt.

An unknown or unparseable profile returns inputUsername, profileStatus, recordType: "error", error and scrapedAt. Error rows count toward maxItems.

Legacy cursors

cursors is retained for compatibility: curatedHighlightsCursor, spotlightHighlightsCursor and lensCursor. It is a raw cursor object and is not required to read the records.

Input

Field Type Default Description
usernames Array of strings – Required. Snapchat usernames or profile URLs: brentrivera, @brentrivera, https://www.snapchat.com/add/brentrivera, https://www.snapchat.com/@brentrivera.
includeLenses Boolean true Include lenses published by the profile.
includeSpotlightMeta Boolean true Merge Spotlight metadata into spotlightHighlights[] and keep the legacy metadata array.
includeActiveStory Boolean true Include the current public story snaps.
includeHighlightSnaps Boolean false Add the full snap list to each curated highlight.
includeComments Boolean false Include embedded Spotlight comments.
maxRelatedAccounts Integer – Cap related accounts per profile. 0 excludes them.
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.
maxSnapsPerHighlight Integer 0 With includeHighlightSnaps, cap snaps per highlight. 0 means no cap, maximum 500.
maxItems Integer – Stop after this many profile rows, including error rows.
relatedProfilesLimit Integer 0 Scrape up to this many unique related accounts after the supplied profiles. One hop only.
proxyConfiguration Object – Optional proxy configuration. Public profiles work without one.

Example: quick profile lookup

{
  "usernames": ["brentrivera", "https://www.snapchat.com/@khaby.lame"]
}

Example: lightweight run

{
  "usernames": ["teamsnapchat"],
  "includeLenses": false,
  "includeSpotlightMeta": false,
  "includeActiveStory": false,
  "maxRelatedAccounts": 0
}

Example: full enrichment with comments and highlight snaps

{
  "usernames": ["kyliejenner"],
  "includeLenses": true,
  "includeSpotlightMeta": true,
  "includeActiveStory": true,
  "includeHighlightSnaps": true,
  "maxSnapsPerHighlight": 10,
  "includeComments": true,
  "maxHighlightsPerUser": 5
}
{
  "usernames": ["nba"],
  "relatedProfilesLimit": 3,
  "maxItems": 4
}

Use cases

  • Influencer vetting — check verification, published subscriber counts, recent Spotlight performance and the links a creator lists.
  • Campaign benchmarking — compare total Spotlight views, shares and comments across a roster of accounts.
  • Contact discovery — collect public emails, phone numbers and social handles from bios and linked pages without extra requests.
  • Content research — export captions, hashtags, AI titles and transcript URLs for a creator's current Spotlight catalog.
  • Network mapping — expand one hop into the accounts Snapchat associates with a brand, with provenance on every discovered row.
  • Media archiving — capture highlight, story and Spotlight media URLs for a point-in-time snapshot.

FAQ

Do I need a Snapchat account or cookies? No. The actor reads the same public profile page that opens in a browser without signing in.

Why is subscriberCount missing on some records? Snapchat 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.

Why does a Spotlight entry have no view count? Some entries have no public engagement data. A count is included only when Snapchat supplies a non-negative value; negative sentinels are dropped.

What is the difference between curatedHighlights and spotlightHighlights? Curated 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.

How many highlights, Spotlights, lenses or related accounts can a profile have? The 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.

Why are some media URLs no longer playable later? Snapchat's CDN links can carry expiring tokens. Download or cache media promptly after a run.

Does a personal account return highlights or stories? Personal accounts expose very little publicly. They return identity, Snapcode and Bitmoji assets when available, and profileStatus: "personal" explains the reduced record.

How does related-account expansion work? Set 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.

Are empty fields written as null? No. Empty strings, nulls, empty arrays and empty objects are removed at every depth. Legitimate false values and numeric 0 from the source are preserved.

Is this affiliated with Snapchat? No. This actor reads public profile pages and is not affiliated with, endorsed by, or supported by Snap Inc.

Limitations

  • Subscriber counts are rounded by Snapchat and hidden on some accounts.
  • The profile page exposes a fixed batch of highlights and Spotlight entries, not the account's full history.
  • Full comment-thread pagination and transcript text are owned by separate actors; this actor returns the embedded comments and transcript URLs only.
  • Personal accounts expose minimal public data.
  • 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.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build oMu5xPu9KJDoORDdT. Documentation is regenerated from the default published build; private drafts are not included.