# Snapchat Scraper - Public Profiles, Spotlight & Story Stats (`rjmacarthy/snapchat-scraper`) Actor

Scrape public Snapchat profiles (subscriber count, bio, category, verified badge, website, lenses), their Spotlight videos with views, likes, comments and shares, and public story highlights in one run. Only-new mode for monitoring. No login.

- **URL**: https://apify.com/rjmacarthy/snapchat-scraper.md
- **Developed by:** [rj](https://apify.com/rjmacarthy) (community)
- **Categories:** Social media
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 public profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Snapchat Scraper - Public Profiles, Spotlight & Story Stats

Scrape **public Snapchat creator and brand profiles** and get their **subscriber count, bio, category, verified badge, website and AR lenses**, plus every **Spotlight video** listed on the profile with **views, likes, comments, shares, duration, keywords and video URL**, and optionally their **public story and saved highlights**. Profiles, Spotlight and stories come out of **one run, with no start fee**: other Snapchat Actors split profiles and Spotlight into separate tools and charge a fee per run. Subscriber counts are exact numbers (751900, not "751.9k"), and an **"Only new" mode** outputs only Spotlight videos you have not seen before, so agencies can monitor creators on a schedule. No login, no browser, no cookies.

### What data can you get?

| Item type | Fields |
|---|---|
| **Profile** (`type: "profile"`) | username, display name, profile URL, bio, category and subcategory (e.g. "Sports League"), **subscriber count (number)**, verified badge, website, avatar and hero image, Snapcode URL, has a story now, Spotlight / highlight / lens counts, lenses (name, preview image and video, unlock link), related accounts, account created / last updated dates |
| **Spotlight video** (`type: "spotlight"`) | ID, URL, profile, title, caption, hashtags, keywords, **views, likes, comments, shares, recommends**, duration (s), width and height, thumbnail, **video URL**, transcript URL (VTT), Snapchat's AI title and description, posted date |
| **Story / highlight** (`type: "story"`) | current public story or saved highlight: title, snap count, first and last snap dates, thumbnail, each snap's media URL, type (image or video) and date |

Each item type has its own table view in the dataset: **Profiles**, **Spotlight videos** and **Stories & highlights**.

### Use cases

- **Influencer and creator research:** compare subscriber counts, categories and Spotlight engagement of creators before a campaign.
- **Brand and competitor monitoring:** track how sports leagues, media brands or competitors post on Spotlight and how each video performs.
- **Agency reporting:** schedule a daily run with "Only new" and send each new Spotlight video with its views and likes to Google Sheets or Slack.
- **Content analysis:** collect video URLs, keywords, transcripts and Snapchat's AI descriptions for trend or topic research.
- **Lens marketing:** list a brand's AR lenses with preview media and unlock links.

### How to use

1. Enter one or more **usernames or profile URLs** (`nasa`, `@nba`, `https://www.snapchat.com/add/nfl`).
2. Choose what to include: Spotlight videos (on by default), stories & highlights, lenses.
3. Click **Start**, then download the results as JSON, CSV, Excel or HTML, or read them through the API.

Profiles and their Spotlight videos:

```json
{
  "usernames": ["nasa", "nba", "nfl"],
  "includeSpotlight": true,
  "maxSpotlightPerProfile": 5
}
```

Profiles only (one item per account), e.g. to compare NFL and NBA team accounts:

```json
{
  "usernames": ["warriors", "lakerssnaps", "eagles"],
  "includeSpotlight": false
}
```

Stories and highlights of a profile, without Spotlight:

```json
{
  "usernames": ["nasa"],
  "includeSpotlight": false,
  "includeStories": true,
  "maxStoriesPerProfile": 10
}
```

Daily monitor that outputs only new Spotlight videos (schedule it):

```json
{
  "usernames": ["nba", "nfl"],
  "maxSpotlightPerProfile": 0,
  "onlyNew": true,
  "stateKey": "sports-leagues"
}
```

Single Spotlight videos (adds the auto transcript when Snapchat has one):

```json
{
  "usernames": [],
  "spotlightUrls": ["https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYdHBmbG9hdHR0AZ1ytS-RAZ1ytSiwAAAAAQ"]
}
```

### Output example

A profile and one of its Spotlight videos from a real run (long URLs shortened):

```json
[
  {
    "type": "profile",
    "id": "21f4e252-2d8b-44f7-a7ac-21a767730b7f",
    "username": "nfl",
    "displayName": "NFL Official",
    "url": "https://www.snapchat.com/@nfl",
    "profileUrl": "https://www.snapchat.com/@nfl",
    "bio": "Official Snapchat account of the National Football League!",
    "category": "Business Group",
    "subcategory": "Sports League",
    "subscriberCount": 2339400,
    "isVerified": true,
    "badge": 1,
    "websiteUrl": null,
    "avatarUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG...",
    "heroImageUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG...",
    "snapcodeUrl": "https://app.snapchat.com/web/deeplink/snapcode?username=nfl&type=SVG&bitmoji=enable",
    "hasStory": true,
    "hasSpotlight": true,
    "hasHighlights": true,
    "spotlightCount": 16,
    "highlightCount": 16,
    "lensCount": 16,
    "lenses": [
      {
        "name": "Super Bowl 2024",
        "creatorName": "NFL Official",
        "previewImageUrl": "https://lens-preview-storage.storage.googleapis.com/previewmedia/preview_thumbnail/7fe2c6dd-8807-4524-b86d-fef15c91c998_360_640.webp",
        "previewVideoUrl": "https://lens-storage.storage.googleapis.com/previewvideo/5eb1d530-bd60-426d-8535-34ff4bea7da1",
        "iconUrl": "https://bolt-gcdn.sc-cdn.net/3/cpZw4pP0n8mWL0g2DGhPF?bo=EhgaABoAMgF9OgEEQgYI0NH9rQZIAlASYAE%3D&uc=18",
        "unlockUrl": "https://www.snapchat.com/unlock/?type=SNAPCODE&uuid=1eb6f9c47fc744b18ea2b11df8c0a720&metadata=01",
        "updatedAt": "2026-04-29T01:26:08.000Z"
      }
    ],
    "relatedAccounts": [
      "nba",
      "eagles",
      "newyorkgiants"
    ],
    "createdAt": "2018-05-23T20:41:49.878Z",
    "updatedAt": "2026-11-04T22:43:09.735Z",
    "scrapedAt": "2026-11-05T12:21:21.078Z"
  },
  {
    "type": "spotlight",
    "id": "W7_EDlXWTBiXAEEniNoMPwAAYd3F0dWVkdXhwAaGoVDCdAaGoU-n0AAAAAA",
    "url": "https://www.snapchat.com/@nfl/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYd3F0dWVkdXhwAaGoVDCdAaGoU-n0AAAAAA",
    "profileUsername": "nfl",
    "title": "JAXvsBAL • Thursday 8:15pm ET on Prime Video • Stream on NFL+",
    "caption": "JAXvsBAL • Thursday 8:15pm ET on Prime Video • Stream on NFL+",
    "hashtags": [],
    "keywords": [
      "JAXvsBAL",
      "Derrick Henry",
      "NFL highlights",
      "football",
      "Prime Video",
      "NFL season",
      "fantasy football"
    ],
    "aiTitle": "Derrick Henry's 99-Yard Touchdown Run vs Jaguars | NFL Highlights",
    "aiDescription": "Witness Derrick Henry's legendary 99-yard touchdown run against the Jacksonville Jaguars. ...",
    "viewCount": 9191,
    "shareCount": 5,
    "commentCount": 6,
    "likeCount": 226,
    "recommendCount": 14,
    "durationSec": 36.6,
    "width": 540,
    "height": 960,
    "thumbnailUrl": "https://cf-st.sc-cdn.net/d/4Kc4DIQPFSGwlxOYNRPEs.256.IRZXSOY...",
    "videoUrl": "https://cf-st.sc-cdn.net/d/4Kc4DIQPFSGwlxOYNRPEs.27.IRZXSOY?...",
    "transcriptUrl": null,
    "transcript": null,
    "createdAt": "2026-11-04T20:50:34.100Z",
    "scrapedAt": "2026-11-05T12:21:21.078Z"
  }
]
```

### Pricing

Pay per result. There is **no start fee**, and you never pay for personal accounts, missing usernames or failed inputs.

| Event | Price | Per 1,000 |
|---|---|---|
| `profile`: one public profile | $0.002 | $2.00 |
| `spotlight`: one Spotlight video, story or highlight | $0.0015 | $1.50 |

Examples:

- **1,000 profiles** (no Spotlight) ≈ **$2.00**.
- **100 creators with their 10 latest Spotlight videos each** = 100 × $0.002 + 1,000 × $0.0015 ≈ **$1.70**.
- **Daily monitor of 20 brands with "Only new"**: 20 profiles ($0.04) plus only the new videos, e.g. 30 a day ($0.045) ≈ **$0.09 a day**.

Set **Maximum cost per run** in the run options to cap your spend. The Actor stops cleanly when it is reached.

### Tips and limits

- **Public profiles only.** Snapchat has public profiles for creators, brands and public figures. Personal accounts (for example `espn` and `natgeo` are not public profiles) are skipped, reported in the run summary and **not charged**.
- **Spotlight depth:** the Actor reads the Spotlight videos that Snapchat lists on the public profile page, typically the **latest 15 to 30**. Older videos are not reachable without logging in. Use "Only new" on a schedule to build a full history over time.
- **Hidden view counts:** Snapchat hides the view count of some videos (usually very fresh ones); `viewCount` is then `null`. Likes, comments and shares are still filled.
- **Titles and captions:** many Spotlight videos have no creator title; Snapchat's own AI-written title and description are in `aiTitle` and `aiDescription`.
- **Media URLs** (video, thumbnails, snaps) are signed Snapchat CDN links that can expire; download what you need soon after the run.
- **Lenses** are added to the profile item for free. Turn them off with `includeLenses: false` to keep items small.
- The Actor checks each profile page for missing data: if a profile says it has Spotlight videos but the page returned none, you get a warning in the log and in `RUN_SUMMARY`.
- Rate: up to 3 parallel requests, with retries and back-off on HTTP 429/5xx.

### FAQ

**Is it legal to scrape Snapchat?**
The Actor only reads public pages that anyone can open in a browser without logging in. It does not output emails, phone numbers, addresses, comments or data about private individuals; personal accounts are skipped. You are responsible for using the data in line with Snapchat's terms and the data protection laws that apply to you (such as the GDPR). If in doubt, ask a lawyer.

**Do I need a Snapchat account or cookies?**
No.

**Do I need a proxy?**
Usually not. If Snapchat starts answering with HTTP 403 or 429, enable **Apify Proxy** in the input. Only datacenter proxy is supported: if you pick the RESIDENTIAL group, the Actor logs a warning and uses Apify datacenter proxy instead (residential traffic would cost more than the results).

**Why is a username "not a public profile"?**
That account is a personal Snapchat account. Snapchat shows only a display name and Bitmoji for those, and the Actor deliberately skips them.

**Why do I get fewer Spotlight videos than the creator has?**
Snapchat's public profile page lists only the most recent ones (see Tips and limits).

**What does "Only new" remember?**
The IDs of Spotlight videos and stories already output, in a named key-value store (`snapchat-scraper-state`), one memory per **Monitor name**. Profiles are always output.

### Integrations

- **API:** start runs and download results from any language with the [Apify API](https://docs.apify.com/api/v2) or the JavaScript / Python clients.
- **Make, Zapier, n8n:** use the Apify apps or nodes to run the Actor and send results to Google Sheets, Airtable, HubSpot, Slack and more.
- **MCP / AI agents:** connect the Actor to Claude, ChatGPT or Cursor through the [Apify MCP server](https://mcp.apify.com).
- **Webhooks and schedules:** get notified when a run finishes, or run it on a schedule with "Only new" for daily monitoring.

### Changelog

- **0.1 (2026-11-05):** first release: public profiles with numeric subscriber counts, categories and lenses; Spotlight videos with views, likes, comments, shares and video URLs; public stories and highlights; single Spotlight URLs with transcripts; "Only new" monitoring mode.

### Ready-to-run examples

- [Track NBA and NFL Snapchat Spotlight video views](https://apify.com/rjmacarthy/snapchat-scraper/examples/nba-nfl-snapchat-spotlight-views)
- [Compare Snapchat subscriber counts of NBA and NFL teams](https://apify.com/rjmacarthy/snapchat-scraper/examples/snapchat-subscriber-counts-sports-teams)

### More scrapers by the same developer

- [Skool Scraper - Community Stats & Public Posts (No Login)](https://apify.com/rjmacarthy/skool-scraper)
- [Bilibili Scraper - Videos, Search, Popular & Uploader Stats](https://apify.com/rjmacarthy/bilibili-scraper)
- [Bluesky Scraper - Posts, Profiles, Threads & Feeds (No Login)](https://apify.com/rjmacarthy/bluesky-scraper)
- [Domain WHOIS Lookup - Bulk RDAP, Expiry, DNS & Availability](https://apify.com/rjmacarthy/domain-whois-lookup)
- [Keyword Suggestions Scraper - Google, YouTube & Bing](https://apify.com/rjmacarthy/keyword-suggestions-scraper)
- [Substack Scraper](https://apify.com/rjmacarthy/substack-scraper)

Browse all my Actors on [my Apify Store profile](https://apify.com/rjmacarthy).

### Support

Found a bug or need a field that is not there yet? Open an issue on the **Issues** tab with your input and run ID, and it will be looked at quickly.

# Actor input Schema

## `usernames` (type: `array`):

Public Snapchat profiles: usernames (nasa, @nasa) or profile URLs (https://www.snapchat.com/@nasa, https://www.snapchat.com/add/nasa). Personal (non-public) accounts are skipped and not charged.

## `includeSpotlight` (type: `boolean`):

Output each profile's Spotlight videos (views, likes, comments, shares, duration, video URL) as separate items.

## `maxSpotlightPerProfile` (type: `integer`):

Snapchat's public profile page lists the most recent Spotlight videos (typically up to ~16). 0 = all listed.

## `includeStories` (type: `boolean`):

Output the public current story (if any) and saved story highlights: title, snap count, dates and media URLs. Charged like Spotlight items.

## `maxStoriesPerProfile` (type: `integer`):

0 = all listed on the profile page.

## `includeLenses` (type: `boolean`):

Add the profile's public AR lenses (name, preview, unlock link) to the profile item. Free (no extra event).

## `spotlightUrls` (type: `array`):

Optional single Spotlight videos, e.g. https://www.snapchat.com/spotlight/W7_EDl... or https://www.snapchat.com/@nasa/spotlight/... Includes the auto transcript when Snapchat provides one.

## `onlyNew` (type: `boolean`):

Output only Spotlight videos and stories not output by an earlier run with the same monitor name. Profiles are always output. Great for scheduled runs.

## `stateKey` (type: `string`):

Separates the "already seen" memory of different monitors (used with "Only new").

## `maxConcurrency` (type: `integer`):

Parallel requests to Snapchat (kept low on purpose).

## `proxyConfiguration` (type: `object`):

Not needed normally. Enable Apify Proxy if Snapchat blocks or rate-limits requests. Only datacenter proxy is supported: if you choose the RESIDENTIAL group, the Actor logs a warning and uses Apify datacenter proxy instead.

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "nba",
    "nfl"
  ],
  "includeSpotlight": true,
  "maxSpotlightPerProfile": 5,
  "includeStories": false,
  "maxStoriesPerProfile": 20,
  "includeLenses": true,
  "spotlightUrls": [],
  "onlyNew": false,
  "stateKey": "default",
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `profiles` (type: `string`):

One row per public profile: subscribers, category, bio, website, verified badge, counts.

## `spotlight` (type: `string`):

One row per Spotlight video: views, likes, comments, shares, duration, hashtags, date.

## `stories` (type: `string`):

Public current story and saved highlights with snap counts and media URLs.

## `all` (type: `string`):

Every item with every field.

## `summary` (type: `string`):

Per-input status, counts, request statistics and warnings.

# 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 = {
    "usernames": [
        "nasa",
        "nba",
        "nfl"
    ],
    "maxSpotlightPerProfile": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("rjmacarthy/snapchat-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 = {
    "usernames": [
        "nasa",
        "nba",
        "nfl",
    ],
    "maxSpotlightPerProfile": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("rjmacarthy/snapchat-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 '{
  "usernames": [
    "nasa",
    "nba",
    "nfl"
  ],
  "maxSpotlightPerProfile": 5
}' |
apify call rjmacarthy/snapchat-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rjmacarthy/snapchat-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/fYXHvZuwcUFfNMGaw/builds/yaVpxSTlL9dATkhr5/openapi.json
