# Snapchat Public Profiles Scraper (`automation-lab/snapchat-public-profile-metadata`) Actor

Look up public Snapchat usernames and export profile identity, audience, badge, biography, links, images, Snapcode, and related-account metadata.

- **URL**: https://apify.com/automation-lab/snapchat-public-profile-metadata.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.96 / 1,000 profile extracteds

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Public Profiles Scraper

Look up **Snapchat public profiles** by username or profile URL and receive one structured record per lookup. The Actor extracts public identity, title, subscriber count, badge and category, biography, website, profile image, Snapcode, highlight state, stable business-profile ID, and related-account metadata.

Use it for creator qualification, public-account enrichment, and recurring profile monitoring without logging in to Snapchat. Public, limited non-public, and not-found usernames have explicit result states, so scheduled runs can be compared without treating a missing page as a public profile.

### What can this Snapchat profile scraper do?

- Process usernames such as `nasa` or copied `snapchat.com/add/...` profile URLs.
- Deduplicate repeated usernames across both input fields.
- Return current public subscriber, identity, category, biography, website, and image fields.
- Include related-account summaries exposed on the same profile page.
- Distinguish `public`, `private`, and `not_found` logged-out lookup states.
- Cap each run at 1–1,000 unique lookups.
- Export results through Apify datasets as JSON, CSV, Excel, XML, or RSS.
- Run on a schedule for timestamped public-profile snapshots.

The Actor does not search Snapchat by topic, access accounts, reveal profile viewers, download Stories, or return historical subscriber counts. Each run is a current logged-out observation.

### Who is this Actor for?

#### Creator and influencer researchers

Qualify a supplied creator list with public display names, biographies, websites, categories, badges, and subscriber counts.

#### Social media teams

Capture repeat snapshots of known public accounts and compare fields in a spreadsheet, database, or data warehouse.

#### Data and CRM teams

Normalize Snapchat usernames and public profile URLs into stable records before joining them to an existing creator or partner dataset.

#### Brand and competitive analysts

Review public audience scale and related-account context for a bounded set of accounts without manually opening every profile.

### Why use this Actor?

- **One row per input:** joins cleanly back to a source list through `requestedUsername`.
- **Typed lookup states:** a private or absent username is not mislabeled as a public profile.
- **Rich profile fields:** includes related accounts and stable identifiers, not only a page title.
- **Low-overhead HTTP collection:** no browser, media download, login, or recursive related-profile crawl.
- **Repeatable timestamps:** every row includes `scrapedAt` for comparison across scheduled runs.
- **Two input routes:** use compact usernames or profile URLs copied from Snapchat.

### What Snapchat profile data is extracted?

| Field | Meaning |
| --- | --- |
| `requestedUsername` | Normalized username derived from the input |
| `username` | Username returned by Snapchat, or `null` when absent |
| `displayName` | Public title or limited non-public display name |
| `profileType` | `public`, `private`, or `not_found` |
| `profileUrl` | Canonical `snapchat.com/add/...` URL |
| `subscriberCount` | Public subscriber count when exposed |
| `badgeCode`, `isVerified` | Public badge code and normalized badge state |
| `categoryId`, `subcategoryId` | Snapchat public-profile taxonomy identifiers |
| `bio`, `websiteUrl` | Public biography and website |
| `profilePictureUrl` | Public profile image URL |
| `snapcodeImageUrl` | Snapcode image endpoint |
| `heroImageUrl` | Square hero image when exposed |
| `address`, `publisherType` | Optional public business metadata |
| `businessProfileId` | Stable public business-profile identifier |
| `hasStory` | Whether Snapchat marks a current public Story |
| `hasCuratedHighlights` | Curated highlight availability |
| `hasSpotlightHighlights` | Spotlight highlight availability |
| `sameAsLinks` | Public external identity links |
| `relatedAccounts` | Suggested account identity summaries |
| `createdAt`, `lastUpdatedAt` | Source timestamps when exposed |
| `scrapedAt` | UTC time of this Actor observation |

Source fields can be missing or empty. Nullable output fields remain `null`; arrays remain empty when Snapchat exposes no values.

### How to scrape Snapchat public profiles

1. Open the Actor input page.
2. Add one or more values under **Snapchat usernames**, with or without `@`.
3. Optionally add copied profile URLs under **Snapchat profile URLs**.
4. Set **Maximum profiles** to bound the output.
5. Click **Start**.
6. Open the **Profiles** dataset view.
7. Export the dataset or connect it to your workflow.

A practical first run is:

```json
{
  "usernames": ["nasa", "shonduras"],
  "maxItems": 2
}
```

### Input parameters

#### `usernames`

An array of 1–1,000 Snapchat usernames. The optional `@` prefix is removed. Usernames are normalized to lowercase and duplicates are processed once.

```json
{
  "usernames": ["nasa", "@shonduras"]
}
```

#### `startUrls`

An array of public profile URLs. Supported shapes are:

- `https://www.snapchat.com/add/username`
- `https://www.snapchat.com/@username`

Other hosts, HTTP URLs, and unrelated Snapchat paths fail input validation.

```json
{
  "startUrls": [
    { "url": "https://www.snapchat.com/add/nasa" }
  ]
}
```

#### `maxItems`

The maximum number of unique profile lookup records to save. The default is 100 and the allowed range is 1–1,000. This limit applies after deduplication across `usernames` and `startUrls`.

At least one username or URL is required.

### Output example

This shortened example reflects the current normalized output shape:

```json
{
  "requestedUsername": "nasa",
  "username": "nasa",
  "displayName": "NASA",
  "profileType": "public",
  "profileUrl": "https://www.snapchat.com/add/nasa",
  "subscriberCount": 762300,
  "badgeCode": 1,
  "isVerified": true,
  "categoryId": "public-profile-category-v3-business-group",
  "subcategoryId": "public-profile-subcategory-v3-government-org",
  "bio": "Explore the universe and discover our home planet with official NASA snaps.",
  "websiteUrl": "https://www.nasa.gov",
  "profilePictureUrl": "https://cf-st.sc-cdn.net/...",
  "snapcodeImageUrl": "https://app.snapchat.com/web/deeplink/snapcode?...",
  "hasStory": false,
  "hasCuratedHighlights": true,
  "hasSpotlightHighlights": true,
  "businessProfileId": "...",
  "sameAsLinks": [],
  "relatedAccounts": [
    {
      "username": "ilikerockets",
      "displayName": "Destin Smarter Every Day",
      "profileUrl": "https://www.snapchat.com/add/ilikerockets",
      "isVerified": false
    }
  ],
  "scrapedAt": "2026-08-28T20:47:00.000Z"
}
```

The full dataset schema contains every field. Values and subscriber counts can change between runs.

### Understanding lookup states

#### `public`

Snapchat returned a public profile payload. Public metadata fields are populated when exposed.

#### `private`

Snapchat returned limited logged-out account identity rather than public-profile metadata. Subscriber, biography, category, and related-account fields are `null` or empty.

#### `not_found`

Snapchat returned no matching account page. `requestedUsername` and the canonical attempted URL remain available for reconciliation.

A network failure is different from a not-found lookup. Failed upstream requests are retried up to two times and logged; the run fails if no requested lookup can be completed.

### How much does it cost to look up Snapchat profiles?

The Actor uses pay-per-event pricing:

- a **$0.005 run-start event** once per run;
- one **profile event** for each dataset record.

The current BRONZE profile price is **$0.0016 per lookup**. Higher subscription tiers receive lower per-profile prices; the live Apify pricing panel is authoritative for your account tier.

Approximate BRONZE examples:

| Profile records | Estimated Actor charge |
| ---: | ---: |
| 1 | $0.0066 |
| 10 | $0.0210 |
| 100 | $0.1650 |
| 1,000 | $1.6050 |

These examples include the one-time start charge and exclude rounding or unrelated platform services in your account. Private and not-found records use the same profile event because they provide a normalized requested-username result. Related-account summaries included inside a profile row have no separate event charge.

### Monitoring public profile changes

Use an Apify schedule to run the same usernames daily or weekly. Store or export each run with its `scrapedAt` timestamp, then compare:

- `subscriberCount` for audience movement;
- `bio`, `websiteUrl`, `categoryId`, or `isVerified` for positioning changes;
- `profileType` for public-state changes;
- `relatedAccounts` for public recommendation changes.

The Actor returns snapshots, not a built-in historical series or alert. Your spreadsheet, database, webhook, or automation platform performs the comparison and notification step.

### Export and integration workflows

#### Spreadsheet enrichment

Export the dataset as CSV or Excel. Join on `requestedUsername` to enrich a creator shortlist while preserving unavailable values as blanks.

#### Database or warehouse loading

Fetch JSON through the dataset API and upsert on `requestedUsername` plus `scrapedAt`. Use `businessProfileId` as an additional stable source identifier when available.

#### Scheduled CRM hygiene

Run a known creator list on a schedule and route `private` or `not_found` state changes to a manual review queue.

#### Webhooks and automation platforms

Use Apify run webhooks to notify Make, Zapier, n8n, or your own endpoint after a run. The downstream workflow can fetch the default dataset and apply business rules.

### Use the Actor through the API

Set `APIFY_TOKEN` in your environment rather than pasting it into source code.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~snapchat-public-profile-metadata/runs?waitForFinish=300" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"usernames":["nasa","shonduras"],"maxItems":2}'
```

Use the returned `defaultDatasetId` to download items from `/v2/datasets/{datasetId}/items`.

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/snapchat-public-profile-metadata').call({
  usernames: ['nasa', 'shonduras'],
  maxItems: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/snapchat-public-profile-metadata").call(
    run_input={"usernames": ["nasa", "shonduras"], "maxItems": 2}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/snapchat-public-profile-metadata"
```

#### Claude Desktop

Add this server to the `mcpServers` object in Claude Desktop's configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/snapchat-public-profile-metadata"
    }
  }
}
```

#### Cursor

Open **Settings → Tools & MCP → Add custom MCP** and use the same HTTP URL:

```text
https://mcp.apify.com?tools=automation-lab/snapchat-public-profile-metadata
```

#### VS Code

Add an HTTP MCP server named `apify` to your VS Code MCP configuration with the same Actor-specific URL.

Example prompts:

- “Look up the public Snapchat profiles for nasa and shonduras and compare subscriber counts.”
- “Fetch this list of Snapchat profile URLs and return username, display name, bio, website, and badge state.”
- “Create a current Snapchat profile snapshot for these known creators and flag private or not-found results.”

MCP clients still need access to your Apify account and Actor run permissions.

### Reliability, limits, and responsible use

- Public profile fields depend on Snapchat's current logged-out page response.
- The Actor does not bypass account privacy, authentication, age gates, or access controls.
- It does not identify profile viewers or access private Snapchat content.
- Images and Snapcodes are returned as source URLs; media files are not downloaded.
- Related accounts are the summaries exposed on each source profile and are not recursively scraped.
- A run accepts at most 1,000 unique lookups and processes five requests at a time.
- Transient requests receive up to two bounded retries.
- A source layout or field can change, disappear, or become unavailable by region.

For large recurring jobs, begin with a small sample and verify that the fields needed by your workflow are currently exposed.

### Legal and ethical use

Use the Actor only for lawful purposes and public data you are entitled to process. Follow Snapchat's terms, applicable privacy and data-protection law, and your organization's policies. Avoid sensitive profiling, harassment, spam, surveillance, or attempts to infer private information.

You are responsible for your inputs, retention period, downstream decisions, and compliance. Minimize collected fields, keep data only as long as necessary, secure exports, and honor applicable deletion or access requests.

### Troubleshooting

#### Why did the Actor reject my URL?

Only HTTPS Snapchat profile URLs in `/add/username` or `/@username` format are accepted. Remove query-only, Discover, Spotlight, Story, download, or unrelated Snapchat URLs.

#### Why are many fields null?

The account may be private, absent, or may not expose those public fields. Check `profileType` first. A valid public account can also omit biography, website, category, timestamps, or images.

#### Why did the run fail?

The run fails for malformed input, no inputs, or when every requested profile request fails after retries. Check the run log for HTTP status or response-shape details, then test a known public username.

#### Why did the subscriber count change?

Subscriber counts are current source observations and can change naturally. The Actor does not smooth, estimate, or reconstruct historical counts.

### FAQ

#### Do I need a Snapchat login or API key?

No Snapchat credential is required for the supported logged-out profile lookup. You need an Apify account to run the Actor.

#### Can it search for Snapchat users by topic, name, email, or phone?

No. Supply known Snapchat usernames or supported public profile URLs. The Actor does not implement topic search, contact discovery, or identity matching.

#### Does it scrape Stories or Spotlight posts?

No. It returns public flags indicating whether some content types are exposed, but it does not return Story or Spotlight media items.

#### Can I track profiles over time?

Yes. Schedule repeated runs and compare timestamped datasets externally. The Actor itself returns the current snapshot and does not keep a cross-run history table.

#### Are related accounts charged separately?

No. Related-account summaries are included in the parent profile lookup record and have no separate charge event.

#### Can I use both usernames and URLs?

Yes. The Actor combines both lists, normalizes usernames, removes duplicates, and then applies `maxItems`.

#### Does `not_found` always mean the account never existed?

No. It means no matching logged-out page was available during this lookup. Usernames can be changed, removed, restricted, or temporarily unavailable.

### Related Snapchat Actors

- [Snapchat Public Profile Stories](https://apify.com/automation-lab/snapchat-public-profile-stories) exports currently visible Story snap IDs, media links, types, and timestamps for supplied public profiles.
- [Snapchat Public Video Downloader](https://apify.com/automation-lab/snapchat-public-video-downloader) downloads media from anonymously reachable public Snapchat Spotlight URLs and returns file metadata.

Use this Actor when profile metadata is the primary record. Use the related Actors only when the workflow requires public Story or Spotlight media.

# Actor input Schema

## `usernames` (type: `array`):

Public Snapchat usernames to look up. Enter them with or without the @ prefix.

## `startUrls` (type: `array`):

Public profile URLs in https://www.snapchat.com/add/username or https://www.snapchat.com/@username format.

## `maxItems` (type: `integer`):

Maximum number of unique profile lookup records to save.

## Actor input object example

```json
{
  "usernames": [
    "nasa",
    "shonduras"
  ],
  "startUrls": [
    {
      "url": "https://www.snapchat.com/add/nasa"
    }
  ],
  "maxItems": 3
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing public profile metadata and lookup states.

# 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 = {
    "usernames": [
        "nasa",
        "shonduras"
    ],
    "startUrls": [
        {
            "url": "https://www.snapchat.com/add/nasa"
        }
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/snapchat-public-profile-metadata").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 = {
    "usernames": [
        "nasa",
        "shonduras",
    ],
    "startUrls": [{ "url": "https://www.snapchat.com/add/nasa" }],
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/snapchat-public-profile-metadata").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "usernames": [
    "nasa",
    "shonduras"
  ],
  "startUrls": [
    {
      "url": "https://www.snapchat.com/add/nasa"
    }
  ],
  "maxItems": 3
}' |
apify call automation-lab/snapchat-public-profile-metadata --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/snapchat-public-profile-metadata"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WtbhHRI2XleAIZb7D/builds/gaPXshMEYD4FtHKN4/openapi.json
