# Snapchat Scraper — Profiles, Spotlight, Stories & Lenses (`logiover/snapchat-scraper`) Actor

Scrape public Snapchat profiles in bulk: subscribers, bio, website, category, verified badge, stories, highlights, Spotlight videos with views, shares, comments and engagement rate, and AR lenses. Find creators by keyword or related accounts. No login. Not affiliated with Snap Inc.

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

## Pricing

from $1.80 / 1,000 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/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

**Snapchat Scraper** is a fast, no-login **Snapchat profile scraper** and **Snapchat API alternative** for influencer marketing, agencies, brand monitoring and lead generation. Give it usernames or links — or just a keyword such as *makeup* or *car reviews* — and it returns every public Snapchat profile it finds: **Snapchat subscriber count**, display name, bio, website, address, category, verified badge, account creation date, the live **story**, saved **highlights**, **Spotlight videos with views, shares, comments and boosts**, engagement rate, and the **AR lenses** the account published. Export to **CSV, Excel, JSON** or straight into Google Sheets, Make, Zapier, n8n or your own code.

**Scrape Snapchat stories, Spotlight and profiles without login**, without cookies and without the official Snap Kit / Marketing API. One request per profile on ordinary datacenter proxies keeps it quick and cheap: measured on 2026-10-13, **1,000 profiles in 86 seconds** on default settings (21 s with 4 GB memory) and **10,000 profiles in one run in 4 min 20 s** discovered from 50 keywords. Use it to find and vet Snapchat creators, benchmark competitors, monitor brand mentions in Spotlight, or map the Snapchat lens/AR market.

> Measured on 2026-10-13 on the Apify platform · no login, no cookies, no browser · datacenter proxy · exact row limits · every run writes a SUMMARY with what was found, missing or skipped.

***

### What does Snapchat Scraper extract?

| Area | Data you get (per profile row) |
|---|---|
| **Profile** | username, display name, profile URL, public/personal type, **verified badge**, category & subcategory (e.g. *People → Comedian*, *Product Brand → Health Beauty*), bio, **website**, **address/location**, profile picture, hero image, Snapcode, user ID, public-profile ID, public-profile creation date, last update |
| **Audience** | **subscriber count** (exact from Snapchat search where possible, also for many profiles that hide it), "count hidden" flag, related accounts |
| **Spotlight** | every Spotlight video shown on the profile with **views, shares, comments, boosts, recommends**, engagement rate, caption, hashtags, sound, duration, resolution, **MP4 video URL**, thumbnail, **transcript (VTT) URL**, Snapchat's own AI title/description/keywords — plus totals, average, median and best views and the profile's **Spotlight engagement rate** |
| **Comments** | top comments under each Spotlight video: text, author name, likes, replies, date (optional) |
| **Story** | the public story live right now: each snap's media type (video/image), media URL, thumbnail, timestamp |
| **Highlights** | saved story highlights: title, link, thumbnail, number of snaps, date range (optionally every snap's media URL) |
| **Lenses** | AR lenses the account published: name, lens link, unlock link, preview image and video, icon, last update |
| **Discovery** | how each profile was found (input, keyword, topic, related account), from which keyword/parent, and at what depth |

Optional: **one extra row per Spotlight video** (`rowType = spotlight`) with the creator's username and subscriber count on every row — the easiest format for spreadsheets and content analysis.

***

### Use cases

#### Influencer discovery & vetting

Search a niche (*fitness*, *skincare*, *street food*, *car reviews*) and get every creator Snapchat suggests, with exact subscriber counts, then check real performance before you pay anyone: **average and median Spotlight views**, best video, engagement rate, how recently they posted (`latestActivityAt`), whether they are verified, and the hashtags they use. Filter with **Minimum subscribers** so only creators above your threshold are saved.

#### Agency reporting & competitor benchmarking

Track a fixed list of client and competitor accounts on a schedule. Each run gives subscribers, Spotlight views and engagement per account, so week-over-week growth and content performance drop straight into a Google Sheet or Looker Studio report.

#### Brand monitoring

Follow your brand's own account and the creators Snapchat associates with your brand, product or campaign keywords. Every Spotlight video comes with its caption, hashtags (e.g. `#DunkinPartner`), sound, Snapchat's AI description of what happens in it and the top comments with likes — filter the Spotlight rows by caption or hashtag to see who mentions you and how well those videos perform.

#### Lens / AR market research

Every profile row lists the AR lenses the account published, with preview images and videos and unlock links. Map which brands and creators ship lenses, how often they update them, and what they look like.

#### Lead generation

Public business profiles carry a website, an address and a category. Search *real estate*, *barber*, *restaurant* or *car dealer*, keep the rows with a website, and you have a list of businesses that are active on Snapchat.

***

### How it works

1. **Usernames or links** — `kyliejenner`, `@khaby.lame`, `https://www.snapchat.com/add/nike`, `https://www.snapchat.com/@nike`, `story.snapchat.com/@nike` and Spotlight video links such as `https://www.snapchat.com/spotlight/<id>` (the video's creator is scraped). One profile row each.
2. **Keyword discovery** — each keyword is searched on Snapchat; the actor collects the creators Snapchat suggests to subscribe to (with exact subscriber counts) and the creators of the top Spotlight videos — typically **20–45 accounts per keyword**.
3. **Expansions for volume** (both optional):
   - **Also search related topics** — Snapchat's suggested topics for each keyword (*makeup → makeupartist, makeupaddict …*) and the niche hashtags the creators use in their Spotlight videos become new searches, breadth-first, up to three levels from your keyword. Searches are fetched only while more candidates are needed.
   - **Follow related accounts** — every public profile lists up to 3 similar accounts; the actor follows them breadth-first to the depth you choose.
4. Every profile page is read **once**: the page already holds the story, highlights, Spotlight videos with their stats and comments, and lenses. Rows are de-duplicated (renamed accounts that answer under two usernames are saved once) and saved as soon as they are parsed.
5. Profiles that hide their subscriber count are looked up in Snapchat search when they are verified or list a category (brands, publishers, official creators) — that recovered **79 % of those hidden counts** (134 of 170 in a 1,000-profile test).

Nothing requires a login, a cookie or a browser; the actor reads the same public pages anyone can open on snapchat.com.

***

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `usernames` | array | – | Usernames or links (profile or Spotlight video links). |
| `searchKeywords` | array | – | Keywords, niches, brands or hashtags for creator discovery. |
| `expandTopics` | boolean | `false` | Also search related topics and creators' niche hashtags (up to 3 levels). |
| `expandRelatedAccounts` | boolean | `false` | Follow each profile's related accounts (up to 3 per profile). |
| `maxRelatedDepth` | integer | `2` | Hops to follow from each seed when following related accounts. |
| `maxProfiles` | integer | `1000` | Exact maximum of profile rows. Usernames from your list count too. |
| `minSubscribers` | integer | `0` | Only save profiles with at least this many subscribers. |
| `maxItemsPerSection` | integer | `50` | Cap per list (story snaps, highlights, Spotlight videos, lenses). `0` = counts and statistics only. |
| `includeSpotlight` | boolean | `true` | Spotlight videos with stats, plus per-profile totals and engagement rate. |
| `includeSpotlightComments` | boolean | `false` | Top comments under each Spotlight video. |
| `spotlightRows` | boolean | `false` | Also save each Spotlight video as its own row (`rowType = spotlight`). |
| `includeStory` | boolean | `true` | Snaps of the public story live now. |
| `includeHighlights` | boolean | `true` | Saved story highlights. |
| `includeHighlightSnaps` | boolean | `false` | Every snap inside each highlight (large). |
| `includeLenses` | boolean | `true` | AR lenses published by the account. |
| `lookupHiddenSubscriberCounts` | boolean | `true` | Recover hidden subscriber counts of brands/verified creators via Snapchat search. |
| `concurrency` | integer | auto | Pages fetched in parallel; empty = matched to memory (30 on 1 GB, 50 on 2 GB, 80 on 4 GB). |
| `proxyConfiguration` | object | Apify datacenter | Datacenter is enough; residential is not needed. |

#### Example: a list of accounts

```json
{
  "usernames": ["kyliejenner", "https://www.snapchat.com/add/nike", "@khaby.lame"],
  "maxProfiles": 100
}
```

#### Example: find fitness creators with 10,000+ subscribers

```json
{
  "searchKeywords": ["fitness", "gym", "home workout", "#fitnesscoach"],
  "expandTopics": true,
  "minSubscribers": 10000,
  "maxProfiles": 2000
}
```

#### Example: map a niche from a few seed accounts

```json
{
  "usernames": ["kyliejenner", "khaby.lame"],
  "expandRelatedAccounts": true,
  "maxRelatedDepth": 4,
  "expandTopics": true,
  "maxProfiles": 5000
}
```

#### Example: Spotlight videos as rows, with comments

```json
{
  "usernames": ["nike", "netflix"],
  "spotlightRows": true,
  "includeSpotlightComments": true,
  "maxItemsPerSection": 100
}
```

#### Example: lean rows for a big list (counts and statistics only)

```json
{
  "usernames": ["user1", "user2", "user3"],
  "maxItemsPerSection": 0,
  "includeStory": false,
  "includeHighlights": false,
  "includeLenses": false,
  "maxProfiles": 50000
}
```

***

### Output

Every row has `rowType`. Profile rows (`rowType = profile`) carry the profile, audience, story, highlight, Spotlight and lens data; Spotlight rows (`rowType = spotlight`, only with `spotlightRows`) carry one video each. The Dataset tab has three ready views: **Profiles**, **Contact & bio**, and **Spotlight videos (rows)**.

#### Profile row fields

| Field | Description |
|---|---|
| `username` | Snapchat username (lower-case) |
| `displayName` | Name shown on the profile |
| `profileUrl` | `https://www.snapchat.com/@<username>` |
| `profileType` | `public` (creator/brand/business, full data) or `personal` (regular account: name and Snapcode only) |
| `isVerified` | Verified / official badge shown |
| `category`, `subcategory` | Category the account chose, e.g. *People / Comedian*, *Product Brand / Publisher* |
| `subscriberCount` | Subscribers — exact when it comes from Snapchat search, otherwise as rounded on the profile (e.g. 28,873,000); `null` when hidden and not recovered |
| `subscriberCountHidden` | The profile page does not show the count |
| `bio` | Profile description (line breaks kept) |
| `websiteUrl` | Website link, made absolute |
| `address` | Address or location as written by the account |
| `profilePictureUrl`, `heroImageUrl`, `snapcodeUrl` | Images |
| `userId`, `businessProfileId` | Snapchat IDs |
| `accountCreatedAt` | When the public profile was created |
| `lastUpdatedAt` | Last public update Snapchat recorded |
| `hasHighlights`, `hasSpotlight` | Snapchat's own flags |
| `relatedAccounts` | Up to 3 related usernames |
| `storySnapCount`, `latestStoryAt`, `storySnaps[]` | Live story: `snapId`, `mediaType`, `mediaUrl`, `thumbnailUrl`, `postedAt` |
| `highlightCount`, `highlightSnapCount`, `highlights[]` | `highlightId`, `title`, `url`, `thumbnailUrl`, `snapCount`, `firstSnapAt`, `lastSnapAt` (+ `snaps[]`) |
| `spotlightCount` | Spotlight videos shown on the profile |
| `spotlightViewsTotal`, `spotlightViewsAvg`, `spotlightViewsMedian`, `spotlightViewsMax` | View statistics |
| `spotlightSharesTotal`, `spotlightCommentsTotal`, `spotlightBoostsTotal` | Engagement totals |
| `spotlightEngagementRate` | (shares + comments + boosts) ÷ views × 100 |
| `latestSpotlightAt`, `topHashtags` | Newest upload; most-used hashtags |
| `spotlights[]` | `snapId`, `url`, `caption`, `uploadedAt`, `durationSec`, `width`, `height`, `viewCount`, `shareCount`, `commentCount`, `boostCount`, `recommendCount`, `engagementRate`, `hashtags`, `soundTitle`, `soundSubtitle`, `thumbnailUrl`, `videoUrl`, `transcriptUrl`, `aiTitle`, `aiDescription`, `aiKeywords` (+ `topComments[]`: `text`, `authorName`, `likeCount`, `replyCount`, `postedAt`) |
| `lensCount`, `lenses[]` | `name`, `creatorName`, `lensUrl`, `unlockUrl`, `previewImageUrl`, `previewVideoUrl`, `iconUrl`, `isOfficialSnapLens`, `updatedAt` |
| `latestActivityAt` | Newest of last update, story snap and Spotlight upload |
| `foundVia`, `foundFrom`, `discoveryDepth` | `input` / `keyword` / `topic` / `related` / `spotlightUrl`, the keyword or parent, and hops |
| `scrapedAt` | Collection time |

#### Spotlight row fields (`spotlightRows: true`)

`username`, `displayName`, `profileUrl`, `subscriberCount` (creator), `spotlightUrl`, `snapId`, `caption`, `uploadedAt`, `durationSec`, `width`, `height`, `viewCount`, `shareCount`, `commentCount`, `boostCount`, `recommendCount`, `engagementRate`, `hashtags`, `soundTitle`, `soundSubtitle`, `thumbnailUrl`, `videoUrl`, `transcriptUrl`, `aiTitle`, `aiDescription`, `aiKeywords`, `topComments` (with comments on), `foundVia`, `scrapedAt`.

#### Real output example

From a test run on 2026-10-13 (lists shortened to one item):

```json
{
  "rowType": "profile",
  "username": "nike",
  "displayName": "Nike",
  "profileUrl": "https://www.snapchat.com/@nike",
  "profileType": "public",
  "isVerified": true,
  "category": null,
  "subcategory": null,
  "subscriberCount": 365546,
  "subscriberCountHidden": true,
  "bio": "Just Do It.",
  "websiteUrl": "https://www.nike.com",
  "address": "Beaverton, Oregon, United States",
  "profilePictureUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvQ0xpSzhleEdEUVA3VDJJek1qOXRmP2JvPUVnMGFBQm9BTWdFRVNBSlFHV0FCJnVjPTI1._RS0,90_FMpng",
  "heroImageUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvZ1N0d0NaZnlkZzFsSFlRSmIxa044P2JvPUVna3lBUVJJQWxBWllBRSUzRCZ1Yz0yNQ._RS0,1080_FMjpeg",
  "snapcodeUrl": "https://app.snapchat.com/web/deeplink/snapcode?username=nike&type=SVG&bitmoji=enable",
  "userId": "e64c8223-fed3-4cef-a5ec-abcf63ba165f",
  "businessProfileId": "9f16fbee-3872-45e5-b991-e18469f6e136",
  "accountCreatedAt": "2021-05-03T16:46:11.842Z",
  "lastUpdatedAt": "2026-10-08T14:31:34.462Z",
  "hasHighlights": true,
  "hasSpotlight": true,
  "relatedAccounts": [],
  "storySnapCount": 0,
  "latestStoryAt": null,
  "storySnaps": [],
  "highlightCount": 1,
  "highlightSnapCount": 3,
  "highlights": [
    {
      "highlightId": "e9eea302-5136-47b6-9b43-3d01a9fded3b",
      "title": "A’spectacle. The City of Lights shines",
      "url": "https://www.snapchat.com/@nike/highlight/e9eea302-5136-47b6-9b43-3d01a9fded3b",
      "thumbnailUrl": "https://cf-st.sc-cdn.net/d/lbiLi1kLmkWA5JA90hf94.410?mo=GjUaFDIBBDoBfUIGCPD7ps0GSAJQXmABUMUBWhBEZkxhcmdlVGh1bWJuYWlsogEHCJoDIgISAA%3D%3D&uc=94",
      "snapCount": 3,
      "firstSnapAt": "2026-03-05T17:30:54.000Z",
      "lastSnapAt": "2026-03-05T17:30:54.000Z"
    }
  ],
  "spotlightCount": 16,
  "spotlightViewsTotal": 249867,
  "spotlightViewsAvg": 15617,
  "spotlightViewsMedian": 9221,
  "spotlightViewsMax": 57463,
  "spotlightSharesTotal": 141,
  "spotlightCommentsTotal": 164,
  "spotlightBoostsTotal": 4715,
  "spotlightEngagementRate": 2.01,
  "latestSpotlightAt": "2026-10-07T13:56:50.166Z",
  "topHashtags": [
    "#mlb",
    "#nikesb",
    "#cphopen"
  ],
  "spotlights": [
    {
      "snapId": "W7_EDlXWTBiXAEEniNoMPwAAYaWpxYWxxY3pxAaEWrOarAaEWpxF2AAAAAQ",
      "url": "https://www.snapchat.com/@nike/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYaWpxYWxxY3pxAaEWrOarAaEWpxF2AAAAAQ",
      "caption": "*Just someone who's made a hobby out of shooting from long range.",
      "uploadedAt": "2026-10-07T13:56:50.166Z",
      "durationSec": 14.9,
      "width": 540,
      "height": 960,
      "viewCount": 18579,
      "shareCount": 0,
      "commentCount": 1,
      "boostCount": 57,
      "recommendCount": 1,
      "engagementRate": 0.31,
      "hashtags": [],
      "soundTitle": "Original Sound",
      "soundSubtitle": "nike",
      "thumbnailUrl": "https://cf-st.sc-cdn.net/d/I8Y3r9nfXyp7vN1NP7ekE.256.IRZXSOY?mo=GkYaCTIBBEgCUC5gAVCgAVoQRGZMYXJnZVRodW1ibmFpbKIBEAiAAiILEgAqB0lSWlhTT1miARAImgoiCxIAKgdJUlpYU09Z&uc=46",
      "videoUrl": "https://cf-st.sc-cdn.net/d/I8Y3r9nfXyp7vN1NP7ekE.27.IRZXSOY?mo=Gl0aCTIBBEgCUC5gAVCiAVoQU3BvdGxpZ2h0U2hhcmluZ6IBNggbEiUKIwj9_jkgATCcBDjAB0ABSg4KCTcVFBAUGyk3ERD0A1CCdGgCIgsSACoHSVJaWFNPWZADgnQ%3D&uc=46",
      "transcriptUrl": "https://bolt-gcdn.sc-cdn.net/3/w6DqUfVlP60Iulxc2UyWh.vtt?bo=EgkyAX1IAlAuYAE%3D&uc=46",
      "aiTitle": null,
      "aiDescription": null,
      "aiKeywords": [
        "girl",
        "athlete",
        "sports",
        "basketball",
        "advertisement"
      ]
    }
  ],
  "lensCount": 16,
  "lenses": [
    {
      "name": "Nike Running",
      "creatorName": "Nike",
      "lensUrl": "https://www.snapchat.com/lens/9f47c393fab84377a16920c5e979f851",
      "unlockUrl": "https://www.snapchat.com/unlock/?type=SNAPCODE&uuid=9f47c393fab84377a16920c5e979f851&metadata=01",
      "previewImageUrl": "https://lens-preview-storage.storage.googleapis.com/previewmedia/preview_thumbnail/79c2fba5-7617-4130-95ef-0de9e036cfff.webp",
      "previewVideoUrl": "https://community-lens.storage.googleapis.com/preview-media/final/79c2fba5-7617-4130-95ef-0de9e036cfff.mp4",
      "iconUrl": "https://bolt-gcdn.sc-cdn.net/3/ObIK1jBlfb5IX3nHv9XO4?bo=EhgaABoAMgF9OgEEQgYI-_XDlgZIAlASYAE%3D&uc=18",
      "isOfficialSnapLens": false,
      "updatedAt": "2024-02-14T15:01:44.000Z"
    }
  ],
  "latestActivityAt": "2026-10-08T14:31:34.462Z",
  "foundVia": "input",
  "foundFrom": "nike",
  "discoveryDepth": 0,
  "scrapedAt": "2026-10-13T10:38:13.893Z"
}
```

#### Fill rates (measured)

| Profile rows (1,000-profile keyword run) | Filled |
|---|---|
| username, display name, URL, type, verified flag, picture, Snapcode, IDs, creation & update dates, all counts, latest activity, discovery fields | 100 % |
| Spotlight statistics (views total/avg/median/max, shares, comments, boosts, engagement rate) and the Spotlight list | 87 % |
| subscriberCount | 70 % (100 % of the creators that show it; brands/verified accounts that hide it are mostly recovered) |
| bio | 68 % |
| highlights | 63 % |
| heroImageUrl | 62 % |
| address | 46 % |
| topHashtags | 44 % |
| category / subcategory | 43 % |
| relatedAccounts · live story snaps | 35 % · 35 % |
| websiteUrl | 8 % |
| lenses | 4 % (brands and AR creators) |

| Spotlight rows (mixed test) | Filled |
|---|---|
| views, shares, comments, boosts, recommends, engagement rate, upload date, duration, video & thumbnail URL, creator fields | 100 % |
| topComments (when on) | 100 % |
| soundTitle, aiKeywords | 91 % |
| caption, aiTitle, aiDescription | 83 % |
| width / height | 74 % |
| transcriptUrl | 48 % |
| hashtags | 39 % |

Some fields are naturally sparse: most creators do not set a website or address, only some publish lenses, and a story exists only while it is live (24 h). A missing value is `null` (or an empty list) — never a made-up zero.

***

### How much data can I get?

| Source | Measured on 2026-10-13 |
|---|---|
| Usernames / links | Unlimited list size; one row per account that has a public page |
| One keyword | 20–45 (median 35 across 50 keywords) creators |
| Keyword + related topics | ≈200 unique profiles per keyword: 50 keywords gave 10,000 profiles (with related accounts), and thousands of searches were still queued |
| Related accounts | up to 3 per public profile, followed to the depth you set |
| One deep run | **10,000 unique profiles** from 50 keywords with topics + related accounts in 4 min 20 s (4 GB memory) — with thousands of candidates and searches still queued |
| Per profile | the story live now, all highlights, the Spotlight videos and lenses Snapchat shows on the profile page (typically up to ~25–30 Spotlight videos and up to 16 lenses per page) |

Snapchat shows a fixed window of Spotlight videos and lenses on a public profile; older Spotlight videos than that window are not on the public page, so they are not in the output. Counts such as `spotlightCount` describe that window.

#### Big runs and "Maximum cost per run"

Every run has a **Maximum cost per run** (Apify sets a default one even if you don't), and each saved row is one paid result. For big runs set it to at least **results × price per result** — for example, 10,000 profiles at $2.50 per 1,000 need a maximum cost of at least $25. If the limit covers fewer results than you asked for, the actor works out how many it covers, says so in the log at the start, saves exactly that many and **stops cleanly with a successful run** and a status message such as *"Saved 4,000 results — this run's maximum cost ($10) covers 4,000 results at the current price. Raise "Maximum cost per run" to get more."* It never fails or gets aborted because of the limit, and you never pay for rows that were not saved.

### Speed and cost

| Run | Memory | Rows | Time | Memory peak |
|---|---|---|---|---|
| Prefill example: 3 usernames + keyword "makeup", 20 profiles | 1 GB (default) | 20 | 13.8 s | 71 MB |
| 20 keywords + related topics + related accounts → 1,000 profiles | 1 GB (default) | 1,000 | 86 s | 137 MB |
| Same input | 2 GB | 1,000 | 59 s | 301 MB |
| Same input | 4 GB | 1,000 | 21 s | 313 MB |
| 50 keywords + related topics + related accounts → 10,000 profiles | 4 GB | 10,000 | 4 min 20 s | 324 MB |
| Same input | 2 GB | 10,000 | 8 min 38 s | 246 MB |
| 9 mixed inputs (links, @handle, a personal account, a missing and an invalid one, a Spotlight link) with Spotlight rows + comments | 2 GB | 6 profiles + 23 Spotlight rows | 12.2 s | 71 MB |
| 3 usernames that do not exist | 2 GB | 0 — run succeeds and lists them | 2.9 s | 91 MB |

Parsing Snapchat's pages is CPU work and Apify gives one CPU core per 4 GB of memory, so **more memory = proportionally faster runs**. The default 1 GB is plenty for everyday runs; for 10,000+ profiles choose 4 GB in the run options — the price per result stays the same. The 10,000-profile runs ended with thousands of candidates and searches still queued, so far bigger runs are possible.

**What you pay:** a fixed price per result — see the **Pricing** tab (on 2026-10-13: $2.50 per 1,000 results on the Free plan, down to $1.80 per 1,000 from the Gold plan up). Compute, storage and proxies are included. Profile rows count as results, and Spotlight rows only if you turn them on. Not-found usernames, filtered profiles and duplicates are never saved, so they cost nothing.

***

### Integrations

#### API (cURL)

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~snapchat-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"usernames":["nike","netflix"],"maxProfiles":10}'
```

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('logiover/snapchat-scraper').call({
    searchKeywords: ['skincare'],
    expandTopics: true,
    minSubscribers: 5000,
    maxProfiles: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((p) => [p.username, p.subscriberCount, p.spotlightViewsAvg]));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("logiover/snapchat-scraper").call(run_input={
    "usernames": ["kyliejenner", "nike"],
    "spotlightRows": True,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["rowType"], row["username"], row.get("viewCount") or row.get("subscriberCount"))
```

#### Make, Zapier, n8n, Google Sheets, webhooks

- **Make / Zapier / n8n**: use the Apify app/node → *Run Actor* with `logiover/snapchat-scraper`, then *Get dataset items*.
- **Google Sheets**: Apify's Google Sheets integration (or Make/Zapier) appends every run's rows to a sheet — ideal for a weekly creator tracker.
- **Schedules & webhooks**: schedule the actor daily or weekly in Apify Console and add a webhook to notify your system when the dataset is ready.
- **Export**: JSON, CSV, Excel, XML, RSS or HTML table from the Dataset tab or the API (`/datasets/<id>/items?format=csv`).

#### AI agents and MCP

The actor works as a tool in Apify's MCP server (`https://mcp.apify.com`), so Claude, ChatGPT, Cursor or any MCP client can call it: *"Find 50 Snapchat skincare creators with more than 20k subscribers and rank them by median Spotlight views."* Small runs return in seconds; keep `maxProfiles` modest for interactive use.

***

### Snapchat Scraper vs. the alternatives

| | Snapchat Scraper | Checking profiles by hand | Official Snap APIs |
|---|---|---|---|
| Access | No login, no cookies | Snapchat app/web | Business account, app review, scopes for your own accounts |
| Other people's public profiles | Yes, in bulk | One at a time | Not for arbitrary accounts |
| Creator discovery by keyword | Yes, with subscriber counts | Manual search | No |
| Spotlight views/shares/comments per video | Yes | Visible one by one | Your own content only |
| Export | JSON, CSV, Excel, API, Sheets | Copy & paste | Custom code |
| Speed | 1,000 profiles in 86 s (21 s on 4 GB) | Minutes per profile | – |

***

### Limits and tips

- **Public data only.** Personal accounts show only their name and Snapcode — they come back as `profileType = personal` rows with those fields.
- **Not-found usernames** (typos, deleted or non-public accounts) are listed in the run's status message and in the `SUMMARY` record; they do not fail the run and are not billed.
- **Hidden subscriber counts** stay `null` for small personal creators who hide them; brands and verified creators are usually recovered.
- **Spotlight window**: the public profile shows the newest ~25–30 Spotlight videos; statistics cover those.
- **Volume**: for thousands of profiles, combine several keywords with *Also search related topics* and/or *Follow related accounts*. Raise `maxProfiles` — the run stops exactly there.
- **Speed**: the default 1 GB does 1,000 profiles in about 1.5 minutes; 4 GB does them in about 20 seconds at the same price per result. Leave `concurrency` empty — it is matched to the memory.
- **Lean rows**: set `maxItemsPerSection` to `0` to keep only counts and statistics (fast exports, small files).
- **Scheduling**: weekly runs on the same list give you growth curves for subscribers and Spotlight views.

***

### FAQ

#### Does Snapchat Scraper need a Snapchat account, login or cookies?

No. It reads the public profile, search and Spotlight pages that anyone can open on snapchat.com. No account, password, cookie or browser is involved.

#### Can I get the subscriber count of any Snapchat account?

For public profiles, yes when Snapchat shows it or lists it in search. Many brands and publishers hide the count on their profile page; the actor recovers those from Snapchat search — 79 % of them in our 1,000-profile test (134 of 170). Small personal creators who hide their count stay `null`.

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

Put niche keywords in **Search keywords**, turn on **Also search related topics**, set **Minimum subscribers**, and sort the results by `spotlightViewsMedian` or `spotlightEngagementRate`.

#### How many profiles can I scrape in one run?

As many as discovery finds: a list of usernames is unlimited, and keyword + topic + related-account discovery reached **10,000 unique profiles in a single run** (4 min 20 s on 4 GB memory) in our test — with thousands of candidates and searches still queued when it stopped. Set **Maximum cost per run** to at least results × price for runs that big.

#### Does it download Snapchat Spotlight videos and stories?

It returns direct media URLs (`videoUrl`, `mediaUrl`, thumbnails, transcript URLs) that you can download with any HTTP client. The actor itself does not store the video files.

#### What are "boosts" on Spotlight?

`boostCount` is the boost (heart / favourite) count Snapchat reports for a Spotlight video. The engagement rate adds shares, comments and boosts and divides by views.

#### Can I scrape Spotlight comments?

Yes — turn on **Spotlight top comments**. Each Spotlight video gets the top comments Snapchat shows (text, author name, likes, replies, date).

#### Can I scrape Snapchat stories that are not public?

No. Only public stories of public profiles are available, as on snapchat.com. Friends-only stories, chats and Snap Map locations are never accessed.

#### Why do some profiles have no Spotlight or story data?

Not every account posts Spotlight videos, and a story exists only while it is live. Those fields are then `0`, `null` or empty lists.

#### What happens with usernames that do not exist?

They are skipped and listed in the status message and in the `SUMMARY` key-value record (`notFound`). If none of your usernames exists the run still finishes successfully with an explanation, and nothing is billed.

#### Can I schedule it and track growth over time?

Yes. Schedule the actor in Apify Console with your account list and connect Google Sheets or a webhook — each run adds a fresh snapshot of subscribers and Spotlight performance.

#### Which export formats are supported?

JSON, CSV, Excel (XLSX), XML, RSS and HTML from the Dataset tab or the API. Nested lists (Spotlight videos, highlights, lenses) are kept in JSON and flattened into columns in CSV/Excel.

#### Why did my run stop before reaching Max profiles?

Three possible reasons, always named in the status message and in `SUMMARY.stoppedBy`: the run's **Maximum cost per run** covers fewer results than you asked for (`MAX_COST` — raise it to at least rows × price per result), the run timeout was reached (`TIMEOUT` — raise the timeout), or discovery ran out of new accounts (`NO_MORE_CANDIDATES` — add keywords or turn on the expansions). The run still succeeds and keeps every row it saved.

#### Do I need residential proxies?

No. The default Apify datacenter proxy works; the actor rotates IPs and retries on its own.

#### Is there an official Snapchat API for this?

Snap's official APIs (Snap Kit, Marketing API, Public Profile API for partners) are built for your own accounts and approved partners, not for researching arbitrary public creators. This actor is a practical **Snapchat API alternative** for public profile data.

#### How fresh is the data?

Every run reads Snapchat live; nothing comes from a cache. `scrapedAt` shows when each row was collected.

#### Something is missing or broken — what do I do?

Open an issue on the actor's **Issues** tab with the run ID. Issues are answered within 24 hours, and fixes ship quickly — see the changelog.

***

### Is it legal to scrape Snapchat?

The actor collects only data that Snapchat publishes openly on public profiles, search and Spotlight pages, without logging in or bypassing any access control. Scraping publicly available data is generally lawful, but you are responsible for how you use it: personal data (names, comments, faces in media) is protected by laws such as the GDPR and CCPA, and Snapchat's Terms apply to your use. Use the data for legitimate purposes such as research, analytics and outreach to businesses, and do not use it to harass or profile individuals. If in doubt, ask a lawyer.

### Reliability

- Keep-alive connections on rotating datacenter IPs; a stalled request is raced by a second copy on another IP, and a refused IP is replaced at once.
- Exact `maxProfiles`: rows are reserved before they are saved, so a run never saves more than you asked for.
- Honest outcomes: "username not found" and "Snapchat answered with nothing" end as successful runs with an explanation; only "nothing could be fetched" fails the run.
- A `SUMMARY` record in every run: profiles saved, not-found and failed usernames, keyword yields, request statistics and timings.

### Changelog

See the **Changelog** tab. 2026-10-13 — first release.

### Support

Questions, missing fields or a site change? Open an issue on the **Issues** tab — answered within 24 hours.

***

*Snapchat Scraper is an independent tool. It is not affiliated with, endorsed by, or sponsored by Snap Inc. "Snapchat", "Spotlight" and related marks are trademarks of Snap Inc.; they are used here only to describe what the tool works with.*

# Changelog

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

# Actor input Schema

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

Snapchat usernames (kyliejenner, @khaby.lame) or links: https://www.snapchat.com/add/nike, https://www.snapchat.com/@nike, story.snapchat.com/@nike, and Spotlight video links (the video's creator is scraped). One profile row per account. Usernames that have no public Snapchat page are listed in the run's status message and SUMMARY.

## `searchKeywords` (type: `array`):

Find creators by niche, brand or topic — e.g. makeup, fitness, car reviews, #funny. For each keyword the actor reads Snapchat search: the creators it suggests to subscribe to (with exact subscriber counts) and the creators of the top Spotlight videos — about 20–45 accounts per keyword. Use many keywords (or the two expansions below) for thousands of profiles.

## `expandTopics` (type: `boolean`):

Snapchat suggests ~6 related hashtag topics per keyword (makeup → makeuptutorial, makeupartist …). Turn on to search each of them too (one level deep) — roughly 5–7× more creators per keyword.

## `expandRelatedAccounts` (type: `boolean`):

Every public profile lists up to 3 similar accounts ("Related"). Turn on to scrape them too, breadth-first, up to the depth below — the way to grow a seed list of competitors or influencers into a full niche map.

## `maxRelatedDepth` (type: `integer`):

How many hops to follow from each seed when 'Follow related accounts' is on. 1 = the seeds' related accounts only; each extra level multiplies the candidates by up to ~3.

## `maxProfiles` (type: `integer`):

Exact number of profile rows to save at most (empty = 1,000; API callers may also send it as maxItems) — usernames from your list count too, so raise it for long lists. The run stops the moment it is reached (Spotlight video rows, if turned on, come on top). Each row is a paid result: for big runs set the run's "Maximum cost per run" to at least rows × price; if it covers fewer, the run saves exactly what it covers and ends successfully.

## `minSubscribers` (type: `integer`):

Only save profiles with at least this many subscribers (0 = no filter). Profiles whose count is hidden and could not be looked up are skipped when a minimum is set. Filtered profiles still lead to their related accounts.

## `maxItemsPerSection` (type: `integer`):

Cap for each list on a profile row: story snaps, highlights, Spotlight videos, lenses (counts and Spotlight statistics always cover everything Snapchat shows). 0 = counts and statistics only, for lean rows.

## `includeSpotlight` (type: `boolean`):

Spotlight videos shown on the profile with views, shares, comments, boosts, caption, hashtags, sound, duration, video/thumbnail/transcript URLs and Snapchat's AI title and description — plus per-profile totals, average and median views and engagement rate.

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

Add the top comments Snapchat shows under each Spotlight video (text, author name, likes, replies, date).

## `spotlightRows` (type: `boolean`):

Also save every Spotlight video as its own row (rowType = spotlight) with the creator's username and subscriber count — easiest for spreadsheets and content analysis. These rows do not count toward Max profiles.

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

The public story currently live on the profile: each snap's media type, media URL, thumbnail and time.

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

Saved story highlights: title, link, thumbnail, number of snaps and date range.

## `includeHighlightSnaps` (type: `boolean`):

Also list each highlight's snaps (media URL, thumbnail, time). Large: celebrity profiles hold hundreds.

## `includeLenses` (type: `boolean`):

AR lenses published by the account: name, lens link, preview image and video, icon, last update.

## `lookupHiddenSubscriberCounts` (type: `boolean`):

Many brands and publishers hide the count on their profile page. When on, the actor looks the account up in Snapchat search (one extra request) and fills the exact count — measured 9 of 10 hidden counts recovered. Creators found by keyword already have it at no extra cost.

## `concurrency` (type: `integer`):

Pages fetched in parallel. Leave empty for automatic: 30 on 1 GB, 50 on 2 GB, 80 on 4 GB, 100 above — page parsing is CPU work and Apify gives 1 CPU core per 4 GB of memory, so more memory = faster runs.

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

Apify datacenter proxy works (default). Residential is not needed.

## Actor input object example

```json
{
  "usernames": [
    "kyliejenner",
    "khaby.lame",
    "nike"
  ],
  "searchKeywords": [
    "makeup"
  ],
  "expandTopics": false,
  "expandRelatedAccounts": false,
  "maxRelatedDepth": 2,
  "maxProfiles": 20,
  "minSubscribers": 0,
  "maxItemsPerSection": 50,
  "includeSpotlight": true,
  "includeSpotlightComments": false,
  "spotlightRows": false,
  "includeStory": true,
  "includeHighlights": true,
  "includeHighlightSnaps": false,
  "includeLenses": true,
  "lookupHiddenSubscriberCounts": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All rows collected in this run.

# 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": [
        "kyliejenner",
        "khaby.lame",
        "nike"
    ],
    "searchKeywords": [
        "makeup"
    ],
    "maxProfiles": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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": [
        "kyliejenner",
        "khaby.lame",
        "nike",
    ],
    "searchKeywords": ["makeup"],
    "maxProfiles": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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": [
    "kyliejenner",
    "khaby.lame",
    "nike"
  ],
  "searchKeywords": [
    "makeup"
  ],
  "maxProfiles": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/snapchat-scraper --silent --output-dataset

```

## MCP server setup

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