Snapchat Ads Library Scraper | by Brand, from $0.50/1K Ads
Pricing
from $0.50 / 1,000 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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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:
| Brand | Search of the brand name in the Ads Gallery | This Actor | Who actually pays |
|---|---|---|---|
| Temu | 0 | 15,934 or more | TECDO HONG KONG LIMITED, Elementary Innovation Pte. Ltd. |
| Samsung | 0 | 596 | Publicis Media France, Starcom Germany, Mindshare and others |
| Betclic | 0 | 1,217 | Equinox Limited, Suite 2B, Mansion House |
| Unibet | 0 | 1,276 | Française des Jeux, Publicis Media France, Kindred London |
| McDonald's | 33 | 2,269 | Gen'K Conseil, Omnicom Media Group, Publicis, local franchisees |
| Decathlon | 4 | 3,241 | MOBSUCCESS |
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
- 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.
- 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.). - 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.
- 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.
Why scrape the Snap Ads Gallery?
- 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
- Open the Actor and type one or more brands in Brands, for example
Zalando. - Pick the countries you care about, or leave it empty for every country of the library.
- Optionally set the active period and the status (active or paused ads).
- Set Max ads per search, or
0for everything. A large brand can have tens of thousands of ads. - 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 want | Fill |
|---|---|
| A competitor's Snapchat ads | Brands: Temu |
| Every ad a company paid for, whatever brand it signed | Advertisers: TECDO HONG KONG LIMITED |
| Ads of one legal entity only, no lookalikes | Advertisers: Nike, Exact advertiser match on |
| What an agency buys on Snapchat | Advertisers: PUBLICIS MEDIA FRANCE |
| Ads in one market | Countries: fr |
| Ads running right now | Ad status: Active |
| Ads that ran during a campaign | Active from and Active until |
| Daily alerts on new ads | Mode: 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, notgr. 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
| Field | What it is |
|---|---|
brandName | The brand that signs the ad: the profile name, or Snap's brand name when the profile is empty |
profileName | Name of the Snapchat public profile that ran the ad |
adBrandName | Brand name field of the ad as Snap stores it, often the full brand (Betclic Paris Sportifs & Poker) |
payingAdvertiserName | Legal entity that paid for the ad |
adAccountName | Name of the ad account, often revealing the agency, market or campaign line (FR_Betclic_Sportsbook) |
profileLogoUrl | Logo of the profile |
Ad identity and timing
| Field | What it is |
|---|---|
adId | Snap ID of the ad |
adUrl | Link that opens the ad in the Snap Ads Gallery |
adName | Internal name the advertiser gave the ad, often a campaign naming convention |
startDate | When the ad started, ISO 8601 |
status | ACTIVE or PAUSED |
reviewStatus | Result of Snap's ad review, for example APPROVED |
rejectionReasons | Reasons given when the review rejected the ad |
Creative
| Field | What it is |
|---|---|
headline | Headline shown on the ad |
callToAction | Button label, for example SHOP NOW, DOWNLOAD, INSTALL NOW |
adType, creativeType, adRenderType | Format of the ad: APP_INSTALL, WEB_VIEW, DEEP_LINK, COLLECTION, STORY, LENS, dynamic product ads... |
mediaType | IMAGE or VIDEO for the main snap |
mediaUrl | Direct link to the image or video |
mediaCropPosition | Crop of the main snap |
destinationUrl | Website the ad opens, for web view ads |
deepLinkUrl | App deep link, for deep link ads |
appInstall | For app install ads: appName, iosAppId, androidApp, iconUrl, playableUrl |
stickers | Stickers placed on the ad |
languages | Languages of the ad |
Reach and targeting
| Field | What it is |
|---|---|
impressionsTotal | Total impressions of the ad in the EU, as published by Snap |
impressionsByCountry | Impressions per country, only countries above zero, for example {"fr": 265116} |
countries | Countries where the ad had impressions |
targeting.minAge, targeting.maxAge, targeting.ageGroups | Age targeting |
targeting.genders | Gender targeting, when set |
targeting.languages | Language targeting |
targeting.osTypes | Device targeting: IOS, ANDROID |
targeting.regulatedContent | Whether Snap flagged the ad as regulated content |
targeting.raw | The targeting object exactly as Snap returns it, for anything the flat fields do not cover |
Provenance
| Field | What it is |
|---|---|
searchType | brand or advertiser |
searchTerm | The brand or advertiser from your input that found the ad |
resolvedPayer | The payer that was searched to find it |
scrapedAt | When 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 ApifyClientclient = 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:
| Event | Free plan | Bronze | Silver | Gold, 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
| Option | Brand resolution through payers | Countries per run | Price per 1,000 ads |
|---|---|---|---|
| This Actor | Yes, directory of 7,000+ brands | Any number | $1.00 to $0.50 |
| Other Snapchat ads scrapers on the Store | No, the term goes to the payer field | One | $0.60 to $2.00 |
| Snap Ads Gallery website | No | One or all | Free, manual, no export |
| Snap Marketing API | Your own ad accounts only | Free, 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.
Why does a search for a brand return 0 ads on the Snap Ads Gallery?
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.
How far back does the Snap Ads Gallery go?
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.
Is it legal to scrape the Snap Ads Gallery?
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.