Snapchat Profile Scraper & Spotlight Transcripts avatar

Snapchat Profile Scraper & Spotlight Transcripts

Pricing

Pay per usage

Go to Apify Store
Snapchat Profile Scraper & Spotlight Transcripts

Snapchat Profile Scraper & Spotlight Transcripts

The Snapchat Profile Scraper collects public profile data from Snapchat, including usernames, bios, subscriber counts, and Snap information. Ideal for marketers, analysts, and researchers to identify influencers, analyze engagement, and gather insights for social media strategy.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

0

Monthly active users

7 days ago

Last modified

Share

Snapchat Profile Scraper — Spotlight Clips and Transcripts

Snapchat Profile Scraper & Spotlight Transcripts turns a Snapchat username or profile URL into the full public profile record plus every Spotlight clip — real play/share/comment counts, a spoken-word transcript pulled from Snapchat's own WebVTT caption files, Snapchat's own AI-generated title/description/keywords, and live keyword search across every clip's transcript, AI metadata, and on-screen text. It's built for content researchers who need to search inside short-form video content rather than just its metadata, social listening teams tracking what creators are actually saying in their Spotlight clips, and trend researchers comparing real engagement metrics across a set of profiles. No Snapchat login is required for public profile pages or transcript downloads. Every section below documents an input, an output field, or one of several source-documented correctness fixes over a prior scraping approach.

What is Snapchat Profile Scraper & Spotlight Transcripts?

This Actor fetches a Snapchat profile page, parses its embedded __NEXT_DATA__ JSON for the profile and every public Spotlight clip's metadata, and — for clips that have one — downloads and parses the actual WebVTT transcript file into readable spoken text.

Key capabilities, read from the source's own documented fixes:

  • Corrected Spotlight ID extraction. The source's own comment explains a real bug in id parsing: live Snapchat deeplinks are AppsFlyer-wrapped URLs where a naive split("spotlight/")[1].split("?")[0] leaks trailing parameters into the ID, which then never matches the real storyId — breaking transcript lookup on every clip. This Actor's extract_spotlight_ids() extracts the correct ID via regex and cross-checks it against known story IDs.
  • Every snap in a highlight walked, not just the first. A documented fix (P0-7) means the Actor iterates every snap in a Spotlight highlight for transcript URLs and timestamps, rather than stopping at the first one — a highlight with multiple snaps no longer silently loses data from snaps after the first.
  • Honest play/share counts even when Snapchat's own field lies. Two documented fixes: videoMetadata.viewCount is "-1" on some clips (P0-4) and videoMetadata.shareCount is the string "0" which is truthy in a naive or chain (P0-3) — fixed_plays/fixed_shares correctly fall through to engagementStats' real numbers instead of reporting a nonsensical -1 or silently keeping a stale "0".
  • Personal-only accounts no longer silently emptied. A documented fix (P0-1) means a personal (non-public) profile that previously returned an empty userProfile: {} with ok: true now correctly returns its userInfo block instead of a misleadingly "successful but empty" result.
  • Real WebVTT transcript parsing, not a guess. attach_transcripts() downloads each clip's actual caption file and parses genuine cue text; hasTranscript/transcriptStatus explicitly distinguish "ok", "junk" (empty parse), "fetch_failed", "skipped", and "none" — never claiming a transcript exists when it doesn't.
  • Live keyword search across three real surfaces. _match_clip() searches transcriptKeywords against transcript text, AI metadata (title/description/keywords), and on-screen text/caption — matchedKeywords and matchSource disclose exactly which surface matched.
  • A legacy-compatibility toggle for the corrected fields. preserveBaseFieldQuirks lets a pipeline built against the original (buggy) field values keep receiving them byte-for-byte under the original key names, while the corrected values are always available under new keys regardless.

What data can I extract with Snapchat Profile Scraper & Spotlight Transcripts?

Every field below is read directly from transform_data() and scrape_one() in src/main.py — the dataset's overview view surfaces the top-level summary fields.

Profile-level summary fields

FieldExample ValueNotes
username / url"djkhaled305" / profile URL
profileType"publicProfile" or "personalOnly"Correctly distinguishes account types (see the P0-1 fix)
clipCount / clipsWithTranscript / transcriptCoverage12 / 7 / 0.583Real coverage ratio
clipsWithAiMetadata / matchedClipCountcounts
runGeo{"country": "US", "locale": "en-US"}Viewer-context info from the page itself

Per-clip Spotlight fields

FieldExample ValueNotes
spotlightId / spotlightUrl / linkclip identifiers
plays / shares / comments / boosts / recommends125000 / 3400 / 210 / 50 / 12Real engagement counts, corrected for the -1/stringified-"0" field bugs
postedAt / postedTimestampISO date / epoch
durationSecs / thumbnailSrc / mediaUrlclip technical detail
resolvedTitlebest available titleFalls back through AI title → on-screen text → description
hasTranscript / transcriptStatustrue / "ok"Honest status, never a guessed value
transcriptText / transcriptWordCount / transcriptCueCountspoken-word text + counts
transcriptCuesarray of {start, end, text}Only when includeTranscriptTimings is on
aiTitle / aiDescription / aiKeywords / entityKeywords / detectedLanguageSnapchat's own AI-generated clip metadataOnly when includeAiMetadata is on
matchedKeywords / matchSourcematched terms / which surface matchedOnly populated when transcriptKeywords is set

Why not build this yourself?

Snapchat's profile page embeds its data in a __NEXT_DATA__ JSON blob whose Spotlight deeplinks are AppsFlyer-wrapped, meaning a naive string split on "spotlight/" silently corrupts the extracted clip ID on every single clip — this Actor's own commit history documents finding and fixing exactly that bug, since a corrupted ID means transcript lookups fail 100% of the time even though the transcript data is right there in the response. Two more of Snapchat's own metadata fields are unreliable in ways that are easy to miss: a -1 sentinel for view count on some clips, and a shares-count field that's the string "0" — which is truthy in Python, so a naive a or b fallback chain never reaches the real number. Getting engagement counts right means knowing which of Snapchat's two engagement-data sources to trust and when.

How to use data extracted from Snapchat Profile Scraper & Spotlight Transcripts?

Content and social listening research

Search a creator's or brand's Spotlight clips with transcriptKeywords set to your topic terms and onlyMatchingClips on, to find exactly which clips actually discuss that topic — searching real spoken content, not just captions or hashtags.

Trend and engagement research

Compare plays/shares/comments/boosts/recommends across a batch of profiles to see which creators or brands are driving real engagement in a niche, using corrected numbers rather than the raw (sometimes broken) source fields.

Content transcription and accessibility

Use fetchTranscripts with includeTranscriptTimings on to get subtitle-ready {start, end, text} cues for archival, accessibility, or repurposing spoken Spotlight content into text.

AI agents and research pipelines

Because transcriptStatus and matchSource are explicit, an agent can distinguish "no transcript exists" from "transcript exists but didn't match" without ambiguity, and branch its processing accordingly.

🔼 Input sample

ParameterRequiredTypeDescriptionExample Value
urlsYesarraySnapchat usernames or profile URLs.["djkhaled305"]
fetchTranscriptsNobooleanDownload and parse each clip's WebVTT transcript. Roughly 6 in 10 clips have one. Default true.true
includeTranscriptTimingsNobooleanAlso return transcriptCues[] with per-cue start/end/text. Default false.true
includeAiMetadataNobooleanReturn Snapchat's own AI title/description/keywords and detected language. Default true.true
transcriptKeywordsNoarrayCase-insensitive keywords/phrases searched across transcript, AI metadata, and on-screen text.["giveaway"]
onlyMatchingClipsNobooleanDrop non-matching clips when keywords are set. The profile row is always kept. Default false.true
maxClipsPerProfileNointeger (0–200)Cap on clips per profile. 0 = no limit. Default 0.10
preserveBaseFieldQuirksNobooleanKeep original (unfixed) values under the legacy field names for byte-for-byte pipeline compatibility. Default false.false
maxRetriesNointeger (1–10)Retries per profile before a failure row. Default 3.3
requestTimeoutSecsNointeger (5–180)Per-request timeout. Default 30.30
proxyConfigurationNoobjectNo proxy by default; Snapchat profile pages and transcripts are public.{"useApifyProxy": false}
{
"urls": ["djkhaled305"],
"fetchTranscripts": true,
"includeAiMetadata": true,
"transcriptKeywords": ["giveaway", "collab"],
"onlyMatchingClips": true
}

Common pitfall: preserveBaseFieldQuirks doesn't hide the corrected data — it only changes which key name carries the original, unfixed value. The corrected spotlightId, plays, shares, transcriptUrl, etc. remain available under their own field names either way, so most integrations should leave this off.

🔽 Output sample

Output is one JSON row per profile (with all its clips nested inside data.spotlight), pushed to the run's default dataset and charged as one row_result event per profile row.

{
"ok": true,
"username": "djkhaled305",
"url": "https://www.snapchat.com/@djkhaled305",
"profileType": "publicProfile",
"clipCount": 12,
"clipsWithTranscript": 7,
"transcriptCoverage": 0.583,
"data": {
"spotlight": [
{
"spotlightId": "AbC123XyZ",
"spotlightUrl": "https://www.snapchat.com/spotlight/AbC123XyZ",
"plays": 125000,
"shares": 3400,
"comments": 210,
"resolvedTitle": "Behind the scenes in the studio",
"hasTranscript": true,
"transcriptStatus": "ok",
"transcriptText": "Alright we're in the studio today working on...",
"transcriptWordCount": 84,
"aiTitle": "Studio session behind the scenes",
"matchedKeywords": [],
"matchSource": null
}
]
}
}

How do you filter and target specific clips?

Keyword search covers real content, not just labels. transcriptKeywords searches spoken transcript text, Snapchat's own AI-generated description/keywords, and on-screen caption text together — a topic search catches clips that mention it verbally even when the on-screen caption doesn't.

AI metadata has higher coverage than transcripts. includeAiMetadata is available even on clips with no speech at all, so for a broad content-classification pass across many profiles, AI metadata alone (with fetchTranscripts off) is faster and still gives topic-level signal.

Cap clips per profile to control transcript-fetch cost. maxClipsPerProfile only ever lowers the number of transcript downloads attempted, since Snapchat itself serves at most one page of Spotlight clips (1–31 observed) per profile — it's a cost control, not a pagination depth control.

Three real examples:

{ "urls": ["creator1", "creator2", "creator3"], "transcriptKeywords": ["new product"], "onlyMatchingClips": true }

Multi-profile brand-mention search across real spoken content.

{ "urls": ["djkhaled305"], "fetchTranscripts": true, "includeTranscriptTimings": true }

Full transcript export with subtitle-ready cue timings for one profile.

{ "urls": ["brandaccount"], "fetchTranscripts": false, "includeAiMetadata": true, "maxClipsPerProfile": 20 }

Fast AI-metadata-only content classification pass, no transcript downloads.

▶️ Want to try other scrapers?

ScraperWhat it extracts
Snapchat Ads & Media Asset CatalogDownloadable ad creative from the Ads Library
TikTok Video Scraper — Hashtag, Sound & ReachVideo-level reach and sound data
Instagram Reels Hashtag ScraperReels-only hashtag content with audio metadata
Reddit Trends Scraper with Author Contact LeadsTrending posts with contact-lead signal

How to extract Snapchat profile and transcript data programmatically

This Actor runs as a standard Apify Actor call — one API call in, structured JSON dataset out, using your Apify API token.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("<YOUR_USERNAME>/snapchat-profile-scraper-spotlight-transcripts").call(run_input={
"urls": ["djkhaled305"],
"fetchTranscripts": True,
"transcriptKeywords": ["giveaway"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("ok"):
for clip in item["data"]["spotlight"]:
print(clip["resolvedTitle"], clip["plays"], clip["transcriptStatus"])

Export to spreadsheets or CRM

Every dataset supports one-click CSV/Excel export from the Apify Console. Since clip data is nested under data.spotlight, most spreadsheet workflows will want to iterate it via the API rather than the flat CSV export.

Scraping publicly visible Snapchat profile pages and Spotlight content is generally lawful, since this data is published for anyone to view without logging in — the underlying legal question was tested directly in hiQ Labs v. LinkedIn (9th Cir.), which held that scraping public, non-password-protected data does not violate the U.S. Computer Fraud and Abuse Act. Transcribed spoken content and profile data can constitute personal data under GDPR/CCPA when tied to an identifiable individual, so treat that subset accordingly if you store or reuse it at scale, and consult legal counsel for commercial applications.

❓ FAQ

Why do some clips have no transcript?

Snapchat only publishes a transcript for roughly 6 in 10 Spotlight clips — transcriptStatus: "none" reflects that honestly rather than a fabricated placeholder. "junk" means a transcript file existed but parsed to no usable text, and "fetch_failed" means the download itself failed.

What does preserveBaseFieldQuirks actually change?

It swaps which values land under the original field names (spotlightId, plays, shares, transcriptUrl, timestampInSec) between the corrected values (default) and the original, documented-buggy values — useful only if an existing pipeline depends on byte-for-byte compatibility with the unfixed output. The corrected values remain accessible under separate keys either way.

How accurate are the play/share counts?

More accurate than a naive extraction would produce — the source documents and fixes two specific field bugs (a -1 sentinel view count on some clips, and a stringified "0" share count that broke a naive fallback chain), falling through to engagementStats' real numbers in both cases.

Do I need a Snapchat account to use this?

No — public profile pages and transcript files are both fetched without any login.

Can I search only for clips mentioning a specific topic?

Yes — set transcriptKeywords and turn on onlyMatchingClips; non-matching clips are dropped from data.spotlight while the profile summary row is always kept, even with zero matches.

How does this compare to other Snapchat scrapers?

As observed on the Apify Store on 2026-07-26, memo23/snapchat-scraper and karamelo/snapchat-profile-scraper both extract Snapchat profile data, but neither documents WebVTT transcript parsing, keyword search across transcript/AI-metadata/on-screen-text surfaces, or the specific Spotlight-ID and engagement-count bugs this Actor fixes.

Does this work with AI agent frameworks?

Yes — call it as a standard HTTP endpoint via the Apify API from any agent framework capable of making an API call; there's no MCP-specific integration for this Actor.

Conclusion

Snapchat Profile Scraper & Spotlight Transcripts turns a profile into full clip data with real, corrected engagement numbers and searchable transcript text — not just metadata, but what's actually said in each Spotlight clip. It fits content research, social listening, and any workflow that needs to search inside short-form video rather than around it. Start a run from the Apify Console or the Apify API with your target usernames to get your first transcript-enriched export.