# Snapchat Ads Scraper (`piotrv1001/snapchat-ads-scraper`) Actor

Scrape Snapchat's Ads Gallery for any advertiser: headlines, calls to action, media and landing URLs, start dates and status, total and per-country impressions across the EU, and age, gender, language and device targeting. Several advertisers and countries per run. No login.

- **URL**: https://apify.com/piotrv1001/snapchat-ads-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 ads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 Snapchat Ads Scraper

Easily extract ads from Snapchat's Ads Gallery without an account. The **Snapchat Ads Scraper** collects the ads of any advertiser shown in the EU and Turkey, with headline, call to action, media and landing page, start date and status, total impressions with a per-country breakdown, and age, gender, language and device targeting. Results are ready as JSON, CSV or Excel.

### ✨ Features

- 🏢 **Several advertisers per run**: list as many brands as you like; each is searched in the Ads Gallery.
- 🌍 **Country filter**: limit to the countries you care about (EU countries and Turkey), several at once.
- 📊 **Reach per country**: total impressions plus the impressions in each country, ready for comparison.
- 🎯 **Targeting**: age range, gender, languages, devices and whether the ad is regulated content.
- 🎬 **Creative**: headline, call to action, ad and media type, a media download link, the landing page or deep link, and carousel/collection/product details when present.
- 🗓️ **Date and status filters**: only ads that ran in a period, and active, paused or both.
- 🎯 **Exact advertiser matching**: Snapchat's search also returns look-alike names ("Temu" finds "Samet Temur"); those are skipped and **not charged**.
- 🧹 **No duplicates**: an ad found through two names is saved and charged once.
- ⚡ **No login, no browser**.

### 🛠️ How It Works

1. **Add advertisers**, one per line, e.g. `Nike`, `Netflix`, `Zalando`. Use the name the brand advertises under; the Ads Gallery searches advertiser names, not product names.
2. **Optionally filter** by countries (`de`, `fr`, `es`, `el`, `tr`), status and the period the ads ran.
3. **Set Max ads**: the cap for the whole run (default 50).
4. **Run the scraper.** One row per ad lands in the dataset, ready to download or to fetch via API, webhook or a scheduled run.

### 📥 Input

| Field | Description |
| --- | --- |
| `advertisers` | Advertiser or brand names. |
| `countries` | Optional two-letter codes: EU countries and Turkey (`de`, `fr`, `el` for Greece, `tr`). Empty = all. |
| `status` | `ALL` (default), `ACTIVE` or `PAUSED`. |
| `startDate`, `endDate` | Only ads that ran in this period (`YYYY-MM-DD`). |
| `matchAdvertiserName` | Keep only ads whose advertiser, brand or profile contains your name as whole words (default on). |
| `maxItems` | Maximum ads for the whole run (default 50, `0` = no limit). |

```json
{
    "advertisers": ["Nike", "Zalando"],
    "countries": ["de", "fr"],
    "status": "ACTIVE",
    "startDate": "2026-06-01",
    "maxItems": 200
}
```

### 💵 Pricing

Pay only for the ads you get, with no monthly fee:

| Event | Price |
| --- | --- |
| Ad | $0.002 per ad ($2 per 1,000) |
| Actor start | $0.00005 per run (per GB of memory) |

Examples: 50 ads cost $0.10; a brand's 300 most recent ads cost $0.60. Ads skipped because the advertiser name didn't match are not charged.

### 📊 Sample Output Data

One row per ad. Example (media link and details shortened):

```json
{
    "id": "672dca6b-25d2-4a93-80f6-c7bbc3c028f6",
    "adName": "_Blood Sacrifice: Season 1_Talent Driven Creative_10_9x16_Post_sv_Dark_",
    "advertiser": "Netflix, Inc.",
    "brand": "Netflix",
    "profileName": "Netflix",
    "adAccount": "EMEA Paid Social",
    "status": "ACTIVE",
    "reviewStatus": "APPROVED",
    "rejectionReasons": [],
    "startDate": "2026-08-20T22:00:00.000Z",
    "headline": "BTS från nya serien Bloodsoffer",
    "callToAction": "WATCH",
    "adType": "REMOTE_WEBPAGE",
    "creativeType": "WEB_VIEW",
    "mediaType": "VIDEO",
    "mediaUrl": "https://cf-st.sc-cdn.net/d/NzlfKIl0gejFrbAR2s8oz.67?mo=…",
    "landingUrl": "https://www.netflix.com/se/title/81768820",
    "languages": ["sv"],
    "impressions": 2706170,
    "impressionsByCountry": { "se": 2706170 },
    "countries": ["se"],
    "targetAgeMin": 18,
    "targetAgeMax": null,
    "targetGender": null,
    "targetLanguages": [],
    "targetDevices": [],
    "regulatedContent": false,
    "targeting": { "regulated_content": false, "demographics": [{ "min_age": "18", "operation": "INCLUDE" }], "devices": [] },
    "profileLogoUrl": "https://cf-st.sc-cdn.net/aps/bolt/…",
    "creativeDetails": null,
    "searchedAdvertiser": "Netflix",
    "scrapedAt": "2026-10-04T17:12:40.118Z"
}
```

| Field | Description |
| --- | --- |
| `advertiser`, `brand`, `adAccount` | Who paid for the ad, the brand shown, and the ad account. |
| `impressions`, `impressionsByCountry`, `countries` | Total impressions, impressions per country (only countries with impressions), and those countries' codes. |
| `targetAgeMin`, `targetAgeMax`, `targetGender`, `targetLanguages`, `targetDevices` | Targeting of the first audience; `targeting` has the full settings. |
| `mediaUrl` | Download link of the main image or video. It is signed and expires, so save what you need soon after the run. |
| `landingUrl` | The website or app link the ad opens. |
| `creativeDetails` | Extra parts of carousel, collection, product (catalog) and lens ads. |
| `searchedAdvertiser` | Which of your names found the ad. |

### 💡 Good to Know

- **Coverage is set by Snapchat**: the Ads Gallery lists ads shown in the EU and Turkey, so impressions and countries refer to those markets.
- **Use the advertiser's name.** Product and show names (e.g. "Prime Video") usually run under the company account ("Amazon"). If a name returns nothing, check the spelling in the Ads Gallery. The status message lists names with no ads.
- **Exact matching keeps whole words**, so "Nike" still includes "Oya Nike Botanica". Turn it off to keep everything Snapchat returns.
- **Monitoring:** schedule the run with Status = Active to track what a brand is running now, with fresh impression counts each time.

### 🔗 More Snapchat Actors

Same data source, different slice:

- [Snapchat Profile Scraper](https://apify.com/piotrv1001/snapchat-profile-scraper) — public profiles with subscriber counts, bios, categories, stories, highlights and lenses, plus keyword search for creators.
- [Snapchat Spotlight Scraper](https://apify.com/piotrv1001/snapchat-spotlight-scraper) — Spotlight videos by hashtag, video URL or creator, with views, shares, comments, transcripts and MP4 links.

Track what brands advertise on Snapchat with **Snapchat Ads Scraper** today! 🚀

# Actor input Schema

## `advertisers` (type: `array`):

Advertiser or brand names, one per line (Nike, Netflix, Zalando). Each name is searched in Snapchat's Ads Gallery.

## `countries` (type: `array`):

Optional two-letter codes of EU countries or Turkey where the ads ran (de, fr, es, el, tr). Empty = all.

## `status` (type: `string`):

Active ads, paused ads, or both.

## `startDate` (type: `string`):

Only ads that ran on or after this date (YYYY-MM-DD).

## `endDate` (type: `string`):

Only ads that ran on or before this date (YYYY-MM-DD).

## `matchAdvertiserName` (type: `boolean`):

Snapchat's search also returns advertisers with similar names ("Temu" finds "Samet Temur"). Keep this on to save only ads whose advertiser, brand or profile contains your name as whole words; skipped ads are not charged.

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

Maximum number of ads to save across all advertisers. 0 = no limit.

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

The default works and keeps the run fast; residential proxies are not needed.

## Actor input object example

```json
{
  "advertisers": [
    "Nike",
    "Netflix"
  ],
  "status": "ALL",
  "matchAdvertiserName": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "advertisers": [
        "Nike",
        "Netflix"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/snapchat-ads-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 = {
    "advertisers": [
        "Nike",
        "Netflix",
    ],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/snapchat-ads-scraper").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 '{
  "advertisers": [
    "Nike",
    "Netflix"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/snapchat-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/snapchat-ads-scraper"
        }
    }
}
```

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/fyYhvqv0ftmcuNSI0/builds/zG80WPGLdcUs5QZGU/openapi.json
