# Snapchat Hashtag Scraper (`crawlerbros/snapchat-hashtag-scraper`) Actor

Scrape Snapchat Spotlight videos by hashtag. Extracts video metadata, engagement stats (views, likes, shares, comments), creator info, and download URLs.

- **URL**: https://apify.com/crawlerbros/snapchat-hashtag-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Videos, Other
- **Stats:** 56 total users, 15 monthly users, 99.6% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.50 / 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 Hashtag Scraper

Collect Snapchat Spotlight videos by hashtag or topic — no login, no API key, no browser automation needed. Supply any hashtag, topic name, or topic URL and get video metadata, direct download URLs, engagement stats (views, likes, shares, comments), creator profiles, and AI-generated descriptions in seconds.

Perfect for trend research, content discovery, influencer identification, social listening, and competitive analysis on Snapchat.

***

### What You Get

- Up to 32 Spotlight videos per hashtag from Snapchat's public server-rendered pages
- Direct video download URLs (watermarked and unwatermarked)
- Full engagement metrics: view count, like count, share count, comment count, remix count
- Creator profile info: username, display name, and profile URL
- AI-generated title, description, and keywords for each video (via Snapchat's LLM metadata)
- Related topic tags and scene-to-interest (S2I) tags
- Thumbnail URLs, video dimensions, duration, and upload timestamps
- Works without a Snapchat account or cookies

***

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `hashtags` | string\[] | Yes | — | Hashtags, topic names, or topic URLs. Examples: `food`, `#travel`, `humor`, `https://www.snapchat.com/topic/humor` |
| `resultsPerHashtag` | integer | No | `30` | Max videos to extract per hashtag (1–32). Snapchat's SSR page returns at most 32 results |
| `includeVideoUrls` | boolean | No | `true` | Include direct video download URLs. Note: URLs contain expiring tokens |
| `includeRelatedTopics` | boolean | No | `true` | Include related topic tags and S2I tags in each record |
| `includeLlmMetadata` | boolean | No | `true` | Include AI-generated title, description, and keywords from Snapchat's metadata |
| `proxyConfiguration` | object | No | — | Apify proxy settings. Most hashtags work without proxy |

#### Example Input

```json
{
  "hashtags": ["food", "#travel", "humor"],
  "resultsPerHashtag": 30,
  "includeVideoUrls": true,
  "includeRelatedTopics": true,
  "includeLlmMetadata": true
}
```

***

### Output

One record is produced per Spotlight video. All fields use snake\_case. Fields with no data are omitted from the record.

#### Core Video Fields

| Field | Type | Description |
|-------|------|-------------|
| `snap_id` | string | Unique Spotlight snap ID |
| `story_id` | string | Story ID this snap belongs to |
| `snap_url` | string | Public URL to the Spotlight video (`https://www.snapchat.com/spotlight/{snap_id}`) |
| `video_url` | string | Direct video download URL (watermarked). Present when `includeVideoUrls` is true |
| `video_url_unwatermarked` | string | Direct video URL without watermark. Present when `includeVideoUrls` is true |
| `thumbnail_url` | string | Video thumbnail image URL |
| `video_thumbnail_url` | string | Alternate video-specific thumbnail URL |
| `large_thumbnail_url` | string | Large-format thumbnail URL |
| `encoding_format` | string | Video encoding format (typically `"video/mp4"`) |
| `duration_seconds` | number | Video duration in seconds |
| `width` | integer | Video width in pixels |
| `height` | integer | Video height in pixels |
| `upload_date` | string | Upload timestamp (ISO 8601 UTC) |
| `searched_hashtag` | string | The hashtag/topic that was searched to find this video |
| `scraped_at` | string | Scrape timestamp (ISO 8601 UTC) |

#### Creator Fields

| Field | Type | Description |
|-------|------|-------------|
| `creator_username` | string | Creator's Snapchat username |
| `creator_display_name` | string | Creator's display name |
| `creator_profile_url` | string | Creator's profile URL |

#### Engagement Stats

| Field | Type | Description |
|-------|------|-------------|
| `view_count` | integer | Total view count |
| `like_count` | integer | Total boost/like count |
| `share_count` | integer | Total share count |
| `comment_count` | integer | Total live comment count |
| `remix_count` | integer | Total remix count |
| `recommend_count` | integer | Total recommend count |
| `rewatch_count` | integer | Total rewatch count (sparse) |
| `screenshot_count` | integer | Total screenshot count (sparse) |
| `pending_comment_count` | integer | Pending/unmoderated comment count (sparse) |

#### Content Fields

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Video description text (from snap or LLM fallback) |
| `caption` | string | Embedded caption text |
| `keywords` | string\[] | Keywords derived from LLM metadata or hashtags in description |
| `sub_titles` | array | Overlay subtitle/caption objects embedded in the snap |
| `attachment_url` | string | External link attached to the snap (sparse) |

#### Story Metadata Fields

| Field | Type | Description |
|-------|------|-------------|
| `composite_story_id` | string | Composite story ID for multi-snap stories |
| `story_subtype` | integer | Story subtype identifier |
| `is_featured` | boolean | Whether the video is featured/promoted |
| `is_creator_suggestion` | boolean | Whether this is a creator suggestion card |
| `score` | integer | Internal ranking score |
| `latest_update_at` | string | Last update timestamp for the story (ISO 8601 UTC) |

#### AI Metadata Fields

Present when `includeLlmMetadata` is true.

| Field | Type | Description |
|-------|------|-------------|
| `llm_title` | string | AI-generated title for the video |
| `llm_description` | string | AI-generated description of the video content |
| `llm_keywords` | string\[] | AI-generated keyword tags |

#### Scene & Topic Tags

| Field | Type | Description |
|-------|------|-------------|
| `s2i_tags` | string\[] | Scene-to-interest tags derived from video content |

#### Related Topics

Present when `includeRelatedTopics` is true. These fields are added to every record from the same hashtag search.

| Field | Type | Description |
|-------|------|-------------|
| `related_topics` | object\[] | Related topic tags. Each entry: `{tagName, score, level}` |
| `related_s2i_tags` | object\[] | Related scene-to-interest tags. Each entry: `{tagName, score, level}` |

***

### Example Output

```json
{
  "snap_id": "AbCdEf1234567890",
  "story_id": "story-xyz-001",
  "snap_url": "https://www.snapchat.com/spotlight/AbCdEf1234567890",
  "video_url": "https://cf-st.sc-cdn.net/video/watermarked.mp4?token=abc",
  "video_url_unwatermarked": "https://cf-st.sc-cdn.net/video/clean.mp4?token=xyz",
  "thumbnail_url": "https://cf-st.sc-cdn.net/thumb/food-snap.jpg",
  "encoding_format": "video/mp4",
  "duration_seconds": 12.6,
  "width": 1080,
  "height": 1920,
  "creator_username": "foodiequeen",
  "creator_display_name": "Foodie Queen",
  "creator_profile_url": "https://www.snapchat.com/@foodiequeen",
  "view_count": 248000,
  "like_count": 14300,
  "share_count": 3200,
  "comment_count": 870,
  "remix_count": 45,
  "description": "Best tacos in LA — you have to try this!",
  "keywords": ["tacos", "food", "LA", "streetfood"],
  "upload_date": "2026-06-25T14:10:00+00:00",
  "searched_hashtag": "food",
  "llm_title": "Delicious street tacos in Los Angeles",
  "llm_description": "A creator shows off their favourite taco spot in LA with vivid close-up shots.",
  "llm_keywords": ["tacos", "streetfood", "losangeles", "foodie"],
  "s2i_tags": ["food", "mexican_cuisine", "street_food"],
  "related_topics": [
    {"tagName": "cooking", "score": 0.87, "level": 1},
    {"tagName": "recipe", "score": 0.74, "level": 2}
  ],
  "related_s2i_tags": [
    {"tagName": "restaurant", "score": 0.91, "level": 1}
  ],
  "scraped_at": "2026-06-28T12:00:00+00:00"
}
```

***

### FAQ

**Do I need a Snapchat account or cookies?**
No. The scraper fetches public Snapchat topic pages over HTTP without any credentials or browser automation.

**How many results can I get per hashtag?**
Snapchat's server-rendered pages contain at most 32 Spotlight results per hashtag. Set `resultsPerHashtag` to any value between 1 and 32.

**Can I use topic names without a `#` symbol?**
Yes. You can pass bare words like `food`, hash-prefixed like `#travel`, or full topic URLs like `https://www.snapchat.com/topic/humor`. The scraper normalises all formats automatically.

**How long are the video download URLs valid?**
Video URLs contain signed CDN tokens that expire after a period set by Snapchat (typically hours to a few days). Download or proxy the media as soon as possible after scraping.

**What is the difference between `video_url` and `video_url_unwatermarked`?**
`video_url` is the watermarked version Snapchat displays to end users. `video_url_unwatermarked` is a clean version without the Snapchat overlay, when available in the page data.

**What are S2I tags?**
Scene-to-interest (S2I) tags are Snapchat's internal content classification labels derived from visual analysis of the video. They are useful for categorising content beyond user-supplied hashtags.

**What does `includeLlmMetadata` add?**
When enabled, three extra fields are added to each record: `llm_title` (a concise title generated by Snapchat's AI), `llm_description` (a sentence or two describing the video), and `llm_keywords` (keyword tags). These are embedded by Snapchat in the page metadata and require no additional API calls.

***

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

## `hashtags` (type: `array`):

Hashtags, topic names, or topic URLs. Examples: food, #travel, humor, https://www.snapchat.com/topic/humor

## `resultsPerHashtag` (type: `integer`):

Maximum number of videos to extract per hashtag. Snapchat returns up to 32 SSR results per page.

## `includeVideoUrls` (type: `boolean`):

Include direct video download URLs in output. Note: video URLs contain expiring tokens and may stop working after some time.

## `includeRelatedTopics` (type: `boolean`):

Include related topics/tags in each result record

## `includeLlmMetadata` (type: `boolean`):

Include LLM-generated title, description, and keywords

## Actor input object example

```json
{
  "hashtags": [
    "food"
  ],
  "resultsPerHashtag": 30,
  "includeVideoUrls": true,
  "includeRelatedTopics": true,
  "includeLlmMetadata": true
}
```

# Actor output Schema

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

Dataset with scraped Snapchat Spotlight videos

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

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

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/snapchat-hashtag-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 '{
  "hashtags": [
    "food"
  ]
}' |
apify call crawlerbros/snapchat-hashtag-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0ycYdAhPrT68bcU7O/builds/WsmcmNjd9gcOylX5i/openapi.json
