---
title: "Snapchat scraper"
description: "Scrape public Snapchat profiles as JSON: display name, username, profile image, Snapcode, language and last update date. One request from Python, the CLI or MCP."
canonical: https://www.zenrows.com/scrape/snapchat
updated: 2026-10-20
---

# Snapchat scraper

The Zenrows Snapchat scraper turns a public Snapchat profile URL into structured JSON: username, display name, profile image, Snapcode image, language, family-friendly flag and last update date. Fetch in Adaptive Stealth Mode opens the page, and Extract returns the fields. Run it from an API call, the CLI or an AI agent.

- Site: snapchat.com
- Returns: Public profiles, Snapcodes and update dates

## Run it: one Snapchat profile in, JSON out

```json Input
{
  "url": "https://www.snapchat.com/add/kyliejenner",
  "mode": "auto",
  "extract": "auto"
}
```

```json Output
{
  "profile": {
    "username": "kyliejenner",
    "display_name": "King Kylie 👑",
    "profile_url": "https://www.snapchat.com/@kyliejenner",
    "avatar_image_url": "https://cf-st.sc-cdn.net/aps/bolt_web/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvMmM2OVJzVzhlVnhDbXpOVzNtdlloLjQxMD9t…_RS270,381_FMwebp",
    "snapcode_image_url": "https://lens-preview-storage.storage.googleapis.com/previewmedia/preview_image/081ced5a-1835-45a7-84dc-7ffaf557a730_360_640.webp",
    "bio": null,
    "language": "en-US",
    "is_family_friendly": true,
    "date_created": null,
    "date_modified": "10/16/2026"
  }
}
```

Request and output of a live call to a public Snapchat profile on Oct 20, 2026, trimmed for length. A field is returned when the page shows it, which is why `bio` is null for an account without one.

## What data can you scrape from Snapchat?

A public profile on snapchat.com shows the creator's identity, audience size and the Spotlight videos and Lenses they publish. These are the fields teams use most, with the path where each lives in the JSON.

| Field | What it holds | Example |
|---|---|---|
| `profile.username` | The Snapchat username, the key to every other request | `kyliejenner` |
| `profile.display_name` | The name shown on the profile, emoji included | `King Kylie 👑` |
| `profile.profile_url` | The canonical profile URL | `https://www.snapchat.com/@kyliejenner` |
| `profile.avatar_image_url` | The profile picture | `https://cf-st.sc-cdn.net/aps/bolt_web/…` |
| `profile.snapcode_image_url` | The profile's Snapcode or Lens preview image | `https://lens-preview-storage…webp` |
| `profile.bio` | The profile description, when the creator wrote one | `null` |
| `profile.language` | Language of the profile page | `en-US` |
| `profile.is_family_friendly` | Snapchat's family-friendly flag for the account | `true` |
| `profile.date_modified` | When the public profile last changed | `10/16/2026` |
| `profile.date_created` | When the public profile was created, if shown | `null` |

## How to scrape Snapchat with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Pick the profile URL.** `https://www.snapchat.com/add/<username>` and `https://www.snapchat.com/@<username>` open the same public profile. Only public profiles, the ones creators and brands turn on, have a page on the web.
3. **Send it with the default configuration**: Adaptive Stealth Mode to open the page and Extract to return the fields.
4. **Read `parsed`** from the response. To keep only a few fields for a large list of creators, list their paths and the response returns just those.
5. **Run your username list in Batch** once one profile comes back the way you want.

```python Python
# pip install requests
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.snapchat.com/add/kyliejenner",
    "mode": "auto",          # Adaptive Stealth Mode
    "extract": "auto",       # structured JSON
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

profile = response.json()["parsed"]["profile"]
print(profile["username"], profile["display_name"], profile["date_modified"])
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.snapchat.com/add/kyliejenner",
  mode: "auto",
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.profile.display_name, parsed.profile.profile_url);
```

```bash cURL
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.snapchat.com%2Fadd%2Fkyliejenner&mode=auto&extract=auto"

# Only the fields you need
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.snapchat.com%2Fadd%2Fkyliejenner&mode=auto&extract=auto&extract_fields=profile.username%2Cprofile.display_name%2Cprofile.date_modified%2Cprofile.is_family_friendly"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
for username in ["kyliejenner", "kimkardashian", "kendalljenner"]:
    response = client.get(
        f"https://www.snapchat.com/add/{username}",
        params={"mode": "auto", "extract": "auto"},
    )
    profile = response.json()["parsed"]["profile"]
    print(profile["username"], profile.get("display_name"))
```

## Input

The scraper takes one Snapchat URL per request, plus the options below. The same parameters go into every task of a Batch job, so the input for a creator list is a list of profile URLs with these settings.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A public profile (`/add/<username>` or `/@<username>`) or a Spotlight video URL |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the page's fields as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `profile.username,profile.display_name` |
| `proxy_country` | string | any | Two-letter country code. Snapchat serves the profile page in the visitor's language, which shows in `profile.language` |
| `wait_for` | string | none | A CSS selector to wait for before the page is read, such as the Spotlight grid |
| `session_id` | integer | none | Reuse the same session across several requests, up to 10 minutes |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto"
  },
  "tasks": [
    { "url": "https://www.snapchat.com/add/kyliejenner", "external_id": "kyliejenner" },
    { "url": "https://www.snapchat.com/add/kimkardashian", "external_id": "kimkardashian" },
    { "url": "https://www.snapchat.com/add/kendalljenner", "external_id": "kendalljenner" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as Snapchat served it, and `parsed`, the structured record. The block below is a trimmed Extract response from a live request to the same profile on Oct 20, 2026.

```json Profile page
{
  "profile": {
    "username": "kyliejenner",
    "display_name": "King Kylie 👑",
    "profile_url": "https://www.snapchat.com/@kyliejenner",
    "avatar_image_url": "https://cf-st.sc-cdn.net/aps/bolt_web/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvMmM2OVJzVzhlVnhDbXpOVzNtdlloLjQxMD9t…_RS270,381_FMwebp",
    "snapcode_image_url": "https://lens-preview-storage.storage.googleapis.com/previewmedia/preview_image/081ced5a-1835-45a7-84dc-7ffaf557a730_360_640.webp",
    "bio": null,
    "language": "en-US",
    "is_family_friendly": true,
    "date_created": null,
    "date_modified": "10/16/2026"
  }
}
```

Building a creator database? Load each `profile` into pandas with `pd.json_normalize(...)` and keep one row per username and day. Need the page for an LLM? Ask for Markdown instead of JSON and the profile, Spotlight captions and related accounts come back as plain text.

## Scrape Snapchat from your coding agent

Claude Code, Cursor, Codex and any MCP client can look up Snapchat creators from a prompt.

The agent sends the same Fetch and Extract request a developer would, so it reads the JSON above. Connect the Zenrows MCP server once, or give the agent the CLI and let it run commands in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.snapchat.com/add/kyliejenner"
```

```text Then ask your agent
Use Zenrows to open the public Snapchat profiles of kyliejenner,
kimkardashian and kendalljenner. For each one, give me the display
name, profile URL, language and last update date, as a table.
```

## Scrape Snapchat at scale with Batch and Crawl

**Batch** runs a list of profile URLs as one job, in parallel, with your own ID on each result. Use it to refresh a creator list every week and record when each profile last changed.

**Crawl** follows the links on a profile for you. Start it on a creator's page and keep the links that contain `/spotlight/`, and it returns each Spotlight video page it reaches. Keep links with `/@` instead to walk the related accounts and grow a creator list from one seed.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "https://www.snapchat.com/add/kyliejenner", "external_id": "kyliejenner" },
      { "url": "https://www.snapchat.com/add/kimkardashian", "external_id": "kimkardashian" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# creators.jsonl: one {"url": "https://www.snapchat.com/add/...", "external_id": "...", "extract": "auto"} per line
zenrows batch create creators.jsonl --wait
zenrows batch results <job-id> --out snapchat-profiles.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.snapchat.com/@kyliejenner",
    "depth": 1,
    "max_pages": 50,
    "include_patterns": ["/@kyliejenner/spotlight/"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto"
      },
      "tasks": [
        {
          "url": "https://www.snapchat.com/add/kyliejenner",
          "external_id": "snapchat"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with Snapchat data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Creator discovery | Display name, username, profile URL and avatar | Influencer marketing agencies and brand teams |
| Creator vetting | Family-friendly flag, profile language, recent Spotlight descriptions | Brand safety and partnerships teams |
| Profile change tracking | Last profile update and display name, refreshed weekly | Talent managers and social analysts |
| Content research | Spotlight video links, descriptions and covers by creator | Content strategists and social media managers |
| Brand and competitor presence | Public profiles of brands and their latest Spotlight posts | Marketing and competitive intelligence teams |
| AI agents and enrichment | The profile as JSON or Markdown, added to a CRM or table | Growth and data teams |

## Tips for scraping Snapchat

- **Normalize every profile URL.** `/add/<username>` and `/@<username>` reach the same profile. Keep the username in lowercase as your key and build the URL from it.
- **Only public profiles have a web page.** Creators and brands with a public profile show up on snapchat.com. A personal account with no public profile has no page to collect, so check the username list before a large run.
- **Use `date_modified` to skip unchanged profiles.** When the date has not moved since your last run, the profile has not changed, and you can skip the follow-up requests for that creator.
- **Seed lists from related accounts.** Each profile shows the accounts Snapchat recommends next to it. One well-chosen creator leads to dozens of similar ones.
- **Store the language with each record.** `profile.language` follows the country of the request, so set `proxy_country` once and keep it the same across runs.
- **Spotlight links are permanent.** The ID in `/spotlight/<id>` stays the same, so you can request a video page again later to see how it did.

## Frequently asked questions

### Is it legal to scrape Snapchat?

Collecting data that a creator or brand publishes on a public Snapchat profile, such as the display name, follower count and Spotlight videos, is common for influencer research. Profiles of people are personal data under laws such as the GDPR and the CCPA, so collect only what you need for a legitimate purpose and never try to reach private content. Check Snapchat's terms for your use case and ask a lawyer if you are unsure.

### Is there an official Snapchat API?

Snap offers developer kits for building apps (Login Kit, Creative Kit and the rest of Snap Kit) and a Marketing API for ad accounts. Neither returns any public profile's details on request, which is why teams collect public profile pages with a scraper.

### What Snapchat pages can I scrape?

Public profiles on snapchat.com, under /add/<username> or /@<username> , and the Spotlight video pages linked from them. Private accounts, chats, Snaps sent to friends and Stories shared only with friends are not public and stay out of scope.

### Can I scrape Snapchat follower counts?

Yes. A public profile shows its follower count, rounded the way Snapchat displays it ( 29M ). Ask for the page as Markdown and the count comes back in the text. Request the same profiles on a schedule to see how an audience grows.

### Can I scrape Snapchat Spotlight videos?

Yes. A public profile lists the creator's Spotlight videos with a link, description and cover image for each. Crawl a profile for /spotlight/ links to open each video page.

### How do I scrape Snapchat with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the profile URL, Adaptive Stealth Mode and Extract, as in the Python example above. The parsed key of the response holds the profile as a dictionary. The zenrows package on PyPI wraps the same request.

### How many Snapchat profiles can I scrape?

Send one URL per request, or a whole list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, inline or as a CSV file.

### Can AI agents scrape Snapchat with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Name the creators you want in plain language and the agent calls Fetch and Extract for you.

### Can I scrape Snapchat on a schedule?

Yes. Create a scheduled Batch job with your Snapchat URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the Snapchat scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. A Clay table of creator usernames can pull each profile as a new column. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text, which is what most LLM and RAG pipelines want.

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
