Snapchat Profile Scraper - Stories & Saved Highlights avatar

Snapchat Profile Scraper - Stories & Saved Highlights

Pricing

Pay per usage

Go to Apify Store
Snapchat Profile Scraper - Stories & Saved Highlights

Snapchat Profile Scraper - Stories & Saved Highlights

Extract public Snapchat profile data with the Snapchat Profile Scraper. Retrieve usernames, display names, story info, and follower stats. Ideal for influencer research, marketing insights, and audience analysis. Fast, reliable, and scalable for individual or bulk profiles.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

1

Bookmarked

70

Total users

2

Monthly active users

3 days ago

Last modified

Share

Snapchat Profile Scraper — Live Story and Saved Highlight Snaps

Snapchat Profile Scraper - Stories & Saved Highlights loads a public Snapchat profile page and returns the base profile record together with the creator's live public Story and every saved Highlight album — the creator-written album title, per-snap photo and video URLs, preview thumbnails, and real epoch timestamps. One HTTP request per profile, no Snapchat account or login required. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. Point it at a list of usernames or profile URLs and get back clean, comparable records for every profile you supply.


What is Snapchat Profile Scraper - Stories & Saved Highlights?

Snapchat Profile Scraper - Stories & Saved Highlights is an Apify Actor that fetches a public Snapchat profile page and extracts everything the page itself ships in a single request: the base profile record, the creator's currently-live public Story, and every saved Highlight album — the permanent, creator-curated collections that the leading Snapchat scrapers on the Apify Store either leave empty or don't document at all (see How does it compare to other Snapchat scrapers?). No Snapchat account, cookie, or login is required — the Actor reads the same __NEXT_DATA__ JSON block that renders the public profile page in a browser.

What it returns, per profile:

  • 👤 Base profile record — the raw publicProfileInfo (public accounts) or a rescued userInfo object (personal accounts), plus profileType and pageType
  • 📖 Live public Story — every currently-live Story snap, with a real per-snap timestamp, media URL, and preview URL
  • Saved Highlight albums — every permanent Highlight album, its creator-written title, and its snaps
  • 🎞️ Spotlight videos — the base scraper's original Spotlight extraction (play/share/comment counts), unchanged
  • 🎚️ Media-type and date filters — keep only photos or only videos, or only snaps posted in the last N days
  • 🧾 Optional flat snap dataset — every kept Story and Highlight snap mirrored into a second named dataset, one row per snap, ready for CSV or Excel export

What data can you get with Snapchat Profile Scraper - Stories & Saved Highlights?

The Actor extracts four result types from a single profile-page request: the base profile record, the live Story, the saved Highlight albums, and (unchanged from the base scraper) Spotlight videos.

Result TypeExtracted FieldsPrimary Use Case
Base profile recordRaw publicProfileInfo / rescued userInfo, profileType, pageType, hasLiveStory, hasSavedHighlightsBaseline identity and account-type check
Live public Storystory.snapCount, snapCountAvailable, newestSnapAt, oldestSnapAt, per-snap mediaUrl, mediaPreviewUrl, mediaType, postedAt, ageDaysConfirm what a creator currently has live
Saved Highlight albumscuratedHighlights[].title, highlightId, snapCount, per-snap fields identical to Story snapsCatalogue a creator's permanent content library by album title
Spotlight videosspotlight[].spotlightTitle, plays, shares, comments, mediaUrl, transcriptUrlEngagement benchmarking on algorithmic Spotlight posts
Flat snap rows (optional)One row per kept Story/Highlight snap, plus username, profileUrl, highlightTitle, highlightIdSpreadsheet-ready export without nested JSON

Live Story and Saved Highlight Snaps

This is the capability the other Snapchat scrapers on the Apify Store don't deliver a populated version of. The Story object is built from props.pageProps.story — the creator's currently-live public Story, gated on the object actually being present rather than on Snapchat's own (unreliable) hasStory flag. The Highlight albums come from props.pageProps.curatedHighlights — the creator's saved, permanent Highlight collections, each carrying the title the creator actually wrote. Both arrive with the same profile-page request; enabling either toggle costs zero extra HTTP calls.

"story": {
"storyId": "kyliejenner",
"storyType": 1,
"snapCount": 2,
"snapCountAvailable": 2,
"newestSnapAt": "2026-07-24T18:02:11.000Z",
"oldestSnapAt": "2026-07-23T09:41:07.000Z",
"snaps": [
{ "source": "story", "mediaType": "video", "mediaUrl": "https://cf-st.sc-cdn.net/...", "postedAt": "2026-07-24T18:02:11.000Z" }
]
},
"curatedHighlights": [
{
"highlightId": "a91f...",
"title": "Kylie Cosmetics Launch",
"snapCount": 14,
"snaps": [ { "source": "highlight", "mediaType": "photo", "mediaUrl": "https://cf-st.sc-cdn.net/..." } ]
}
]

Base profile record and Spotlight videos

The base profile record is the raw publicProfileInfo (or, for personal accounts, a rescued userInfo object) exactly as Snapchat's page ships it — it is not re-shaped by the Actor, so its exact keys vary by profile type. userInfo is specifically salvaged for the personal-account page shape ($case == "userInfo"), which the underlying page structure otherwise discards entirely, and it always carries username, displayName, snapcodeImageUrl, bitmoji3d, plus the untouched raw object for anything else you need. Spotlight videos are the base scraper's original, unmodified extraction: one object per Spotlight clip with plays, shares, comments, a direct mediaUrl, and an audioTranscriptionObjectUrl when the clip carries a transcript. This preserves parity with what a standard Snapchat profile scraper returns, while the Story and Highlight data sits on top of it.


Why not build this yourself?

Snapchat does not publish a public, third-party API for reading an arbitrary public profile page, its live Story, or its saved Highlight albums — the only path to this data is the same HTML page a browser loads, with the payload embedded in a <script id="__NEXT_DATA__"> block. Building and maintaining that yourself means reverse-engineering a page shape that shifts without notice and defending against the site's own bot detection, all before you've written a single line of the actual Story/Highlight extraction logic.

The Actor's own source carries the scar tissue from doing this in production: an earlier version unconditionally read publicProfileInfo.username inside the Spotlight loop, which raises a KeyError on any page where the account is a personal (userInfo) profile instead of a public one. A live profile in testing (@leekirra) also shipped storyId, videoMetadata, and engagementStats as JSON null instead of an object, which crashes a naive .get("value") chain. Both are now guarded. On top of that, every request goes out with a Chrome TLS fingerprint (curl_cffi, impersonate="chrome"), retries with backoff, and an automatic switch to Apify's Residential proxy group the moment a request comes back 403 or 429. Reproducing all of that — and keeping it working as Snapchat's page changes — is the ongoing cost this Actor absorbs instead of you.


What is the difference between Snapchat Spotlight and Story Highlights?

Snapchat Spotlight is the platform's algorithmic short-video feed — individual public clips surfaced to any viewer, carried in the spotlight array with per-clip plays, shares, and comments. Story Highlights are a different, older concept: a creator's own curated Story clips that they've chosen to keep visible on their profile page indefinitely, with a title the creator wrote themselves, carried in curatedHighlights. A live Story (story) is a third, separate thing again — ephemeral content the creator currently has posted, with no guarantee it existed yesterday or will exist tomorrow.

The distinction matters because Spotlight measures reach and algorithmic performance, while Highlights measure what a creator actually chose to preserve and label — closer to a curated portfolio than a popularity signal. A profile can have heavy Spotlight activity and zero saved Highlights, or the reverse. Snapchat Profile Scraper - Stories & Saved Highlights returns all three as separate, named JSON objects (spotlight, story, curatedHighlights) in the same row, so you don't have to infer which kind of content you're looking at from field shape alone.


How to scrape Snapchat profiles with Snapchat Profile Scraper - Stories & Saved Highlights?

  1. Open Snapchat Profile Scraper - Stories & Saved Highlights on the Apify Console (no separate signup — an Apify account covers every Actor on the platform).
  2. Enter one or more values in urls — a bare username (kyliejenner), a full profile URL (https://www.snapchat.com/@kyliejenner), or the snapchat.com/add/<username> form.
  3. Set the real query controls: includeStory, includeCuratedHighlights, snapMediaType, postedWithinDays, and the per-album/per-profile caps (maxSnapsPerHighlight, maxStorySnaps, maxHighlights).
  4. Click Start and let the run process the list.
  5. Download the dataset as JSON, JSONL, CSV, Excel, HTML table, or XML from the Storage tab, or pull it with the Apify API / apify_client.

How to run multiple profiles in one job

urls accepts an array, so a single run can process any number of usernames or profile URLs — add them all as list items in the Console's string-list editor, or pass a JSON array through the API. Profiles are processed one at a time within a run, and each result is pushed to the dataset immediately after that profile finishes, so a run you stop early still leaves you with every profile it already completed.


⬇️ Input

All input is read from .actor/actor.json's input schema. Only urls is required; every other field has a default and can be left untouched.

ParameterRequiredTypeConstraintsDescription
urlsYesarrayminItems: 1, unique itemsSnapchat usernames or profile URLs. Accepts a bare username, snapchat.com/@username, or snapchat.com/add/username.
includeStoryNobooleandefault: trueExtract the creator's currently-live public Story.
includeCuratedHighlightsNobooleandefault: trueExtract the creator's saved Highlight albums.
snapMediaTypeNostringdefault: "any"; enum: any, photo, videoKeep only photo snaps, only video snaps, or both.
postedWithinDaysNointegerdefault: 0; min: 0; max: 3650Drop Story/Highlight snaps older than N days. 0 = keep everything.
maxSnapsPerHighlightNointegerdefault: 0; min: 0; max: 500Cap snaps kept per Highlight album, newest first. 0 = no cap.
maxStorySnapsNointegerdefault: 0; min: 0; max: 500Cap live Story snaps kept per profile, newest first. 0 = no cap.
maxHighlightsNointegerdefault: 0; min: 0; max: 200Cap the number of Highlight albums kept per profile, newest first. 0 = no cap.
pushSnapsToChildDatasetNobooleandefault: falseMirror every kept snap into a separate named dataset, one row per snap.
childDatasetNameNostringdefault: "snapchat-snaps"Name of the child dataset used for flat snap rows. Only used when the option above is on.
maxRetriesNointegerdefault: 3; min: 3; max: 10Attempts per profile before the run gives up on it.
requestTimeoutSecsNointegerdefault: 30; min: 5; max: 180HTTP timeout, in seconds, for each profile page request.
proxyConfigurationNoobjectApify proxy editorOptional. Defaults to no proxy — direct connection is what the public profile page needs.

Example input:

{
"urls": ["kyliejenner", "https://www.snapchat.com/@nba", "snapchat.com/add/jackjerry"],
"includeStory": true,
"includeCuratedHighlights": true,
"snapMediaType": "any",
"postedWithinDays": 0,
"maxSnapsPerHighlight": 0,
"maxStorySnaps": 0,
"maxHighlights": 0,
"pushSnapsToChildDataset": false,
"childDatasetName": "snapchat-snaps",
"maxRetries": 3,
"requestTimeoutSecs": 30,
"proxyConfiguration": { "useApifyProxy": false }
}

Common pitfall: maxRetries accepts values from 3 to 10 in the Console UI, but if you call the Actor through the API and pass a value below 3 anyway, the engine silently raises it back to 3 — the floor is enforced in code, not only in the schema. Separately, maxHighlights can only ever reduce the album count you get back: Snapchat's profile page serves only one page of Highlight albums with no working pagination, so there's no way to request more albums than the page itself shipped.

⚠️ Every dataset row this Actor pushes is charged, including a profile that fails after all retries and an invalid urls entry that couldn't be parsed into a username. There is no separate, uncharged accounting row — see Are failed or invalid profiles charged? below.


⬆️ Output

Results are pushed as typed, normalized JSON — one row per profile in the main dataset, with a consistent schema across runs. Download the dataset as JSON, JSONL, CSV, Excel, HTML table, or XML from the Storage tab.

The default dataset view shows 12 summary columns (username, profileType, hasLiveStory, storySnapCount, highlightCount, highlightSnapCount, totalSnapCount, newestSnapAt, oldestSnapAt, highlightTitles, url, ok) — that's a subset for readability. The full row carries every field documented below.

Scraped results

A successful row (ok: true) contains:

  • ok, username, url, attempt, proxyMode
  • profileFound, profileType (publicProfile / personalAccount / unknown), pageType, httpStatus
  • hasLiveStory, hasSavedHighlights
  • storySnapCount, storySnapCountAvailable, highlightCount, highlightCountAvailable, highlightSnapCount, highlightSnapCountAvailable, totalSnapCount, photoSnapCount, videoSnapCount
  • newestSnapAt, oldestSnapAt, highlightTitles (pipe-joined album titles), scrapedAt
  • appliedFilters: { includeStory, includeCuratedHighlights, snapMediaType, postedWithinDays, maxSnapsPerHighlight, maxStorySnaps, maxHighlights }
  • data: { search, spotlight[], userProfile, spotlightHighlights[], story, curatedHighlights[] } — the full nested payload

A failed row (ok: false) drops data and appliedFilters and instead carries error, plus profileFound, profileType, httpStatus, and zeroed/null counters. An unparseable urls entry produces a minimal row: { ok: false, input, error }.

[
{
"ok": true,
"username": "kyliejenner",
"url": "https://www.snapchat.com/@kyliejenner",
"attempt": 1,
"proxyMode": "direct",
"profileFound": true,
"profileType": "publicProfile",
"pageType": 1,
"httpStatus": 200,
"hasLiveStory": true,
"hasSavedHighlights": true,
"storySnapCount": 2,
"storySnapCountAvailable": 2,
"highlightCount": 2,
"highlightCountAvailable": 2,
"highlightSnapCount": 4,
"highlightSnapCountAvailable": 4,
"totalSnapCount": 6,
"photoSnapCount": 3,
"videoSnapCount": 3,
"newestSnapAt": "2026-07-24T18:02:11.000Z",
"oldestSnapAt": "2026-05-11T14:20:03.000Z",
"highlightTitles": "Kylie Cosmetics Launch | Behind the Scenes",
"scrapedAt": "2026-07-25T09:00:00.000Z",
"appliedFilters": {
"includeStory": true,
"includeCuratedHighlights": true,
"snapMediaType": "any",
"postedWithinDays": 0,
"maxSnapsPerHighlight": 0,
"maxStorySnaps": 0,
"maxHighlights": 0
},
"data": {
"search": "https://www.snapchat.com/add/kyliejenner",
"spotlight": [
{
"spotlightId": "W7_ABC123",
"link": "/@kyliejenner/spotlight/W7_ABC123",
"thumbnailSrc": "https://cf-st.sc-cdn.net/d/thumb1.jpg",
"spotlightTitle": "",
"plays": 812340,
"shares": 4021,
"comments": 118,
"isSponsored": null,
"timestampInSec": 1753142400,
"mediaUrl": "https://cf-st.sc-cdn.net/d/video1.mp4",
"transcriptUrl": null
}
],
"userProfile": {
"publicProfileInfo": {
"username": "kyliejenner",
"title": "Kylie Jenner",
"subscriberCount": "9214300",
"bio": "🤍",
"hasCuratedHighlights": true,
"hasStory": false
}
},
"spotlightHighlights": [],
"story": {
"storyId": "kyliejenner",
"storyType": 1,
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/storythumb.jpg",
"snapCount": 2,
"snapCountAvailable": 2,
"newestSnapAt": "2026-07-24T18:02:11.000Z",
"oldestSnapAt": "2026-07-23T09:41:07.000Z",
"snaps": [
{
"source": "story",
"containerId": "kyliejenner",
"snapIndex": 0,
"snapKey": "kyliejenner#0",
"snapId": "W7_STORY001",
"mediaTypeCode": 1,
"mediaType": "video",
"mediaUrl": "https://cf-st.sc-cdn.net/d/storysnap1.mp4",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/storysnap1_preview.jpg",
"timestampInSec": 1753380131,
"postedAt": "2026-07-24T18:02:11.000Z",
"ageDays": 0.712,
"isSponsored": null
}
]
},
"curatedHighlights": [
{
"position": 0,
"highlightId": "a91f7c",
"title": "Kylie Cosmetics Launch",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/hl1thumb.jpg",
"storyType": 3,
"snapCount": 2,
"snapCountAvailable": 2,
"newestSnapAt": "2026-06-02T11:00:00.000Z",
"oldestSnapAt": "2026-05-30T08:15:00.000Z",
"snaps": [
{
"source": "highlight",
"containerId": "a91f7c",
"snapIndex": 0,
"snapKey": "a91f7c#0",
"snapId": "",
"mediaTypeCode": 0,
"mediaType": "photo",
"mediaUrl": "https://cf-st.sc-cdn.net/d/hl1snap1.jpg",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/hl1snap1_preview.jpg",
"timestampInSec": 1748855700,
"postedAt": "2026-06-02T11:00:00.000Z",
"ageDays": 53.083,
"isSponsored": false
}
]
}
]
}
},
{
"ok": true,
"username": "nba",
"url": "https://www.snapchat.com/@nba",
"profileFound": true,
"profileType": "publicProfile",
"hasLiveStory": false,
"hasSavedHighlights": true,
"storySnapCount": 0,
"highlightCount": 5,
"highlightSnapCount": 61,
"totalSnapCount": 61,
"newestSnapAt": "2026-07-20T02:11:09.000Z",
"oldestSnapAt": "2026-02-14T19:30:00.000Z",
"highlightTitles": "Playoffs | Draft Night | All-Star | Media Day | Championship",
"scrapedAt": "2026-07-25T09:01:41.000Z",
"data": { "story": null, "curatedHighlights": [ "...4 more albums omitted for brevity..." ] }
},
{
"ok": false,
"username": "definitely_not_a_real_handle",
"url": "https://www.snapchat.com/@definitely_not_a_real_handle",
"error": "HTTPError 404: https://www.snapchat.com/@definitely_not_a_real_handle",
"attempt": 1,
"proxyMode": "direct",
"profileFound": false,
"profileType": "notFound",
"httpStatus": 404,
"hasLiveStory": null,
"hasSavedHighlights": null,
"storySnapCount": 0,
"highlightCount": 0,
"highlightSnapCount": 0,
"totalSnapCount": 0,
"newestSnapAt": null,
"oldestSnapAt": null,
"highlightTitles": null,
"scrapedAt": "2026-07-25T09:02:03.000Z"
}
]

When pushSnapsToChildDataset is true, each kept snap is also written as its own flat row to the named dataset (childDatasetName), carrying every snap field above plus username, profileUrl, highlightTitle, and highlightId:

{
"source": "highlight",
"containerId": "a91f7c",
"snapIndex": 0,
"snapKey": "a91f7c#0",
"snapId": "",
"mediaTypeCode": 0,
"mediaType": "photo",
"mediaUrl": "https://cf-st.sc-cdn.net/d/hl1snap1.jpg",
"mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/hl1snap1_preview.jpg",
"timestampInSec": 1748855700,
"postedAt": "2026-06-02T11:00:00.000Z",
"ageDays": 53.083,
"isSponsored": false,
"username": "kyliejenner",
"profileUrl": "https://www.snapchat.com/@kyliejenner",
"highlightTitle": "Kylie Cosmetics Launch",
"highlightId": "a91f7c"
}

How can I use the data extracted with Snapchat Profile Scraper - Stories & Saved Highlights?

  • 🎤 Talent and influencer marketing teams: vet a creator on highlightCount, highlightTitles, and hasLiveStory before a sponsorship — see what they actually keep visible, not just their polished Spotlight reel.
  • 🤖 AI engineers and LLM developers: feed the structured story and curatedHighlights objects to an agent as grounding context, so it can answer questions about a creator's current and saved content without scraping the page itself.
  • 📊 Market and competitive researchers: compare totalSnapCount, photoSnapCount, and videoSnapCount across a list of brand accounts to benchmark posting volume and media mix.
  • 🕵️ Brand safety and OSINT investigators: pull direct mediaUrl links and real postedAt timestamps for a profile's public content without needing a Snapchat account.
  • 🗂️ Digital asset and archive teams: set pushSnapsToChildDataset to true and export the flat snap dataset straight to CSV or Excel, one row per media asset, without unpacking nested JSON by hand.

Whichever audience you're in, the same two fields do most of the work: highlightTitles for a quick read on what a profile is curating, and totalSnapCount (with its photoSnapCount / videoSnapCount split) for a quick read on how much of it there is.


How do you monitor Live Story and Saved Highlight Snaps over time?

Monitoring means running the same list of usernames on a schedule and diffing the fields that change between runs, rather than treating any single run as a final answer — a live Story is ephemeral by design, and Highlight albums get added, renamed, or dropped over time. Because both story and curatedHighlights come from the same single-page request the Actor already makes, monitoring doesn't cost anything extra per run beyond re-scraping the profile.

Between two runs on the same profile, watch: hasLiveStory and storySnapCount (did the creator post or stop posting a Story), highlightCount and highlightTitles (did an album get added, removed, or renamed), and newestSnapAt (is the account still active at all). Because highlightTitles is the pipe-joined list of album titles in the current order, a changed string is a fast signal that something in the Highlight library moved even before you diff individual highlightId values.

A concrete workflow: run the Actor on a fixed list of usernames every few hours or once a day via an Apify Schedule, store each run's dataset, and compare the previous run's highlightTitles and hasLiveStory against the new one — alert when either changes. For a tighter loop on live activity specifically, shorten postedWithinDays and re-run more frequently so you're only re-confirming recent snaps rather than the full Highlight history each time.


🔗 Integrate Snapchat Profile Scraper - Stories & Saved Highlights and automate your workflow

Snapchat Profile Scraper - Stories & Saved Highlights works with any language or tool that can send an HTTP request, through the Apify API and the apify_client SDKs.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("<YOUR_USERNAME>/snapchat-profile-scraper-stories-saved-highlights").call(
run_input={
"urls": ["kyliejenner", "https://www.snapchat.com/@nba"],
"includeStory": True,
"includeCuratedHighlights": True,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["username"], item.get("highlightTitles"))

Scheduled monitoring and delivery

The Actor has no built-in webhook or push-delivery feature of its own, but it runs on the standard Apify platform primitives: set up an Apify Schedule to trigger a run on a fixed interval, and attach a webhook on run events (e.g. ACTOR.RUN.SUCCEEDED) to notify an external endpoint once a run's dataset is ready to pull.


Yes — scraping publicly accessible Snapchat profile pages is generally legal; Snapchat Profile Scraper - Stories & Saved Highlights returns only what any logged-out visitor can already see on the profile page. In hiQ Labs v. LinkedIn (9th Cir. 2019), the court held that scraping data a website makes publicly accessible does not violate the U.S. Computer Fraud and Abuse Act. Because profile usernames, bios, and creator content can constitute personal data about identifiable individuals, GDPR and CCPA still apply to how you store and process it, independent of whether the collection itself was lawful. Scraping for one-off research and monitoring carries a different risk profile than bulk collection for AI training. Consult your legal team for commercial use cases involving bulk data storage.


❓ Frequently asked questions

Do I need a Snapchat account or login to use this Actor?

No. The Actor fetches the public profile page directly — the same page a logged-out browser sees — and never uses a Snapchat account, cookie, or API key.

What Snapchat username or URL formats does urls accept?

Three forms: a bare username (kyliejenner), a full profile URL (https://www.snapchat.com/@kyliejenner), and the snapchat.com/add/<username> deep-link form. All three resolve to the same profile.

Does Snapchat Profile Scraper - Stories & Saved Highlights extract the live Story and saved Highlight albums?

Yes. The live Story arrives in the data.story object and the saved Highlight albums in data.curatedHighlights, each with real per-snap timestamps and media URLs. story is null when nothing is currently live, and curatedHighlights is an empty array when a profile has no saved albums — both are valid, correctly-reported states, not failures.

How many Highlight albums and snaps does the Actor return per profile?

Up to maxHighlights albums (0200, default 0 = no cap) and up to maxSnapsPerHighlight snaps per album (0500, default 0 = no cap), newest first. These caps can only reduce what comes back — Snapchat's profile page serves a single page of Highlight albums with no working pagination, so there is no way to request more than the page itself ships.

Can I filter snaps by media type or date?

Yes. snapMediaType keeps only photo or video snaps (default any), and postedWithinDays drops any Story or Highlight snap older than N days (03650, default 0 = keep everything), based on each snap's real epoch timestamp.

How does Snapchat Profile Scraper - Stories & Saved Highlights handle Snapchat's anti-bot measures?

Requests go out with a Chrome TLS fingerprint via curl_cffi (impersonate="chrome"), with plain requests as an automatic fallback if that library isn't available. Each profile retries up to maxRetries times with increasing backoff, and the Actor switches from a direct connection to Apify's Residential proxy group automatically the first time a request comes back blocked (403/429) or otherwise flagged — then stays on Residential for the rest of the run.

Are failed or invalid profiles charged?

Yes. Every row the Actor pushes to the dataset — a successful profile, a profile that failed after exhausting its retries, and an unparseable urls entry — charges the row_result pay-per-event. There is no separate, uncharged accounting row; filter on the ok field after the fact if you need to separate successes from failures in your own analysis.

How do I use Snapchat Profile Scraper - Stories & Saved Highlights to monitor a creator's Story and Highlights over time?

Run the same username list on an Apify Schedule, and compare each run's hasLiveStory, storySnapCount, highlightCount, and highlightTitles against the previous run — a changed value is your signal that the creator posted, dropped a Story, or edited their Highlight library.

Does Snapchat Profile Scraper - Stories & Saved Highlights work with Claude, ChatGPT, and AI agent frameworks?

It's callable as a standard HTTP endpoint through the Apify API and apify_client, so any agent framework that can issue an HTTP request can call it, receive the JSON result, and use it as grounded context before answering a question about a profile's current content.

How does Snapchat Profile Scraper - Stories & Saved Highlights compare to other Snapchat scrapers?

As observed on their live Apify Store listings on 2026-07-26: argusapi's snapchat-profile-scraper sample output ships curatedHighlightSnaps and latestStorySnaps as empty arrays; karamelo's snapchat-profile-scraper documents the raw spotlightHighlights field, not the saved, creator-titled Highlight albums (curatedHighlights) or a live Story; easyapi's snapchat-profile-scraper documents only static profile fields (username, bio, subscriber count, category) with no Story or Highlight output at all. Snapchat Profile Scraper - Stories & Saved Highlights returns both the live Story and the saved, creator-titled Highlight albums as populated, documented JSON objects in every response.

Can I use Snapchat Profile Scraper - Stories & Saved Highlights without managing proxies or Snapchat credentials?

Yes. The Actor never asks for Snapchat credentials, and it defaults to a direct connection with no proxy at all — that's what the public profile page needs. If you turn on proxyConfiguration.useApifyProxy and a request still gets blocked, the Actor switches to Apify's Residential proxy group on your behalf and logs the switch; you never have to manage proxy pools or rotation yourself.


💬 Your feedback

Found a bug or a field that doesn't match what Snapchat's page actually ships? Let us know through the Actor's Issues tab on Apify, or reach the Scrapier team via the Apify Console's built-in support chat. Reports against real profiles help keep the extraction accurate as Snapchat's page evolves.