# Snapchat Topic Scraper (`crawlerbros/snapchat-topic-scraper`) Actor

Scrape Snapchat topic pages - get spotlight videos, related tags, and topic metadata for any Snapchat topic.

- **URL**: https://apify.com/crawlerbros/snapchat-topic-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Automation, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Topic Scraper

Extract Spotlight videos by topic from Snapchat — no login required. Browse trending content under any of Snapchat's built-in topic categories such as food, humor, travel, gaming, and more. Each record includes video URLs, creator details, engagement stats, AI-generated metadata, and optional S2I content classification tags.

### What This Actor Does

- Accepts topic IDs (e.g. `food`, `humor`) or full topic URLs (`https://www.snapchat.com/topic/food`)
- Returns up to 32 Spotlight videos per topic per run (Snapchat's maximum per page)
- Extracts AI-generated titles, descriptions, and keyword arrays from each video
- Optionally includes related S2I content tags with hierarchy scores
- Works without login or cookies — uses Snapchat's public topic pages

### Supported Input Formats

| Format | Example |
|--------|---------|
| Bare topic ID | `food` |
| Topic with spaces | `new york` |
| Full URL | `https://www.snapchat.com/topic/food` |
| Hash-prefixed | `#humor` (hash stripped automatically) |

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `topics` | string\[] | Yes | — | Topic IDs or topic URLs. Examples: `food`, `humor`, `travel`, `https://www.snapchat.com/topic/food` |
| `maxResultsPerTopic` | integer | No | `32` | Max Spotlight records per topic. Snapchat serves a maximum of 32 per page. |
| `includeRelatedTags` | boolean | No | `true` | Include S2I content classification tags in each record. |
| `proxyConfiguration` | object | No | — | Optional Apify proxy configuration. Public Snapchat pages work without proxy; add for resilience at scale. |

#### Example Input

```json
{
  "topics": ["food", "humor", "https://www.snapchat.com/topic/travel"],
  "maxResultsPerTopic": 32,
  "includeRelatedTags": true
}
```

### Output

Each record represents one Spotlight video under the given topic.

| Field | Type | Description |
|-------|------|-------------|
| `topicId` | string | Topic identifier as provided in input (e.g. `technology`) |
| `topicDisplayName` | string | Human-readable topic label (e.g. `Technology`) |
| `snapId` | string | Unique Spotlight snap identifier |
| `storyId` | string | Full story composite identifier |
| `compositeStoryId` | object | Structured story ID with `corpus`, `id`, and `version` |
| `snapUrl` | string | Direct Snapchat web URL to the Spotlight video |
| `videoUrl` | string | CDN video URL (may include watermark) |
| `videoUrlUnwatermarked` | string | CDN video URL without watermark |
| `thumbnailUrl` | string | Thumbnail image URL |
| `durationSeconds` | number | Video duration in seconds |
| `creatorUsername` | string | Snapchat username of the creator |
| `creatorDisplayName` | string | Display name of the creator |
| `creatorProfileUrl` | string | Snapchat profile URL of the creator |
| `viewCount` | integer | Total view count |
| `likeCount` | integer | Total like count |
| `shareCount` | integer | Total share count |
| `commentCount` | integer | Total comment count |
| `recommendCount` | integer | Total recommendation count |
| `description` | string | Caption or description written by the creator |
| `llmTitle` | string | AI-generated title summarizing the video content |
| `llmDescription` | string | AI-generated description of the video |
| `llmKeywords` | string\[] | AI-generated keyword list for the video |
| `isFeatured` | boolean | Whether this video is currently featured by Snapchat |
| `storySubtype` | integer | Internal story subtype code |
| `uploadedAt` | string | ISO 8601 timestamp of when the video was uploaded |
| `remainingSpotlightCount` | integer | Number of additional spotlight IDs available beyond this batch |
| `relatedTags` | object\[] | S2I classification tags (when `includeRelatedTags` is `true`) |
| `relatedTags[].tagName` | string | Name of the content classification tag |
| `relatedTags[].score` | number | Relevance score for this tag |
| `relatedTags[].level` | integer | Hierarchy level of the tag |
| `scrapedAt` | string | ISO 8601 timestamp of when the record was scraped |

#### Example Output

```json
{
  "topicId": "technology",
  "topicDisplayName": "Technology",
  "snapId": "W7_EDlXWTBiXAEEniNoMPwAAYbGNxbnVlY2ptAZezrfS6AZezrfMbAAAAAQ",
  "storyId": "35::W7_EDlXWTBiXAEEniNoMPwAAYbGNxbnVlY2ptAZezrfS6AZezrfMbAAAAAQ::0",
  "compositeStoryId": {
    "corpus": 35,
    "id": "W7_EDlXWTBiXAEEniNoMPwAAYbGNxbnVlY2ptAZezrfS6AZezrfMbAAAAAQ",
    "version": "0"
  },
  "snapUrl": "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYbGNxbnVlY2ptAZezrfS6AZezrfMbAAAAAQ",
  "videoUrl": "https://cf-st.sc-cdn.net/d/kAEZhCauQoCWxONAnECsR...",
  "videoUrlUnwatermarked": "https://cf-st.sc-cdn.net/d/kAEZhCauQoCWxONAnECsR...",
  "thumbnailUrl": "https://cf-st.sc-cdn.net/d/kAEZhCauQoCWxONAnECsR...",
  "durationSeconds": 57.6,
  "creatorUsername": "tinytexts",
  "creatorDisplayName": "Tiny Texts",
  "creatorProfileUrl": "https://www.snapchat.com/@tinytexts",
  "viewCount": 1466990,
  "likeCount": 60914,
  "shareCount": 2129,
  "commentCount": 764,
  "recommendCount": 6467,
  "description": "tag your yellow heart 💛",
  "llmTitle": "How to Handle a Parent's Phone Texting Mistake",
  "llmDescription": "This text-based conversation shows a humorous exchange where a dad realizes he's texting his child from his own phone after claiming the child left theirs at home.",
  "llmKeywords": ["funny parent moments", "texting my dad", "parenting humor", "text message prank"],
  "isFeatured": false,
  "storySubtype": 0,
  "uploadedAt": "2025-06-27T23:16:51.099000+00:00",
  "remainingSpotlightCount": 25,
  "relatedTags": [
    { "tagName": "Science", "score": 0, "level": 0 },
    { "tagName": "Device", "score": 0, "level": 0 },
    { "tagName": "AI", "score": 0, "level": 0 }
  ],
  "scrapedAt": "2026-06-28T06:46:41.956315+00:00"
}
```

### Use Cases

- **Trend research** — monitor which Spotlight videos are rising under specific topic categories
- **Content strategy** — analyze what formats, lengths, and styles perform well per topic
- **Competitive analysis** — track creators active in a given topic and their engagement metrics
- **AI keyword research** — leverage Snapchat's LLM-generated keyword arrays for SEO and content planning
- **Data journalism** — map viral content themes across Snapchat's topic taxonomy

### FAQ

**Do I need a Snapchat account to use this actor?**
No. Topic pages and Spotlight videos are publicly accessible on Snapchat's website. No login, cookies, or authentication is required.

**What topic IDs can I use?**
Any of Snapchat's built-in topic slugs such as `food`, `humor`, `travel`, `gaming`, `beauty`, `sports`, `technology`, `music`, `pets`, and `dance`. You can also paste a full topic URL like `https://www.snapchat.com/topic/food`.

**Why is there a 32-video limit per topic?**
Snapchat's public topic pages serve a fixed batch of up to 32 Spotlight videos. This actor returns all available videos in that batch. Running the actor again may return a different set of trending videos.

**What are `llmTitle`, `llmDescription`, and `llmKeywords`?**
These fields are generated by Snapchat's own AI system and are embedded in the page data. They summarize and tag the video content automatically — useful for downstream analysis without additional AI API calls.

**What are `relatedTags`?**
Related tags are Snapchat's S2I (Subject-to-Image) content classification labels associated with the topic. Each tag has a `tagName`, a relevance `score`, and a hierarchy `level`. These can be used to build a fine-grained content taxonomy.

**Can I scrape multiple topics in a single run?**
Yes. Provide multiple topic IDs or URLs in the `topics` array. The actor processes them sequentially and outputs records for all topics in a single dataset, each identified by `topicId` and `topicDisplayName`.

**What is `remainingSpotlightCount`?**
This field indicates how many additional Spotlight video IDs Snapchat has available for the topic beyond the current batch. It can be used to gauge topic popularity and overall content volume.

***

### Other Snapchat Scrapers

Explore the full Snapchat scraper suite on Apify:

| Actor | Description |
|-------|-------------|
| [Snapchat Profile Scraper](https://apify.com/crawlerbros/snapchat-profile-scraper) | Full profile metadata, highlights, lenses, and spotlight data |
| [Snapchat Hashtag Scraper](https://apify.com/crawlerbros/snapchat-hashtag-scraper) | Spotlight videos by hashtag or topic with AI metadata |
| [Snapchat User Stories Scraper](https://apify.com/crawlerbros/snapchat-user-stories-scraper) | Curated highlights and active story snaps |
| [Snapchat Spotlight Video Downloader](https://apify.com/crawlerbros/snapchat-spotlight-video-downloader) | Download Spotlight videos with AI metadata, transcripts, and comments |
| [Snapchat Search Scraper](https://apify.com/crawlerbros/snapchat-search-scraper) | Search across videos, lenses, users, places, and shows |
| [Snapchat Lens Scraper](https://apify.com/crawlerbros/snapchat-lens-scraper) | AR lens metadata, trending lenses, and creator info |
| [Snapchat Publisher Scraper](https://apify.com/crawlerbros/snapchat-publisher-scraper) | Discover publisher pages, shows, episodes, and spotlights |
| [Snapchat Ads Gallery Scraper](https://apify.com/crawlerbros/snapchat-ads-gallery-scraper) | EU/UK ad transparency library — ads and sponsored content |
| [Snapchat Spotlight Comments Scraper](https://apify.com/crawlerbros/snapchat-spotlight-comments-scraper) | Comment threads from Spotlight videos |
| [Snapchat Topic Scraper](https://apify.com/crawlerbros/snapchat-topic-scraper) | Spotlight videos by topic with related tags |
| [Snapchat Snapcode Scraper](https://apify.com/crawlerbros/snapchat-snapcode-scraper) | Download Snapcode images (SVG/PNG) for any username |
| [Snapchat Snap Map Scraper](https://apify.com/crawlerbros/snapchat-snap-map-scraper) | Public Snap Map places and their latest snaps |
| [Snapchat Discover Scraper](https://apify.com/crawlerbros/snapchat-discover-scraper) | Shows and stories from Snapchat's Discover feed |

# Actor input Schema

## `topics` (type: `array`):

Topic IDs or topic URLs. Examples: food, humor, travel, https://www.snapchat.com/topic/food

## `maxResultsPerTopic` (type: `integer`):

Maximum spotlight records to return per topic (Snapchat serves up to 32 per page)

## `includeRelatedTags` (type: `boolean`):

Include related S2I tags in each result record

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

Optional Apify proxy configuration. Public Snapchat pages work without proxy; include for resilience at scale.

## Actor input object example

```json
{
  "topics": [
    "food",
    "humor"
  ],
  "maxResultsPerTopic": 32,
  "includeRelatedTags": true
}
```

# 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 = {
    "topics": [
        "food",
        "humor"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/snapchat-topic-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 = { "topics": [
        "food",
        "humor",
    ] }

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

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

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

```

## CLI example

```bash
echo '{
  "topics": [
    "food",
    "humor"
  ]
}' |
apify call crawlerbros/snapchat-topic-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/snapchat-topic-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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