# Snapchat Discover Scraper (`crawlerbros/snapchat-discover-scraper`) Actor

Scrape Snapchat Discover page - extract premium publisher stories, episodes, and their snap details from the Apollo GraphQL cache.

- **URL**: https://apify.com/crawlerbros/snapchat-discover-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Social media, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Snapchat Discover Scraper

Extract publisher stories, creator profiles, and preview snap media from Snapchat's public Discover feed — no login required. Each record includes the story title, thumbnail, publish timestamp, HLS video track URL, full creator profile, and a preview snap with its media URL.

### What This Actor Does

- Fetches Snapchat's public `snapchat.com/discover` page
- Extracts all embedded publisher story and creator entities from the page's normalized data cache
- Returns one structured record per Discover story with creator profile, preview snap, and media URLs
- Works without login, cookies, or a browser — no authentication needed

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `maxStories` | integer | No | `50` | Maximum number of Discover stories to extract (1–200). Snapchat typically embeds 8–12 stories per page load. |
| `proxyConfiguration` | object | No | — | Optional proxy settings. Leave empty to run without a proxy first. |

#### Example Input

```json
{
  "maxStories": 20
}
````

### Output

One record per Discover story. Snapchat typically serves 8–12 stories per page, so actual output count may be lower than `maxStories`.

#### Top-Level Story Fields

| Field | Type | Description |
|-------|------|-------------|
| `storyId` | string | Unique story identifier |
| `storyType` | string | Story content type — typically `SHOW` for publisher shows |
| `title` | string | Story or episode title |
| `thumbnailUrl` | string | CDN URL for the story cover image |
| `publishedAt` | string | ISO 8601 UTC timestamp of when the story was published |
| `videoTrackUrl` | string | HLS `.m3u8` playlist URL for the story's video stream |
| `tapId` | string | Internal Snapchat tap/interaction identifier |
| `totalSnaps` | integer | Total number of snaps in the full story |
| `scrapedAt` | string | ISO 8601 UTC timestamp of when this record was collected |

#### `creator` Object

| Field | Type | Description |
|-------|------|-------------|
| `businessProfileId` | string | Unique publisher profile identifier (UUID) |
| `title` | string | Publisher or show name |
| `bio` | string | Publisher description or show tagline |
| `snapcodeImageUrl` | string | URL to the publisher's Snapcode image |
| `profilePictureUrl` | string | Publisher logo or profile picture CDN URL |
| `squareHeroImageUrl` | string | Square hero banner image CDN URL |
| `primaryColor` | string | Brand hex color code (e.g. `#9B55A0`) |

#### `previewSnap` Object

| Field | Type | Description |
|-------|------|-------------|
| `snapId` | string | Unique snap identifier |
| `mediaUrl` | string | CDN media URL for the preview snap (video or image) |
| `mediaPreviewUrl` | string | Low-resolution thumbnail CDN URL for the preview snap |
| `mediaType` | string | Media type: `VIDEO` or `IMAGE` |

#### Example Output

```json
{
  "storyId": "1536443087702016",
  "storyType": "SHOW",
  "title": "Like Mom Like Daughter",
  "thumbnailUrl": "https://cf-st.sc-cdn.net/aps/bolt_df/aHR0cHM6Ly9jZi...",
  "publishedAt": "2025-08-04T01:00:28+00:00",
  "videoTrackUrl": "https://cf-st.sc-cdn.net/d/3nHzLWe4SUg168m5tmr4G.1202.m3u8?...",
  "tapId": "5207393312001032846",
  "totalSnaps": 10,
  "creator": {
    "businessProfileId": "b538d529-753e-4e99-ae2f-3f2138f628f9",
    "title": "On The Streets",
    "bio": "This show is all about making someone's day better. Here you will see public challenges, street tricks, and fun activities.",
    "snapcodeImageUrl": "https://www.snapchat.com/deeplink/discover/snapcode/L3AvYjUzOGQ1MjktNzUzZS...",
    "profilePictureUrl": "https://cf-st.sc-cdn.net/aps/bolt_df/aHR0cHM6Ly9jZi...",
    "squareHeroImageUrl": "https://cf-st.sc-cdn.net/aps/bolt_df/aHR0cHM6Ly9jZi...",
    "primaryColor": "#9B55A0"
  },
  "previewSnap": {
    "snapId": "1536443087702022",
    "mediaUrl": "https://cf-st.sc-cdn.net/d/6pgLhPB8xRrQsrCGPQ9gY.111?...",
    "mediaPreviewUrl": "https://cf-st.sc-cdn.net/d/zmYKO5bnRhvpPox3yegdM.380?...",
    "mediaType": "VIDEO"
  },
  "scrapedAt": "2026-06-28T06:58:20.757222+00:00"
}
```

### Use Cases

- **Publisher research** — compile a database of Snapchat Discover publishers, their bios, brand colors, and show metadata
- **Content trend analysis** — track which types of shows appear in Discover and monitor publish patterns over time
- **Media archiving** — collect story thumbnails, preview snap URLs, and HLS stream links for content documentation
- **Marketing intelligence** — identify active publishers in specific content verticals (fitness, comedy, news, etc.)
- **Developer integrations** — use `videoTrackUrl` HLS links and creator profile data to build Discover-aware applications

### FAQ

**Do I need a Snapchat account or cookies?**
No. Snapchat's Discover page is publicly accessible without login or authentication. The actor fetches the page as an anonymous visitor.

**Why does the output have fewer stories than `maxStories`?**
Snapchat's Discover page typically embeds 8–12 stories per page load. The `maxStories` limit caps the output if more were somehow available — it does not trigger multiple page fetches. The actual count depends on how many stories Snapchat has embedded at the time of the run.

**How often does the Discover feed change?**
Snapchat refreshes its Discover feed throughout the day. Running the actor at different times will produce different stories, publisher selections, and episode titles.

**What is `videoTrackUrl`?**
An `.m3u8` HLS (HTTP Live Streaming) playlist URL for the story's video content. This can be played directly with any HLS-compatible player (e.g. VLC, ffmpeg, or a web `<video>` element with an HLS library). It represents the full multi-quality adaptive bitrate stream for the story.

**What is `tapId`?**
An internal Snapchat identifier used to reference this story in Snapchat's interaction tracking system. It is included for completeness and may be useful for cross-referencing with Snapchat's engagement APIs.

**What happens if no stories are found?**
If the page returns an insufficient number of embedded entities (fewer than 5), the actor emits a single status record with `"status": "no_content"` and a reason explaining the condition. This allows downstream systems to detect and handle empty runs gracefully.

**Does this actor need a proxy?**
No proxy is required for standard use. Snapchat's Discover page is publicly accessible. For high-frequency or scheduled runs, adding an Apify proxy can improve reliability.

***

### Other Snapchat Scrapers

Explore the full Snapchat scraper suite on Apify:

| Actor | Description |
|-------|-------------|
| [Snapchat Profile Scraper](https://apify.com/crawlerbros/snapchat-profile-scraper) | Full profile metadata, highlights, lenses, and spotlight data |
| [Snapchat Hashtag Scraper](https://apify.com/crawlerbros/snapchat-hashtag-scraper) | Spotlight videos by hashtag or topic with AI metadata |
| [Snapchat User Stories Scraper](https://apify.com/crawlerbros/snapchat-user-stories-scraper) | Curated highlights and active story snaps |
| [Snapchat Spotlight Video Downloader](https://apify.com/crawlerbros/snapchat-spotlight-video-downloader) | Download Spotlight videos with AI metadata, transcripts, and comments |
| [Snapchat Search Scraper](https://apify.com/crawlerbros/snapchat-search-scraper) | Search across videos, lenses, users, places, and shows |
| [Snapchat Lens Scraper](https://apify.com/crawlerbros/snapchat-lens-scraper) | AR lens metadata, trending lenses, and creator info |
| [Snapchat Publisher Scraper](https://apify.com/crawlerbros/snapchat-publisher-scraper) | Discover publisher pages, shows, episodes, and spotlights |
| [Snapchat Ads Gallery Scraper](https://apify.com/crawlerbros/snapchat-ads-gallery-scraper) | EU/UK ad transparency library — ads and sponsored content |
| [Snapchat Spotlight Comments Scraper](https://apify.com/crawlerbros/snapchat-spotlight-comments-scraper) | Comment threads from Spotlight videos |
| [Snapchat Topic Scraper](https://apify.com/crawlerbros/snapchat-topic-scraper) | Spotlight videos by topic with related tags |
| [Snapchat Snapcode Scraper](https://apify.com/crawlerbros/snapchat-snapcode-scraper) | Download Snapcode images (SVG/PNG) for any username |
| [Snapchat Snap Map Scraper](https://apify.com/crawlerbros/snapchat-snap-map-scraper) | Public Snap Map places and their latest snaps |
| [Snapchat Discover Scraper](https://apify.com/crawlerbros/snapchat-discover-scraper) | Shows and stories from Snapchat's Discover feed |

# Actor input Schema

## `maxStories` (type: `integer`):

Maximum number of publisher stories to extract from the Discover feed.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. Leave empty to try without a proxy first.

## Actor input object example

```json
{
  "maxStories": 20
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxStories": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/snapchat-discover-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxStories": 20 }

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/snapchat-discover-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxStories": 20
}' |
apify call crawlerbros/snapchat-discover-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/snapchat-discover-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Snapchat Discover Scraper",
        "description": "Scrape Snapchat Discover page - extract premium publisher stories, episodes, and their snap details from the Apollo GraphQL cache.",
        "version": "0.1",
        "x-build-id": "CjFU33aKllnd3Ks7O"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~snapchat-discover-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-snapchat-discover-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~snapchat-discover-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-snapchat-discover-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~snapchat-discover-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-snapchat-discover-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxStories": {
                        "title": "Max Stories",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of publisher stories to extract from the Discover feed.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Optional proxy settings. Leave empty to try without a proxy first."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
