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

Scrape public Snapchat Spotlight videos by hashtag. Export video URLs, thumbnails, creator details, engagement metrics, captions, keywords, upload dates, and source links.

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

## Pricing

from $0.70 / 1,000 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 for Spotlight videos

Snapchat Hashtag Scraper extracts public [Snapchat](https://www.snapchat.com/) Spotlight videos from hashtags. Add a hashtag such as `food`, `#travel`, or a public Spotlight hashtag URL, and the Actor returns flat video rows with source links, direct media URLs, thumbnails, creator details, engagement metrics, captions, keywords, upload dates, and scrape timestamps.

Use this Snapchat hashtag scraper when you need structured Spotlight video data for social listening, campaign research, creator discovery, trend checks, content operations, or reporting. Instead of opening Snapchat hashtag pages one by one, you get a clean Apify dataset you can export as JSON, CSV, Excel, XML, RSS, or HTML, or use through the Apify API, schedules, webhooks, and integrations.

For a small first run, keep the prefilled targets and the default **Total video results** value of `10`. Once the output shape looks right, add more hashtags or raise the limits. The Actor works with public Snapchat Spotlight hashtag pages and does not ask for Snapchat cookies, login details, or an API key.

### ✅ What this Actor does

- Accepts bare hashtags such as `food`.
- Accepts hashtags with `#`, such as `#travel`.
- Accepts public Spotlight hashtag URLs such as `https://www.snapchat.com/spotlight/hashtag/fitness`.
- Saves one dataset row per public Snapchat Spotlight video.
- Adds input provenance so you can trace each row back to the submitted hashtag.
- Returns Spotlight URLs, direct video URLs, preview media URLs, and thumbnails when Snapchat exposes them.
- Returns creator username, display name, profile URL, and creator ID when available.
- Returns public engagement metrics such as views, boosts, shares, comments, and recommends when available.
- Returns captions, descriptions, source hashtags, keywords, language hints, upload dates, and scrape timestamps when available.
- Deduplicates videos across submitted hashtags by source video identity.
- Stops at your per-hashtag and total result limits so run size stays predictable.

### 📊 Data you can export

Each dataset row represents one public Snapchat Spotlight video discovered from a hashtag. Fields can include:

- `originalInput`, `inputIndex`, `inputType`, and `normalizedHashtag`
- `sourceHashtagUrl` and `matchedHashtags`
- `snapId`, `storyId`, `storyTapId`, and `spotlightUrl`
- `videoUrl`, `thumbnailUrl`, and `mediaPreviewUrl`
- `width`, `height`, and `durationSeconds`
- `creatorUsername`, `creatorDisplayName`, `creatorProfileUrl`, and `creatorId`
- `viewCount`, `boostCount`, `shareCount`, `commentCount`, and `recommendCount`
- `description`, `caption`, `hashtags`, `keywords`, and `languageCode`
- `isAttributed`, `uploadedAt`, and `scrapedAt`

Snapchat may return `null` or an empty list for fields it does not expose on a specific Spotlight video. Empty hashtags and temporarily unavailable targets are handled in logs instead of creating placeholder dataset rows.

### 🚀 How to run

1. Add one or more Snapchat hashtags or public Spotlight hashtag URLs.
2. Set **Videos per hashtag** to cap how many videos each hashtag can save.
3. Set **Total video results** to cap the full run.
4. Start the Actor and open the dataset.
5. Export the dataset or connect it to your API, schedule, webhook, or integration workflow.

Good first input:

```json
{
  "hashtagsOrUrls": [
    "food",
    "#travel",
    "https://www.snapchat.com/spotlight/hashtag/fitness"
  ],
  "resultsPerHashtag": 10,
  "maxResults": 10
}
````

### 🧾 Output example

```json
{
  "originalInput": "food",
  "inputIndex": 1,
  "inputType": "hashtag",
  "normalizedHashtag": "food",
  "sourceHashtagUrl": "https://www.snapchat.com/spotlight/hashtag/food",
  "rank": 1,
  "matchedHashtags": ["food"],
  "snapId": "W7_EDlXWTBiXAEExampleSnapId",
  "storyId": "W7_EDlXWTBiXAEExampleStoryId",
  "storyTapId": "-3633770725470699293",
  "spotlightUrl": "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEExampleStoryId",
  "videoUrl": "https://cf-st.sc-cdn.net/...",
  "thumbnailUrl": "https://cf-st.sc-cdn.net/...",
  "mediaPreviewUrl": "https://cf-st.sc-cdn.net/...",
  "width": 540,
  "height": 960,
  "durationSeconds": 5,
  "creatorUsername": "creator",
  "creatorDisplayName": "Creator Name",
  "creatorProfileUrl": "https://www.snapchat.com/@creator",
  "creatorId": "3a59d2a3-979a-4dc9-b6d6-70a74ae37e1d",
  "viewCount": 1750321,
  "boostCount": 57784,
  "shareCount": 480,
  "commentCount": 0,
  "recommendCount": 2090,
  "description": "Another Spotlight Snap brought to you by Snapchat",
  "caption": null,
  "hashtags": [],
  "keywords": ["running", "race", "track event"],
  "languageCode": "en",
  "isAttributed": true,
  "uploadedAt": "2026-02-21T14:05:48.552Z",
  "scrapedAt": "2026-06-10T12:11:53.732Z"
}
```

### 🔧 Input options

#### Hashtags or Snapchat hashtag URLs

Add Snapchat hashtags or public Spotlight hashtag URLs. The input accepts values such as `food`, `#travel`, and `https://www.snapchat.com/spotlight/hashtag/fitness`.

#### Videos per hashtag

Maximum number of video rows to save for each hashtag before moving to the next input. The default is `10`, and the maximum is `50`.

#### Total video results

Maximum number of video rows to save across the whole run. The default is `10`, and the maximum is `5000`. This is the main cost and dataset-size cap.

### 💸 Pricing

This Actor uses pay-per-event pricing. You are charged for each public Spotlight video that is saved to the dataset. Empty hashtags, skipped inputs, and targets that do not return usable public Spotlight videos do not create paid video events.

The price is tiered by Apify plan and is set below the comparable Snapchat hashtag scraper baseline from the product plan:

| Apify plan | Price per saved video |
| --- | ---: |
| Free | $0.0009 |
| Bronze | $0.0009 |
| Silver | $0.0008 |
| Gold | $0.0007 |
| Platinum | $0.0006 |
| Diamond | $0.0005 |

### ⚖️ Limits and notes

This Actor is built for public Snapchat Spotlight hashtag pages. It does not use your Snapchat account, cookies, private credentials, or a Snapchat API key.

Direct media URLs can be short-lived because they come from Snapchat's public web response. Store the metadata you need from the dataset, and refresh runs when you need current media links.

The Actor saves successful video rows only. Private, removed, empty, or temporarily unavailable hashtags are reported in logs and skipped without adding placeholder rows to the dataset.

### ❓ FAQ

#### Can this scrape private Snapchat content?

No. It works with public Snapchat Spotlight hashtag pages only. It does not access private accounts, login-only content, stories, profiles, comments, followers, lenses, or contacts.

#### Can I paste a Snapchat hashtag URL?

Yes. Use a public Spotlight hashtag URL such as `https://www.snapchat.com/spotlight/hashtag/fitness`. You can also paste `fitness` or `#fitness`.

#### Does it download video files?

No. It returns direct Snapchat media URLs and metadata in the dataset. It does not save binary video files to Apify storage.

#### Why do some fields return null?

Snapchat does not expose every metric or text field for every video. When a field is missing from the public response, the Actor leaves it empty and still saves the usable Spotlight video row.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

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

### 🔗 Other actors

- [TikTok Hashtag Search Scraper ↗](https://apify.com/maximedupre/tiktok-hashtag-search-scraper) - Find TikTok hashtag ideas and public hashtag metrics from keywords, hashtags, or tag URLs.
- [TikTok Video Downloader ↗](https://apify.com/maximedupre/tiktok-video-downloader) - Download media files from known public TikTok video URLs.
- [Instagram Downloader API ↗](https://apify.com/maximedupre/instagram-downloader-api) - Export media URLs, thumbnails, captions, and engagement counts from public Instagram posts and reels.
- [Pinterest Video Downloader ↗](https://apify.com/maximedupre/pinterest-video-downloader) - Extract video and image media from public Pinterest pins, pin.it links, or pin IDs.
- [Facebook Media Downloader ↗](https://apify.com/maximedupre/facebook-media-downloader) - Download direct media links and metadata from public Facebook videos and reels.

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

# Actor input Schema

## `hashtagsOrUrls` (type: `array`):

Add values like `food`, `#travel`, or `https://www.snapchat.com/spotlight/hashtag/fitness`. Each input is checked separately.

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

Maximum video rows to save for each hashtag before moving to the next input.

## `maxResults` (type: `integer`):

Maximum video rows to save across the whole run. This is the main cost cap.

## Actor input object example

```json
{
  "hashtagsOrUrls": [
    "food",
    "#travel",
    "https://www.snapchat.com/spotlight/hashtag/fitness"
  ],
  "resultsPerHashtag": 25,
  "maxResults": 25
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

No description

# 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 = {
    "hashtagsOrUrls": [
        "food",
        "#travel",
        "https://www.snapchat.com/spotlight/hashtag/fitness"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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 = { "hashtagsOrUrls": [
        "food",
        "#travel",
        "https://www.snapchat.com/spotlight/hashtag/fitness",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/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 '{
  "hashtagsOrUrls": [
    "food",
    "#travel",
    "https://www.snapchat.com/spotlight/hashtag/fitness"
  ]
}' |
apify call maximedupre/snapchat-hashtag-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Snapchat Hashtag Scraper",
        "description": "Scrape public Snapchat Spotlight videos by hashtag. Export video URLs, thumbnails, creator details, engagement metrics, captions, keywords, upload dates, and source links.",
        "version": "0.0",
        "x-build-id": "9OqZQUVPnOOL6Q0YS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~snapchat-hashtag-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-snapchat-hashtag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~snapchat-hashtag-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-snapchat-hashtag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~snapchat-hashtag-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-snapchat-hashtag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "hashtagsOrUrls"
                ],
                "properties": {
                    "hashtagsOrUrls": {
                        "title": "Hashtags or Snapchat hashtag URLs",
                        "minItems": 1,
                        "maxItems": 500,
                        "type": "array",
                        "description": "Add values like `food`, `#travel`, or `https://www.snapchat.com/spotlight/hashtag/fitness`. Each input is checked separately.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "resultsPerHashtag": {
                        "title": "Videos per hashtag",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum video rows to save for each hashtag before moving to the next input.",
                        "default": 25
                    },
                    "maxResults": {
                        "title": "Total video results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum video rows to save across the whole run. This is the main cost cap.",
                        "default": 25
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
