Snapchat Ads Library Scraper | by Brand, from $0.50/1K Ads avatar

Snapchat Ads Library Scraper | by Brand, from $0.50/1K Ads

Pricing

from $0.50 / 1,000 ads

Go to Apify Store
Snapchat Ads Library Scraper | by Brand, from $0.50/1K Ads

Snapchat Ads Library Scraper | by Brand, from $0.50/1K Ads

Scrape the Snap Ads Gallery (EU) by brand, not only by paying entity: Temu, Samsung or Betclic ads bought through agencies, which a plain search returns as 0. Impressions per country, targeting, media, app IDs. Plain HTTP, no login.

Pricing

from $0.50 / 1,000 ads

Rating

0.0

(0)

Developer

Alexis Morain

Alexis Morain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Snapchat Ads Library Scraper

This Actor turns the Snap Ads Gallery, Snapchat's public library of ads shown in the European Union, into structured data. Give it a brand as you see it on Snapchat (Temu, Samsung, McDonald's) or the name of the company that pays for the ads, and it returns every matching ad: headline, call to action, image or video link, app or website promoted, start date, status, total impressions, impressions per country, and the targeting the advertiser chose (age, gender, language, device).

It runs over plain HTTP against the same JSON endpoint the Ads Gallery website calls. No browser, no Snapchat account, no Snap Marketing API token. A run fits in 256 MB, and pricing is pay per event: $1.00 per 1,000 ads at the entry price, down to $0.50 per 1,000 on the Gold plan, plus $0.002 per run.

If you were looking for a Snapchat Ads Library API or a Snap ad library export, this is it: input in, JSON, CSV or Excel out, from the console, the Apify API, a schedule or an AI agent.

What makes it different: the Ads Gallery search box only searches the name of the legal entity that pays for an ad, not the brand that signs it. On Snapchat the payer is often an agency or a subsidiary, so a search for Temu, Samsung or Betclic returns nothing, or almost nothing. This Actor keeps a directory of which entities pay for which brands and searches all of them for you.


The brand is not the payer: why a plain Snapchat ads search misses most ads

Every ad in the Snap Ads Gallery carries two names. The profile is the brand the viewer sees (Temu, Samsung Belgium, betclic). The paying advertiser is the legal entity billed for the ad (TECDO HONG KONG LIMITED, PUBLICIS MEDIA FRANCE, Equinox Limited, Suite 2B, Mansion House). The search only looks at the second one.

We measured it on 1 November 2026. In a sample of 311 ads that had a profile, 234 (75%) were signed by a brand whose name does not appear in the name of the payer. Here is what a search by brand name returns, compared with this Actor, for ads delivered in France and active in 2026:

BrandSearch of the brand name in the Ads GalleryThis ActorWho actually pays
Temu015,934 or moreTECDO HONG KONG LIMITED, Elementary Innovation Pte. Ltd.
Samsung0596Publicis Media France, Starcom Germany, Mindshare and others
Betclic01,217Equinox Limited, Suite 2B, Mansion House
Unibet01,276Française des Jeux, Publicis Media France, Kindred London
McDonald's332,269Gen'K Conseil, Omnicom Media Group, Publicis, local franchisees
Decathlon43,241MOBSUCCESS

The Temu run stopped at its timeout while still reading, so its figure is a floor.

Other Snapchat ads scrapers on the Apify Store pass your search term straight to that payer field, so they return the left-hand column. If you follow a brand that buys media through an agency, which is most large brands, that column is not a smaller sample of its ads. It is close to none of them.

How the brand search works

  1. A directory of brands and payers. We read the Ads Gallery every day and record, for each ad, which payer paid for which profile and brand. On 1 November 2026 the directory held 7,027 brand names and 4,473 payers, built from 92,820 ads, and it grows with every daily pass.
  2. Resolution. When you type Samsung, the Actor looks it up, finds the payers that paid for Samsung ads (up to 12, the most frequent first), and searches each of them. It also searches the brand name itself as a payer, since many brands pay for their own ads (Zalando SE, Netflix, Inc.).
  3. Filter. An agency pays for many brands, so the Actor keeps only the ads whose profile, brand or account name contains the brand you asked for, as a whole word. The log tells you how many ads were read and how many were dropped because another brand signed them.
  4. One ad, one row. An ad found through two payers, or by two of your searches, is returned and charged once.

The log of every run prints the payers each brand was resolved to, for example:

Brand 'Samsung' resolved to 10 payer search(es): Samsung, PUBLICIS MEDIA FRANCE (27), Starcom Germany (15), ...
Brand 'Betclic' resolved to 2 payer search(es): Betclic, Equinox Limited, Suite 2B, Mansion House (69).

If a brand is not in the directory yet, the Actor still searches its name as a payer, and the status message says the brand was not resolved. If you know the payer, put it in Advertisers and you get every ad it paid for.

What this Snapchat ads scraper does

It searches in two ways, and both can be used in the same run.

Search by brand. List brands the way they appear on Snapchat. Each one is resolved to its payers through the directory, and only ads signed by that brand come out. This is the search you want for competitor monitoring.

Search by advertiser (paying entity). List payer names. Each one is passed to Snapchat as it is, which matches it as a case-insensitive part of the payer name: Nike returns Nike, Inc. and also Oya Nike Botanica. Tick Exact advertiser match to keep only the payer you typed, ignoring case, punctuation and legal forms such as Inc., Ltd, SE or GmbH. Use this search to follow an agency (PUBLICIS MEDIA FRANCE) or a holding that pays for several brands.

On top of both you get the Ads Gallery filters (countries, active period, active or paused), a cap per search, a New ads only mode with a persistent registry for scheduled monitoring, and an optional webhook at the end of the run.

  • Snapchat competitor ad analysis. What a brand runs on Snapchat, since when, in which EU countries, with which creative and call to action.
  • Impressions as a budget signal. Snap publishes the number of impressions of every ad, in total and per country. Sum them by brand, by country or by month and you have a proxy for media weight that no other social ad library gives for commercial ads.
  • Targeting research. The minimum and maximum age, gender, languages and device targeting of each ad, as set by the advertiser.
  • App marketing intelligence. App install ads carry the app name, the App Store ID and the Google Play package. Track which mobile games and apps buy Snapchat inventory in Europe, and through which agencies.
  • Agency and media buying research. Search an agency as an advertiser to see which brands it buys for on Snapchat.
  • Creative swipe files. Image and video links for every ad, ready to download.
  • Alerts. Schedule the Actor daily in New ads only mode and get a webhook when a competitor launches something.

How to scrape Snapchat ads

From the Apify console

  1. Open the Actor and type one or more brands in Brands, for example Zalando.
  2. Pick the countries you care about, or leave it empty for every country of the library.
  3. Optionally set the active period and the status (active or paused ads).
  4. Set Max ads per search, or 0 for everything. A large brand can have tens of thousands of ads.
  5. Press Start, then download the results as JSON, CSV, Excel or HTML, or read them through the API.

From the API

Start a run with the input as JSON and read the dataset when it finishes. Examples in Python, JavaScript and cURL are further down.

Which fields should I fill?

You wantFill
A competitor's Snapchat adsBrands: Temu
Every ad a company paid for, whatever brand it signedAdvertisers: TECDO HONG KONG LIMITED
Ads of one legal entity only, no lookalikesAdvertisers: Nike, Exact advertiser match on
What an agency buys on SnapchatAdvertisers: PUBLICIS MEDIA FRANCE
Ads in one marketCountries: fr
Ads running right nowAd status: Active
Ads that ran during a campaignActive from and Active until
Daily alerts on new adsMode: New only, plus a schedule and a Webhook URL

Input examples

A brand in two countries, last quarter, capped at 500 ads:

{
"brands": ["Samsung"],
"countries": ["fr", "de"],
"startDate": "2026-07-01",
"endDate": "2026-09-30",
"maxAdsPerSearch": 500
}

A payer, exact name only, active ads:

{
"advertisers": ["Nike"],
"exactAdvertiserMatch": true,
"status": "ACTIVE"
}

Daily monitoring of three competitors, with a Slack webhook:

{
"brands": ["Temu", "Shein", "AliExpress"],
"countries": ["fr"],
"status": "ACTIVE",
"mode": "new-only",
"webhookUrl": "https://hooks.slack.com/services/..."
}

Details that need a word

  • Countries. The library covers the 27 EU countries and Türkiye. Use two-letter codes in lower case; Greece is el, not gr. Snapchat lists no ad for the United States or the United Kingdom in this library, and the Actor refuses those codes instead of returning nothing.
  • Dates select ads active in the period, not ads created in it. An ad launched in 2025 and still running in October 2026 is returned for October 2026. The library goes back to 2024. If you fill only one date, the other is completed (today, or 2024-01-01) and the log says so.
  • Order. Snapchat returns ads in no particular order, so the Actor reads each search to the end (or to your cap). It does not sort by impressions.
  • Disapproved ads. Some ads rejected by Snap's review have no payer, profile or brand name at all. A brand search cannot attribute them, so they are left out.
  • Speed. Snapchat serves 10 ads per request. Expect about 1,000 ads every two to four minutes per search, with searches running in parallel. A brand bought through a large agency takes longer, because the agency's ads for other brands are read and dropped. A single brand search reads at most 30,000 ads per payer, and the status message says so if it hits that limit.

What data can it extract? Every output field

Advertiser

FieldWhat it is
brandNameThe brand that signs the ad: the profile name, or Snap's brand name when the profile is empty
profileNameName of the Snapchat public profile that ran the ad
adBrandNameBrand name field of the ad as Snap stores it, often the full brand (Betclic Paris Sportifs & Poker)
payingAdvertiserNameLegal entity that paid for the ad
adAccountNameName of the ad account, often revealing the agency, market or campaign line (FR_Betclic_Sportsbook)
profileLogoUrlLogo of the profile

Ad identity and timing

FieldWhat it is
adIdSnap ID of the ad
adUrlLink that opens the ad in the Snap Ads Gallery
adNameInternal name the advertiser gave the ad, often a campaign naming convention
startDateWhen the ad started, ISO 8601
statusACTIVE or PAUSED
reviewStatusResult of Snap's ad review, for example APPROVED
rejectionReasonsReasons given when the review rejected the ad

Creative

FieldWhat it is
headlineHeadline shown on the ad
callToActionButton label, for example SHOP NOW, DOWNLOAD, INSTALL NOW
adType, creativeType, adRenderTypeFormat of the ad: APP_INSTALL, WEB_VIEW, DEEP_LINK, COLLECTION, STORY, LENS, dynamic product ads...
mediaTypeIMAGE or VIDEO for the main snap
mediaUrlDirect link to the image or video
mediaCropPositionCrop of the main snap
destinationUrlWebsite the ad opens, for web view ads
deepLinkUrlApp deep link, for deep link ads
appInstallFor app install ads: appName, iosAppId, androidApp, iconUrl, playableUrl
stickersStickers placed on the ad
languagesLanguages of the ad

Reach and targeting

FieldWhat it is
impressionsTotalTotal impressions of the ad in the EU, as published by Snap
impressionsByCountryImpressions per country, only countries above zero, for example {"fr": 265116}
countriesCountries where the ad had impressions
targeting.minAge, targeting.maxAge, targeting.ageGroupsAge targeting
targeting.gendersGender targeting, when set
targeting.languagesLanguage targeting
targeting.osTypesDevice targeting: IOS, ANDROID
targeting.regulatedContentWhether Snap flagged the ad as regulated content
targeting.rawThe targeting object exactly as Snap returns it, for anything the flat fields do not cover

Provenance

FieldWhat it is
searchTypebrand or advertiser
searchTermThe brand or advertiser from your input that found the ad
resolvedPayerThe payer that was searched to find it
scrapedAtWhen the row was produced

Fields that do not apply to an ad are null rather than missing, so a CSV export keeps the same columns.

Example output

A Betclic ad found through its payer, Equinox Limited (media links shortened):

{
"adId": "ebd2c4e2-97aa-409d-834e-5c2c725fa9b2",
"adUrl": "https://adsgallery.snap.com/?adId=ebd2c4e2-97aa-409d-834e-5c2c725fa9b2",
"adName": "Static_Specific_EDF_PARvFRA_WC26",
"brandName": "betclic",
"profileName": "betclic",
"adBrandName": "Betclic Paris Sportifs & Poker",
"payingAdvertiserName": "Equinox Limited, Suite 2B, Mansion House",
"adAccountName": "FR_Betclic_Sportsbook",
"headline": "Jusqu'à 100€ reversés en Feebets*",
"callToAction": "DOWNLOAD",
"status": "PAUSED",
"reviewStatus": "APPROVED",
"rejectionReasons": [],
"adType": "APP_INSTALL",
"creativeType": "APP_INSTALL",
"adRenderType": "STATIC",
"mediaType": "IMAGE",
"mediaUrl": "https://cf-st.sc-cdn.net/d/IWBet3k1kmtCoJNgUGWof.380?...",
"mediaCropPosition": "MIDDLE",
"profileLogoUrl": "https://cf-st.sc-cdn.net/aps/bolt/...",
"destinationUrl": null,
"deepLinkUrl": null,
"appInstall": {
"appName": "Betclic Paris Sportifs",
"iosAppId": "441081528",
"androidApp": "sport.android.betclic.fr",
"iconUrl": "https://cf-st.sc-cdn.net/d/J6EfvoAbcJW4T1TpaQ24J.438?...",
"playableUrl": null
},
"startDate": "2026-06-04T15:46:32.000Z",
"impressionsTotal": 265116,
"impressionsByCountry": { "fr": 265116 },
"countries": ["fr"],
"languages": ["fr"],
"targeting": {
"minAge": 18,
"maxAge": null,
"ageGroups": [],
"genders": ["MALE"],
"languages": [],
"osTypes": ["ANDROID"],
"regulatedContent": false,
"raw": { "...": "..." }
},
"stickers": [],
"searchType": "brand",
"searchTerm": "Betclic",
"resolvedPayer": "Equinox Limited, Suite 2B, Mansion House",
"scrapedAt": "2026-11-01T05:26:52Z"
}

A search for Betclic in the Ads Gallery itself returns 0 ads.

Monitor competitor ads on Snapchat: New ads only mode

Set Mode to New only and schedule the Actor (daily is typical). The first run returns everything it finds and records each ad in a registry kept in a key-value store of your Apify account (snapchat-ads-library-registry). The next runs return, and charge, only ads never returned before for the same searches and filters.

Snapchat does not sort ads by date, so a new ad can appear anywhere in the results. Each run therefore reads every search to the end and compares; reading costs you nothing, only returned ads are charged. If you want several schedules to share one registry, give them the same Registry key.

Webhook at the end of the run

Fill Webhook URL and, when a run returns at least one ad, the Actor POSTs a short JSON summary to it:

{
"actor": "snapchat-ads-library-scraper",
"runId": "wfZFIOnBUY44sIP2f",
"mode": "new-only",
"items": 12,
"searches": 3
}

Slack and Discord incoming webhook URLs work as they are. The URL is treated as a secret: it never appears in the log, the status message or the dataset. A failed webhook call is logged and never fails the run.

Using the Snapchat Ads Library API from your code

Replace YOUR_APIFY_TOKEN with the token from your Apify console (Settings, API and Integrations).

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("alexmorain/snapchat-ads-library-scraper").call(run_input={
"brands": ["Temu"],
"countries": ["fr"],
"status": "ACTIVE",
"maxAdsPerSearch": 200,
})
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
print(ad["startDate"][:10], ad["impressionsTotal"], ad["payingAdvertiserName"], ad["headline"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('alexmorain/snapchat-ads-library-scraper').call({
brands: ['Temu'],
countries: ['fr'],
status: 'ACTIVE',
maxAdsPerSearch: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const ad of items) {
console.log(ad.startDate.slice(0, 10), ad.impressionsTotal, ad.payingAdvertiserName, ad.headline);
}

cURL

Run synchronously and get the ads in the response (for runs under five minutes):

curl -X POST "https://api.apify.com/v2/acts/alexmorain~snapchat-ads-library-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"brands": ["Zalando"], "countries": ["fr"], "maxAdsPerSearch": 50}'

What people use it for

Snapchat competitor ad analysis

Put your competitors in Brands, one market in Countries, and the last 90 days in the period. Sort by impressionsTotal to see which creatives carried the campaign, and by startDate to see the rhythm of launches. adName often follows the advertiser's naming convention, which tells you the campaign, the format and sometimes the audience.

Estimating media weight from impressions

Snap publishes impressions for every commercial ad, which Meta and Google do not. Group the rows by brand and country and sum impressionsByCountry: you get a comparable measure of how hard each competitor pushes on Snapchat in each EU market, and when.

Who buys for whom

Search an agency as an advertiser (PUBLICIS MEDIA FRANCE, Starcom Germany, TECDO HONG KONG LIMITED) and group by brandName. You get the list of brands that agency buys Snapchat media for, which is useful for agency new business and for media sales teams.

Mobile app and game marketing

App install ads come with appInstall.iosAppId and appInstall.androidApp. Filter adType on APP_INSTALL to list which apps and games advertise on Snapchat in a country, how many impressions each gets, and which publishers buy through Asian agencies such as TECDO or BlueFocus.

Creative research before a brief

Download mediaUrl for the top ads by impressions in your category and read the headlines and calls to action side by side.

Regulated and sensitive categories

Betting, alcohol and finance brands often buy through dedicated entities. targeting.regulatedContent, the age targeting and the payer name together show how an advertiser handles a regulated category on Snapchat.

Snapchat Ads Library scraper pricing

Pay per event, no subscription on top of your Apify plan:

EventFree planBronzeSilverGold, Platinum, Diamond
Run start (per GB of memory, 256 MB by default)$0.002$0.002$0.002$0.002
Ad returned$1.00 per 1,000$0.80 per 1,000$0.70 per 1,000$0.50 per 1,000

Some examples at the Free plan price:

  • A first test capped at 100 ads: about $0.10.
  • One brand in one country over a quarter, 1,000 ads: about $1.
  • Daily monitoring of five brands in New ads only mode, 50 new ads a day: about $1.50 a month.

Ads read and dropped because another brand signed them are never charged. You can also set a maximum charge per run in the Apify console; the Actor stops cleanly when it is reached.

How this compares to other options

OptionBrand resolution through payersCountries per runPrice per 1,000 ads
This ActorYes, directory of 7,000+ brandsAny number$1.00 to $0.50
Other Snapchat ads scrapers on the StoreNo, the term goes to the payer fieldOne$0.60 to $2.00
Snap Ads Gallery websiteNoOne or allFree, manual, no export
Snap Marketing APIYour own ad accounts onlyFree, needs an approved app

Why this Snapchat ads scraper

Brand search through the payers

The directory and the brand filter above. It is the reason the Temu, Samsung and Betclic rows of the first table are not zero.

Plain HTTP, no browser, no login

The Actor calls the JSON endpoint behind the Ads Gallery directly. No headless browser, no Snapchat account, nothing that breaks when the website changes its layout. That is why it runs in 256 MB.

It handles rate limits

When Snapchat answers "too many requests", the Actor waits and retries with backoff, and if that persists it moves to the Apify datacenter proxy on its own. On our test runs, 7,884 requests in a row went through without a single refusal.

Failure that tells you what to do

A brand that cannot be resolved, a country code Snapchat refuses, a date in the wrong format: the run says which one and why, in plain words. A search that fails does not sink the others, and a run where every search fails ends as Failed, not as an empty success.

One ad, one charge

Ads are deduplicated across searches before they are pushed, and charging goes through Apify's own pay-per-event mechanism, which respects the maximum charge you set.

Limits and what this scraper does not do

  • EU and Türkiye only. The Snap Ads Gallery is a transparency library required by the EU Digital Services Act. There is no equivalent for ads shown in the United States or the United Kingdom.
  • No spend. Snap publishes impressions, not budgets, for commercial ads.
  • The directory is built from what Snap shows. A brand that started advertising today may not be resolved until the next daily pass; search its payer in Advertisers meanwhile. Brands that advertise a lot are the first to be in the directory.
  • Up to 12 payers per brand, the most frequent first. The log lists any payer left out, which you can search in Advertisers.
  • Disapproved ads without any name cannot be attributed to a brand.
  • No Spotlight, Stories or profile data. This Actor covers ads only.

FAQ

Is there a Snapchat Ads Library API?

Snap has no public API for its ad library. The Snap Marketing API only gives access to ad accounts you manage. The Ads Gallery website calls an internal JSON endpoint, which this Actor uses, and it exposes the result through the Apify API, so you get a Snapchat ads API with an API token and nothing else.

Because the search box only matches the name of the entity that pays for the ads. Temu ads are paid by TECDO Hong Kong Limited and Elementary Innovation, Samsung ads by media agencies such as Publicis or Starcom, Betclic ads by Equinox Limited. Put the brand in Brands and the Actor finds the payers for you.

How do I find who pays for a brand's Snapchat ads?

Run the Actor with the brand in Brands and read the log: it lists the payers the brand was resolved to, with the number of ads seen for each. The payingAdvertiserName field of each row gives it ad by ad.

Can I scrape Snapchat ads without an account?

Yes. The Snap Ads Gallery is public and the Actor needs no Snapchat login, cookie or developer token.

To 2024. A period that ends before 2024 returns nothing.

Which countries are covered?

The 27 EU member states and Türkiye. Greece uses the code el.

Can I see impressions per country?

Yes, in impressionsByCountry, for every ad, along with the total in impressionsTotal.

How much does it cost to scrape 1,000 Snapchat ads?

$1.00 on the Free plan, $0.80 on Bronze, $0.70 on Silver and $0.50 on Gold and above, plus $0.002 per run.

How do I export Snapchat ads to CSV or Excel?

After the run, open the Output tab and pick CSV or Excel, or call the dataset endpoint of the Apify API with format=csv or format=xlsx.

Why does a search for Nike also return other companies?

Snapchat matches the advertiser name as a part of the payer's name, so Nike also returns Oya Nike Botanica. Tick Exact advertiser match, or use Brands, which keeps only ads signed by the brand.

Can I run it every day and be told about new ads?

Yes. Set Mode to New only, add a Webhook URL, and schedule the Actor in the Apify console. Only new ads are returned and charged.

The Ads Gallery is a public transparency archive published under the EU Digital Services Act so that anyone can inspect the ads shown in the EU. The Actor reads only what the public website shows, without login. Check the rules that apply to your own use of the data, especially for personal data.

Integrations, exports and agents

Results go to an Apify dataset that you can export as JSON, CSV, Excel, XML or HTML, send to Google Sheets, or pipe into Make, Zapier, n8n or your own code through the Apify API. The Actor also works from AI agents through the Apify MCP server: ask for "the Snapchat ads Temu ran in France last month" and the agent can call it with the right input.

Support

Something wrong, a brand that is not resolved, or a field you need? Open an issue on the Issues tab of this Actor. Issues are read and answered quickly, and fixes ship as new builds.