# Snapchat Scraper: Profiles, Stories, Highlights, Spotlight +++ (`socialhz/snapchat-scraper`) Actor

Scrape Snapchat accounts by username — profile, subscriber count, live Story snaps, Highlight collections, Spotlight posts with engagement, and the account's own AR Lenses. No login, no cookies. Pricing: profiles $1.79/1K, Stories and Highlights $2.49/1K, Spotlight $1.49/1K. No keyword search.

- **URL**: https://apify.com/socialhz/snapchat-scraper.md
- **Developed by:** [Socialhz](https://apify.com/socialhz) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.79 / 1,000 account 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: Profiles, Stories, Highlights & Spotlight

Give it a list of Snapchat usernames. Get back each account's profile and subscriber count, its Spotlight posts with full engagement, the AR Lenses it publishes, its live Story snap by snap, and its saved Highlight collections — in one run, with no Snapchat login and no cookies.

Four kinds of Snapchat data that are normally sold as four separate tools, in a single record per account.

Built for influencer research, creator vetting, brand monitoring and AR campaign analysis.

***

### What it does

- **Profiles** — display name, bio, subscriber count, verified badge, Snapchat's own category and subcategory, website, Snapcode image, and when the profile was created
- **Spotlight posts** — with **views, likes, comments, shares and saves**, plus direct video URLs at each quality. Included in the profile price
- **AR Lenses** — the Lenses the account itself published, with preview image and preview video. Almost nothing else on the store returns these
- **Live Stories** — the Story as it stands right now: every snap with its media URL, preview image, timestamp, and location where Snapchat attaches one
- **Highlight collections** — saved, titled collections of past snaps that stay on the profile. Large accounts carry a dozen or more
- **Related accounts** — the accounts Snapchat shows alongside this one, with their own subscriber counts
- **No login required** — no Snapchat account, no cookies, no session token, ever
- **Every username accounted for** — each one you supply comes back with a record, so you always know what was found
- **Paste usernames in any form** — a bare handle, an `@handle`, or a full `snapchat.com/add/...` link all work

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `usernames` | array | — | **Required.** One account per line. Anything that is not a usable username is skipped and costs nothing. Max `500` per run |
| `includeStory` | boolean | `true` | Add the live Story, snap by snap |
| `includeHighlights` | boolean | `false` | Add saved Highlight collections |
| `includeSpotlightDetails` | boolean | `false` | Add each Spotlight video's length and pixel dimensions |

#### Example input

```json
{
  "usernames": [
    "djkhaled305",
    "@kyliejenner",
    "https://www.snapchat.com/add/nba"
  ],
  "includeStory": true,
  "includeHighlights": true,
  "includeSpotlightDetails": false
}
```

All three of those forms resolve to a username. You do not need to clean your list first.

***

### Output

One record per username. Every record carries `username`, `profileUrl`, `status` and `hasPublicProfile`.

#### Account fields

| Field | Type | Description |
|---|---|---|
| `displayName`, `bio` | string | null | Profile identity |
| `subscriberCount` | number | null | Subscribers to the public profile |
| `isVerified` | boolean | Whether Snapchat badges the account |
| `category`, `subcategory` | string | null | Snapchat's own taxonomy, e.g. `people` / `artist` |
| `profilePictureUrl`, `heroImageUrl`, `snapcodeImageUrl` | string | null | Images, including the scannable Snapcode |
| `websiteUrl`, `address` | string | null | Links and address where the profile lists them |
| `createdAt`, `updatedAt` | string | null | Profile created and last changed, ISO 8601 UTC |
| `relatedAccounts` | array | Accounts Snapchat shows alongside this one, with subscriber counts |

#### Spotlight posts

`spotlightPosts` holds one entry per post, with `spotlightPostsReturned` as the count.

| Field | Description |
|---|---|
| `postId`, `url`, `caption`, `postedAt` | Identity and text |
| `viewCount`, `likeCount`, `commentCount`, `shareCount`, `saveCount`, `recommendCount` | Full engagement |
| `hashtags` | Hashtags on the post |
| `thumbnailUrl`, `videoUrl`, `videoUrlsByQuality` | Cover frame and video at each quality |
| `durationSeconds`, `width`, `height`, `title`, `description` | Filled in when **Spotlight details** is switched on |

#### Lenses

`lenses` holds the AR Lenses this account published — `name`, `creator`, `iconUrl`, `previewImageUrl`, `previewVideoUrl` and `unlockUrl`.

#### Story and Highlights

`hasActiveStory` says whether a Story was running at the moment of the check. When one was, `story` carries `storyId`, `snapCount`, `latestSnapAt` and a `snaps` array.

`highlights` holds each saved collection with `title`, `snapCount`, `latestSnapAt` and its own `snaps` array, with `highlightsReturned` as the count.

Every snap, in a Story or a Highlight, carries `snapId`, `mediaType`, `mediaUrl`, `previewUrl`, `postedAt`, and `latitude`/`longitude` where Snapchat attaches a location.

Every record also carries `status`: `ok`, `no_public_profile` for an account that exists but publishes no public profile, `not_found` for a username nobody uses, or `unavailable` if the source could not be reached.

***

### Pricing

Charged per lookup, plus a small fixed fee when a run starts. **Spotlight posts, Lenses and related accounts are included in the profile price** — there is no separate charge for any of them.

| Event | Price |
|---|---|
| Account profile | $1.79 per 1,000 |
| Story checked | $2.49 per 1,000 |
| Highlights | $2.49 per 1,000 |
| Spotlight details | $1.49 per 1,000 |
| Run start | $0.005 per run |

The same price applies on every Apify plan.

A username that cannot be a Snapchat handle is rejected before any lookup and costs nothing. Duplicates are removed before lookup, so a list with repeats is charged once per account.

**Optional lookups are only made where they can return something.** An account with no public profile cannot have a Story, Highlights or Spotlight posts, so those lookups are skipped for it and never charged. On a list of unverified handles that is the difference between paying once and paying four times.

#### Worked examples

Totals are rounded to the nearest cent.

**Profiles only — 500 accounts**
500 × $0.00179 + $0.005 = **$0.90**

**Daily creator watch — 100 accounts with Stories**
100 × $0.00179 + 100 × $0.00249 + $0.005 = **≈$0.43**

**Full audit — 250 accounts, everything switched on**
250 × ($0.00179 + $0.00249 + $0.00249 + $0.00149) + $0.005 = **$2.07**

Set **Maximum cost per run** in the run options to cap spend. The Actor stops cleanly at that ceiling and returns everything it charged for.

***

### Good to know

**Many Snapchat accounts publish no public profile.** A personal account without one resolves, but carries no name, no subscriber count and no content — that is Snapchat's design, not a gap in the data. Those records come back marked `no_public_profile` so you can filter them in one step, and the optional lookups are skipped for them rather than charged.

**Stories expire after 24 hours.** `hasActiveStory` is a snapshot of the moment you asked. An account with no Story running is reported as `false`, and the same account may have several snaps an hour later. This is the part of Snapchat you cannot go back for, which is why a daily run is worth more here than on most platforms.

**Snapchat returns the first page only.** Roughly two dozen Spotlight posts per account, and at most 16 Lenses. There is no way to request more — those are Snapchat's own public page limits.

**You supply the usernames.** There is no keyword, hashtag or category search — this Actor reads accounts you name.

***

### Tips

- **Start with profiles only.** One cheap pass tells you which accounts in your list actually have public profiles, and you can then run the richer options over just those.
- **Run Stories daily, Highlights once.** Stories are gone within a day; Highlights sit on the profile and rarely change, so there is little point re-pulling them often.
- **Use related accounts to grow a list.** Each account names the accounts Snapchat shows beside it, which turns one good creator into several more to check.
- **Lenses show where the budget went.** A brand's Lens history is a public record of its AR campaigns, with preview video for each.
- **Sort by saves, not likes.** On Spotlight, saves and shares separate content people actually wanted to keep from content they merely watched.

***

### Support

Report a problem through the **Issues** tab on this Actor's page. Issues are reviewed regularly.

When reporting, please include the run ID, the input you used, and what you expected.

For volume enquiries, custom requirements, or anything not specific to a single run, email **socialhtz@gmail.com**.

# Changelog

This Actor's version history is a separate document: https://apify.com/socialhz/snapchat-scraper/changelog.md

# Actor input Schema

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

The accounts to look up, one per line. A bare username works best, but an @handle or a full snapchat.com/add/... link is accepted and cleaned up for you. Anything that is not a usable username is skipped and costs you nothing. Up to 500 per run.

## `includeStory` (type: `boolean`):

Adds the account's Story as it stands right now — every snap with its media URL, preview image and timestamp. Stories expire after 24 hours, so this is the part you cannot go back for. Charged per account checked, whether or not a Story is running.

## `includeHighlights` (type: `boolean`):

Adds the account's saved Highlights — titled collections of past snaps that stay on the profile. Large accounts can carry a dozen or more, each holding several snaps, so this returns a lot per account. Charged per account.

## `includeSpotlightDetails` (type: `boolean`):

Spotlight posts, with view, like, share and save counts, are always included in the profile price. Switch this on only if you also need each video's duration and pixel dimensions, which come from a second lookup and are charged separately.

## Actor input object example

```json
{
  "usernames": [
    "djkhaled305",
    "kyliejenner"
  ],
  "includeStory": true,
  "includeHighlights": false,
  "includeSpotlightDetails": false
}
```

# Actor output Schema

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

One record per username — profile, Spotlight posts, Lenses, and the Story and Highlights where requested.

# 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": [
        "djkhaled305",
        "kyliejenner"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialhz/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": [
        "djkhaled305",
        "kyliejenner",
    ] }

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

```

## MCP server setup

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