# Snapchat User Spotlight Scraper (`maximedupre/snapchat-user-spotlight-scraper`) Actor

Collect public Snapchat Spotlight videos from usernames, @handles, or profile URLs. Get captions, hashtags, publish times, engagement counts, creator and sound details, media links, and optional public comments.

- **URL**: https://apify.com/maximedupre/snapchat-user-spotlight-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Videos, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.65 / 1,000 spotlight videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 👻 Snapchat Spotlight videos from public creator profiles

Snapchat User Spotlight Scraper is for social media analysts, creator teams, and developers. It collects public Snapchat Spotlight videos from usernames, @handles, or profile URLs so you can review creator content in structured rows. Each saved row includes the caption, hashtags, publish time, creator and sound details, engagement counts, media links, and optional public comments.

- Collect public comments from Spotlight videos with **[Snapchat Spotlight Comments Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper/examples/snapchat-spotlight-comments-scraper)**.
- Export public creator video details with **[Snapchat Spotlight Video Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper/examples/snapchat-spotlight-video-scraper)**.
- Review public Spotlight content by creator with **[Snapchat Spotlight Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper/examples/snapchat-spotlight-scraper)**.
- Inspect a public Snapchat profile with **[Snapchat Profile Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper/examples/snapchat-profile-scraper)**.
- Collect public Snapchat user data with **[Snapchat User Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper/examples/snapchat-user-scraper)**.

#### 📦 Normalized Snapchat Spotlight rows

Each saved row represents one public Spotlight video found for a submitted profile. The row keeps source links instead of downloading the video file. If you enable comments, the row also includes public comments linked to that video.

**What you get**

Use the video identity, caption, hashtags, publication time, creator details, sound details, engagement counts, dimensions, duration, source links, and comment data for analysis or downstream work. Values that Snapchat does not expose stay `null` when the schema allows it.

#### ▶️ Collect public Spotlight videos

**Steps**

1. Enter one or more public Snapchat usernames, @handles, or profile URLs.
2. Set a per-profile video limit when you want to bound the work. Leave it empty to collect all available videos until the source is exhausted.
3. Turn on public comments when you need them, then set a per-video comment limit if needed. Leave that limit empty to include all available comments until the source is exhausted.
4. Start the run and open the video dataset or the run summary from the output panel.

Rows become available as profiles are processed. Private, login-gated, and other non-public Snapchat surfaces are not collected.

#### ⚙️ Input

Enter at least one public profile. Use the optional limits and comment settings to control how much data each profile returns.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profiles` | array of strings | Required. Add one or more public Snapchat usernames, `@handles`, or profile URLs. Private and login-gated profiles are reported and skipped. |
| `maxVideosPerProfile` | integer | Optional per-profile work limit. When set, it must be at least `1`. Leave it empty to collect all available videos until the source is exhausted. |
| `comments` | object | Choose whether to add public comments to each Spotlight video and set the optional per-video comment limit. |
| `comments.includeComments` | boolean | Add available public comments when `true`. Leave it `false` to return video records only. |
| `comments.maxCommentsPerVideo` | integer | Optional per-video work limit for comments. When set, it must be at least `1`. Leave it empty to include all available comments until the source is exhausted. This applies only when comments are included. |

**Example input**

This small successful run example requests one Spotlight video and one public comment from one profile.

```json
{
  "profiles": [
    "https://www.snapchat.com/@nba"
  ],
  "maxVideosPerProfile": 1,
  "comments": {
    "includeComments": true,
    "maxCommentsPerVideo": 1
  }
}
```

#### 🧾 Output

The output panel provides `videos`, which opens the video records in the default dataset, and `OUTPUT`, which opens the run summary with profile status text and the dataset link.

**Video row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profileInput` | string | The username, handle, or profile URL that produced the video. |
| `videoId` | string or null | Stable identifier from the Spotlight video URL, when available. |
| `caption` | string or null | Video caption or title, when available. |
| `hashtags` | array of strings | Hashtags found in the video text. |
| `publishedAt` | string or null | Publication time, when available, in ISO 8601 format. |
| `durationSeconds` | number or null | Video duration in seconds, when available. |
| `dimensions` | object | Video size in pixels. |
| `dimensions.width` | integer or null | Video width in pixels. |
| `dimensions.height` | integer or null | Video height in pixels. |
| `creator` | object | Creator identity linked to the video, when available. |
| `creator.username` | string or null | Creator username, when available. |
| `creator.displayName` | string or null | Creator display name, when available. |
| `creator.profileUrl` | string or null | Link to the creator profile, when available. |
| `creator.avatarUrl` | string or null | Link to the creator avatar, when available. |
| `engagement` | object | Available interaction counts for the video. |
| `engagement.views` | integer or null | Number of views, when available. |
| `engagement.shares` | integer or null | Number of shares, when available. |
| `engagement.comments` | integer or null | Number of comments, when available. |
| `engagement.boosts` | integer or null | Number of boosts, when available. |
| `engagement.recommendations` | integer or null | Number of recommendations, when available. |
| `media` | object | Source links for the video and thumbnail. |
| `media.videoUrl` | string or null | Direct source link to the video, when available. |
| `media.thumbnailUrl` | string or null | Direct source link to the thumbnail, when available. |
| `media.spotlightUrl` | string or null | Link to the Spotlight video page, when available. |
| `sound` | object | Sound details linked to the video, when available. |
| `sound.title` | string or null | Sound title, when available. |
| `sound.artist` | string or null | Sound artist, when available. |
| `sound.url` | string or null | Link to the sound, when available. |
| `publicComments` | array of objects | Public comments returned when comment collection is enabled. This is an empty array when no comments are returned. |
| `publicComments[].commentId` | string or null | Stable comment identifier, when available. |
| `publicComments[].text` | string | Text of the public comment. |
| `publicComments[].commenter` | object | Identity linked to the public comment. |
| `publicComments[].commenter.displayName` | string | Commenter display name. |
| `publicComments[].commenter.username` | string or null | Commenter username, when available. |
| `publicComments[].commenter.profileUrl` | string or null | Link to the commenter profile, when available. |
| `publicComments[].commenter.avatarUrl` | string or null | Link to the commenter avatar, when available. |
| `publicComments[].reactionCount` | integer or null | Number of reactions, when available. |
| `publicComments[].postedAt` | string or null | Comment time, when available, in ISO 8601 format. |
| `publicComments[].rankingScore` | number or null | Source ranking score, when available. |
| `publicComments[].replyCount` | integer or null | Number of replies, when available. |

**Example row from a current beta run**

```json
{
  "profileInput": "https://www.snapchat.com/@nba",
  "videoId": "W7_EDlXWTBiXAEEniNoMPwAAYeG5ibmV4b2JwAaA0EKODAaA0EHsYAAAAAQ",
  "caption": "THEY PRANKED JJJ 🤣",
  "hashtags": [
    "#jazz",
    "#nba"
  ],
  "publishedAt": "2026-08-24T13:58:10.456Z",
  "durationSeconds": 19.1,
  "dimensions": {
    "width": 540,
    "height": 960
  },
  "creator": {
    "username": "nba",
    "displayName": "NBA",
    "profileUrl": "https://www.snapchat.com/@nba",
    "avatarUrl": null
  },
  "engagement": {
    "views": 13430,
    "shares": 5,
    "comments": 11,
    "boosts": 1709,
    "recommendations": 108
  },
  "media": {
    "videoUrl": "https://cf-st.sc-cdn.net/d/fS5MkUGkP1ic75raXoI2i.27.IRZXSOY?mo=GmEaCTIBBEgCUC5gAVCiAVoQU3BvdGxpZ2h0U2hhcmluZ6IBOQgbEigKJgjLoIsBIAEwnAQ4wAdAAUoPCgqAATQ1NSwkJzQsEPQDUJyVAWgCIgsSACoHSVJaWFNPWZADnJUB&uc=46",
    "thumbnailUrl": "https://cf-st.sc-cdn.net/d/fS5MkUGkP1ic75raXoI2i.256.IRZXSOY?mo=GkYaCTIBBEgCUC5gAVCgAVoQRGZMYXJnZVRodW1ibmFpbKIBEAiAAiILEgAqB0lSWlhTT1miARAImgoiCxIAKgdJUlpYU09Z&uc=46",
    "spotlightUrl": "https://www.snapchat.com/@snapchat/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeG5ibmV4b2JwAaA0EKODAaA0EHsYAAAAAQ"
  },
  "sound": {
    "title": "Original Sound",
    "artist": "nba",
    "url": null
  },
  "publicComments": [
    {
      "commentId": "7841eb98-92ea-416e-a348-3ec00dd76dda",
      "text": "Faaa",
      "commenter": {
        "displayName": "Ids",
        "username": null,
        "profileUrl": null,
        "avatarUrl": null
      },
      "reactionCount": 2,
      "postedAt": "2026-08-24T15:10:02.904Z",
      "rankingScore": null,
      "replyCount": 0
    }
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The video event is the primary event. A comment event is separate and applies when a public comment is saved with a video.

**Current event prices**

| Event | Price | What it covers |
| --- | --- | --- |
| Spotlight video | $0.00265 | One public Spotlight video saved to the dataset. |
| Public comment | Free $0.0045; Bronze $0.00385; Silver $0.0033; Gold, Diamond, or Platinum $0.0027 | One public comment saved with its Spotlight video. |

#### 🔌 Integrations

Use the Apify API to start a run and read the dataset or run summary from the returned links.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Which profile inputs are accepted?

You can enter a bare Snapchat username, an `@handle`, or a full public profile URL. Add more than one value to process multiple profiles in one run.

##### What happens to a private, missing, or unreadable profile?

The run summary reports the profile outcome. The Actor does not collect private, login-gated, or other non-public Snapchat surfaces.

##### What happens when I leave the video limit empty?

The Actor collects all available Spotlight videos for each profile until the source is exhausted. Set a positive integer when you want a smaller per-profile run.

##### Can I limit public comments?

Yes. Turn on public comments, then set a positive per-video limit. Leave that limit empty to include all available comments until the source is exhausted.

##### Does the Actor download video files?

No. It returns source links for the video, thumbnail, and Spotlight page. It does not save video files.

##### Do I need a Snapchat login or API key?

No. The Actor reads public Snapchat pages without user-supplied authentication or login state.

##### What if Snapchat does not expose a metric or profile detail?

The field stays `null` when the schema allows it. The Actor does not invent unavailable counts or details.

##### Where do I find the video rows and profile status?

Open `videos` for the default dataset and `OUTPUT` for the run summary and dataset link.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~snapchat-user-spotlight-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Snapchat Hashtag Scraper](https://apify.com/maximedupre/snapchat-hashtag-scraper) finds public Spotlight videos by hashtag instead of by creator profile.
- [Snapchat Spotlight Scraper](https://apify.com/scraper-engine/snapchat-spotlight-scraper) explores public Spotlight videos beyond a single creator profile.
- [Snapchat Popular Accounts Scraper](https://apify.com/scraper-engine/snapchat-popular-accounts-scraper) finds public Snapchat accounts before you choose profiles to inspect.
- [Snapchat Spotlight Comments Scraper](https://apify.com/crawlerbros/snapchat-spotlight-comments-scraper) collects comment threads from a Spotlight URL or creator username.
- [Snapchat Transcript Scraper](https://apify.com/crawlerbros/snapchat-transcript-scraper) gets transcripts from Spotlight videos when captions or speech text matter.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `profiles` (type: `array`):

Add one or more public Snapchat usernames, @handles, or profile URLs. Private and login-gated profiles are reported and skipped.

## `maxVideosPerProfile` (type: `integer`):

Stop after this many Spotlight videos for each profile. Leave it empty to collect all available videos until the source is exhausted.

## `comments` (type: `object`):

Choose whether to add public comments to each Spotlight video. Set a limit when you want fewer comments per video.

## Actor input object example

```json
{
  "profiles": [
    "@nba"
  ],
  "maxVideosPerProfile": 10
}
```

# Actor output Schema

## `videos` (type: `string`):

Open the public Spotlight video records in the default dataset.

## `OUTPUT` (type: `string`):

Open this record to see profile status text and the dataset link.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "profiles": [
        "@nba"
    ],
    "maxVideosPerProfile": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/snapchat-user-spotlight-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "profiles": ["@nba"],
    "maxVideosPerProfile": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/snapchat-user-spotlight-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profiles": [
    "@nba"
  ],
  "maxVideosPerProfile": 10
}' |
apify call maximedupre/snapchat-user-spotlight-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/snapchat-user-spotlight-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eZJUj4cofziMH3cAH/builds/xNB5TxYuix7OMx4DE/openapi.json
