Snapchat Spotlight Comment & Reaction Scraper
Get comment threads from Snapchat Spotlight videos, by direct video URL or by creator username. Each comment includes text, commenter display name and Bitmoji IDs, reaction counts, posting time, and reply count.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Choose what to scrape: specific Spotlight videos, creator profiles, hashtags/topics, or the trending country feed. |
spotlightUrls | array | optional | (mode=bySpotlightUrls) One or more Spotlight URLs, @user/spotlight links, t.snapchat.com links, or raw snap IDs. |
usernames | array | optional | (mode=byUsername) Snapchat usernames, @names, /add/name or /@name profile URLs. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Choose what to scrape: specific Spotlight videos, creator profiles, hashtags/topics, or the trending country feed. |
spotlightUrls | array | optional | (mode=bySpotlightUrls) One or more Spotlight URLs, @user/spotlight links, t.snapchat.com links, or raw snap IDs. |
usernames | array | optional | (mode=byUsername) Snapchat usernames, @names, /add/name or /@name profile URLs. |
topics | array | optional | (mode=byTopic) Hashtags or topics, or /tag, /explore and /topic URLs. |
country | string | optional | (mode=byFeed) Country whose trending Spotlight feed is used. |
maxVideosPerSource | integer | optional | For username, topic and feed modes, stop after this many Spotlight videos per source. Ignored for explicit URLs. |
maxCommentsPerVideo | integer | optional | Maximum comment rows per Spotlight video, including replies when enabled. Set high (for example 100000) for the full public thread. |
includeReplies | boolean | optional | Emit direct replies as separate rows with parentCommentId and depth 1. |
maxItems | integer | optional | Global cap on dataset rows. The default is effectively unlimited for backward compatibility. |
Download the published input schema
View complete JSON
{
"description": "Scrape public Snapchat Spotlight comment threads and replies by video URL, creator, hashtag or country feed.",
"properties": {
"country": {
"default": "US",
"description": "(mode=byFeed) Country whose trending Spotlight feed is used.",
"editor": "select",
"enum": [
"AF",
"AL",
"DZ",
"AS",
"AD",
"AO",
"AI",
"AQ",
"AG",
"AR",
"AM",
"AW",
"AU",
"AT",
"AZ",
"BS",
"BH",
"BD",
"BB",
"BY",
"BE",
"BZ",
"BJ",
"BM",
"BT",
"BO",
"BQ",
"BA",
"BW",
"BV",
"BR",
"IO",
"BN",
"BG",
"BF",
"BI",
"CV",
"KH",
"CM",
"CA",
"KY",
"CF",
"TD",
"CL",
"CN",
"CX",
"CC",
"CO",
"KM",
"CG",
"CD",
"CK",
"CR",
"HR",
"CU",
"CW",
"CY",
"CZ",
"CI",
"DK",
"DJ",
"DM",
"DO",
"EC",
"EG",
"SV",
"GQ",
"ER",
"EE",
"SZ",
"ET",
"FK",
"FO",
"FJ",
"FI",
"FR",
"GF",
"PF",
"TF",
"GA",
"GM",
"GE",
"DE",
"GH",
"GI",
"GR",
"GL",
"GD",
"GP",
"GU",
"GT",
"GG",
"GN",
"GW",
"GY",
"HT",
"HM",
"VA",
"HN",
"HK",
"HU",
"IS",
"IN",
"ID",
"IR",
"IQ",
"IE",
"IM",
"IL",
"IT",
"JM",
"JP",
"JE",
"JO",
"KZ",
"KE",
"KI",
"KP",
"KR",
"KW",
"KG",
"LA",
"LV",
"LB",
"LS",
"LR",
"LY",
"LI",
"LT",
"LU",
"MO",
"MG",
"MW",
"MY",
"MV",
"ML",
"MT",
"MH",
"MQ",
"MR",
"MU",
"YT",
"MX",
"FM",
"MD",
"MC",
"MN",
"ME",
"MS",
"MA",
"MZ",
"MM",
"NA",
"NR",
"NP",
"NL",
"NC",
"NZ",
"NI",
"NE",
"NG",
"NU",
"NF",
"MK",
"MP",
"NO",
"OM",
"PK",
"PW",
"PS",
"PA",
"PG",
"PY",
"PE",
"PH",
"PN",
"PL",
"PT",
"PR",
"QA",
"RO",
"RU",
"RW",
"RE",
"BL",
"SH",
"KN",
"LC",
"MF",
"PM",
"VC",
"WS",
"SM",
"ST",
"SA",
"SN",
"RS",
"SC",
"SL",
"SG",
"SX",
"SK",
"SI",
"SB",
"SO",
"ZA",
"GS",
"SS",
"ES",
"LK",
"SD",
"SR",
"SJ",
"SE",
"CH",
"SY",
"TW",
"TJ",
"TZ",
"TH",
"TL",
"TG",
"TK",
"TO",
"TT",
"TN",
"TM",
"TC",
"TV",
"TR",
"UG",
"UA",
"AE",
"GB",
"US",
"UM",
"UY",
"UZ",
"VU",
"VE",
"VN",
"VG",
"VI",
"WF",
"EH",
"YE",
"ZM",
"ZW",
"AX"
],
"enumTitles": [
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia, Plurinational State of",
"Bonaire, Sint Eustatius and Saba",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island",
"Brazil",
"British Indian Ocean Territory",
"Brunei Darussalam",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cabo Verde",
"Cambodia",
"Cameroon",
"Canada",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Congo",
"Congo, The Democratic Republic of the",
"Cook Islands",
"Costa Rica",
"Croatia",
"Cuba",
"Curaçao",
"Cyprus",
"Czechia",
"Côte d'Ivoire",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Eswatini",
"Ethiopia",
"Falkland Islands (Malvinas)",
"Faroe Islands",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern Territories",
"Gabon",
"Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Holy See (Vatican City State)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran, Islamic Republic of",
"Iraq",
"Ireland",
"Isle of Man",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Korea, Democratic People's Republic of",
"Korea, Republic of",
"Kuwait",
"Kyrgyzstan",
"Lao People's Democratic Republic",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macao",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Micronesia, Federated States of",
"Moldova, Republic of",
"Monaco",
"Mongolia",
"Montenegro",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"North Macedonia",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestine, State of",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Romania",
"Russian Federation",
"Rwanda",
"Réunion",
"Saint Barthélemy",
"Saint Helena, Ascension and Tristan da Cunha",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Martin (French part)",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Serbia",
"Seychelles",
"Sierra Leone",
"Singapore",
"Sint Maarten (Dutch part)",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"South Sudan",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard and Jan Mayen",
"Sweden",
"Switzerland",
"Syrian Arab Republic",
"Taiwan, Province of China",
"Tajikistan",
"Tanzania, United Republic of",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Türkiye",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"United States Minor Outlying Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela, Bolivarian Republic of",
"Viet Nam",
"Virgin Islands, British",
"Virgin Islands, U.S.",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
"Åland Islands"
],
"prefill": "US",
"title": "Feed country",
"type": "string"
},
"includeReplies": {
"default": false,
"description": "Emit direct replies as separate rows with parentCommentId and depth 1.",
"prefill": false,
"title": "Include replies",
"type": "boolean"
},
"maxCommentsPerVideo": {
"default": 100,
"description": "Maximum comment rows per Spotlight video, including replies when enabled. Set high (for example 100000) for the full public thread.",
"maximum": 100000,
"minimum": 1,
"prefill": 3,
"title": "Max comments per video",
"type": "integer"
},
"maxItems": {
"default": 1000000,
"description": "Global cap on dataset rows. The default is effectively unlimited for backward compatibility.",
"maximum": 1000000,
"minimum": 1,
"prefill": 3,
"title": "Max rows",
"type": "integer"
},
"maxVideosPerSource": {
"default": 50,
"description": "For username, topic and feed modes, stop after this many Spotlight videos per source. Ignored for explicit URLs.",
"maximum": 100,
"minimum": 1,
"prefill": 1,
"title": "Max videos per source",
"type": "integer"
},
"mode": {
"default": "byUsername",
"description": "Choose what to scrape: specific Spotlight videos, creator profiles, hashtags/topics, or the trending country feed.",
"editor": "select",
"enum": [
"bySpotlightUrls",
"byUsername",
"byTopic",
"byFeed"
],
"enumTitles": [
"Spotlight URLs or IDs",
"Creator usernames",
"Hashtags / topics",
"Trending feed by country"
],
"prefill": "byUsername",
"title": "Mode",
"type": "string"
},
"spotlightUrls": {
"description": "(mode=bySpotlightUrls) One or more Spotlight URLs, @user/spotlight links, t.snapchat.com links, or raw snap IDs.",
"editor": "stringList",
"title": "Spotlight URLs or IDs",
"type": "array"
},
"topics": {
"default": [
"food"
],
"description": "(mode=byTopic) Hashtags or topics, or /tag, /explore and /topic URLs.",
"editor": "stringList",
"prefill": [
"food"
],
"title": "Hashtags or topics",
"type": "array"
},
"usernames": {
"default": [
"brentrivera"
],
"description": "(mode=byUsername) Snapchat usernames, @names, /add/name or /@name profile URLs.",
"editor": "stringList",
"prefill": [
"brentrivera"
],
"title": "Creator usernames",
"type": "array"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Snapchat Spotlight Comments Scraper",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
comments | string | optional | Dataset containing all scraped Snapchat Spotlight comment, reply and error rows. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"description": "Snapchat Spotlight comments and replies with commenter details, reactions, moderation fields, timestamps and hydrated video context.",
"properties": {
"comments": {
"description": "Dataset containing all scraped Snapchat Spotlight comment, reply and error rows.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Spotlight comments and replies",
"type": "string"
}
},
"title": "Snapchat Spotlight Comment & Reaction Scraper 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,
"fields": {
"properties": {
"approvalState": {
"description": "Moderation state (3 = approved)",
"type": "integer"
},
"commentId": {
"description": "Unique comment ID (highBits-lowBits)",
"type": "string"
},
"commenterBitmojiAvatarId": {
"description": "Commenter Bitmoji avatar ID",
"type": "string"
},
"commenterBitmojiSelfieId": {
"description": "Commenter Bitmoji selfie ID",
"type": "string"
},
"commenterDisplayName": {
"description": "Commenter display name",
"type": "string"
},
"commenterId": {
"description": "Commenter account UUID pair",
"type": "string"
},
"commenterIsPostAuthor": {
"description": "Whether the commenter is the video creator",
"type": "boolean"
},
"commenterProfileId": {
"description": "Commenter business profile UUID pair",
"type": "string"
},
"commenterProfileLogoUrl": {
"description": "Commenter profile logo URL",
"type": "string"
},
"commenterProfileUrl": {
"description": "Commenter profile URL when a username is available",
"type": "string"
},
"commenterUsername": {
"description": "Commenter username when Snapchat exposes it",
"type": "string"
},
"creatorDisplayName": {
"description": "Video creator display name",
"type": "string"
},
"creatorIsOfficial": {
"description": "Emitted only when the creator is officially verified",
"type": "boolean"
},
"creatorProfileUrl": {
"description": "Video creator profile URL",
"type": "string"
},
"creatorUsername": {
"description": "Video creator username",
"type": "string"
},
"depth": {
"description": "0 for root comments, 1 for replies",
"type": "integer"
},
"error": {
"description": "Error message for error rows",
"type": "string"
},
"feedCountry": {
"description": "ISO country code of the trending feed (byFeed mode)",
"type": "string"
},
"inputUrl": {
"description": "Input Spotlight URL (bySpotlightUrls mode)",
"type": "string"
},
"inputUsername": {
"description": "Input username for error rows",
"type": "string"
},
"likeCount": {
"description": "Sum of all reaction counts",
"type": "integer"
},
"parentCommentId": {
"description": "Parent comment ID for reply rows",
"type": "string"
},
"postedAt": {
"description": "ISO 8601 UTC time the comment was posted",
"type": "string"
},
"rankingScore": {
"description": "Snapchat ranking score when present",
"type": "number"
},
"reactionCounts": {
"description": "Reaction breakdown [{reactTypeId, count}]",
"items": {
"properties": {
"count": {
"type": "integer"
},
"reactTypeId": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"recordType": {
"description": "Row type: comment or error",
"type": "string"
},
"replyText": {
"description": "Comment or reply text",
"type": "string"
},
"reportCount": {
"description": "Number of times the comment was reported",
"type": "integer"
},
"scrapedAt": {
"description": "ISO 8601 UTC scrape timestamp",
"type": "string"
},
"snapId": {
"description": "Spotlight snap ID this comment belongs to",
"type": "string"
},
"snapUrl": {
"description": "Canonical Spotlight video URL",
"type": "string"
},
"sourceUsername": {
"description": "Creator username (byUsername mode)",
"type": "string"
},
"threadedReplyCount": {
"description": "Number of direct replies",
"type": "integer"
},
"topic": {
"description": "Hashtag or topic slug (byTopic mode)",
"type": "string"
},
"topicUrl": {
"description": "Tag, explore or topic page used for discovery",
"type": "string"
},
"updatedAt": {
"description": "ISO 8601 UTC time the comment state last changed",
"type": "string"
},
"videoAiDescription": {
"description": "Snapchat-generated description for the video",
"type": "string"
},
"videoAiTitle": {
"description": "Snapchat-generated title for the video",
"type": "string"
},
"videoBoostCount": {
"description": "Video boost (like) count",
"type": "integer"
},
"videoCaption": {
"description": "Video caption or description",
"type": "string"
},
"videoCommentCount": {
"description": "Comment count reported by Snapchat",
"type": "integer"
},
"videoDurationSeconds": {
"description": "Video duration in seconds",
"type": "number"
},
"videoHashtags": {
"description": "Hashtags attached to the video",
"items": {
"type": "string"
},
"type": "array"
},
"videoHeight": {
"description": "Video height in pixels",
"type": "integer"
},
"videoKeywords": {
"description": "Snapchat-generated keywords for the video",
"items": {
"type": "string"
},
"type": "array"
},
"videoPostedAt": {
"description": "ISO 8601 UTC video creation time",
"type": "string"
},
"videoRecommendCount": {
"description": "Video recommend count",
"type": "integer"
},
"videoShareCount": {
"description": "Video share count",
"type": "integer"
},
"videoThumbnailUrl": {
"description": "Video thumbnail URL",
"type": "string"
},
"videoUrl": {
"description": "Watermarked video URL",
"type": "string"
},
"videoViewCount": {
"description": "Video view count",
"type": "integer"
},
"videoWidth": {
"description": "Video width in pixels",
"type": "integer"
}
},
"type": "object"
},
"title": "Snapchat Spotlight Comments"
}
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 Spotlight Comment & Reaction Scraper
Scrape public Snapchat Spotlight comment threads — not just the handful of comments Snapchat embeds on a video page. Collect root comments and their direct replies for specific Spotlight videos, a creator's pinned Spotlights, a hashtag or topic, or the trending Spotlight feed of a country. Every row can include commenter details, reaction breakdowns, moderation fields, timestamps and hydrated video context such as the creator, caption, thumbnail and engagement counts.
What this actor does
- Four modes:
bySpotlightUrls,byUsername,byTopic,byFeed - Full threads: pages through the public comment service instead of stopping at the first embedded page
- Optional replies: emits depth-1 replies as separate rows linked by
parentCommentId - Video context: attaches creator, caption, hashtags, media URLs and engagement counts to every comment
- Global row cap:
maxItemsstops the run at a predictable dataset size - Omit-empty: fields the source does not publish for a record are left out, never sent as
null
Services
| Service | What it gives you |
|---|---|
| Spotlight URL or ID lookup | Every root comment and optional reply for one or more specific videos |
| Creator profile lookup | Comments for the Spotlight videos pinned on a public creator profile |
| Hashtag / topic discovery | Comments for videos found on public tag, explore and topic pages |
| Country trending feed | Comments for videos in the public Spotlight feed of one country |
| Video hydration | Creator, caption, hashtags, thumbnail, video URL, duration, dimensions, post time and engagement counts |
| Error rows | A readable error row when an input cannot be resolved, so one bad input does not fail the whole run |
How it works
The actor reads the same public Spotlight pages and public comment data that any visitor can see on snapchat.com. It discovers videos first, then pages through the comment service for each video, optionally follows the reply cursor for comments that have replies, and hydrates video details in batches. It runs without a login, cookies, API key or proxy configuration. Requests are paced politely and repeated briefly when Snapchat returns a temporary server error.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | byUsername |
bySpotlightUrls / byUsername / byTopic / byFeed |
spotlightUrls |
array | – | Spotlight URLs, @user/spotlight links, t.snapchat.com links or raw snap IDs (mode=bySpotlightUrls) |
usernames |
array | ["brentrivera"] |
Snapchat usernames, @names or profile URLs (mode=byUsername) |
topics |
array | ["food"] |
Hashtags, topic slugs or /tag, /explore, /topic URLs (mode=byTopic) |
country |
string | US |
ISO 3166-1 alpha-2 country code for the trending feed (mode=byFeed) |
maxVideosPerSource |
integer | 50 |
Stop after this many videos per username, topic or feed (1–100); ignored for explicit URLs |
maxCommentsPerVideo |
integer | 100 |
Maximum comment rows per video, including replies (1–100000) |
includeReplies |
boolean | false |
Emit direct replies as separate rows |
maxItems |
integer | 1000000 |
Global dataset row cap (1–1000000) |
Older tasks that send maxCommentsPerSnap are mapped automatically to maxCommentsPerVideo; an explicit non-default maxCommentsPerVideo takes precedence. The former bySpotlightUrl mode value is still accepted.
Example: full thread for one video, with replies
{
"mode": "bySpotlightUrls",
"spotlightUrls": [
"https://www.snapchat.com/@brentrivera/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYdXd0bndkZmd1AZrNg9asAZrNg8LXAAAAAQ"
],
"maxCommentsPerVideo": 5000,
"includeReplies": true,
"maxItems": 10000
}
Example: comments for a creator's pinned Spotlights
{
"mode": "byUsername",
"usernames": ["brentrivera", "waqarzaka"],
"maxVideosPerSource": 10,
"maxCommentsPerVideo": 200
}
Example: discover videos by hashtag
{
"mode": "byTopic",
"topics": ["food", "https://www.snapchat.com/tag/travel"],
"maxVideosPerSource": 20,
"maxCommentsPerVideo": 100,
"includeReplies": true
}
Example: trending feed in the United Kingdom
{
"mode": "byFeed",
"country": "GB",
"maxVideosPerSource": 25,
"maxCommentsPerVideo": 50
}
Output
Every comment row is a flat object. Identity and thread fields come first, followed by commenter, engagement, video context and scrape metadata.
recordType—commentorerrorcommentId,snapId,snapUrlsourceUsername,inputUrl,topic,topicUrl,feedCountry— mode contextparentCommentId,depth—0for root comments,1for repliesreplyTextpostedAt,updatedAtthreadedReplyCountcommenterDisplayName,commenterId,commenterProfileId,commenterUsername,commenterProfileUrl,commenterIsPostAuthorcommenterBitmojiAvatarId,commenterBitmojiSelfieId,commenterProfileLogoUrlreactionCounts— array of{reactTypeId, count}likeCount— sum of all reaction countsreportCount,approvalState— Snapchat moderation fieldsrankingScorecreatorUsername,creatorDisplayName,creatorProfileUrl,creatorIsOfficialvideoCaption,videoHashtags,videoThumbnailUrl,videoUrlvideoDurationSeconds,videoWidth,videoHeight,videoPostedAtvideoViewCount,videoShareCount,videoCommentCount,videoBoostCount,videoRecommendCountvideoAiTitle,videoAiDescription,videoKeywordsscrapedAt
Error rows use recordType: "error", the relevant input field (inputUrl, inputUsername, topic, topicUrl or feedCountry), an optional snapId, an error message and scrapedAt.
Use cases
- Audience research — read what viewers say under a creator's or a brand's Spotlights.
- Campaign monitoring — collect comment volume, reactions and replies around a hashtag or country feed.
- Moderation and safety — export public comments, reports and moderation state for review.
- Sentiment and trend analysis — feed comment text and timestamps into NLP or dashboard pipelines.
- Creator benchmarking — compare comment engagement across several creators or videos.
- Video-level reporting — join comments with captions, hashtags and video engagement in one dataset.
Usage cost
Apify charges for the compute your runs use, based on the actor's memory setting and run time. This actor runs at 1 GB by default. Cost grows with the number of videos and comment pages you request, so use maxVideosPerSource, maxCommentsPerVideo and maxItems to keep runs inside your budget. A small run over one video or one creator costs a fraction of a cent; a large full-thread crawl across many videos costs more because it makes more requests. No paid proxy or external API is required.
FAQ
Do I need a Snapchat account, cookies or an API key? No. The actor reads public Snapchat pages and public comment data without logging in.
Do I need to configure a proxy? No. The actor connects to Snapchat automatically.
Why are there fewer comments than Snapchat shows on a video?
Snapchat can display a total comment count that is larger than the number of comments it pages out to anonymous visitors. The actor pages until the source stops returning a cursor, and records the reported videoCommentCount when Snapchat publishes one. It never invents rows.
What is the difference between a comment and a reply?
Root comments have depth: 0. Direct replies have depth: 1 and a parentCommentId. Enable includeReplies to emit them.
Why is a commenter username or Bitmoji missing? Snapchat only exposes some commenter profile fields for some accounts. When a field is not published for that comment, it is omitted from the row.
Why does byUsername return only a few videos?
Public creator profiles list the creator's pinned Spotlight highlights, not their complete Spotlight history. Increase maxVideosPerSource to use every pinned video that is available.
Can I scrape comments for a hashtag that has no /tag page?
Yes. The actor falls back to Snapchat's explore page for the same term, and also accepts an explicit /topic/<slug> URL.
What happens when a video was removed? Snapchat may keep its comment thread available even when the video page and metadata are gone. Such rows keep the comments and omit the missing video fields.
Is this affiliated with Snapchat? No. This is an independent third-party actor that reads publicly visible Snapchat data and has no relationship with Snap Inc.
Notes
- Comment text is returned exactly as published, including emoji and non-Latin scripts.
- Timestamps are ISO 8601 UTC.
- Duplicate comment IDs from Snapchat's own pages are removed within a run.
- One invalid URL, username or topic produces an error row and the run continues with the remaining inputs.
- The default task is deliberately small: one profile, one video and a few comments.
Limitations
- Creator profiles expose only pinned Spotlight videos, not the full back catalogue.
- Replies are depth-1 only; nested reply chains are not followed recursively.
- Commenter usernames and some profile fields are published for a minority of comments.
- Snapchat may page out fewer comments than the count shown in its interface.
- Topic and tag pages expose a limited set of videos (roughly 20–30 per page) with no pagination.
- The trending feed is personalised and changes between requests; results are a snapshot of the moment the run executes.
- Removed videos can keep comments while losing metadata, so video context may be absent on those rows.
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.
Source build gAELgOsLCExTByN8L. Documentation is regenerated from the default published build; private drafts are not included.