# Snapchat Scraper | Profiles | Stories | Spotlight | Lenses (`ahmed_jasarevic/snapchat-scraper`) Actor

Public Snapchat data without login: profiles with subscriber counts, stories, highlights, Spotlight videos, lenses, Explore and Discover feeds, comments and transcripts.

- **URL**: https://apify.com/ahmed_jasarevic/snapchat-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions, Single-tenant, Server interface
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.35 / 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/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 — Public Profiles, Stories, Spotlight, Lenses & Discover Data

Extract **public Snapchat data without login**: profiles with subscriber counts, stories, highlights, Spotlight videos (with view/share/comment counts), Lenses, Explore/hashtag feeds, Places, Discover stories, comments and transcripts. No account, no cookies, no API keys — just public Snapchat pages and feeds returned as clean structured rows.

### Main Use Cases

- **Snapchat influencer discovery** — profiles, bio contact info (emails, phones, handles, websites), subscriber counts and verification status.
- **Spotlight trend research** — videos, captions, hashtags, engagement counts and comments by search query or hashtag.
- **Lens analytics** — official and community lenses with creator, unlock URL and interaction data.
- **Story & highlight monitoring** — capture story timeline, media URLs, timestamps and auto-generated transcripts.
- **Discover & Explore research** — publisher stories, episodes, places and topic feeds per country/locale.

### How It Works

Snapchat's public web pages (profiles, Spotlight, Lenses, Explore) embed their full state in `__NEXT_DATA__` JSON. The Actor reads that JSON directly, pages the anonymous **DiscoverFeed GraphQL API** for the Discover tab, and uses the **getreplies protobuf API** for public Spotlight comments. No login, no cookies, no API keys — the same data anyone can see in a browser, delivered as structured rows.

### Scrape Public Snapchat Data — No Official API Needed

Snapchat's official Public Profile API requires special OAuth allowlisting (a manual approval process) and exposes only a read-only subset of profile data. This Actor needs none of that: it reads the public web pages and feeds directly, so profiles, stories, highlights, Spotlight clips, lenses, hashtag/Explore feeds, Places, Discover stories, episodes and topics all come from one tool. Free Apify users can run it with their monthly free credit — no per-result pricing is applied today.

### Input

| Field | Type | Required | Default | Notes |
|-------|------|----------|---------|-------|
| `targets` | array | Yes | — | Mix any: profile URLs (`snapchat.com/add/nasa`), Spotlight URLs, Lens URLs, Explore/hashtag URLs (`snapchat.com/explore/soccer`), bare usernames (`nasa`) or `#hashtags` — auto-classified |
| `maxItemsPerUser` | integer | No | `600` | Cap on story/highlight/spotlight/lens rows per profile (profile row always kept) |
| `maxRowsPerSearchQuery` | integer | No | `200` | Cap per explore/hashtag query (profiles, spotlights, lenses, places, episodes, topics) |
| `resultTypes` | array | No | `["profile","story","highlight","spotlight","lens","explore"]` | Row types to emit per target; `discover` = global feed, off by default |
| `includeSpotlightComments` | boolean | No | `false` | Fetch full paginated public comments per Spotlight video |
| `maxCommentsPerSpotlight` | integer | No | `0` | 0 = all pages (up to ~50); set a number to cap |
| `includeRelated` | boolean | No | `true` | Emit related items embedded on Spotlight/Lens pages (multiplies rows) |
| `maxConcurrency` | integer | No | `5` | Parallel URLs |
| `maxRetries` | integer | No | `3` | Retries on network errors / 429 / 5xx |
| `includeTranscripts` | boolean | No | `false` | Attach auto-generated VTT transcripts for snaps that have them |
| `discoverCountry` | string | No | `US` | ISO country code for Discover ranking (e.g. US, BA, GB) |
| `discoverLocale` | string | No | `en-US` | Locale for the Discover feed |
| `maxDiscoverStories` | integer | No | `100` | Max Discover stories to fetch (rows expand to one per snap) |
| `maxDiscoverPages` | integer | No | `10` | Max GraphQL DiscoverFeed pages (~50 stories per page) |
| `proxy` | proxy | No | — | Datacenter works for light runs; switch to residential if blocked |

Example input:

```json
{
  "targets": ["nasa", "https://www.snapchat.com/spotlight/W7_Dh9eYdQw", "#soccer"],
  "maxItemsPerUser": 400,
  "includeSpotlightComments": true,
  "maxCommentsPerSpotlight": 50
}
```

### Output

One row per item, discriminated by `type`:

| `type` | Key fields |
|--------|-----------|
| `profile` | `username`, `displayName`, `bio`, `subscriberCount`, `verified`, `emails`, `phones`, `handles`, `websiteUrl`, `url` |
| `story` | `storyId`, `mediaUrl`, `capturedAt`, `transcript`, `creator` |
| `highlight` | `storyId`, `mediaUrl`, `capturedAt`, `transcript`, `creator` |
| `spotlight` | `snapId`, `mediaUrl`, `caption`, `hashtags`, `viewCount`, `shareCount`, `commentCount`, `boostCount`, `capturedAt`, `creator` |
| `lens` | `lensId`, `unlockUrl`, `isOfficial`, `creator`, `name`, `iconUrl` |
| `discover` | `placement`, `title`, `mediaUrl`, `creator`, `capturedAt` |
| `place` / `episode` / `topic` | `name`, `lat`, `lon`, `address`, `url` |

Example profile row:

```json
{
  "type": "profile",
  "source": "https://www.snapchat.com/add/nasa",
  "username": "nasa",
  "displayName": "NASA",
  "bio": "Explore the universe...",
  "subscriberCount": 1342000,
  "verified": true,
  "emails": [],
  "phones": [],
  "handles": ["nasa"],
  "websiteUrl": "https://www.nasa.gov",
  "url": "https://www.snapchat.com/add/nasa"
}
```

### Snapchat Spotlight & Hashtag Research at Scale

Use `targets` with `#hashtags` or Explore URLs and raise `maxRowsPerSearchQuery` to collect dozens of Spotlight videos per query with full engagement data (`viewCount`, `shareCount`, `commentCount`, `boostCount`). Add `includeSpotlightComments` to capture the public comment threads. Subscribe the actor to an Apify Schedule for regular trend tracking.

### Integrations & Automation

- **Apify API** — run anywhere, pull JSON/CSV/Excel results programmatically.
- **Standby HTTP API** — turn any input into a one-call HTTP request (`/v2/acts/ahmed_jasarevic~snapchat-scraper/run-sync-get-dataset-items`).
- **Scheduling** — daily/weekly influencer or trend monitoring (recurring usage also improves Apify Store recommendation signals).
- **Webhooks** — post results to your own backend as runs finish.

### Related Actors

- [Snapchat Scraper (tri_angle)](https://apify.com/tri_angle/snapchat-scraper) — profile-focused Snapchat scraper ($0.002/profile)
- [Snapchat Spotlight Scraper (tri_angle)](https://apify.com/tri_angle/snapchat-spotlight-scraper) — Spotlight-only ($0.0015/row)
- [Snapchat Profile Scraper (easyapi)](https://apify.com/easyapi/snapchat-profile-scraper) — profile + video downloader
- [Snapchat Username Checker](https://apify.com/easyapi/snapchat-username-checker) — bulk username availability check
- [Snapchat Hashtag Scraper (crawlerbros)](https://apify.com/crawlerbros/snapchat-hashtag-scraper) — hashtag-focused alternative

### FAQ

#### Why use this Actor instead of the official Snapchat Public Profile API?

Snapchat's official Public Profile API requires OAuth allowlisting via a manual approval process and only exposes read-only profile data. This Actor reads public web pages and feeds directly — no approval, no login, and it covers far more than profiles: stories, highlights, Spotlight, lenses, Explore, Places, Discover and comments.

#### Is this Actor scraping private or personal data?

No. It only reads **publicly visible** Snapchat content: public profiles, public Spotlight clips, public lenses, public hashtag/Explore feeds and Discover stories. No account-based data, no friend lists, no private snaps or messages.

#### What are alternatives to this Actor?

Other Apify actors: tri_angle's Snapchat Scraper ($0.002/profile) and Spotlight Scraper ($0.0015/row), easyapi's Profile Scraper (start fee $0.09), crawlerbros' Hashtag Scraper ($0.00083/row). This Actor is the all-in-one option — profiles, stories, highlights, Spotlights, lenses, Explore, Places, Discover, comments and transcripts in one run, with no per-row pricing today.

#### How can I find Snapchat influencers in a niche?

Use `#hashtag` or Explore URLs for your niche, then widen the Spotlight/profile rows and filter by `subscriberCount`, `verified` or engagement counts. Profile rows include emails/phones/website URLs when the creator lists them publicly.

#### Does the Actor download stories or videos?

It returns `mediaUrl` links and metadata (capturedAt, transcripts) for every snap/story/Spotlight — the media itself can then be downloaded from those URLs.

### For AI Agents & LLM Apps

**Purpose:** returns public Snapchat rows discriminated by `type` — profiles (subscriber counts, bio contact info), stories/highlights (media URLs, timestamps, transcripts), Spotlight (captions, hashtags, view/share/comment/boost counts), lenses, Discover stories, places and topics.

Minimal input:

```json
{ "targets": ["nasa"] }
```

Trend-research variant:

```json
{ "targets": ["#soccer"], "includeSpotlightComments": true, "maxRowsPerSearchQuery": 500 }
```

Output fields (row-level): `type, source, url, username, displayName, bio, subscriberCount, verified, emails, phones, handles, websiteUrl, storyId, snapId, mediaUrl, caption, hashtags, viewCount, shareCount, commentCount, boostCount, transcript, capturedAt, creator, lensId, unlockUrl, isOfficial, name, lat, lon, address`.

Behaviors an agent should know:

- `targets` accepts any mix of profile URLs, Spotlight/Lens/Explore URLs, bare usernames and `#hashtags` — entries are auto-classified, no need to pre-sort.
- `resultTypes` controls which row types each target emits; `discover` is the only type that needs no URL (global feed, uses `discoverCountry`/`discoverLocale`).
- `includeSpotlightComments` adds one protobuf request per Spotlight video — enable deliberately.
- `includeTranscripts` adds a VTT fetch only for snaps that have transcripts.
- Billing: compute-based today, no per-result charge.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Snapchat. It reads only publicly available Snapchat pages and feeds — it does not log in, bypass authentication, or access private accounts, stories or messages. Users are responsible for complying with Snapchat's Terms of Service and applicable data-protection law (e.g. GDPR/CCPA for personal data such as emails or phone numbers in public bios), and should not use extracted contact data for unsolicited commercial outreach in violation of applicable law.

### SEO Keywords

snapchat scraper, snapchat data extraction, snapchat public profile api, snapchat influencer data, snapchat subscriber count, snapchat spotlight scraper, snapchat lens data, snapchat story download, snapchat highlights scraper, snapchat hashtag scraper, snapchat explore feed, snapchat discover feed, snapchat comments scraper, snapchat transcripts, snapchat business profiles, snapchat api no login, snapchat username checker, snapchat content research, snapchat engagement data, snapchat trend research

# Actor input Schema

## `targets` (type: `array`):

One list for everything: profile URLs, Spotlight URLs, Lens URLs, explore/hashtag URLs, bare usernames, or #hashtags. Each entry is auto-classified.

## `maxItemsPerUser` (type: `integer`):

Cap on story/highlight/spotlight/lens rows kept per profile (includes paginated creator lenses + creator spotlights). Profile row is always kept. 0 is not allowed — use a high value for full crawl.

## `maxExploreRows` (type: `integer`):

Cap on rows kept per explore/hashtag query (profiles, spotlights, lenses, places, episodes, topics).

## `resultTypes` (type: `array`):

Row types to emit from each target. Discover is the global feed (no URL needed) and is off by default so runs stay URL-focused.

## `includeSpotlightComments` (type: `boolean`):

Fetch full paginated public comments for each Spotlight video via the getreplies API.

## `maxCommentsPerSpotlight` (type: `integer`):

Stop paginating comments after this many per video. 0 fetches all available pages (up to 50).

## `includeRelated` (type: `boolean`):

When scraping Spotlight/Lens URLs, also emit related items embedded on the page (multiplies rows per URL).

## `maxConcurrency` (type: `integer`):

How many URLs to scrape in parallel.

## `maxRetries` (type: `integer`):

Retries per HTTP request on network errors / 429 / 5xx before failing that URL.

## `includeTranscripts` (type: `boolean`):

Fetch and attach auto-generated VTT transcripts for snaps that have them.

## `discoverCountry` (type: `string`):

ISO country code for Discover ranking (e.g. US, BA, GB). Only used when resultTypes includes discover.

## `discoverLocale` (type: `string`):

Locale for the Discover feed (e.g. en-US, bs-BA).

## `maxDiscoverItems` (type: `integer`):

Max Discover stories to fetch (rows expand to one per snap).

## `maxDiscoverPages` (type: `integer`):

Max GraphQL DiscoverFeed pages (~50 stories per page).

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

Proxy used for scraping. Datacenter works for light runs; switch to residential if Snapchat blocks your IP.

## Actor input object example

```json
{
  "targets": [
    "https://www.snapchat.com/add/nasa",
    "#cat"
  ],
  "maxItemsPerUser": 600,
  "maxExploreRows": 200,
  "resultTypes": [
    "profile",
    "story",
    "highlight",
    "spotlight",
    "lens",
    "place",
    "episode",
    "topic"
  ],
  "includeSpotlightComments": false,
  "maxCommentsPerSpotlight": 0,
  "includeRelated": true,
  "maxConcurrency": 5,
  "maxRetries": 3,
  "includeTranscripts": false,
  "discoverCountry": "US",
  "discoverLocale": "en-US",
  "maxDiscoverItems": 100,
  "maxDiscoverPages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "DATACENTER"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "targets": [
        "https://www.snapchat.com/add/nasa",
        "#cat"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "DATACENTER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "targets": [
        "https://www.snapchat.com/add/nasa",
        "#cat",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["DATACENTER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "targets": [
    "https://www.snapchat.com/add/nasa",
    "#cat"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "DATACENTER"
    ]
  }
}' |
apify call ahmed_jasarevic/snapchat-scraper --silent --output-dataset

```

## MCP server setup

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