# Snapchat Story Viewer (`maximedupre/snapchat-story-viewer`) Actor

Collect public Snapchat stories and highlights from usernames, @handles, or profile URLs. Get story titles, profile details, snap counts, timestamps, and source-hosted image or video links in a structured dataset. Private content is not included.

- **URL**: https://apify.com/maximedupre/snapchat-story-viewer.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 $4.50 / 1,000 stories

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

### 👀 Public Snapchat stories for profile research

Snapchat Story Viewer helps social media analysts, creator teams, and developers collect currently exposed public Snapchat stories and highlights. It returns structured profile, story, and snap data with source-hosted image or video links, so you can review public content and keep its details in a dataset.

- Use **[Snapchat Story Viewer](https://apify.com/maximedupre/snapchat-story-viewer/examples/snapchat-story-viewer)** to review public stories from a profile.
- Use **[Snapchat Profile Viewer](https://apify.com/maximedupre/snapchat-story-viewer/examples/snapchat-profile-viewer)** to check a public profile and its available stories.
- Try **[Snapchat Story Viewer Anonymous](https://apify.com/maximedupre/snapchat-story-viewer/examples/snapchat-story-viewer-anonymous)** to view a public story anonymously.
- Use **[Snapchat Highlights Viewer](https://apify.com/maximedupre/snapchat-story-viewer/examples/snapchat-highlights-viewer)** to review public highlights and their snap links.
- Run **[Snapchat Story Scraper](https://apify.com/maximedupre/snapchat-story-viewer/examples/snapchat-story-scraper)** to save public story details and source media links.

#### 📦 Public Snapchat story and snap data

Each saved dataset row combines public profile details, one story or highlight, and that story's snaps. The row keeps source links, timestamps, story order, media type, and sponsorship data when Snapchat exposes them. Direct links point to Snapchat's source-hosted media. The Actor does not save media files.

#### ▶️ Collect stories from public profiles

**Run steps**

1. Add one or more public Snapchat usernames, `@handles`, or full profile URLs.
2. Leave `maxItems` empty to collect all available public stories and highlights until the source is exhausted, or set a positive limit across all profiles.
3. Start the run and wait for the output link.
4. Open `results` to view the collected rows in the default dataset.

#### ⚙️ Input

Add public profiles and, when needed, a total story limit for the run.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profiles` | array of strings | Required. Add one or more public Snapchat usernames, `@handles`, or full profile URLs. The Actor collects currently exposed stories and highlights for each entry in one run. |
| `maxItems` | integer | Optional total limit for stories and highlights across all profiles. Leave it empty to collect all available public stories and highlights until the source is exhausted. |

**Example input**

A successful current beta run used this input:

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

#### 🧾 Output

The `results` link opens the collected rows in the default Apify dataset and its `overview` view.

**Output link**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string | Opens the collected public Snapchat stories and highlights with their source-hosted image or video links. |

**Dataset row fields**

Each dataset row contains one profile, one story or highlight, and its snaps.

| Field | Type | What it does |
| --- | --- | --- |
| `profile` | object | Holds public profile details for the story. |
| `profile.username` | string | The public Snapchat username. |
| `profile.displayName` | string | The public name shown on the profile, when available. |
| `profile.profileUrl` | string | The public Snapchat profile URL, when available. |
| `profile.avatarUrl` | string | The source URL for the profile avatar, when available. |
| `profile.subscriberCount` | integer | The public subscriber count, when Snapchat provides it. |
| `story` | object | Holds the public story or highlight that contains the snaps. |
| `story.id` | string | The source identifier for the story or highlight. |
| `story.title` | string | The title of the story or highlight. |
| `story.type` | string | Says whether the entry is a current story or a highlight. |
| `story.position` | integer | The story order in the public profile listing, when available. |
| `story.thumbnailUrl` | string | The source URL for the story thumbnail, when available. |
| `story.snapCount` | integer | The number of snaps in the story or highlight, when available. |
| `story.sourceUrl` | string | The public Snapchat viewer URL for the story or highlight, when available. |
| `story.collectedAt` | string | The time when the Actor collected the story. |
| `snaps` | array of objects | Lists the image and video snaps in the story or highlight. |
| `snaps[].mediaType` | string | Says whether the snap is an image or video. |
| `snaps[].sequence` | integer | The snap order within the story or highlight. |
| `snaps[].mediaUrl` | string | The direct source URL for the image or video file. |
| `snaps[].previewUrl` | string | A source preview URL for the snap, when available. |
| `snaps[].sourceTimestamp` | string | The source time for the snap, when available. |
| `snaps[].isSponsored` | boolean | Says whether the source marks the snap as sponsored, when available. |
| `snaps[].collectedAt` | string | The time when the Actor collected the snap. |

**Example dataset row**

This genuine row came from the successful current beta run that used `nba` and `https://www.snapchat.com/add/nasa`.

```json
{
  "profile": {
    "username": "nba",
    "displayName": "NBA",
    "profileUrl": "https://www.snapchat.com/@nba",
    "avatarUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvcGxQanhqRDFZRk9IUWdGMUZLRHNqP2JvPUVna3lBUVJJQWxBWllBRSUzRCZ1Yz0yNQ._RS0,90_FMjpeg",
    "subscriberCount": 3624200
  },
  "story": {
    "id": "029f2cc3-c0df-46c2-b610-485c137f9a0a",
    "title": "2025-26 NBA Finals 🏆",
    "type": "highlight",
    "position": 1,
    "thumbnailUrl": "https://cf-st.sc-cdn.net/d/ZXSSacNIpSYqxAm21SSGc.410?mo=GjcaFjIBBDoBfUIGCMqG99AGSAJQXmABcAFQxQFaEERmTGFyZ2VUaHVtYm5haWyiAQcImgMiAhIA&uc=94",
    "snapCount": 4,
    "collectedAt": "2026-08-25T19:15:16.014Z"
  },
  "snaps": [
    {
      "mediaType": "image",
      "sequence": 1,
      "mediaUrl": "https://cf-st.sc-cdn.net/d/ZXSSacNIpSYqxAm21SSGc.400?mo=Gk8aDDIBBDoBfVBeYAFwAVDBAVoQUHVibGljSW1hZ2VTdG9yeaIBEwiQAyIOCgpCBgjKhvfQBkgCEgCiARMI5wciDgoKQgYIy4b30AZIAxIA&uc=94",
      "previewUrl": "https://cf-st.sc-cdn.net/d/ZXSSacNIpSYqxAm21SSGc.410?mo=GjcaFjIBBDoBfUIGCMqG99AGSAJQXmABcAFQxQFaEERmTGFyZ2VUaHVtYm5haWyiAQcImgMiAhIA&uc=94",
      "sourceTimestamp": "2026-06-01T17:36:48.000Z",
      "collectedAt": "2026-08-25T19:15:16.014Z"
    },
    {
      "mediaType": "image",
      "sequence": 2,
      "mediaUrl": "https://cf-st.sc-cdn.net/d/FgntIqJi6clNRLmaxXkXN.400?mo=Gk0aDjIBBDoBfUgCUF5gAXABUMEBWhBQdWJsaWNJbWFnZVN0b3J5ogERCJADIgwKCEIGCMuG99AGEgCiAREI5wciDAoIQgYIyob30AYSAA%3D%3D&uc=94",
      "previewUrl": "https://cf-st.sc-cdn.net/d/FgntIqJi6clNRLmaxXkXN.410?mo=GjcaFjIBBDoBfUIGCMuG99AGSAJQXmABcAFQxQFaEERmTGFyZ2VUaHVtYm5haWyiAQcImgMiAhIA&uc=94",
      "sourceTimestamp": "2026-06-01T17:36:48.000Z",
      "collectedAt": "2026-08-25T19:15:16.014Z"
    },
    {
      "mediaType": "image",
      "sequence": 3,
      "mediaUrl": "https://cf-st.sc-cdn.net/d/MDhgz2NGVlp7M1wfhuT1s.400?mo=GkoaCTIBBFBeYAFwAVDBAVoQUHVibGljSW1hZ2VTdG9yeaIBFgiQAyIRCg06AX1CBgjPhvfQBkgCEgCiAQ4I5wciCQoFMgF9SAMSAA%3D%3D&uc=94",
      "previewUrl": "https://cf-st.sc-cdn.net/d/MDhgz2NGVlp7M1wfhuT1s.410?mo=GjcaFjIBBDoBfUIGCM-G99AGSAJQXmABcAFQxQFaEERmTGFyZ2VUaHVtYm5haWyiAQcImgMiAhIA&uc=94",
      "sourceTimestamp": "2026-06-01T17:36:48.000Z",
      "collectedAt": "2026-08-25T19:15:16.014Z"
    },
    {
      "mediaType": "image",
      "sequence": 4,
      "mediaUrl": "https://cf-st.sc-cdn.net/d/V9pQZQcyVDfY0v9a5gTz6.400?mo=Gk0aDjIBBDoBfUgCUF5gAXABUMEBWhBQdWJsaWNJbWFnZVN0b3J5ogERCJADIgwKCEIGCMuG99AGEgCiAREI5wciDAoIQgYIyob30AYSAA%3D%3D&uc=94",
      "previewUrl": "https://cf-st.sc-cdn.net/d/V9pQZQcyVDfY0v9a5gTz6.410?mo=GjcaFjIBBDoBfUIGCMuG99AGSAJQXmABcAFQxQFaEERmTGFyZ2VUaHVtYm5haWyiAQcImgMiAhIA&uc=94",
      "sourceTimestamp": "2026-06-01T17:36:48.000Z",
      "collectedAt": "2026-08-25T19:15:16.014Z"
    }
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The primary `Story` event applies once for each public story or highlight saved with story metadata and source-hosted snap media links. The current per-event price depends on your Apify plan and is shown on the Pricing tab before you run.

#### 🔌 Integrations

Open the `results` link in Apify or use the Apify API to read the dataset after a run.

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

#### ❓ FAQ

##### Can it collect private or friends-only stories?

No. It returns only stories and highlights that Snapchat exposes publicly. It does not access private, friends-only, direct-message, or other non-public content.

##### Can I enter a username, @handle, or profile URL?

Yes. Add a bare username, an `@handle`, or a full Snapchat profile URL. You can add more than one profile to the same run.

##### What happens when `maxItems` is empty?

It returns all available public stories and highlights until the source is exhausted. When you set it, the limit applies across all profiles in the run.

##### Does it download or store the media files?

No. It returns source-hosted image or video links and does not download, transcode, mirror, or store the media in Actor-managed files.

##### Do I need a Snapchat login or source credential?

No. You do not provide a Snapchat login or source credential. The Actor uses the public profile values you submit.

##### Why are some fields missing?

Snapchat may not expose profile details, source links, thumbnails, timestamps, or sponsorship flags for every item. Optional fields can be absent when the source does not provide them.

##### Can I use this for Snapchat Spotlight videos?

No. This Actor's public schema covers stories and highlights. Choose an Actor made for public Spotlight videos when you need that data.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

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

### 🔗 Related Actors

- [Snapchat User Spotlight Scraper](https://apify.com/maximedupre/snapchat-user-spotlight-scraper) collects public Spotlight videos from creator profiles.
- [Snapchat Hashtag Scraper](https://apify.com/maximedupre/snapchat-hashtag-scraper) finds public Spotlight videos by hashtag for content research.
- [TikTok Story Viewer](https://apify.com/maximedupre/tiktok-story-viewer) checks active public TikTok stories from profiles.
- [Facebook Media Downloader](https://apify.com/maximedupre/facebook-media-downloader) returns source-hosted links for known public Facebook media.
- [Instagram Downloader API](https://apify.com/maximedupre/instagram-downloader-api) collects media links from known public Instagram posts and reels.

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

# Actor input Schema

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

Add one or more public Snapchat usernames, @handles, or full profile URLs. The Actor collects currently exposed stories and highlights for each entry in one run.

## `maxItems` (type: `integer`):

Optionally stop after this many stories or highlights across all profiles. Leave it empty to collect all available public stories and highlights until the source is exhausted.

## Actor input object example

```json
{
  "profiles": [
    "@snapchat",
    "https://www.snapchat.com/add/snapchat"
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Open the collected public Snapchat stories and highlights with their source-hosted image or video links.

# 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"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/snapchat-story-viewer").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"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/snapchat-story-viewer").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"
  ],
  "maxItems": 10
}' |
apify call maximedupre/snapchat-story-viewer --silent --output-dataset

```

## MCP server setup

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

```

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/rysRPRPg6n9A8NAbO/builds/608hHvUUvhJs9t3eK/openapi.json
