Snapchat Scraper – Profiles, Stories, Spotlight & Lenses
Pricing
from $2.50 / 1,000 profile results
Snapchat Scraper – Profiles, Stories, Spotlight & Lenses
Scrape public Snapchat profiles, Stories, Highlights, Spotlight videos, comments, Discover, Explore, Lenses, Snapcodes, media, and transcripts.
Pricing
from $2.50 / 1,000 profile results
Rating
0.0
(0)
Developer
ScrapingMonkey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Snapchat Scraper - Public Profiles, Stories, Spotlight and Lenses
Collect public Snapchat profiles, current Stories, Highlights, Spotlight videos and initial comments, Discover entities, Explore topics, paginated Lens catalogs, Snapcodes, and public media metadata without a Snapchat account or browser.
- Extract profile identity, biography, category, subscriber count, public images, and related accounts
- Turn one username into a profile bundle containing current Story, curated Highlights, Spotlight, Lenses, and initial public comments
- Process individual Spotlight URLs or the public Spotlight feed
- Collect public Discover Apollo entities and Explore topic sections/cards
- Follow real Lens
nextCursorIdpagination across supported categories - Store Snapcode SVG/PNG and optionally download public media or transcripts to key-value storage
- Monitor public profiles and emit only new or changed records
- Use Apify Residential Proxy automatically; no Snapchat account, cookies, browser, or proxy setup is required
- Export the dataset to JSON, CSV, Excel, XML, or access it through the Apify API
What can you do with this Actor?
| Mode | Input | Output | Best for |
|---|---|---|---|
profileBundle | Public usernames | Profile, Story, Highlights, Spotlight, comments, and Lenses | Complete public creator snapshots |
profiles | Public usernames | Profile metadata only | Lightweight identity enrichment |
spotlightDetails | Spotlight URLs | Video, creator, engagement, media, transcript, and initial comments | Video research and enrichment |
spotlightFeed | No target required | Current public Spotlight records | Public video discovery |
discover | No target required | Public Discover story and Snap cache entities | Publisher/content discovery |
explore | Topic strings or Explore URLs | Sections and public cards | Topic-based discovery |
lenses | Lens categories | Paginated Lens and creator rows | AR catalog and creator research |
snapcodes | Usernames | Stored SVG or PNG Snapcode records | Public deeplink asset generation |
monitor | Usernames and stable monitor key | Only new or changed profile-bundle records | Scheduled creator monitoring |
auto | Mixed public URLs and usernames | Automatically routed public records | Batch processing heterogeneous inputs |
One run uses one selected mode. Every target in that mode can emit several record types, but all rows appear in one complete Results table and share the same top-level schema.
Quick start
- Open the Actor and click Try for free.
- Keep
profileBundlemode and enter a public username. - Set the maximum number of rows and optional comment/media settings.
- Click Start.
- Preview the single Results table or download it in your preferred format.
The default input uses the public nba profile and requires no additional configuration.
Input examples
Collect complete public profile bundles
{"mode": "profileBundle","usernames": ["nba", "nfl"],"includeRelatedAccounts": true,"includeInitialComments": true,"maxItems": 1000}
maxItems applies to each input target after the profile and its public content have been normalized. One dataset row represents one public profile, Story, Snap, Spotlight item, comment, Lens, creator, Discover entity, Explore entity, or Snapcode.
Extract profile metadata only
{"mode": "profiles","usernames": ["nba", "nfl"],"includeRelatedAccounts": true}
Extract Spotlight details
{"mode": "spotlightDetails","startUrls": [{"url": "https://www.snapchat.com/spotlight/example-public-snap-id"}],"includeInitialComments": true,"maxItems": 500}
Collect the public Spotlight feed
{"mode": "spotlightFeed","maxItems": 100}
Collect public Discover entities
{"mode": "discover","maxItems": 1000}
Explore public topics
{"mode": "explore","queries": ["skincare", "basketball"],"maxItems": 500}
Paginate Lens categories
{"mode": "lenses","lensCategories": ["for_you", "trending", "face", "creators"],"maxPages": 10,"maxItems": 1000}
Supported category values are for_you, trending, face, world, music, creators, and web_live.
Store Snapcodes
{"mode": "snapcodes","usernames": ["nba"],"snapcodeFormat": "SVG"}
Snapcode generation is an asset workflow, not proof that a username exists.
Download selected public media and transcripts
{"mode": "profileBundle","usernames": ["nba"],"downloadMedia": true,"downloadTranscripts": true,"maxDownloads": 10,"maxAssetBytes": 50000000}
Downloaded bytes are stored in the default key-value store. Dataset fields contain the corresponding storage keys.
Monitor public profiles
{"mode": "monitor","usernames": ["nba"],"monitorMode": "newAndChanged","monitorKey": "nba-public-snapchat","maxItems": 1000}
Auto-detect mixed public targets
{"mode": "auto","usernames": ["nba"],"startUrls": [{"url": "https://www.snapchat.com/@nfl"},{"url": "https://www.snapchat.com/explore/skincare"},{"url": "https://www.snapchat.com/lens/category/face"}],"maxItems": 500}
Complete output example
Every record type has the same fixed set of 85 top-level fields. Fields that do not apply to a record are returned as null or empty arrays. The data object preserves the complete public source entity for that row; because Snapchat controls this object, its internal keys vary by recordType and may evolve. Optional raw is a sanitized copy of data and is null by default.
Complete public Snapchat row - 85 top-level fields
{"recordType": "publicProfile","sourceMode": "profileBundle","inputTarget": "nba","sourceUrl": "https://www.snapchat.com/@nba","sourceEndpoints": ["https://www.snapchat.com/@nba"],"id": "public-business-profile-id","username": "nba","displayName": "NBA","title": "NBA","description": "The official public NBA profile.","bio": "The official public NBA profile.","badge": "OFFICIAL","category": "SPORTS","subcategory": "BASKETBALL","subscriberCount": 25000000,"websiteUrl": "https://www.nba.com/","address": null,"profileImageUrl": "https://cf-st.sc-cdn.net/public-profile.jpg","squareHeroImageUrl": "https://cf-st.sc-cdn.net/public-hero.jpg","snapcodeImageUrl": "https://cf-st.sc-cdn.net/public-snapcode.svg","businessProfileId": "public-business-profile-id","hostUserId": "public-host-user-id","createdAtMs": 1609459200000,"updatedAtMs": 1786586400000,"hasStory": true,"hasCuratedHighlights": true,"hasSpotlightHighlights": true,"relatedAccounts": [{"username": "wnba","displayName": "WNBA","profilePictureUrl": "https://cf-st.sc-cdn.net/related-profile.jpg"}],"storyType": null,"storyId": null,"highlightId": null,"snapId": null,"snapIndex": null,"mediaType": null,"mediaUrl": null,"previewUrl": null,"overlayUrl": null,"attachmentUrl": null,"transcriptUrl": null,"timestampInSec": null,"publishedAt": null,"durationMs": null,"width": null,"height": null,"hashtags": null,"mentions": null,"creator": null,"engagement": null,"lens": null,"contextCards": null,"replyId": null,"replyText": null,"replyTimestampMs": null,"replyPosterId": null,"replyPosterDisplayName": null,"reactionCounts": null,"threadedReplyCount": null,"cacheKey": null,"discoverType": null,"sectionTitle": null,"sectionType": null,"rank": null,"lensId": null,"scannableUuid": null,"lensName": null,"creatorUsername": null,"previewImageUrl": null,"previewVideoUrl": null,"iconUrl": null,"unlockUrl": null,"searchTags": null,"official": null,"lastUpdatedEpoch": null,"hasMore": null,"nextCursorId": null,"downloadedSnapcodeKey": null,"downloadedMediaKey": null,"downloadedTranscriptKey": null,"warning": null,"monitorStatus": null,"changedFields": null,"previousCapturedAt": null,"capturedAt": "2026-08-13T10:30:00.000000+00:00","data": {"businessProfileId": "public-business-profile-id","hostUserId": "public-host-user-id","username": "nba","title": "NBA","bio": "The official public NBA profile.","badge": "OFFICIAL","categoryStringId": "SPORTS","subcategoryStringId": "BASKETBALL","subscriberCount": 25000000,"websiteUrl": "https://www.nba.com/","address": null,"profilePictureUrl": "https://cf-st.sc-cdn.net/public-profile.jpg","squareHeroImageUrl": "https://cf-st.sc-cdn.net/public-hero.jpg","snapcodeImageUrl": "https://cf-st.sc-cdn.net/public-snapcode.svg","creationTimestampMs": 1609459200000,"lastUpdateTimestampMs": 1786586400000,"relatedAccountsInfo": [{"username": "wnba","displayName": "WNBA","profilePictureUrl": "https://cf-st.sc-cdn.net/related-profile.jpg"}]},"raw": null}
Other recordType values are story, snap, spotlight, comment, discoverStory, discoverSnap, exploreSection, exploreCard, lens, lensCreator, and snapcode. They use the same 85 keys: Story/Snap rows populate Story and media fields; Spotlight rows populate media, creator, engagement, Lens, hashtag, mention, transcript, and context fields; comment rows populate reply/reaction fields; Discover and Explore rows populate cache, section, rank, media, and creator fields; Lens rows populate Lens identity, previews, creator, tags, and cursor fields; Snapcode rows populate downloadedSnapcodeKey.
Missing or unavailable targets do not emit error rows and are not charged. Their count or failure category appears in RUN_SUMMARY.
What data can you extract?
| Category | Fields |
|---|---|
| Record and provenance | recordType, sourceMode, inputTarget, sourceUrl, sourceEndpoints, id, capturedAt |
| Public profile | username, displayName, title, description, bio, badge, category, subcategory, subscriberCount, websiteUrl, address |
| Profile media and IDs | profileImageUrl, squareHeroImageUrl, snapcodeImageUrl, businessProfileId, hostUserId, createdAtMs, updatedAtMs |
| Profile availability | hasStory, hasCuratedHighlights, hasSpotlightHighlights, relatedAccounts |
| Story and Snap | storyType, storyId, highlightId, snapId, snapIndex |
| Media and timing | mediaType, mediaUrl, previewUrl, overlayUrl, attachmentUrl, transcriptUrl, timestampInSec, publishedAt, durationMs, width, height |
| Spotlight context | hashtags, mentions, creator, engagement, lens, contextCards |
| Initial public comments | replyId, replyText, replyTimestampMs, replyPosterId, replyPosterDisplayName, reactionCounts, threadedReplyCount |
| Discover and Explore | cacheKey, discoverType, sectionTitle, sectionType, rank |
| Lens catalog | lensId, scannableUuid, lensName, creatorUsername, previewImageUrl, previewVideoUrl, iconUrl, unlockUrl, searchTags, official, lastUpdatedEpoch, hasMore, nextCursorId |
| Stored assets | downloadedSnapcodeKey, downloadedMediaKey, downloadedTranscriptKey, warning |
| Monitoring | monitorStatus, changedFields, previousCapturedAt |
| Complete entity data | data, raw |
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | Yes | profileBundle | profileBundle, profiles, spotlightDetails, spotlightFeed, discover, explore, lenses, snapcodes, monitor, or auto |
usernames | string[] | In profile/snapcode/monitor modes | ['nba'] | Public usernames, with or without @ |
startUrls | request[] | In detail/auto mode | - | Public profile, Spotlight, Explore, or Lens URLs |
queries | string[] | In explore mode | ['skincare'] | Explore topic strings |
lensCategories | string[] | In lenses mode | ['for_you'] | Supported public Lens category values |
snapcodeFormat | string | No | SVG | SVG or PNG |
maxItems | integer | No | 1000 | Maximum normalized rows per input, from 1 to 100,000 |
maxPages | integer | No | 20 | Maximum Lens cursor pages per category, from 1 to 1,000 |
includeRelatedAccounts | boolean | No | true | Include the initial related-account list exposed on profiles |
includeInitialComments | boolean | No | true | Decode initial public Spotlight comment data when exposed |
downloadMedia | boolean | No | false | Download selected public media to key-value storage |
downloadTranscripts | boolean | No | false | Download selected public transcript files to key-value storage |
maxDownloads | integer | No | 20 | Maximum optional downloads per input, from 0 to 1,000 |
maxAssetBytes | integer | No | 50000000 | Maximum bytes per downloaded asset, from 1 MB to 500 MB |
monitorMode | string | No | off | off, onlyNew, or newAndChanged |
monitorKey | string | No | default | Namespace for persistent comparison state |
maxConcurrency | integer | No | 5 | Concurrent inputs, from 1 to 15 |
includeRaw | boolean | No | false | Include a sanitized copy of the complete public entity data |
Use cases
Creator and publisher research
Turn public usernames into structured profile, Story, Spotlight, Lens, and related-account datasets for research or cataloging.
Public Spotlight analysis
Collect video metadata, creator context, engagement fields, hashtags, mentions, Lenses, transcripts, and initial public comments exposed on Spotlight pages.
AR Lens catalog collection
Paginate supported Lens categories and retain stable IDs, creators, previews, tags, unlock URLs, update times, and cursor provenance.
Discover and topic exploration
Use Discover or Explore modes to build public publisher/content datasets and route them into analytics or enrichment systems.
Scheduled public profile monitoring
Run monitor mode on an Apify schedule and send new or changed records to a webhook, Slack workflow, database, or spreadsheet.
Performance and cost
The Actor uses pay-per-event billing when configured on Apify. Event families are profile-result, story-result, spotlight-result, comment-result, discovery-result, lens-result, and snapcode-result. Consult the Actor's Pricing tab for current rates.
Profile metadata and public Next.js JSON are HTTP-only. downloadMedia and downloadTranscripts are off by default because video/audio transfer and key-value storage can dominate platform usage. Lens cost grows with categories and cursor pages. Exact runtime depends on source latency, target breadth, page limits, optional downloads, retries, and public availability.
API usage
Replace YOUR_USERNAME with the published Actor owner name.
curl -X POST \"https://api.apify.com/v2/acts/YOUR_USERNAME~snapchat-public-data-scraper/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "profileBundle","usernames": ["nba"],"includeInitialComments": true,"maxItems": 1000}'
Results can flow through Apify API clients, schedules, webhooks, Google Sheets, Make, Zapier, n8n, Airbyte, object storage, and data warehouses.
Best for / not for
Best for: public profile research, Story/Highlight snapshots, public Spotlight analysis, Discover/Explore collection, Lens catalogs, Snapcode assets, and scheduled public monitoring.
Not for: chats, friends/following graphs, private profiles, private Stories, authenticated account data, complete deep comment threads, or real-time streaming.
Limits and good to know
- One mode is selected per run; a profile bundle can emit many record types for each username.
- Profile Story, Highlight, Spotlight, related-account, and comment arrays are the public initial set unless the source exposes a proven public cursor.
maxPagescontrols Lens cursor pagination; it does not invent pagination for profile content arrays.- Snapcode artwork is not account validation. Snapchat can generate an asset for an unavailable username.
- Media and transcript URLs can expire; enable downloads only when persistent bytes are required.
dataand optionalraware source-controlled objects, while all 85 normalized top-level keys remain stable.- One failed target does not cancel successful targets. Failed and unavailable inputs do not create paid error rows.
- The Actor uses Apify Residential Proxy automatically and does not expose proxy configuration in the input.
Frequently asked questions
What input should I provide?
Use usernames such as nba, copied public Spotlight URLs, Explore topic strings, or one of the supported Lens category values depending on the selected mode.
How many results can I extract?
You can configure up to 100,000 normalized rows per input and up to 1,000 Lens pages. Actual public content and cursor depth are controlled by Snapchat.
Why are many columns empty on a row?
All record types deliberately share one 85-field table. A profile row does not use comment or Lens fields; a Lens row does not use profile or Story fields. Non-applicable values are null or empty arrays.
Can I process multiple usernames or URLs?
Yes. Add multiple values to usernames, startUrls, queries, or lensCategories. Inputs are isolated and processed concurrently.
Can I schedule recurring runs?
Yes. Use Apify schedules with monitor mode and a stable monitorKey, then connect a webhook for downstream alerts.
Do I need a Snapchat account, API key, or proxy?
No Snapchat account, API key, cookie, or browser is required. Apify Residential Proxy is configured internally and used automatically.
Responsible use
This Actor extracts publicly available Snapchat information. Users are responsible for complying with applicable laws, privacy regulations, contractual obligations, copyright requirements, and Snapchat's terms. Snapchat is a trademark of Snap Inc.; this Actor is not affiliated with or endorsed by Snap Inc.
Support
If you encounter a problem, create an issue in the Actor's Issues tab. Include the run ID, selected mode, and a non-sensitive reproducible public username or URL. Do not include account cookies or credentials.