Snapchat User Stories Scraper avatar

Snapchat User Stories Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Snapchat User Stories Scraper

Snapchat User Stories Scraper

Snapchat User Stories Scraper collects publicly available Snapchat user stories using usernames or profile links. Use it to gather story metadata and content for research, monitoring, or analysis with structured, automation-ready output.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

40

Total users

1

Monthly active users

a day ago

Last modified

Share

Snapchat Story Scraper — Highlights, Snaps and Media URLs

Snapchat Story Scraper extracts a public Snapchat profile's current story and every saved highlight, returning each snap's mediaUrl, mediaPreviewUrl, and createTime as structured JSON — no HTML parsing required. Point it at a username or profile URL; no Snapchat login, cookies, or API key needed. Rows are written to the dataset as each story or highlight finishes scraping, so results start appearing before the run ends. Run it now on the Actor's Apify Console page.

🧭 What is Snapchat Story Scraper?

Snapchat Story Scraper is an Apify Actor that reads a public Snapchat profile page and returns the current Story plus every curated Highlight as separate dataset rows, each carrying its full snap list (media URLs, preview thumbnails, timestamps). It requires no Snapchat account, login, or cookies — it works entirely from what a public visitor can already see. It's built for social media researchers, brand and influencer monitoring teams, and developers who want Snapchat story data as clean JSON instead of scraping the page themselves.

🌐 What Snapchat story data is publicly available to scrape?

A public Snapchat profile page exposes the account's current story, its curated highlights, and every snap inside them without requiring a login. Content that only exists inside the Snapchat app — friends-only snaps, direct messages, and live location — stays inaccessible regardless of tooling.

Data CategoryPublic (no login)Restricted (in-app, friends-only)
Current story snaps (media, timestamps)
Curated highlights and their snap lists
Profile display name / story title
Sponsored flag / geotag on a snap, when present
Private-account content✅ requires being an accepted friend
Direct snaps and chats✅ friends-only, in-app
View/screenshot notifications✅ sender-only, in-app
Snap Map live location✅ friends-only, in-app

Snapchat Story Scraper only returns publicly visible data — what any visitor sees on a public profile page. Nothing behind a login wall.

📦 What data can I extract with Snapchat Story Scraper?

Every dataset row is one story or one highlight, with identity fields describing the row and a nested snapList carrying every snap's media and metadata.

Field NameDescription
usernameThe Snapchat username the row belongs to
type"story" for the profile's current story, "highlight" for a saved highlight
isChildfalse for the current story, true for a highlight
storyTitleTitle of the story/highlight (falls back to the profile's display name, then the title-cased username)
highlightIdHighlight ID; null for the current story, which has no highlight ID
thumbnailUrlCover/thumbnail image URL for the story or highlight
snapListArray of every snap in the story/highlight — see fields below
scrapedAtISO 8601 UTC timestamp of when this row was scraped
snapIndex0-based position of the snap within the returned snapList (re-indexed after filtering)
createTimeISO 8601 UTC timestamp the snap was posted
mediaUrlFull-resolution media URL (image or video)
mediaPreviewUrlLower-resolution preview/thumbnail URL
snapTitleCaption text on the snap, when Snapchat provides one
snapSubtitlesSubtitle text on the snap, when Snapchat provides one
isSponsoredWhether the snap is flagged as sponsored content
latGeotag latitude, when the snap carries a location
lngGeotag longitude, when the snap carries a location
hasAttachmentWhether the snap carries an attachment (e.g. a link)
intervalStartTimeMsSnap interval start time, in milliseconds
audioTranscriptionObjectUrlURL to an audio transcription object, when present

Story & highlight fields

username, type, isChild, storyTitle, highlightId, thumbnailUrl, scrapedAt identify the row and where it came from. type/isChild are the two columns to filter or group on when you need to separate the current story from highlight reels.

Snap fields (inside snapList)

snapIndex, createTime, mediaUrl, and mediaPreviewUrl are the core media fields present on every real snap. snapTitle, snapSubtitles, isSponsored, lat, lng, hasAttachment, intervalStartTimeMs, and audioTranscriptionObjectUrl come straight from Snapchat's payload and are null whenever that snap doesn't carry the attribute — they aren't dropped, just left unset.

🤖 Add-on: Need additional Snapchat or social data?

Pair this with ../Instagram-Story-Details-Scraper/Instagram-Story-Details-Scraper for the same story format on Instagram, or ../TikTok-User-Profile-Scraper/tiktok-user-profile-scraper-with-engagement-analytics if your monitoring workflow also tracks TikTok creators. Both are Scraper Engine Actors and slot into the same dataset-per-run pipeline.

🛠️ Why not build this yourself?

Snapchat does not publish a public API for reading another account's stories or highlights, so a DIY script means reverse-engineering the profile page's embedded data yourself, re-patching it every time Snapchat changes its page structure, and running your own proxy pool to avoid getting blocked. Snapchat Story Scraper already handles the page parsing, snap-list normalization, date filtering, and proxy escalation (see below) — you get consistent JSON without owning that maintenance burden.

⚡ How to use Snapchat Story Scraper

Snapchat Story Scraper runs from its Apify Console listing — no separate signup or API key beyond your Apify account.

  1. Open the Actor's page in Apify Console and click Try for free (or Start, if you already have it saved).
  2. Fill in startUrls — the only required field — with one or more Snapchat usernames or profile URLs.
  3. Optionally set maxSnaps to cap snaps per story/highlight, oldestSnapDate to drop older content, and proxyConfiguration if you expect blocking.
  4. Start the run.
  5. Download results as JSON or CSV from the dataset, or stream them via the Apify API as they're written.

How to scale to bulk story extraction

startUrls is an array (stringList editor), so a single run accepts any number of usernames or URLs — there's no schema-enforced maximum. Each username is processed fully (its current story, then every highlight) before the run moves to the next one, so usernames are handled sequentially within a run rather than in parallel; scaling further means either listing more usernames in one run or triggering additional runs.

💡 What can you do with Snapchat story data?

  • 📊 Brand monitoring teams track a competitor's Snapchat activity, using storyTitle and createTime to log when new highlights go up and how often accounts post.
  • 🎯 Influencer marketing analysts pull mediaUrl and thumbnailUrl across multiple startUrls to archive campaign creative for reporting, since Snapchat CDN links expire.
  • 🔬 Researchers studying platform content trends use isSponsored and hasAttachment across many profiles to flag sponsored or link-carrying snaps.
  • 🏢 Content teams use highlightId and isChild to distinguish permanent highlight reels from the 24-hour story when building an archive.
  • 🤖 AI engineers feed snapTitle, snapSubtitles, and storyTitle text fields into a RAG index or agent context to answer questions about a brand's Snapchat presence.

🛡️ How does Snapchat Story Scraper handle rate limits and blocking?

By default, requests go out with no proxy. If Snapchat responds with a block or rate-limit status (403, 429, or 503) — or the connection itself fails — the Actor automatically escalates: first to Apify's datacenter proxy, then to residential proxy, retrying up to 3 times as it steps through the tiers. Once a run has escalated to residential proxy, it stays on residential proxy rather than dropping back down. Requests use browser-like headers (Chrome user agent, standard accept/sec-fetch-* headers), but this is a plain HTTP fetch of the profile page — there is no headless browser rendering and no CAPTCHA solving. If a username can't be scraped after retries and fallback are exhausted, the Actor logs the failure and moves on to the next username rather than stopping the run.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray of stringsList one or more Snapchat usernames (e.g., fcbarcelona) or profile URLs (e.g., https://www.snapchat.com/@fcbarcelona).["fcbarcelona", "https://www.snapchat.com/@nike"]
maxSnapsNointeger (default: 100, minimum: 1)Maximum number of snaps to return for each story or highlight. Example: maxSnaps=20 caps every story/highlight at its 20 most recent snaps. Default is 100.50
oldestSnapDateNostring (datepicker, absolute or relative)Skip snaps older than this date. Accepts an absolute date (e.g. 2026-01-01) or a relative expression (e.g. "7 days", "2 weeks", "1 month"). Leave empty to return all available snaps."30 days"
proxyConfigurationNoobject (proxy editor)Choose which proxies to use. By default, no proxy is used. If Snapchat rejects or blocks the request, the actor will automatically fallback to datacenter proxy, then residential proxy with 3 retries.{ "useApifyProxy": false }

⚠️ maxSnaps only trims what Snapchat's own page already embeds — the Actor doesn't paginate or lazy-load beyond the initial page response. If a highlight has more snaps than Snapchat ships in that response, only the embedded subset is ever available, regardless of maxSnaps.

Example input

{
"startUrls": ["fcbarcelona", "https://www.snapchat.com/@nike"],
"maxSnaps": 50,
"oldestSnapDate": "30 days",
"proxyConfiguration": { "useApifyProxy": false }
}

⬆️ Output

Results are typed, normalized JSON with a consistent schema across runs — one row per story or highlight, each pushed as row_result the moment it's collected. Download the dataset as JSON, JSONL, CSV, Excel, or XML from the Apify Console or API. Every pushed row is a charged row_result event; if a username returns no public story or highlight content, no row is pushed for it and nothing is charged for that username.

Example output

{
"username": "fcbarcelona",
"type": "highlight",
"isChild": true,
"storyTitle": "NEW KIT",
"highlightId": "b8a8f6bc-d373-4dcc-9f06-0690b8c48fb1",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/abc123.jpg",
"snapList": [
{
"snapIndex": 0,
"isSponsored": null,
"snapTitle": null,
"snapSubtitles": null,
"lat": null,
"lng": null,
"hasAttachment": false,
"intervalStartTimeMs": 0,
"audioTranscriptionObjectUrl": null,
"createTime": "2026-07-28T12:02:36.000Z",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/preview123.jpg",
"mediaUrl": "https://cf-st.sc-cdn.net/i/media123.mp4"
}
],
"scrapedAt": "2026-07-29T10:15:00.000Z"
}

⚙️ How does it work?

Snapchat Story Scraper fetches a profile's public page (https://www.snapchat.com/@username) directly over HTTP, with automatic proxy escalation and retries if Snapchat blocks the request. Instead of parsing rendered HTML, it locates the page's embedded __NEXT_DATA__ JSON payload — the same hydration data the site's own frontend uses — and reads the story and highlight objects out of it directly, so no CSS-selector scraping is involved. Only what's already public on that page is ever returned; there's no login step and no access to friends-only content. Because the Actor reads a structured JSON payload rather than the visual layout, the output schema stays stable even if Snapchat changes its page design.

🔌 Integrations

Snapchat Story Scraper runs like any Apify Actor, so it works with the tools you already use to call Apify.

Calling Snapchat Story Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("your-username/snapchat-user-stories-scraper").call(run_input={
"startUrls": ["fcbarcelona", "https://www.snapchat.com/@nike"],
"maxSnaps": 50,
"oldestSnapDate": "30 days",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["username"], item["type"], len(item["snapList"]))

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node (or an HTTP Request node) pointed at the Actor's run endpoint with your API token. In Make, use the Apify app's "Run an Actor and get dataset items" module. In LangChain, wrap the Apify client call in a custom tool so an agent can trigger a run and read the resulting dataset items as context.

Scraping publicly available data — content anyone can view on a Snapchat profile page without logging in — is generally permitted. Snapchat Story Scraper only returns this kind of publicly visible content; it never accesses private accounts or friends-only content. Because story and highlight content is tied to an identifiable Snapchat username, it can constitute personal data under GDPR and CCPA when the account belongs to an individual, which affects how you may store and use it. Consult legal counsel if your use case involves bulk storage of personal data.

❓ Frequently asked questions

What Snapchat story fields does Snapchat Story Scraper return?

The top fields are username, storyTitle, type/isChild, thumbnailUrl, and snapList (with mediaUrl, mediaPreviewUrl, and createTime per snap). See the full field table above.

Does Snapchat Story Scraper require a Snapchat account or login?

No. It reads the public profile page over plain HTTP with no cookies and no session — the input schema has no login or cookie field at all.

How many Snapchat stories or highlights can I extract in one run?

As many usernames as you add to startUrls — the array has no fixed maximum. For each username, the Actor returns the current story (if any) plus every curated highlight; maxSnaps (default 100, minimum 1) caps how many snaps come back per story or highlight, up to whatever Snapchat's own page embeds.

What happens if a Snapchat profile is private or doesn't exist?

The Actor can't locate the page's embedded data, logs a warning that the profile "may not exist or is private," and returns zero rows for that username — no error is thrown, and the run continues to the next username in startUrls.

Can I scrape multiple Snapchat usernames at once?

Yes — startUrls accepts a list of usernames or profile URLs. Each is processed in sequence within the same run, with results for each one written to the dataset as soon as they're scraped.

Does Snapchat Story Scraper work with Claude, ChatGPT, and other AI agent tools?

It's callable as an HTTP endpoint through the Apify API, so any agent framework that can make an HTTP request — LangChain, a custom Claude or GPT tool, or another orchestrator — can trigger a run and read back the dataset.

Why do results appear before the run finishes?

Each story or highlight is pushed to the dataset as row_result immediately after it's scraped, rather than batched at the end of the run — useful when you're processing many usernames and want to start consuming early results without waiting for the whole run to complete.

Does Snapchat Story Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or CSS selectors involved. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Snapchat changes its layout or anti-bot system?

The Actor is maintained and its output schema is designed to stay stable across Snapchat page changes, since it reads structured JSON rather than the visual layout. No specific update turnaround time is published.

Can I use Snapchat Story Scraper without managing proxies or browser infrastructure?

Yes. The Actor makes plain HTTP requests itself and handles proxy selection and escalation (no proxy → datacenter → residential, with retries) internally — you don't need to run a browser or manage your own proxy pool.

Which Snapchat story fields work best for AI training data and RAG indexing?

For RAG, index the text-bearing fields — storyTitle, snapTitle, and snapSubtitles — alongside username for attribution. For training data, type, isChild, and createTime are the fields with the most consistent structure across every row. All fields return as typed primitives (strings, booleans, numbers, or null), never nested strings to re-parse.

ScraperWhat it extracts
Instagram Story Details ScraperInstagram story media and details for profiles viewable with your own logged-in session
Instagram Posts ScraperInstagram posts with creator profile bios, follower counts and engagement metrics
Instagram Profile Post ScraperInstagram profile posts, including pinned posts and recent comments
TikTok User Profile ScraperTikTok profile stats with follower/following/likes counts and run-over-run engagement deltas

💬 Your feedback

Found a bug or missing a field? Let us know via the Issues tab on this Actor's Apify Console page — we actively maintain this scraper and read every report.