Snapchat User Stories Scraper By Niche & Keyword Search avatar

Snapchat User Stories Scraper By Niche & Keyword Search

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Snapchat User Stories Scraper By Niche & Keyword Search

Snapchat User Stories Scraper By Niche & Keyword Search

Snapchat User Stories Scraper by Niche & Keyword Search finds relevant public Stories using niches and keywords, then extracts creator profiles, usernames, captions, timestamps, media URLs, and engagement data for audience research, trend discovery, and content analysis.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

4 days ago

Last modified

Share

Snapchat Story Scraper — Extract Stories, Highlights and Snaps as JSON

Snapchat User Stories Scraper By Niche & Keyword Search finds Snapchat accounts by topic — "fashion", "fitness", "gaming" — or scrapes exact usernames you already know, then pulls every public story, highlight, and the individual snaps inside each one as structured JSON. Unlike scraping frameworks that return raw HTML, it returns typed records — ready for your model, your database, or your pipeline without any parsing. Subscriber-count and verified/official filters skip low-value accounts before the more expensive highlight fetch runs, so you don't pay to scrape accounts you'd throw away anyway. This guide covers every field the Actor returns and how teams deploy it for influencer discovery, monitoring, and dataset building.

🧭 What Does Snapchat Story Scraper Do?

It runs in two modes at once: give it keywords and it resolves matching public accounts from Snapchat's own Explore and Spotlight-search listings, or give it startUrls to scrape exact usernames directly — both can run in the same job. For every resolved account it fetches the profile page, extracts the main story and every highlight, and pulls each snap's media URLs and metadata. No Snapchat login or cookies are used anywhere in the Actor — every request hits a public page.

  • 🔍 Keyword/niche discovery of candidate accounts, with a per-keyword account cap
  • 👤 Direct scraping of known usernames or full profile URLs
  • 🎞️ Main story extraction, one row per account
  • ⭐ Highlight extraction, one row per highlight, fetched concurrently per account
  • 📸 Per-snap metadata: media URLs, captions, geolocation, timestamps
  • 👥 Pre-filter by subscriber count and verified/official status before the highlight fetch
  • 🌐 Automatic proxy tier fallback when a request is blocked

⚡ Features & Capabilities

Three feature areas matter here: entity coverage, cost-saving filters, and network resilience.

Core features

  • Unified row schema for both entity types — type is "story" or "highlight", isChild is false for the main story and true for each highlight
  • Nested snapList array on every row, with per-snap fields: snapIndex, mediaUrl, mediaPreviewUrl, createTime
  • Early-exit filters (minSubscribers, verifiedOrOfficialOnly) evaluated from the same page fetch used for stories — no extra request spent on accounts that get filtered out
  • discoveredViaKeyword on every row tells you which search term (if any) surfaced that account
  • Combined direct + keyword-discovered target list is de-duplicated by username before any scraping starts

Snapchat User Stories Scraper within the Scrapio data stack

Snapchat Story Scraper is Scrapio's only Snapchat Actor — it covers stories, highlights and snaps in a single run. If your workflow needs the equivalent story format on another platform, Scrapio also publishes Instagram Story Details Scraper With Overlay Text, which returns the same "story" entity shape for Instagram.

Why do developers and data teams scrape Snapchat?

Teams scraping Snapchat generally fall into a handful of recurring workflows — from finding niche creators to monitoring known accounts over time.

🏢 Influencer and brand discovery teams

Feed a niche (keywords: ["fitness"]) and get back candidate accounts with subscriberCount, badge, and publisherType already populated — no manual profile visits needed to qualify a lead. Set verifiedOrOfficialOnly: true to restrict discovery to accounts Snapchat itself marks as official, and minSubscribers to cut anything below your outreach threshold. The output drops straight into an outreach spreadsheet or CRM enrichment job keyed on username.

📊 AI training data and RAG indexing

storyTitle, snapTitle, and snapSubtitles are the high-information text fields here — they're what you'd embed for a RAG index of niche content, or use as labeled text for a content-classification training set. Every field returns as a typed primitive (string, boolean, integer, or null), so there's no HTML to strip before it reaches a context window or a training pipeline.

📱 Competitive and market intelligence

Point startUrls at a known competitor or partner account and re-run on a schedule to track snapList length and scrapedAt over time — a growing snap count between runs is a new story or highlight going live. subscriberCount and badge let you watch account growth and verification status change over the same period.

🔬 Research and academic use

keywords-based discovery plus the public metadata fields (subscriberCount, publisherType, verifiedOrOfficial) support social-media content studies across a niche, without needing a Snapchat developer account. Scope is limited to what Snapchat's public Explore, Spotlight-search, and profile pages expose — no private accounts, no data behind a login.

🎥 Product and SaaS development

The account-discovery + story-extraction pipeline is the same shape you'd build a creator-directory or content-monitoring product on: keyword in, qualified account list with story/highlight content out. discoveredViaKeyword keeps the provenance of each account intact if you're building a searchable directory.

🍚 Input Parameters

All seven parameters are optional — the Actor requires at least one of keywords or startUrls to have a value at runtime, but neither is marked required in the schema.

ParameterRequiredTypeDescriptionExample Value
keywordsNoarray (stringList)One or more topics/niches/keywords (e.g. "fashion", "gaming", "fitness"). The actor resolves real Snapchat accounts matching each term and scrapes their stories and highlights. Leave empty to only use Direct Usernames below.["fashion", "fitness"]
maxAccountsPerKeywordNointegerMaximum number of distinct accounts to resolve and scrape per keyword. Example: maxAccountsPerKeyword=10 with 2 keywords → up to 20 accounts total. Minimum 1, maximum 100, default 10.10
startUrlsNoarray (stringList)List exact Snapchat usernames (e.g., fcbarcelona) or profile URLs (e.g., https://www.snapchat.com/@fcbarcelona) to scrape directly, in addition to or instead of keyword discovery above.["fcbarcelona"]
minSubscribersNointegerSkip accounts with fewer than this many subscribers before the (more expensive) highlight fetch runs. Uses Snapchat's own subscriber count from the account's page. 0 = no minimum. Minimum 0, default 0.5000
verifiedOrOfficialOnlyNobooleanWhen enabled, skip accounts that Snapchat's own account data does not mark as verified/official (based on the account's badge and publisher-type data) before the highlight fetch runs. Default false (all accounts allowed).true
maxSnapsNointegerMaximum number of snaps to collect per story or highlight. Example: maxSnaps=20 → up to 20 snaps returned for the main story and up to 20 for each highlight. Minimum 1, maximum 1000, default 100.50
proxyConfigurationNoobject (proxy editor)Configure a proxy for requests to Snapchat. By default no proxy is used; the actor automatically retries through alternate proxy tiers if a request is rejected.{"useApifyProxy": true}

Full JSON input example:

{
"keywords": ["fashion", "fitness"],
"maxAccountsPerKeyword": 10,
"startUrls": ["fcbarcelona", "https://www.snapchat.com/@teamusa"],
"minSubscribers": 5000,
"verifiedOrOfficialOnly": true,
"maxSnaps": 50,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Supported URL types and input formats

startUrls accepts three interchangeable formats, all resolved to the same username internally:

  • A bare username: fcbarcelona
  • An @-prefixed handle: @fcbarcelona
  • A full profile URL: https://www.snapchat.com/@fcbarcelona

keywords accepts plain free-text terms — single words ("gaming") or short phrases work; they are URL-encoded and passed to Snapchat's own Explore and Spotlight-search listing pages as-is, so results depend on what Snapchat's public listing surfaces for that exact term.

📦 Output Format

Every scraped story or highlight is pushed to the dataset as one row the moment it's extracted — not batched at the end of the run. Results are available via the Apify platform's standard dataset views and export formats (JSON, CSV, Excel, XML, RSS) from the run's Storage tab, the API, or apify_client.

Output for stories

The main story is one row per account, type: "story", isChild: false:

{
"username": "fcbarcelona",
"type": "story",
"isChild": false,
"storyTitle": "Fcbarcelona",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/preview-main.jpg",
"highlightId": null,
"snapList": [
{
"snapIndex": 0,
"isSponsored": false,
"snapTitle": "Matchday",
"snapSubtitles": null,
"lat": null,
"lng": null,
"hasAttachment": true,
"intervalStartTimeMs": 1690000000000,
"audioTranscriptionObjectUrl": null,
"createTime": "2026-07-29T18:32:10.000Z",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/preview1.jpg",
"mediaUrl": "https://cf-st.sc-cdn.net/d/media1.mp4"
}
],
"discoveredViaKeyword": "fashion",
"subscriberCount": 1200000,
"badge": 1,
"publisherType": "official",
"verifiedOrOfficial": true,
"scrapedAt": "2026-07-30T09:14:02.000Z"
}

Output for highlights

Highlights use the identical row schema — same 13 fields — pushed as a separate row per highlight, type: "highlight", isChild: true, with highlightId populated:

{
"username": "fcbarcelona",
"type": "highlight",
"isChild": true,
"storyTitle": "Preseason",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/preview2.jpg",
"highlightId": "3a72f1e4-9c0d-4b7a-8e21-6f0a1c9d8b55",
"snapList": [
{
"snapIndex": 0,
"isSponsored": false,
"snapTitle": "Training Camp",
"snapSubtitles": null,
"lat": 41.3809,
"lng": 2.1228,
"hasAttachment": true,
"intervalStartTimeMs": 1688000000000,
"audioTranscriptionObjectUrl": null,
"createTime": "2026-06-29T10:05:00.000Z",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/preview3.jpg",
"mediaUrl": "https://cf-st.sc-cdn.net/d/media3.mp4"
}
],
"discoveredViaKeyword": null,
"subscriberCount": 1200000,
"badge": 1,
"publisherType": "official",
"verifiedOrOfficial": true,
"scrapedAt": "2026-07-30T09:14:41.000Z"
}

Output for snaps

Each entry inside snapList (on either a story or highlight row) carries its own 12-field schema:

{
"snapIndex": 0,
"isSponsored": false,
"snapTitle": "Matchday",
"snapSubtitles": null,
"lat": null,
"lng": null,
"hasAttachment": true,
"intervalStartTimeMs": 1690000000000,
"audioTranscriptionObjectUrl": null,
"createTime": "2026-07-29T18:32:10.000Z",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/preview1.jpg",
"mediaUrl": "https://cf-st.sc-cdn.net/d/media1.mp4"
}

Schema stability and export options

The row shape is fixed by the Actor's own code, not passed through unchanged from Snapchat's raw page data — field names stay the same across runs even as Snapchat updates its front end. The values themselves are extracted with pattern matching against the profile and highlight page HTML: if Snapchat changes the structure those patterns target, a field can return null for that run rather than under a different key. storyTitle falls back to the account's title-cased username when no title is found in the page. Export is whatever the Apify platform's dataset supports for any Actor — JSON, CSV, Excel, XML, RSS, or programmatic access via apify_client.

💡 Snapchat Story Scraper Strategy Guide

🎯 Strategy 1: Real-time enrichment pipeline

Trigger a run from your CRM or lead-gen tool whenever a new niche or handle needs qualifying: pass the handle in startUrls or the niche in keywords, run the Actor, then append subscriberCount, badge, publisherType, and verifiedOrOfficial back onto the lead record. minSubscribers and verifiedOrOfficialOnly let you reject unqualified accounts inside the same run instead of filtering afterward.

🎯 Strategy 2: Scheduled monitoring and alerting

Put known accounts in startUrls and run the Actor on an Apify Schedule. Compare snapList length and the newest scrapedAt against the previous run's dataset for the same username — a longer snapList or a new highlightId that wasn't there before is your alert signal that new content went live. Trigger a webhook on run completion to push the diff downstream.

🎯 Strategy 3: Bulk dataset build

Load a long list of niches into keywords (or a long list of known handles into startUrls) and run the Actor once; every row lands in the dataset as it's scraped, so you can export the whole run to CSV or pull it into a database via apify_client once it finishes. Accounts are processed one at a time inside a run — only the highlight fetches for a single account run concurrently (up to 5 at once, per the Actor's own connection limits) — so total run time scales with the number of resolved accounts and how many highlights each one has, not just with maxAccountsPerKeyword.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentQualifying leads/accounts on demandSingle triggered run per handle or nicheJSON row appended to CRM/lead record
Scheduled monitoringTracking known accounts over timeRecurring scheduled run, diffed against the lastJSON dataset per run, diffed downstream
Bulk dataset buildResearch or training datasets across many nichesOne run over a large keywords/startUrls listFull dataset export to CSV/database
ScraperWhat it extracts
Instagram Story Details Scraper With Overlay TextInstagram stories, including overlay text — same "story" entity on a different platform
TikTok User Profile ScraperTikTok profile-level data — complementary if your niche-discovery workflow spans platforms
Instagram Posts Scraper: Sponsored Post FinderInstagram feed posts, including sponsored-post detection
Instagram Profile Post Scraper: Hashtag & Business LeadsInstagram profile posts by hashtag, plus business-lead fields

How to integrate Snapchat Story Scraper with your stack

Snapchat Story Scraper works with any language or tool that can make an HTTP request through the Apify API, or the apify_client SDKs below.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"keywords": ["fitness"],
"maxAccountsPerKeyword": 10,
"minSubscribers": 1000,
"verifiedOrOfficialOnly": False,
"maxSnaps": 50,
}
run = client.actor("scrapio/snapchat-user-stories-scraper-by-niche-and-keyword-search").call(
run_input=run_input
)
rows = []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
rows.append({
"username": item.get("username"),
"type": item.get("type"),
"storyTitle": item.get("storyTitle"),
"snapCount": len(item.get("snapList") or []),
"subscriberCount": item.get("subscriberCount"),
"verifiedOrOfficial": item.get("verifiedOrOfficial"),
})
import csv
with open("snapchat_stories.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('scrapio/snapchat-user-stories-scraper-by-niche-and-keyword-search').call({
keywords: ['fitness'],
maxAccountsPerKeyword: 10,
minSubscribers: 1000,
maxSnaps: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const rows = items.map((item) => ({
username: item.username,
type: item.type,
storyTitle: item.storyTitle,
snapCount: (item.snapList || []).length,
subscriberCount: item.subscriberCount,
}));
console.log(rows);

Async and scheduled pipelines

For large keywords/startUrls lists, start the run via the API and poll client.run(runId).get() for status instead of waiting synchronously — rows are already appearing in the dataset while the run is in progress. For recurring jobs, use an Apify Schedule to trigger the run on a cron interval, and an Apify webhook on the ACTOR.RUN.SUCCEEDED event to notify your own system when a run finishes.

🎯 Who Needs Snapchat Story Scraper? (Use Cases & Industries)

🏢 Influencer and brand marketing teams

A marketing team searching keywords: ["fitness", "wellness"] gets back candidate accounts with subscriberCount and verifiedOrOfficial already populated, letting them shortlist creators for outreach without opening each profile by hand.

📊 AI/ML and RAG engineering teams

Teams building a niche-content RAG index or a classifier pull storyTitle and snapTitle as clean text fields, already typed and ready to embed, with no HTML markup to strip first.

📱 Competitive and social-listening teams

Analysts tracking a competitor's or partner's account put it in startUrls, schedule repeat runs, and watch snapList length and scrapedAt for signs of new campaign content going live.

🔬 Researchers

Academic and market researchers studying content patterns within a niche use keywords discovery plus the public subscriberCount/publisherType/verifiedOrOfficial fields to build a dataset scoped to public accounts only.

🎥 Product and directory builders

Teams building a creator-directory or monitoring SaaS product use the discovery-plus-extraction pipeline as the ingestion layer, keeping discoveredViaKeyword for provenance in a searchable index.

Scraping publicly accessible web pages is generally lawful in the United States — in hiQ Labs v. LinkedIn Corp., 9th Cir. 2019, the court held that scraping data not behind a login does not violate the Computer Fraud and Abuse Act. That precedent concerns public-page access, not Snapchat's terms of service specifically. Separately, violating a platform's Terms of Service is a civil contract matter between the account holder and Snapchat, not a criminal one — but it can still result in access being restricted. Because this Actor can return usernames, subscriber counts, and story content belonging to identifiable individuals as well as brand and official accounts, treat any personal data you collect under applicable data protection law (GDPR, CCPA, or your local equivalent) — determine your own lawful basis before storing or reusing it. Snapchat Story Scraper returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Does Snapchat Story Scraper work without a Snapchat account?

Yes. The Actor never logs in and never sends session cookies — every request (discovery, profile, and highlight pages) hits a public Snapchat URL with only browser-style headers attached.

How does Snapchat Story Scraper handle Snapchat's anti-scraping measures?

It sends browser-matching request headers on every fetch and, when Snapchat responds with 403, 429, or 503, or the connection fails outright, it automatically retries through Apify Proxy tiers — first datacenter, then residential — before giving up on that request. By default no proxy is used at all unless you configure one.

Can I run Snapchat Story Scraper at scale without getting blocked?

There's no published uptime or block-rate figure. What is documented in the Actor's own code: accounts are processed one at a time within a run, and only the highlight fetches for a single account run concurrently (capped at 5 in flight, with a total connection limit of 10 for the run's HTTP session). Larger keywords/startUrls lists take proportionally longer rather than running fully in parallel.

How fresh is the data Snapchat Story Scraper returns?

It's a live fetch every run — each account's profile and highlight pages are requested fresh each time the Actor runs; nothing is served from a cache.

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

For RAG, use storyTitle and snapTitle/snapSubtitles — the highest-information text fields. For training data, type, isChild, subscriberCount, badge, and verifiedOrOfficial are the most consistently structured fields across every row. All fields return as typed primitives (string, boolean, integer, or null), so no text cleanup is needed before use.

Does scraping Snapchat raise data protection concerns?

It can, where the target accounts belong to identifiable individuals rather than brands — the Actor returns only publicly available account and story data, and does not attempt to identify private or non-public information. Determining your lawful basis for storing and using any personal data you collect is your responsibility.

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

It isn't served through an MCP server. It's callable as a standard Apify Actor run via apify_client or the REST API from any agent framework that can make an HTTP request — every response is typed JSON, so it can be passed straight into an LLM context window without parsing.

What happens to accounts that get filtered out by minSubscribers or verifiedOrOfficialOnly?

They're skipped before the highlight fetch runs and no row is pushed for them at all — so no row_result charge is incurred for an account that doesn't meet your filter.

Does keyword discovery guarantee maxAccountsPerKeyword accounts per keyword?

No. Discovery resolves candidates from Snapchat's own Explore and Spotlight-search listing pages for that term — if fewer accounts appear on those public listings than your maxAccountsPerKeyword value, you get however many were found, not a padded-out list.

ℹ️ Disclaimer

Snapchat Story Scraper extracts only publicly available data from Snapchat. This tool is intended for lawful use cases only. Users are responsible for complying with Snapchat's terms of service and applicable data protection laws in their jurisdiction.