Snapchat User Stories Scraper With AI Bio & Caption Insights
Pricing
from $5.99 / 1,000 results
Snapchat User Stories Scraper With AI Bio & Caption Insights
Snapchat User Stories Scraper with AI Bio & Caption Insights extracts Snapchat Stories, creator profiles, bios, captions, hashtags, timestamps, media details, and AI-powered insights. Ideal for story research, creator analysis, content trends, and audience insights.
Pricing
from $5.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
Snapchat Stories Scraper — Stories, Bio & AI Sentiment Insights
Snapchat Stories Scraper extracts public stories, highlights, profile bios, and Spotlight videos from any Snapchat account you name — then optionally runs AI sentiment, topic, and niche/category classification on that bio and caption text. Every run returns typed JSON rows for each result type (profile, story, highlight, spotlight), ready to pass straight to an LLM, load into a spreadsheet, or feed a monitoring pipeline. No Snapchat login is required — only public profile pages are read. Point it at a list of usernames and get structured, AI-scored creator data as JSON.
🧭 What is Snapchat Stories Scraper?
Snapchat Stories Scraper takes a list of public Snapchat usernames or profile URLs and returns each account's stories, highlights, profile bio, and Spotlight videos as structured JSON — plus, when enabled, AI Sentiment & Niche Insights derived from that bio and Spotlight caption/hashtag/title text. That AI layer is the actor's differentiator: most story scrapers stop at snap-level media, but a Snapchat story's own snapTitle/snapSubtitles text is frequently empty, so this actor runs its AI classification on the text that actually has coverage — the account's public bio and Spotlight captions — and turns it into sentiment, topic, language, and niche/category fields.
No Snapchat account or login is required: the actor only fetches each username's public profile page (https://www.snapchat.com/@username) and its public highlight pages, with no cookies sent, so private accounts return no data.
Key capabilities:
- 📖 Stories & highlights — every public story and highlight scraped as its own row, with full snap-level media metadata
- 📝 Profile bio harvest — bio, subscriber count, category, website, badge, and publisher type parsed from the account's embedded page data
- 🔦 Spotlight video harvest — title, caption, hashtags, media URL, and engagement counts for every public Spotlight video
- 🙂 AI sentiment & topic analysis (optional) — sentiment, tone score, topics, and language detected from bio + Spotlight text
- 🎯 AI niche/category classification (optional) — one best-fit niche category plus supporting keywords, from the same text
- 🔢 Result depth control —
maxSnapsPerStorycaps how many snaps are collected per story or per highlight
📦 What data can you get with Snapchat Stories Scraper?
Snapchat Stories Scraper's dataset carries four row types per account — profile, story, highlight, and spotlight — plus, on the profile row, the AI-derived sentiment and niche fields.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
| Story / Highlight | storyTitle, thumbnailUrl, highlightId, snapList[] (each snap: snapIndex, isSponsored, snapTitle, snapSubtitles, lat, lng, hasAttachment, intervalStartTimeMs, audioTranscriptionObjectUrl, createTime, mediaPreviewUrl, mediaUrl) | Story/highlight monitoring, media archiving |
| Profile bio | bio, subscriberCount, categoryStringId, subcategoryStringId, websiteUrl, profilePictureUrl, badge, publisherType, spotlightCount | Creator vetting, lead enrichment |
| Spotlight video | spotlightId, spotlightTitle, caption, hashtags, thumbnailSrc, mediaUrl, plays, shares, comments, durationMs, width, height, uploadDateMs | Content and engagement research |
| AI Sentiment & Niche Insights | aiSentiment, aiSentimentScore, aiTopics, aiLanguage, aiNicheCategory, aiNicheConfidence, aiNicheKeywords | Lead/influencer discovery, brand research |
AI Sentiment & Niche Insights
When aiEnhancement is on, the account's bio plus every Spotlight title, caption, and hashtag are concatenated into one text blob and sent to the selected AI model in two independent calls. The first (enableSentimentAnalysis) classifies overall sentiment (positive/neutral/negative), a -1.0–1.0 tone score, up to five topics, and the detected language. The second (enableNicheClassification) picks one niche/category — from a fixed list including fashion, beauty, fitness, sports, gaming, music, comedy/entertainment, food, travel, business/finance, tech, education, family/parenting, art/design, news/media, lifestyle, adult/nsfw, other — with a confidence score and supporting keywords. Both are written onto the account's profile row:
{"aiSentiment": "positive","aiSentimentScore": 0.62,"aiTopics": ["football", "sponsorship", "matchday"],"aiLanguage": "en","aiNicheCategory": "sports","aiNicheConfidence": 0.91,"aiNicheKeywords": ["football", "club", "fans"]}
If the AI call fails, returns unparseable JSON, or no bio/Spotlight text exists for the account, every field in the relevant group is null — never a guessed or fabricated value.
Spotlight video harvest
Each public Spotlight video on an account is pushed as its own spotlight row, parsed from the same page fetch used for stories — no extra request. Fields include the video's title, caption, hashtag list, thumbnail and media URLs, duration and dimensions, and its plays/shares/comments engagement counts (Snapchat's own negative "hidden" sentinel is normalized to null rather than shown as a fabricated count). Useful for judging a creator's actual content output and engagement level before reaching out for a partnership.
🛠️ Why not build this yourself?
Snapchat does not publish a public API for reading an arbitrary account's stories, bio, or Spotlight videos — Snap Kit covers authenticated app integrations, not bulk retrieval of public profile content. Building this yourself means:
- Reverse-engineering the page's embedded
__NEXT_DATA__JSON (whereuserProfileandspotlightStoryMetadataactually live) and keeping the parser in sync every time Snapchat reshapes that structure - Handling blocks and rate limiting with a proxy fallback strategy — this actor retries through datacenter, then residential, proxy tiers automatically when a request comes back
403,429, or503 - Building and maintaining a separate integration for each AI provider (Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity, Mistral) if you want model choice for the classification step
- Standing up real-time dataset delivery so partial results survive a crash mid-run
Snapchat Stories Scraper already does all of this, and pushes every row to the dataset the moment it's collected rather than buffering to the end of the run.
🆚 What's the difference between scraping Snapchat stories and AI bio/caption analysis?
Scraping is the extraction step: fetching an account's public page and pulling out the stories, highlights, bio, and Spotlight videos as-is. AI bio/caption analysis is a separate, optional layer on top of that raw text — sentiment, topic, and niche/category classification — and it costs a call to a third-party AI provider, which is why it's off by default (aiEnhancement: false).
The two are independent in this actor: you can run it purely as a stories/bio/Spotlight scraper with aiEnhancement left off and get zero AI-related cost, or turn it on and get the same raw data plus aiSentiment/aiNicheCategory and related fields on the profile row. Because the AI step needs your own API key (aiApiKey, or a matching environment variable such as ANTHROPIC_API_KEY), the classification quality and cost depend entirely on which model you choose in aiModel — cheaper mini/flash/haiku-class models are recommended for this kind of short-text classification.
🚀 How to scrape Snapchat with Snapchat Stories Scraper?
- Open Snapchat Stories Scraper on the Apify Console (under the Scrapier publisher)
- Enter one or more usernames or profile URLs in
snapchatAccounts— e.g.fcbarcelonaorhttps://www.snapchat.com/@fcbarcelona - Set
maxSnapsPerStoryif you want fewer or more snaps per story/highlight than the default of 100, and turn onaiEnhancement(plus youraiApiKey) if you want the sentiment/niche fields - Click Start to run the actor
- Download results as JSON or CSV from the Apify Console, or pull them with the API/
apify_clientonce the run finishes
{"snapchatAccounts": ["fcbarcelona", "https://www.snapchat.com/@nike"],"maxSnapsPerStory": 50}
How to run multiple accounts in one job
List every username or profile URL in the snapchatAccounts array — there's no separate batch endpoint. The actor works through the list one account at a time, pushing that account's profile, Spotlight, story, and highlight rows to the dataset as soon as they're collected (within a single account, its highlights are fetched concurrently). The legacy startUrls field accepts the same values and is still read if snapchatAccounts is left empty.
⬇️ Input
All fields are optional — at least one of snapchatAccounts or startUrls must resolve to a username, or the run logs an error and exits.
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
snapchatAccounts | No | Array of strings | editor: stringList | Snapchat usernames (e.g. fcbarcelona) or profile URLs (e.g. https://www.snapchat.com/@fcbarcelona) to scrape. |
startUrls | No | Array of strings | editor: stringList | Legacy alias for snapchatAccounts, kept so the base Snapchat User Stories Scraper's input JSON still works. |
maxSnapsPerStory | No | Integer | minimum: 1, maximum: 1000, default 100 | Max snaps collected per story or per highlight (per story/highlight, not a total across the run). |
maxSnaps | No | Integer | minimum: 1, maximum: 1000 | Legacy alias for maxSnapsPerStory. |
aiEnhancement | No | Boolean | default false | Master switch for the two AI features below. Requires an API key to take effect. |
aiModel | No | String (enum) | default "claude-haiku-4-5" | AI model/provider for classification. Enum: claude-haiku-4-5, claude-sonnet-5, claude-opus-4-8, claude-fable-5, gpt-4o-mini, gpt-4o, gpt-4.1-mini, gpt-4.1, o3-mini, o1, gemini-2.0-flash-lite, gemini-2.0-flash, gemini-1.5-pro, gemini-2.5-flash, gemini-2.5-pro, grok-2-latest, grok-3-mini, grok-3, grok-beta, deepseek-chat, deepseek-reasoner, sonar, sonar-pro, sonar-reasoning, mistral-small-latest, mistral-large-latest. Provider is auto-detected from the name prefix. |
aiApiKey | No | String (secret) | editor: textfield | API key for the selected provider. Falls back to an environment variable on the account if left empty (e.g. ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY). |
enableSentimentAnalysis | No | Boolean | default true | When AI is enabled: classify sentiment, tone score, topics, and language from bio + Spotlight text. |
enableNicheClassification | No | Boolean | default true | When AI is enabled: classify niche/category and supporting keywords from the same text. |
proxyConfiguration | No | Object | editor: proxy | Proxy settings. No proxy by default; the actor automatically falls back to datacenter, then residential, proxy with up to 3 retries if Snapchat rejects a request. |
Example input, AI enabled:
{"snapchatAccounts": ["fcbarcelona"],"maxSnapsPerStory": 100,"aiEnhancement": true,"aiModel": "claude-haiku-4-5","aiApiKey": "sk-ant-...","enableSentimentAnalysis": true,"enableNicheClassification": true}
Common pitfall: maxSnapsPerStory is a per-story/per-highlight ceiling, not a total across the run — set it to 20 and an account with a main story plus 5 highlights can still return up to 120 snaps total (20 for each). And if aiEnhancement is on but no key resolves from aiApiKey or the matching environment variable, the run still completes — it just leaves every ai* field null rather than failing.
⬆️ Output
Every row is typed, normalized JSON with a type field (profile, story, highlight, or spotlight) and a consistent shape per type, downloadable as JSON, CSV, Excel, or the other formats the Apify dataset export supports. Rows are pushed to the dataset the moment they're collected, not buffered to the end of the run.
The default dataset view surfaces 30 columns across all four row types. A few fields the row-building code writes on every row of their type are not in that default view but are still present in the raw dataset item: subcategoryStringId and profilePictureUrl on profile rows, and thumbnailSrc, durationMs, width, height, and uploadDateMs on spotlight rows.
Scraped results
[{"type": "profile","isChild": false,"username": "fcbarcelona","bio": "Official Snapchat of FC Barcelona ⚽","subscriberCount": 4200000,"categoryStringId": "SPORTS","subcategoryStringId": "SOCCER","websiteUrl": "https://www.fcbarcelona.com","profilePictureUrl": "https://cf-st.sc-cdn.net/3S/profile.jpg","badge": 1,"publisherType": "PUBLIC_PROFILE","spotlightCount": 3,"aiSentiment": "positive","aiSentimentScore": 0.62,"aiTopics": ["football", "sponsorship", "matchday"],"aiLanguage": "en","aiNicheCategory": "sports","aiNicheConfidence": 0.91,"aiNicheKeywords": ["football", "club", "fans"],"scrapedAt": "2026-07-30T09:12:04Z"},{"type": "story","isChild": false,"username": "fcbarcelona","storyTitle": "Fcbarcelona","thumbnailUrl": "https://cf-st.sc-cdn.net/3S/thumb1.jpg","highlightId": null,"snapList": [{"snapIndex": 0,"isSponsored": false,"snapTitle": null,"snapSubtitles": null,"lat": null,"lng": null,"hasAttachment": true,"intervalStartTimeMs": 1753862400000,"audioTranscriptionObjectUrl": null,"createTime": "2026-07-30T08:00:00.000Z","mediaPreviewUrl": "https://cf-st.sc-cdn.net/3S/preview1.jpg","mediaUrl": "https://cf-st.sc-cdn.net/3S/media1.mp4"}],"scrapedAt": "2026-07-30T09:12:05Z"},{"type": "highlight","isChild": true,"username": "fcbarcelona","storyTitle": "Matchday","thumbnailUrl": "https://cf-st.sc-cdn.net/3S/thumb2.jpg","highlightId": "8b1e2f3a-4c5d-6e7f-8091-a2b3c4d5e6f7","snapList": [{"snapIndex": 0,"isSponsored": false,"snapTitle": "Matchday","snapSubtitles": null,"lat": null,"lng": null,"hasAttachment": true,"intervalStartTimeMs": 1753776000000,"audioTranscriptionObjectUrl": null,"createTime": "2026-07-29T08:00:00.000Z","mediaPreviewUrl": "https://cf-st.sc-cdn.net/3S/preview2.jpg","mediaUrl": "https://cf-st.sc-cdn.net/3S/media2.mp4"}],"scrapedAt": "2026-07-30T09:12:06Z"},{"type": "spotlight","isChild": true,"username": "fcbarcelona","spotlightId": "W7abc123XYZ","spotlightTitle": "Golazo compilation","caption": "Best goals this month 🔥","hashtags": ["football", "barca", "golazo"],"thumbnailSrc": "https://cf-st.sc-cdn.net/3S/spotthumb.jpg","mediaUrl": "https://cf-st.sc-cdn.net/3S/spotmedia.mp4","plays": 152300,"shares": 412,"comments": 88,"durationMs": 14200,"width": 1080,"height": 1920,"uploadDateMs": 1753603200000,"scrapedAt": "2026-07-30T09:12:07Z"}]
🎯 How can I use the data extracted with Snapchat Stories Scraper?
- Lead generation & influencer discovery teams: filter accounts by
aiNicheCategoryandaiNicheConfidenceto shortlist creators in a niche (e.g."sports","fashion") without reading every bio by hand - AI engineers and LLM developers: an agent issues a username query, receives the profile/story/spotlight JSON, and passes it to the model as grounded context for a research or outreach task
- Brand and content researchers: read
aiSentiment/aiSentimentScore/aiTopicson theprofilerow to gauge a creator's public tone before a partnership - Social media monitoring teams: diff
storyTitle,snapListlength, andspotlightCountbetween scheduled runs to track posting activity on accounts of interest
📈 How do you monitor AI Sentiment & Niche Insights over time?
Niche and sentiment drift monitoring means re-running the same account list on a schedule and comparing each account's profile row against its previous run. Because aiSentiment, aiSentimentScore, aiTopics, aiNicheCategory, and aiNicheConfidence are recomputed from the live bio and Spotlight text on every run, a change in any of them reflects a real change in what the account is publicly posting — a rebrand, a new sponsorship focus, or a shift in tone.
The fields worth diffing between runs: aiNicheCategory (did the account move categories), aiSentimentScore (did tone shift positive or negative), aiTopics (new topics appearing or dropping out), and subscriberCount/spotlightCount (growth or new content volume). A typical workflow: schedule a run across a watchlist of usernames with aiEnhancement on, store each run's dataset, and alert when aiNicheCategory changes or aiSentimentScore moves past a threshold you define.
The actor itself has no built-in scheduler or alerting — point an Apify Schedule at it to automate the recurring run, and read consecutive dataset exports to compute the delta.
🔌 Integrate Snapchat Stories Scraper and automate your workflow
Snapchat Stories Scraper works with any language or tool that can call the Apify API.
REST API with Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run_input = {"snapchatAccounts": ["fcbarcelona"], "maxSnapsPerStory": 50}run = client.actor("<YOUR_APIFY_USERNAME>/snapchat-user-stories-scraper-with-ai-bio-and-caption-insights").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["type"], item.get("username"), item.get("bio") or item.get("spotlightTitle"))
Scheduled monitoring and delivery
Attach an Apify Schedule to run the same username list on a cadence you set, and use an Apify webhook to notify another system or trigger a pipeline when each run finishes, rather than polling the Console manually.
⚖️ Is it legal to scrape Snapchat profiles and stories?
Yes — scraping publicly accessible Snapchat data is generally lawful; Snapchat Stories Scraper only reads what any visitor to a public profile page can already see, without logging in or bypassing access controls. In the United States, hiQ Labs, Inc. v. LinkedIn Corp. (9th Cir., 2019) held that scraping data a website makes publicly available does not violate the Computer Fraud and Abuse Act — a precedent widely cited for public-data scraping generally, though it does not specifically address Snapchat.
Because this actor's output includes personal data about identifiable creators — bios, usernames, profile pictures — GDPR and CCPA can apply depending on who you are and where the data subjects are, particularly for storage, further processing, or use in decision-making about a person. Scraping for one-off research and scraping for ongoing profiling or AI training carry different risk profiles under those regimes. Consult your legal team for commercial use cases involving bulk data storage.
❓ Frequently asked questions
Does Snapchat Stories Scraper work with private accounts?
No. The actor sends no cookies or login credentials and only fetches each account's public profile and highlight pages, so private accounts return no stories, bio, or Spotlight data.
How do I limit the number of snaps returned per story?
Set maxSnapsPerStory (1–1000, default 100). It caps snaps individually for the main story and for each highlight — an account with a story plus several highlights can still return up to that many snaps per section, not one shared total.
How does Snapchat Stories Scraper handle Snapchat's anti-bot measures?
If a request comes back 403, 429, or 503, or the connection fails outright, the actor automatically retries: first through a datacenter proxy, then a residential proxy (up to 3 attempts), before giving up on that request. This only activates when proxyConfiguration has Apify Proxy enabled — with proxies off, a blocked request simply fails.
Does Snapchat Stories Scraper extract AI sentiment and niche insights?
Yes — when aiEnhancement is on and an API key resolves, the account's profile row carries aiSentiment, aiSentimentScore, aiTopics, aiLanguage (from enableSentimentAnalysis) and aiNicheCategory, aiNicheConfidence, aiNicheKeywords (from enableNicheClassification). All seven fields are null if AI is off, no key resolves, or the account has no bio and no Spotlight text to classify.
How many results does Snapchat Stories Scraper return per account?
There's no fixed cap on stories, highlights, or Spotlight videos returned per account — every public one found is scraped. The only configurable ceiling is maxSnapsPerStory (default 100, max 1000), which limits snaps per story or highlight, not the number of stories/highlights/Spotlight videos themselves.
Which AI providers does Snapchat Stories Scraper support, and do I need my own API key?
Yes, bring your own key. The provider is auto-detected from the aiModel name: claude-* routes to Anthropic, gpt-*/o1/o3-* to OpenAI, gemini-* to Google, grok-* to xAI, deepseek-* to DeepSeek, sonar* to Perplexity, and mistral-*/ministral-*/codestral-*/magistral-*/pixtral-* to Mistral. Supply aiApiKey or leave it empty to fall back to a matching environment variable on your account (e.g. ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, MISTRAL_API_KEY).
How do I use Snapchat Stories Scraper to monitor a creator's niche or sentiment over time?
Schedule the same username list to run repeatedly with aiEnhancement on, keep each run's dataset, and compare aiNicheCategory, aiSentimentScore, and aiTopics between runs — a change reflects a real shift in the account's public bio/Spotlight text. Use an Apify Schedule to automate the recurring run.
Does Snapchat Stories Scraper work with Claude, ChatGPT, and AI agent frameworks?
It's callable as an HTTP endpoint through the Apify API by any agent framework that can make a request — an agent submits a username list, waits for the run, and reads the resulting JSON as grounded context. No MCP server is documented for this actor.
How does Snapchat Stories Scraper differ from the base Snapchat User Stories Scraper?
It's a superset: the same story and highlight scraping, plus profile bio and Spotlight video harvesting from the same page fetch, plus the optional AI sentiment/niche layer on that bio and Spotlight text — all pulled from data the base scraper's plain regex approach doesn't read. The base actor's startUrls/maxSnaps input keys still work unchanged here as snapchatAccounts/maxSnapsPerStory aliases.
Can I use Snapchat Stories Scraper without managing proxies or Snapchat credentials?
Yes. No Snapchat login is required — the actor only reads public pages. Proxies are optional too: leave proxyConfiguration at its default and no proxy is used at all; enable Apify Proxy there if you want the automatic datacenter/residential fallback on blocked requests.
💬 Your feedback
Found a bug, a field that's come back empty, or a data point missing from the output? Let the Scrapier team know through the actor's Issues tab on the Apify Console — reports like this are how the AI field mappings and page-parsing logic stay current as Snapchat changes its page structure.