Nimbryxo Studio

Snapchat Spotlight Video Link & Caption Downloader

Give this actor one or more Snapchat Spotlight links and get back a direct video link, thumbnail, caption, creator info and engagement counts per video, with optional AI-generated metadata, transcript and comments.

Input schema

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

FieldTypeRequiredDescription
spotlightUrlsarrayrequiredOne or more Snapchat Spotlight URLs to download. Supports standard URLs (snapchat.com/spotlight/...), profile URLs (snapchat.com/@user/spotlight/...), and short links (t.snapchat.com/...).
includeTranscriptbooleanoptionalParse WebVTT transcript if available (adds transcript[] array)
includeAiMetadatabooleanoptionalInclude LLM-generated title, description, keywords, context cards
Show all input fields
FieldTypeRequiredDescription
spotlightUrlsarrayrequiredOne or more Snapchat Spotlight URLs to download. Supports standard URLs (snapchat.com/spotlight/...), profile URLs (snapchat.com/@user/spotlight/...), and short links (t.snapchat.com/...).
includeTranscriptbooleanoptionalParse WebVTT transcript if available (adds transcript[] array)
includeAiMetadatabooleanoptionalInclude LLM-generated title, description, keywords, context cards
includeCommentsbooleanoptionalDecode and include comment threads from the page
includeRelatedStoriesbooleanoptionalInclude up to 24 related Spotlight stories from the feed
proxyConfigurationobjectoptionalOptional proxy settings. Snapchat public Spotlight pages work without a proxy in most regions.

Download the published input schema

View complete JSON
{
  "description": "Download video metadata and direct CDN URLs for Snapchat Spotlight posts.",
  "properties": {
    "includeAiMetadata": {
      "default": true,
      "description": "Include LLM-generated title, description, keywords, context cards",
      "title": "Include AI Metadata",
      "type": "boolean"
    },
    "includeComments": {
      "default": false,
      "description": "Decode and include comment threads from the page",
      "title": "Include Comment Threads",
      "type": "boolean"
    },
    "includeRelatedStories": {
      "default": false,
      "description": "Include up to 24 related Spotlight stories from the feed",
      "title": "Include Related Stories",
      "type": "boolean"
    },
    "includeTranscript": {
      "default": true,
      "description": "Parse WebVTT transcript if available (adds transcript[] array)",
      "title": "Include Video Transcript",
      "type": "boolean"
    },
    "proxyConfiguration": {
      "description": "Optional proxy settings. Snapchat public Spotlight pages work without a proxy in most regions.",
      "editor": "proxy",
      "nullable": true,
      "sectionCaption": "Proxy",
      "title": "Proxy Configuration",
      "type": "object"
    },
    "spotlightUrls": {
      "description": "One or more Snapchat Spotlight URLs to download. Supports standard URLs (snapchat.com/spotlight/...), profile URLs (snapchat.com/@user/spotlight/...), and short links (t.snapchat.com/...).",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "prefill": [
        "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYaXFxdmVobmp6AZ499vl-AZ499rsXAAAAAQ"
      ],
      "title": "Spotlight URLs",
      "type": "array"
    }
  },
  "required": [
    "spotlightUrls"
  ],
  "schemaVersion": 1,
  "title": "Snapchat Spotlight Video Downloader",
  "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
resultsstringoptionalDataset containing scraped Spotlight video records

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per Snapchat Spotlight link, with its direct video URL, caption, creator info, engagement counts and optional AI metadata, transcript and comments.",
  "fields": {
    "attachmentUrl": {
      "description": "Attachment URL linked from the snap (sparse)",
      "type": "string"
    },
    "audioTranscriptionObjectUrl": {
      "description": "URL to audio transcription object (when available)",
      "type": "string"
    },
    "caption": {
      "description": "Video caption / description text",
      "type": "string"
    },
    "commentCount": {
      "description": "Total comment count (from engagementStats)",
      "type": "integer"
    },
    "contextCards": {
      "description": "Context card objects linked to the snap (when include_ai_metadata=true)",
      "type": "array"
    },
    "creatorDisplayName": {
      "description": "Creator display name",
      "type": "string"
    },
    "creatorFollowerCount": {
      "description": "Creator follower count",
      "type": "integer"
    },
    "creatorUsername": {
      "description": "Creator Snapchat username",
      "type": "string"
    },
    "detectedLanguages": {
      "description": "Detected language scores [{languageCode, score}] from cuSignals (when include_ai_metadata=true)",
      "type": "array"
    },
    "durationSeconds": {
      "description": "Video duration in seconds",
      "type": "number"
    },
    "error": {
      "description": "Error message if scraping failed for this URL",
      "type": "string"
    },
    "hasAttachment": {
      "description": "Whether this snap has an attachment",
      "type": "boolean"
    },
    "hashtags": {
      "description": "Hashtags associated with the snap (when include_ai_metadata=true)",
      "type": "array"
    },
    "height": {
      "description": "Video height in pixels",
      "type": "integer"
    },
    "inputUrl": {
      "description": "Original input URL supplied by the user",
      "type": "string"
    },
    "intervalStartTimeMs": {
      "description": "Snap interval start time in milliseconds (when present)",
      "type": "integer"
    },
    "isAttributed": {
      "description": "Whether the snap is attributed to a creator",
      "type": "boolean"
    },
    "isSponsored": {
      "description": "Whether this snap is sponsored content",
      "type": "boolean"
    },
    "lat": {
      "description": "Snap latitude (when geotagged)",
      "type": "number"
    },
    "likeCount": {
      "description": "Like/boost count (from engagementStats)",
      "type": "integer"
    },
    "llmDescription": {
      "description": "AI-generated description (when include_ai_metadata=true)",
      "type": "string"
    },
    "llmKeywords": {
      "description": "AI-generated keywords (when include_ai_metadata=true)",
      "type": "array"
    },
    "llmTitle": {
      "description": "AI-generated title (when include_ai_metadata=true)",
      "type": "string"
    },
    "lng": {
      "description": "Snap longitude (when geotagged)",
      "type": "number"
    },
    "mediaPreviewUrl": {
      "description": "Media preview image URL",
      "type": "string"
    },
    "name": {
      "description": "Video name from metadata (when available)",
      "type": "string"
    },
    "overlayUrl": {
      "description": "Overlay image URL (when present)",
      "type": "string"
    },
    "profileUrl": {
      "description": "Creator Snapchat profile URL",
      "type": "string"
    },
    "recommendCount": {
      "description": "Recommend count (from engagementStats)",
      "type": "integer"
    },
    "relatedStories": {
      "description": "Related spotlight story summaries with thumbnailUrl, storyPageUrl, durationSeconds, creatorUsername",
      "type": "array"
    },
    "scrapedAt": {
      "description": "ISO 8601 UTC timestamp when this record was scraped",
      "type": "string"
    },
    "shareCount": {
      "description": "Total share count",
      "type": "integer"
    },
    "snapId": {
      "description": "Spotlight snap ID",
      "type": "string"
    },
    "snapSubtitles": {
      "description": "Subtitle/caption data embedded in the snap (when present)",
      "type": "array"
    },
    "snapTitle": {
      "description": "Snap title (when present)",
      "type": "string"
    },
    "textMetadataKeywords": {
      "description": "Text metadata keywords (when include_ai_metadata=true)",
      "type": "array"
    },
    "thumbnailUrl": {
      "description": "Thumbnail image URL",
      "type": "string"
    },
    "transcript": {
      "description": "Parsed WebVTT transcript segments [{startTime, endTime, text}] (when includeTranscript=true)",
      "type": "array"
    },
    "transcriptUrl": {
      "description": "URL to original WebVTT transcript file (when transcript is available)",
      "type": "string"
    },
    "uploadedAt": {
      "description": "Upload timestamp in ISO 8601 UTC",
      "type": "string"
    },
    "videoUrl": {
      "description": "Direct CDN video URL (may expire)",
      "type": "string"
    },
    "viewCount": {
      "description": "Total view count (from engagementStats or videoMetadata)",
      "type": "integer"
    },
    "width": {
      "description": "Video width in pixels",
      "type": "integer"
    }
  },
  "properties": {
    "results": {
      "description": "Dataset containing scraped Spotlight video records",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "type": "string"
    }
  },
  "title": "Snapchat Spotlight Video Link & Caption Downloader Output",
  "type": "object"
}

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 Spotlight Videos",
  "views": {
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "caption": {
            "format": "text",
            "label": "Caption"
          },
          "commentCount": {
            "format": "number",
            "label": "Comments"
          },
          "creatorDisplayName": {
            "format": "text",
            "label": "Display Name"
          },
          "creatorFollowerCount": {
            "format": "number",
            "label": "Followers"
          },
          "durationSeconds": {
            "format": "number",
            "label": "Duration (s)"
          },
          "error": {
            "format": "text",
            "label": "Error"
          },
          "hashtags": {
            "format": "text",
            "label": "Hashtags"
          },
          "height": {
            "format": "number",
            "label": "Height"
          },
          "inputUrl": {
            "format": "link",
            "label": "Input URL"
          },
          "isAttributed": {
            "format": "text",
            "label": "Is Attributed"
          },
          "keywords": {
            "format": "text",
            "label": "Keywords"
          },
          "likeCount": {
            "format": "number",
            "label": "Likes"
          },
          "llmDescription": {
            "format": "text",
            "label": "AI Description"
          },
          "llmTitle": {
            "format": "text",
            "label": "AI Title"
          },
          "name": {
            "format": "text",
            "label": "Video Name"
          },
          "profileUrl": {
            "format": "link",
            "label": "Profile"
          },
          "recommendCount": {
            "format": "number",
            "label": "Recommends"
          },
          "restricted": {
            "format": "text",
            "label": "Restricted"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "shareCount": {
            "format": "number",
            "label": "Shares"
          },
          "snapId": {
            "format": "text",
            "label": "Snap ID"
          },
          "thumbnailUrl": {
            "format": "link",
            "label": "Thumbnail"
          },
          "uploadedAt": {
            "format": "text",
            "label": "Uploaded At"
          },
          "username": {
            "format": "text",
            "label": "Username"
          },
          "videoUrl": {
            "format": "link",
            "label": "Video URL"
          },
          "viewCount": {
            "format": "number",
            "label": "Views"
          },
          "width": {
            "format": "number",
            "label": "Width"
          }
        }
      },
      "title": "Detailed View",
      "transformation": {
        "fields": [
          "snapId",
          "inputUrl",
          "username",
          "creatorDisplayName",
          "creatorFollowerCount",
          "profileUrl",
          "caption",
          "name",
          "width",
          "height",
          "viewCount",
          "shareCount",
          "commentCount",
          "likeCount",
          "recommendCount",
          "durationSeconds",
          "uploadedAt",
          "videoUrl",
          "thumbnailUrl",
          "llmTitle",
          "llmDescription",
          "hashtags",
          "keywords",
          "restricted",
          "isAttributed",
          "scrapedAt",
          "error"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "caption": {
            "format": "text",
            "label": "Caption"
          },
          "commentCount": {
            "format": "number",
            "label": "Comments"
          },
          "durationSeconds": {
            "format": "number",
            "label": "Duration (s)"
          },
          "likeCount": {
            "format": "number",
            "label": "Likes"
          },
          "shareCount": {
            "format": "number",
            "label": "Shares"
          },
          "snapId": {
            "format": "text",
            "label": "Snap ID"
          },
          "thumbnailUrl": {
            "format": "link",
            "label": "Thumbnail"
          },
          "username": {
            "format": "text",
            "label": "Creator"
          },
          "videoUrl": {
            "format": "link",
            "label": "Video URL"
          },
          "viewCount": {
            "format": "number",
            "label": "Views"
          }
        }
      },
      "title": "Video Overview",
      "transformation": {
        "fields": [
          "snapId",
          "username",
          "caption",
          "viewCount",
          "shareCount",
          "commentCount",
          "likeCount",
          "durationSeconds",
          "videoUrl",
          "thumbnailUrl"
        ]
      }
    }
  }
}

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

A Snapchat Spotlight link on its own doesn't give you a file you can save or embed. This actor turns one or more of those links into a direct video URL alongside thumbnail, caption, creator info, and engagement counts — with AI-generated descriptions, a WebVTT transcript, comment threads, and related videos available on request. No login or cookies required.

What this actor does

  • Resolves a Spotlight link (including short t.snapchat.com links) into a direct, downloadable video URL
  • Captures caption, creator info, and full engagement stats — shares, likes, comments, recommendations
  • Adds AI-generated title, description, keywords and detected languages, on request
  • Parses the video's WebVTT transcript into timestamped segments, on request
  • Can also pull comment threads and up to 24 related Spotlight stories from the same feed
  • Leaves a field out of the record when Snapchat didn't provide a value for it, rather than sending it empty

Input

Field Type Required Default Description
spotlightUrls string[] Yes — One or more Snapchat Spotlight URLs to process
includeTranscript boolean No true Parse WebVTT transcript into timestamped segments
includeAiMetadata boolean No true Include LLM title, description, keywords, context cards, detected languages
includeComments boolean No false Decode comment threads from the page
includeRelatedStories boolean No false Include up to 24 related Spotlight stories
proxyConfiguration object No — Optional proxy settings

Supported URL Formats

https://www.snapchat.com/spotlight/{id}
https://www.snapchat.com/@{username}/spotlight/{id}
https://t.snapchat.com/{id}

Short links (t.snapchat.com) are resolved automatically before scraping.

Output Fields

Core Fields (always present on success)

Field Type Description
snapId string Unique Spotlight snap identifier
inputUrl string The URL you provided as input
videoUrl string Direct CDN video URL (expires — download promptly)
thumbnailUrl string Thumbnail image URL
caption string Caption or description text on the snap
creatorUsername string Creator's Snapchat username
profileUrl string Full profile URL (snapchat.com/@username)
creatorDisplayName string Creator's display name
durationSeconds number Video duration in seconds
uploadedAt string ISO 8601 upload timestamp
scrapedAt string ISO 8601 timestamp of when this record was collected
shareCount integer Number of times the video was shared
commentCount integer Number of comments
likeCount integer Number of likes (boosts)
recommendCount integer Number of recommendations
mediaPreviewUrl string Preview/thumbnail variant URL
width integer Video width in pixels (video snaps only)
height integer Video height in pixels (video snaps only)
restricted boolean Whether the content is age-restricted
isAttributed boolean Whether the snap is attributed to Snapchat's own feed

viewCount is omitted for very recent videos — Snapchat returns -1 as a sentinel value for posts still accumulating views.

AI Metadata (when includeAiMetadata: true)

Field Type Description
llmTitle string LLM-generated title for the video
llmDescription string LLM-generated description of the video content
llmKeywords string[] LLM-generated keyword tags
textMetadataKeywords string[] Text-based keyword tags extracted from metadata
hashtags string[] Hashtags associated with the snap
contextCards object[] Context cards shown on the snap (sound info, creator card, etc.)
detectedLanguages object[] Detected languages with confidence scores (languageCode, score)

Transcript (when includeTranscript: true)

Field Type Description
transcript object[] Array of {startTime, endTime, text} WebVTT segments
transcriptUrl string URL of the raw WebVTT transcript file

Comments (when includeComments: true)

Each item in comments[]:

Field Type Description
commentId string Unique comment identifier
snapId string ID of the snap this comment belongs to
replyText string Comment text
reactionCounts object[] Array of {reactTypeId, count} reaction tallies
commenterDisplayName string Commenter's display name
approvalState any Moderation approval state
postedAt string ISO 8601 timestamp when the comment was posted

Each item in relatedStories[]:

Field Type Description
thumbnailUrl string Thumbnail URL of the related story
storyPageUrl string Full Spotlight URL of the related story
durationSeconds number Duration of the related story in seconds
creatorUsername string Creator's username

Error Records

If a URL fails, an error record is saved instead of a video record:

Field Type Description
inputUrl string The URL that failed
snapId string Snap ID if it could be extracted
error string Human-readable error message
scrapedAt string ISO 8601 timestamp

Example Input

{
  "spotlightUrls": [
    "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYZmRwYmVqcm5wAZ8Kxg_vAZ8Kxgn9AAAAAQ",
    "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYZG5iaHJuY2phAZ8KF10GAZ8KETc1AAAAAQ"
  ],
  "includeTranscript": true,
  "includeAiMetadata": true,
  "includeComments": false,
  "includeRelatedStories": false
}

Example Output

{
  "snapId": "W7_EDlXWTBiXAEEniNoMPwAAYZG5iaHJuY2phAZ8KF10GAZ8KETc1AAAAAQ",
  "inputUrl": "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYZG5iaHJuY2phAZ8KF10GAZ8KETc1AAAAAQ",
  "videoUrl": "https://bolt-gcdn.sc-cdn.net/v/udlVbjK0wdjHbPx1FRph0.27.IRZXSOY?...",
  "thumbnailUrl": "https://bolt-gcdn.sc-cdn.net/v/udlVbjK0wdjHbPx1FRph0.256.IRZXSOY?...",
  "caption": "Another Spotlight Snap brought to you by Snapchat",
  "creatorUsername": "waqarzaka",
  "profileUrl": "https://www.snapchat.com/@waqarzaka",
  "creatorDisplayName": "Waqar Zaka",
  "durationSeconds": 130.23,
  "width": 540,
  "height": 960,
  "shareCount": 0,
  "likeCount": 3,
  "commentCount": 0,
  "recommendCount": 0,
  "uploadedAt": "2026-06-27T17:12:08.245000+00:00",
  "scrapedAt": "2026-06-28T06:43:34.588497+00:00",
  "isAttributed": true,
  "textMetadataKeywords": ["bitcoin", "hacker", "crypto", "cryptocurrency", "blockchain"],
  "contextCards": [
    {
      "contextType": 3,
      "title": "Waqar Zaka",
      "subtitle": "waqarzaka",
      "url": "https://www.snapchat.com/@waqarzaka",
      "thumbnailType": 0,
      "hasBadge": true,
      "id": "36d0088b-39d5-4765-a237-bb147a292272"
    }
  ],
  "detectedLanguages": [
    { "languageCode": "hi", "score": 0.910262405872345 }
  ]
}

FAQ

Does this require a Snapchat account or cookies? No. All data is extracted from public Snapchat Spotlight pages. No login, no cookies, and no proxy are required in most regions.

Do video URLs expire? Yes. Snapchat CDN URLs include signed tokens that expire after a short period. Download the video as soon as the actor completes — do not store the URL and try to fetch it later.

Why is viewCount missing from some records? Snapchat returns -1 as a sentinel for videos that are too new to have an accurate view count. The actor omits this field rather than storing a misleading -1.

Are width and height always present? Only for video snaps. Some Spotlight posts are images or have incomplete metadata, in which case these fields are absent.

Can I scrape a large batch of URLs at once? Yes. Provide all URLs in the spotlightUrls array. The actor processes them sequentially with a short delay between requests to stay respectful of rate limits.

What is the isAttributed flag? When true, Snapchat itself attributed the snap to its own Discover/Spotlight feed rather than to a specific creator account.

Can I get comments from all videos? Set includeComments: true. Comments are decoded from data embedded in the page, so availability depends on what Snapchat includes per snap.

Is this affiliated with Snapchat? No. This is an independent data extraction tool and has no connection to Snap Inc.

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 WF5xhC9dsQb9pBA8U. Documentation is regenerated from the default published build; private drafts are not included.