# Snapchat Spotlight Metrics Scraper (`chronometrica/snapchat-metrics-scraper`) Actor

Get reliable Snapchat Spotlight insights from known post URLs. Extract views, likes, comments, shares, recommendations, creator details, and media links for up to 500 posts per run.

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

## Pricing

from $1.25 / 1,000 snapchat post metrics results

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 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 Spotlight Metrics Scraper

### 📊 What does Snapchat Spotlight Metrics Scraper do?

Snapchat Spotlight Metrics Scraper turns known public Spotlight URLs into
reliable post insight rows. Get current views, likes, comments, shares,
recommendations, creator details, and media links for up to 500 posts per run.

Every accepted input gets an ordered success or failure row. Clear status
details show why a public post could not be read, and only successful result
rows are billed. This Actor accepts known URLs; it does not discover posts or
profiles.

Use it for:

- 📈 Tracking known Spotlight posts over time.
- 🕵️ Comparing public post performance for creators, brands, or campaigns.
- 📣 Checking public metrics for campaign and creator deliverables.
- 📊 Feeding post snapshots into dashboards, spreadsheets, and data warehouses.
- 🔎 Researching the public content, creator, sound, and media details shown for
  a Spotlight post.

The Actor does not log in, use account session data, read private posts, or
collect comment text. It only uses information available from public Spotlight
pages at run time.

### 📦 What Snapchat Spotlight data can I extract?

Each successful dataset row represents one public Snapchat Spotlight post. A
failed or unsupported input keeps the same flat row shape and includes a status
reason so the input is still easy to audit.

| Data group        | Example fields                                                                                   |
| ----------------- | ------------------------------------------------------------------------------------------------ |
| 🔗 Post identity  | `inputUrl`, `url`, `snapId`                                                                      |
| 👤 Creator        | `creatorId`, `username`, `creatorName`, `creatorUrl`, `creatorImageUrl`                          |
| 🧾 Post details   | `generatedTitle`, `generatedDescription`, `generatedKeywords`, `detectedLanguage`, `publishedAt` |
| 🎵 Sound          | `soundId`, `soundTitle`, `soundCreator`                                                          |
| 📊 Public metrics | `views`, `likes`, `comments`, `shares`, `recommendations`                                        |
| 🎬 Media          | `durationMs`, `width`, `height`, `mediaUrl`, `thumbnailUrl`, `transcriptUrl`                     |
| 🚦 Row state      | `status`, `statusReason`, `observedAt`                                                           |

The Actor keeps creator and sound fields as post context. It does not discover
profiles, search sounds, collect comments, or return a list of recommended
posts.

### ⚙️ Can I use this Actor through an API?

Yes. You can run Snapchat Spotlight Metrics Scraper in Apify Console or use it
through:

- 🔌 Apify API.
- 🐍 Python SDK.
- 🟢 Node.js SDK.
- 🔔 Webhooks.
- 🗓️ Scheduled runs.
- 🔗 Apify integrations.

The default output is available as dataset items. The `OUTPUT` record contains
a short run summary with input, useful-row, failed-row, and stop information.

### 🎯 Why scrape Snapchat Spotlight post metrics?

Public Spotlight snapshots help you compare known posts and keep a time-stamped
record of what Snapchat showed when the run happened.

| Use case                     | How the data helps                                                              |
| ---------------------------- | ------------------------------------------------------------------------------- |
| 📈 Track post performance    | Compare views, likes, comments, shares, and recommendations across runs.        |
| 🧑‍🎤 Research creators         | Keep the public creator name, username, URL, and image shown for each post.     |
| 📣 Measure campaigns         | Check public metrics for known campaign or creator post URLs.                   |
| 🎵 Study post context        | Keep generated summaries, detected language, and public sound details together. |
| 🧱 Build reporting workflows | Load flat rows into dashboards, spreadsheets, APIs, or warehouse tables.        |

### 💵 How much does it cost?

The Actor uses pay-per-event pricing. One `snapchat-post` event represents one
successful post row and is charged when that row is saved.

| Apify plan | Price per 1,000 successful rows |
| ---------- | ------------------------------- |
| Free       | $2.00                           |
| Bronze     | $1.75                           |
| Silver     | $1.50                           |
| Gold       | $1.25                           |

Invalid, unsupported, and failed inputs are written as free audit rows. They do
not fire the success event and are not billed as successful results.

### 🚀 How do I use Snapchat Spotlight Metrics Scraper?

1. Create or log in to your Apify account.
2. Open **Snapchat Spotlight Metrics Scraper**.
3. Paste one or more public Snapchat Spotlight URLs.
4. Leave the default settings for your first run.
5. Click **Start**.
6. Open the **Output** tab to inspect dataset rows and the run summary.
7. Download the dataset as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.

### ⬇️ Input

The required input is `startUrls`. It must contain at least one full public
Spotlight URL using `https://`.

```json
{
  "startUrls": [
    "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ"
  ]
}
```

#### 🔗 Supported URL shapes

The input form accepts URLs in this shape:

```text
https://www.snapchat.com/@creator/spotlight/SNAP_ID
https://snapchat.com/@creator/spotlight/SNAP_ID
https://www.snapchat.com/@creator/spotlight/SNAP_ID?tracking=value
```

The `www` subdomain is optional. Query strings and fragments are removed when
the clean post URL is created. Other Snapchat pages, profile-only URLs, search
URLs, and non-HTTPS URLs are not supported.

#### 🎛️ Settings

There are no other public input controls in the current schema.

| Setting        | What it does                                                                                             |
| -------------- | -------------------------------------------------------------------------------------------------------- |
| 🔗 `startUrls` | One to 500 public Snapchat Spotlight URLs. Duplicate input strings are removed before processing.        |
| 🚫 `maxItems`  | Not a separate input. Every run has the same built-in 500-URL ceiling.                                   |
| 🚫 `mode`      | Not supported. This Actor accepts known Spotlight URLs only; it has no profile or search discovery mode. |

### ⬆️ Output sample

The results are stored in the default dataset. This example shows the public
row shape; live counts, links, and timestamps can change between runs.

```json
{
  "inputUrl": "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ",
  "url": "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ",
  "snapId": "W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ",
  "creatorId": "fe63dec1-4fa4-476c-9c73-19b2bc2e8589",
  "username": "mrbeast",
  "creatorName": "MrBeast",
  "creatorUrl": "https://www.snapchat.com/@mrbeast",
  "creatorImageUrl": "https://cdn.example/creator.jpg",
  "generatedTitle": "Example Spotlight post",
  "generatedDescription": "Example generated description",
  "generatedKeywords": ["example", "spotlight"],
  "detectedLanguage": "en",
  "soundId": "sound-123",
  "soundTitle": "Example Sound",
  "soundCreator": "Example Artist",
  "publishedAt": "2023-11-14T22:13:20.000Z",
  "views": 1234,
  "likes": 179,
  "comments": 29,
  "shares": 5,
  "recommendations": 18,
  "durationMs": 12000,
  "width": 1080,
  "height": 1920,
  "mediaUrl": "https://cdn.example/video.mp4",
  "thumbnailUrl": "https://cdn.example/thumbnail.jpg",
  "transcriptUrl": "https://cdn.example/captions.json",
  "status": "ok",
  "statusReason": null,
  "observedAt": "2026-08-06T00:00:00.000Z"
}
```

`inputUrl` keeps the submitted value. `url` is the cleaned public post URL.
`observedAt` records when the row was collected.

#### 📌 Run summary

The Actor writes an `OUTPUT` record to the default key-value store. It contains:

- 🏷️ `actorName`: `snapchat-post-metrics`.
- 🔢 `schemaVersion`: the run summary schema version.
- 🕒 `startedAt` and `finishedAt`: run timestamps.
- 📥 `inputCount`: number of input URLs after input validation.
- 🗃️ `datasetId`: the default dataset used for the run.
- ✅ `usefulRows`: successful rows saved with the `snapchat-post` event.
- ⚠️ `failedRows`: invalid, unsupported, or failed rows saved without that
  event.
- 🛑 `stopReason`: normally `inputs_exhausted`, or
  `charge_limit_reached` when the event limit stops processing.

For a complete run, `usefulRows + failedRows` matches `inputCount`. If a charge
limit stops the run, remaining inputs are not attempted.

### 🎯 Status and quality behavior

The row-level `status` and `statusReason` fields explain the outcome:

| Status               | Meaning                                                              |
| -------------------- | -------------------------------------------------------------------- |
| ✅ `ok`              | The requested public Spotlight post was found and a row was created. |
| ✏️ `invalid_url`     | The input is not a valid full URL.                                   |
| 🚫 `unsupported_url` | The URL is not a supported public Spotlight URL.                     |
| ⚠️ `failed`          | The public post could not be read after the bounded retry window.    |

The current public row schema does not include per-metric status or precision
fields. Metric columns are plain values or `null`:

- 🔢 Non-negative public count values are returned as numbers.
- ❔ Negative source sentinel values, missing values, and invalid numeric values
  become `null`; they are not changed to zero.
- 🕒 Public counts can change after a run, so compare snapshots using
  `observedAt`.
- 🧭 The Actor matches the requested `snapId` before reading post fields. A
  nearby Spotlight item cannot fill the requested row.
- 🗣️ `detectedLanguage` is returned only when the source language score is at
  least 0.5. Weak guesses stay `null`.
- 🏷️ Duplicate generated keywords are removed before they are written to the row.

### 🔒 Source boundary

This Actor reads public, logged-out Snapchat Spotlight pages.

- ✅ It accepts known public Spotlight post URLs.
- ✅ It reads fields Snapchat exposes publicly for the requested post.
- ❌ It does not log in or use account session data, account tokens, or private
  access.
- ❌ It does not solve challenges or bypass access controls.
- ❌ It does not scrape private, deleted, or login-only post data.
- ❌ It does not collect comments, replies, profile-wide metrics, sound search results, or
  recommended-post lists.

Creator, sound, and media fields are included only when the public post data
shows them. A missing field is not proof that the source value is zero.

### ⚠️ Limits and interpretation

- 🔗 The public input is limited to full HTTPS Spotlight URLs with a creator
  path and post ID.
- 🔢 The Actor processes up to 500 unique input URLs in the submitted order.
  There is no public discovery mode or batch-size tuning control.
- ⏱️ The current default run timeout is 1,800 seconds.
- 💾 The current default and maximum Actor memory is 256 MB. The Node process
  also uses a 128 MB heap limit.
- 🔁 Temporary public request errors use a bounded retry window. A post can
  still finish with `failed` when the public page cannot be read.
- 📉 Snapchat may hide, omit, or mark a public count as unavailable. These
  fields remain `null`.
- 🔄 Counts are point-in-time values and may change between runs.
- 🎬 Media and thumbnail links may expire or stop working after the run.
- 🧩 A public post can return a partial row when some optional creator, sound,
  detected language, metric, or media fields are not shown.

### ❓ FAQ

#### 🔑 Does this Actor need login or an API key?

No. It reads public Spotlight pages without a Snapchat login, account session
data, or a customer API key.

#### 💬 Does it collect comments or replies?

No. The `comments` field is a public count when Snapchat exposes it. This Actor
does not collect comment text, authors, or replies.

#### 📈 Why is a metric `null`?

The public page did not provide a usable value, or Snapchat used an unavailable
negative sentinel. The Actor keeps the field `null` instead of guessing zero.

#### 🧭 Why did I get a failure row?

The URL may be invalid, outside the supported Spotlight shape, unavailable, or
temporarily unreadable. Check `status` and `statusReason` in the dataset row.

#### 🔁 Can I monitor a post over time?

Yes. Run the Actor on the same public Spotlight URL on a schedule and compare
rows by `snapId` and `observedAt`. Counts are snapshots, not a permanent history
maintained by the Actor.

#### 🧾 Can I use the media link later?

Use media links soon after collection. Public media links can expire.

### ⚖️ Legal and use notes

This Actor collects public Snapchat data available without login. You are
responsible for using the data in line with applicable laws, platform terms, and
privacy rules. Do not collect or process personal data unless you have a valid
reason and legal basis.

Snapchat is a trademark of its owner. This Actor is independent and is not
affiliated with, endorsed by, or sponsored by Snapchat.

### 🛟 Support

If a run does not return what you expected, include:

- 🆔 The Apify run ID.
- 🔗 The exact Spotlight input URL.
- 🧾 The affected dataset row.
- 🚦 The row `status` and `statusReason`.
- 📌 The `OUTPUT` run summary.
- 🕒 The approximate time of the run and the `observedAt` value.

This helps separate an invalid URL, unsupported surface, missing public field,
source change, and temporary read failure without sharing account session data
or private account data.

### 🔗 Related social media Actors

Continue the same workflow on this platform or compare public data across
platforms.

#### Continue on Snapchat

- [Snapchat Comments Scraper](https://apify.com/chronometrica/snapchat-comments-scraper)
  — collect public comments and replies from Snapchat Spotlight posts.

#### Compare metrics across platforms

- [Facebook Metrics Scraper](https://apify.com/chronometrica/facebook-metrics-scraper)
  — collect public post, Reel, video, photo, and profile metrics.
- [Instagram Metrics Scraper](https://apify.com/chronometrica/instagram-metrics-scraper)
  — collect public post, Reel, carousel, profile, and collaboration metrics.
- [TikTok Metrics Scraper](https://apify.com/chronometrica/tiktok-metrics-scraper)
  — collect public video, profile, engagement, hashtag, and music data.
- [YouTube Metrics Scraper](https://apify.com/chronometrica/youtube-metrics-scraper)
  — collect public video, Short, channel, and engagement metrics.
- [X Post Metrics Scraper](https://apify.com/chronometrica/x-post-metrics)
  — collect public post views, engagement, media, and author details.

# Actor input Schema

## `startUrls` (type: `array`):

Paste one or more public Snapchat Spotlight URLs.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ"
  ]
}
```

# Actor output Schema

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

No description

## `output` (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 = {
    "startUrls": [
        "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chronometrica/snapchat-metrics-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 = { "startUrls": ["https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ"] }

# Run the Actor and wait for it to finish
run = client.actor("chronometrica/snapchat-metrics-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 '{
  "startUrls": [
    "https://www.snapchat.com/@mrbeast/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYeHprYmRwYXJhAZPbUvpEAZPbUvjcAAAAAQ"
  ]
}' |
apify call chronometrica/snapchat-metrics-scraper --silent --output-dataset

```

## MCP server setup

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