๐Ÿ‘ป Snapchat Ads Scraper avatar

๐Ÿ‘ป Snapchat Ads Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
๐Ÿ‘ป Snapchat Ads Scraper

๐Ÿ‘ป Snapchat Ads Scraper

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

12 days ago

Last modified

Share

Snapchat Ads Scraper reads Snapchat's public ads library and returns one flat JSON row per ad: ad ID, ad name and ad type, the paying advertiser and ad account, brand and profile name, the headline text, total impressions, delivery status, start date, and a direct media download link for the top snap. Type one or more advertiser names, set how many ads you want per name, and rows are written to the dataset live as each page of results lands.

โš ๏ธ Two things to know before your first run. Your search terms are sent to Snapchat as the paying advertiser name, not as a free-text keyword search over headlines โ€” so "IKEA" matches on the advertiser entity, and a brand that pays under a different legal name may return nothing. And the country filter accepts only the 27 EU country codes listed in the input schema; any other value is dropped with a warning and the run continues unfiltered.

What is Snapchat Ads Scraper?

Snapchat Ads Scraper is an Apify Actor that queries Snapchat's public ads library search endpoint (adsapi.snapchat.com/v1/ads_library) and maps each returned ad preview into a clean, typed record with camelCase keys. Every row carries the same 15 keys, run after run.

No Snapchat account, login, cookie or session is required. The endpoint the Actor calls is open and unauthenticated โ€” the only credential involved is your Apify token.

It is built for competitive-intelligence and paid-social teams tracking rival creative, ad-creative researchers building swipe files, data journalists auditing advertiser activity, and developers piping ad-transparency records into their own dashboards or agents.

What Snapchat ad data is publicly available to scrape?

Snapchat publishes an ads library that any visitor can search without logging in: who paid for an ad, what the creative said, how many impressions it served, whether it is still running, and when it started. What is not in the library is the advertiser's own performance and money data.

Data CategoryPublic ads libraryAdvertiser account / Marketing API
Ad ID, ad name, ad typeโœ… Publicโ€”
Paying advertiser, ad account name, brand nameโœ… Publicโ€”
Profile name and profile logo imageโœ… Publicโ€”
Headline creative textโœ… Publicโ€”
Total impressions as published in the libraryโœ… PublicFull delivery reporting
Delivery status (ACTIVE / PAUSED) and start dateโœ… PublicFull campaign schedule
Top-snap media file download linkโœ… PublicCreative asset library
Ad spend, budget, CPM, bidโŒAdvertiser account only
Clicks, CTR, conversions, ROASโŒAdvertiser account only
Audience segments and custom-audience dataโŒAdvertiser account only

Snapchat Ads Scraper only returns publicly visible data โ€” what any visitor to the ads library sees. Nothing behind a login wall.

One honest caveat on scope: the raw ad-preview object Snapchat returns carries more keys than this Actor maps. Other Snapchat ads Actors reading the same endpoint document extra fields such as call to action, destination URL, per-country impression breakdowns, review status and targeting objects (checked on the Apify Store on 25 July 2026). This Actor writes the 15 keys documented below and nothing else.

What data can I extract with Snapchat Ads Scraper?

Each ad is one dataset row with 15 keys: the query that found it, its identity and advertiser, and its creative, reach and status.

Field NameDescription
searchQueryThe search term this row came from, echoed back exactly as you supplied it (trimmed). Empty string when you searched all advertisers
idSnapchat's ad identifier โ€” the stable key to diff runs on
adNameThe advertiser's internal name for the ad, as published in the library
adTypeAd format type as Snapchat labels it
payingAdNameThe paying advertiser name, mapped from Snapchat's paying_advertiser_name
accountNameAd account name behind the ad, from ad_account_name
profileLogoUrlURL of the advertiser's profile logo image
profileNamePublic profile name shown with the ad
brandNameBrand name when Snapchat supplies one โ€” otherwise derived (see the note below)
headlineThe ad's headline creative text
totalImpressionsTotal impressions as published in the library, from impressions_total
adStatusCurrent delivery status, e.g. ACTIVE or PAUSED
snapMediaDownloadLinkDirect URL to the top-snap media file, from top_snap_media_download_link
snapMediaTypeMedia type of the top snap
startDateThe ad's start date, returned exactly as Snapchat sends it โ€” the Actor does not reformat it

โš ๏ธ brandName is the one derived field. When Snapchat sets a brand name, that value is used unchanged. When it does not, the Actor approximates the brand from the first whitespace-separated token of accountName โ€” so an account called IKEA Sweden Retail yields IKEA, but an account called BE PV Brand SNAP 3P Default yields BE. Treat brandName as a convenience, and use payingAdName or accountName when you need the exact published identity.

Ad and advertiser identity

id is Snapchat's ad identifier and the field to key on when you re-run a search and want to diff. adName and adType describe the ad itself; payingAdName and accountName describe who paid and which ad account ran it. profileName, profileLogoUrl and brandName are the public-facing brand presentation.

payingAdName is named for the paying advertiser, not for an ad โ€” it maps Snapchat's paying_advertiser_name. It is also the field your search actually matches against, which is why exact advertiser naming matters so much for hit rates.

Creative, reach and status

headline is the ad copy. snapMediaDownloadLink and snapMediaType cover the creative asset. totalImpressions is Snapchat's published impression figure โ€” an integer, so it sorts and thresholds directly. adStatus tells you whether the ad is still delivering, and startDate when it began.

Every one of the 15 keys is always present on every row. When Snapchat omits a value it arrives as null rather than a missing key, so downstream code never needs a presence check. snapMediaDownloadLink and profileLogoUrl are the two most likely to be null โ€” one competing Actor's listing states that direct media URLs are exposed only for certain media types (checked on the Apify Store on 25 July 2026). The Actor stores whatever URL Snapchat returns; it does not download the file, re-host it, or verify how long the CDN link keeps working.

๐Ÿค– Add-on: Need additional Snapchat data?

Snapchat Profile Scraper covers the organic side of the same brands โ€” public profile metadata for the advertisers you find here. If you are benchmarking paid creative across platforms, TikTok Video Scraper and Facebook Posts Scraper give you the comparable creative and engagement records for the same campaign period.

How does Snapchat Ads Scraper differ from the official Snapchat API?

Snap publishes a Marketing API, but it is scoped to advertiser accounts you are authorised for โ€” it reports on your campaigns. Snapchat Ads Scraper reads the public ads library instead, which is where any advertiser's published ads live. That difference in scope is the whole point: the official API is the right tool for your own performance data and the wrong tool for competitor creative.

FeatureSnapchat Marketing APISnapchat Ads Scraper
Whose ads you can seeAd accounts you are authorised forAny advertiser published in the public ads library
Credentials requiredSnap Business account and OAuth app credentialsNone for the endpoint โ€” only your Apify token
Approval step before accessApp registration and review, per Snap's docsโŒ Not applicable
Spend, clicks, conversions, audience dataโœ… For your own accountsโŒ Not published in the library
Competitor creative, headlines and media download linksโŒ Not in scopeโœ… Returned per ad
Output shapeSnap's documented API schemaOne flat 15-key row per ad
Rate-limit and quota termsPer Snap's published documentationActor-side backoff and proxy escalation

Check Snap's current published Marketing API documentation for exact scopes, approval requirements and quota terms before choosing โ€” those terms change and are not reproduced here.

Use the Marketing API when you need spend, delivery and conversion data for campaigns you run. Use Snapchat Ads Scraper when you need what other advertisers are publishing, in bulk, without any advertiser relationship.

How to use Snapchat Ads Scraper

Snapchat Ads Scraper runs on Apify. Start it from the Apify Console or call it through the Apify API.

  1. Open Snapchat Ads Scraper on Apify and click Try for free
  2. Enter one or more advertiser or brand names in Advertiser Names / Search Keywords (searchQueries) โ€” this is the only required input, and it is prefilled with ["Ikea"]
  3. Set Max Ads Per Search Query (maxItems) โ€” this is per keyword, not a run total
  4. Optionally narrow with Country Filter (country), Ad Status (status), and the Start Date / End Date bounds
  5. Click Start โ€” rows appear in the dataset while the run is still going
  6. Export as JSON, CSV, Excel, XML or HTML, or read the dataset through the Apify API

If you want to browse the library rather than target a brand, put a single empty string "" in searchQueries. That sends an empty advertiser name, so results are constrained only by your country, date and status filters.

How to scale to bulk ad extraction

searchQueries is a list, so bulk is the default mode: every entry is processed in turn, each result row is tagged with its searchQuery, and one run can cover a whole competitive set. Entries are trimmed and de-duplicated case-insensitively, so ["Nike", "nike ", "NIKE"] runs once โ€” the first spelling is the one kept and echoed into the output.

maxItems applies per keyword, so ten advertiser names at maxItems: 200 is a ceiling of 2,000 rows for the run. Internally the Actor requests up to 50 ads per page and follows Snapchat's pagination cursor until your limit is reached or the feed ends.

What can you do with Snapchat ad data?

  • ๐ŸŽฏ A paid-social strategist planning a Q4 push pulls a competitive set into searchQueries, then sorts by totalImpressions and filters adStatus to ACTIVE to see which rival creatives are still getting budget rather than which ones merely existed.
  • ๐ŸŽฌ A creative director building a swipe file collects snapMediaDownloadLink and snapMediaType alongside headline, giving them the actual asset next to the copy instead of a screenshot.
  • ๐Ÿ“… A brand-monitoring analyst re-runs the same advertiser list weekly and diffs on id and adStatus to catch the exact week a competitor paused a campaign or launched a new one.
  • ๐Ÿ—ž๏ธ A data journalist auditing an advertiser's EU activity sets country and the startDate / endDate bounds, then reports payingAdName and totalImpressions against the published creative in headline.
  • ๐Ÿค– An AI engineer building a competitive-research agent indexes headline, payingAdName, brandName and adType into a vector store so an agent can answer "which formats is this advertiser running in Germany right now, and what are they saying" against live library data rather than a stale export.

Every one of these is callable from an agent framework over the Apify API, since the Actor is a standard HTTP-triggered run.

How does Snapchat Ads Scraper handle rate limits and blocking?

The ads library endpoint is open, but it rate-limits by source IP. The Actor handles that with two mechanisms and no browser automation โ€” there is no headless browser, no CAPTCHA solving and no login flow anywhere in the code.

Per-request backoff. Each request gets up to three retries after the first attempt, with exponential backoff capped at 30 seconds, and a 30-second request timeout. A retry is triggered by Snapchat's rate-limit error code, an HTTP 429, any 5xx, or a network error or timeout.

Proxy escalation. Runs start on a direct connection with no proxy at all. Only when a request keeps failing does the Actor climb the ladder: direct โ†’ Apify datacenter โ†’ Apify residential, with up to three retries on the residential rung. Each switch is logged, and once a rung is engaged it stays engaged for the rest of the run โ€” the Actor does not drop back down. If you set proxyConfiguration yourself, that choice is honoured as the starting rung instead. Between pages the Actor waits about a second plus a small random jitter.

If every rung is exhausted for a keyword, the Actor logs the failure, stops on that keyword and moves to the next one. Any ads already pushed stay in the dataset โ€” rows are written live, so a keyword that fails halfway leaves a partial but valid result set rather than nothing.

โฌ‡๏ธ Input

All seven parameters, exactly as defined in the Actor's input schema. searchQueries is the only required one.

ParameterRequiredTypeDescriptionExample Value
searchQueriesYesarrayAdvertiser / brand names to search the ads library for. Bulk supported โ€” each entry is processed independently and tagged in the output. A single empty string fetches all advertisers, filtered only by country, date and status. Default ["Ikea"].["Ikea", "Zalando", "McDonald's"]
maxItemsNointegerMaximum ads to fetch per search keyword, not per run. Minimum 1, maximum 10000. Default 10.200
countryNostringRestrict results to ads served in a single EU country. Empty means all countries. Enum: "", AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, RO, SK, SI, ES, SE. Default ""."DE"
statusNostringFilter by current delivery status. Enum: "" (any โ€” active plus paused), ACTIVE, PAUSED. Default ""."ACTIVE"
startDateNostringLower bound for the ad's start date, format YYYY-MM-DD. No default โ€” leave empty for no lower bound."2026-01-01"
endDateNostringUpper bound for the ad's start date, format YYYY-MM-DD. No default โ€” leave empty for no upper bound."2026-07-01"
proxyConfigurationNoobjectApify Proxy settings. Default {"useApifyProxy": false} โ€” the Actor starts direct and escalates on its own. Set this only to force a starting rung.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

What a run missing searchQueries does. The schema marks it required and prefills ["Ikea"], so the Console will not let you submit it empty. If you call the Actor through the API and send an empty list โ€” or omit the field entirely โ€” the Actor logs a warning and falls back to the default keyword Ikea rather than failing. It will not error out, so check the run log if your dataset comes back full of IKEA ads you did not ask for.

Filters that get silently dropped. Every optional filter is validated and discarded with a warning rather than rejected, so a typo costs you the filter, not the run:

  • country is upper-cased and checked against the 27 EU codes above. "US", "GB" or "Germany" are ignored and the run proceeds across all countries.
  • status is upper-cased and must be ACTIVE or PAUSED. Anything else is ignored.
  • startDate and endDate are shape-checked only: exactly ten characters, YYYY-MM-DD, digits and dashes in the right places. "2026-7-1" fails that check and is dropped. The check does not validate the calendar, so an impossible month passes through to Snapchat rather than being caught locally.
  • maxItems falls back to 10 if it is missing, zero, negative or not parseable as an integer. The 10000 ceiling is enforced by the input schema, not re-clamped in code.

Where the date filters are applied. Both bounds are sent to Snapchat inside the search request โ€” the Actor performs no local date filtering after fetching, so no results are silently thrown away client-side. The trade-off is that the exact semantics are Snapchat's, not the Actor's: one competing Actor's listing states that these bounds behave as an activity window rather than a strict start-date range (checked on the Apify Store on 25 July 2026). Verify against startDate in your own output before relying on the boundary.

Example input

{
"searchQueries": ["Ikea", "Zalando", "McDonald's"],
"maxItems": 200,
"country": "DE",
"status": "ACTIVE",
"startDate": "2026-01-01",
"endDate": "2026-07-01",
"proxyConfiguration": {
"useApifyProxy": false
}
}

โฌ†๏ธ Output

Every ad is one dataset row with the same 15 keys in the same order, run after run. The structure is flat โ€” no nested objects and no arrays โ€” and Snapchat's snake_case response keys are mapped to camelCase, with id kept as id. Missing values arrive as null, never as an absent key. Rows are pushed live as each page is parsed, so the dataset fills while the run is still going. Export as JSON, CSV, Excel, XML or HTML, or read the dataset through the Apify API.

Only successful ad records reach the dataset. Ad previews that Snapchat marks as unsuccessful, and any record without an id, are skipped during parsing โ€” which means a page can yield fewer rows than requested. The Actor writes no diagnostic, error or accounting rows at all, so there is nothing to filter out: every row is a real ad, and every row is charged as one row_result event. Failures live in the run log, not in your data.

Example output

{
"searchQuery": "Ikea",
"id": "72b378ea-a99a-4cf0-9459-62763578988a",
"adName": "DE_IKEA_KITCHEN_Q2_STORY_01",
"adType": "REMOTE_WEBPAGE",
"payingAdName": "IKEA Marketing & Communication AB",
"accountName": "IKEA Deutschland Retail",
"profileLogoUrl": "https://cf-st.sc-cdn.net/aps/bolt/9f13c0a7-ikea-logo.png",
"profileName": "IKEA",
"brandName": "IKEA",
"headline": "Neue Kรผchen entdecken",
"totalImpressions": 4821340,
"adStatus": "ACTIVE",
"snapMediaDownloadLink": "https://cf-st.sc-cdn.net/d/C3CFWTMYLi5tqA8XbQ2f.mp4",
"snapMediaType": "VIDEO",
"startDate": "2026-04-18T06:00:12.000Z"
}

A second row from the same run, showing how null values arrive when Snapchat does not publish a field:

{
"searchQuery": "Zalando",
"id": "1043c3dc-b78f-432e-8208-34ac81706787",
"adName": "ZAL_SS26_BRAND_COLLECTION_DE",
"adType": "COLLECTION",
"payingAdName": "Zalando SE",
"accountName": "Zalando SE DACH Performance",
"profileLogoUrl": null,
"profileName": null,
"brandName": "Zalando",
"headline": "Jetzt die neue Kollektion shoppen",
"totalImpressions": 1187602,
"adStatus": "PAUSED",
"snapMediaDownloadLink": null,
"snapMediaType": "IMAGE",
"startDate": "2026-02-03T09:41:55.000Z"
}

How does it work?

Snapchat publishes its ads library through an open search endpoint that needs no authentication. Snapchat Ads Scraper posts your advertiser name to that endpoint together with your country, status and date filters, reads the JSON response, and maps each ad preview into a flat 15-key record.

Requests start on a direct connection. If Snapchat rate-limits or the connection fails, the Actor retries with exponential backoff and then climbs to an Apify datacenter proxy and on to residential, logging each switch. There is no headless browser involved and no CAPTCHA to solve โ€” it is a JSON request with browser-accurate headers, which is why runs are lightweight.

Pagination follows Snapchat's own cursor link, with the page size rewritten to match how many ads you still need, so the final page is never over-fetched.

Because the Actor reads that structured endpoint rather than scraping rendered markup, a redesign of the ads library front end does not affect it, and your field names stay put. Only publicly visible library data is collected โ€” no account, cookie or session is used.

Integrations

Snapchat Ads Scraper is an Apify Actor, so it works with anything that can call the Apify API or consume a dataset.

Calling Snapchat Ads Scraper from Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/snapchat-ads-scraper").call(run_input={
"searchQueries": ["Ikea", "Zalando"],
"maxItems": 200,
"country": "DE",
"status": "ACTIVE",
})
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
print(ad["searchQuery"], ad["payingAdName"], ad["totalImpressions"], ad["snapMediaType"])

Works in Go, Ruby, Node.js, cURL โ€” any language that can make an HTTP request.

No-code tools (n8n, Make, Zapier)

In n8n, use the Apify node โ€” or an HTTP Request node pointed at the Apify run endpoint with your token โ€” and pass the same JSON input shown above; a Filter node on adStatus then splits live creative from paused. In Make, the Apify module supports run-and-wait, so a weekly competitive sweep can feed a Google Sheets or Airtable step directly. Both platforms handle scheduling, so a recurring advertiser watchlist needs no code at all.

Scraping an ad-transparency library is one of the stronger positions in public-data collection: the library exists specifically so that ads can be inspected by the public, and Snapchat Ads Scraper reads it without any account, cookie or session. Publishing an ad in a searchable public archive is publication for scrutiny, not incidental exposure.

The output is business and advertising data โ€” advertiser and ad-account names, brand names, creative copy, ad formats, impression figures. Those are commercial identities and commercial records, so the personal-data regimes that govern profile scraping do not attach to this output the way they would to a people scraper. What does apply is contractual and database-related: Snapchat's terms of service, and any local database or unfair-competition rules covering systematic reuse of a compiled dataset.

One narrow exception worth naming precisely: payingAdName, accountName, profileName and profileLogoUrl carry whatever identity the advertiser registered. Almost always that is a company, but a sole trader or individual advertiser can appear under a personal name and image. If your use case involves bulk storage of such records, treat those four fields as potentially personal and consult legal counsel โ€” the other eleven fields are ad metadata only.

โ“ Frequently asked questions

What Snapchat ad fields does Snapchat Ads Scraper return?

The five most used are payingAdName, headline, totalImpressions, snapMediaDownloadLink and adStatus. Fifteen fields are returned per ad in total, including id, adName, adType, accountName, brandName, profileName, profileLogoUrl, snapMediaType, startDate and the searchQuery that produced the row. See the data fields table above.

Does Snapchat Ads Scraper require a Snapchat account or login?

No. The ads library search endpoint it calls is open and unauthenticated โ€” there is no login flow, no cookie and no session anywhere in the Actor. The only credential you need is your Apify token.

How many ads can I extract in one run?

maxItems accepts up to 10000 and applies per keyword, so the ceiling for a run is maxItems multiplied by the number of unique keywords in searchQueries. Internally the Actor requests up to 50 ads per page and follows Snapchat's pagination cursor until your target is met or the feed ends. The actual count can come in lower โ€” the library only holds as many ads as the advertiser has published, and ad previews Snapchat marks unsuccessful are skipped.

What happens if an advertiser has no ads in the library?

You get zero rows for that keyword and the run keeps going. When Snapchat returns an empty result set the Actor logs that no ads were returned for that keyword, moves on to the next one, and finishes normally with whatever the other keywords produced. Because charging is per pushed row, a keyword that returns nothing writes nothing and costs nothing.

Three things cause an empty result more often than a genuinely absent advertiser. First, matching is on the paying advertiser name โ€” try the full legal entity ("Zalando SE", "adidas AG") rather than the consumer brand. Second, a country value outside the 27 EU codes is dropped with a warning, so check the log if you expected a regional slice and got everything. Third, a malformed date bound is discarded the same way. All three appear as warnings in the run log rather than as errors.

Can I scrape multiple Snapchat advertisers at once?

Yes. searchQueries is a list and bulk is the normal mode โ€” each entry runs independently and every row is tagged with its searchQuery, so one dataset can hold a whole competitive set already segmented. Entries are trimmed and de-duplicated case-insensitively. A single empty string entry searches all advertisers instead of one.

Does Snapchat Ads Scraper work with Claude, ChatGPT and other AI agent tools?

Yes. It is callable as a standard HTTP endpoint through the Apify API, so LangChain, CrewAI, n8n or a hand-written tool definition can invoke it and receive typed JSON with no parsing step. The flat 15-key shape fits a tool result without transformation.

How does Snapchat Ads Scraper compare to other Snapchat ads scrapers?

Checked on the Apify Store on 25 July 2026: lexis-solutions/snapchat-ads-scraper is the most established by run count and documents a wider field set on its listing, including destination URL, call to action, review status, per-country impressions and a targeting object โ€” its input takes a single search string. zadexinho/snapchat-ads-scraper documents a comparable ad-level field set with a single search parameter and a country that defaults to DE, and its listing states that its date filters behave as an activity window rather than a start-date range. crawlerbros/snapchat-ads-gallery-scraper documents three modes โ€” advertiser search, sponsored content and creator search โ€” and its listing states that its advertiser-search mode returns up to 10 ads per advertiser, described there as a platform limit.

Where this Actor differs, read from its own source: searchQueries is a list rather than a single string, so a competitive set runs in one job with each row tagged by searchQuery; maxItems applies per keyword and pagination follows Snapchat's cursor up to 10000 per keyword; and the proxy ladder starts on a direct connection and escalates only when Snapchat pushes back. The trade-off is field breadth โ€” 15 keys here, narrower than what the two larger listings document.

Does Snapchat Ads Scraper return data in a format LLMs can use directly?

Yes. Every record is typed, normalized JSON with the same 15 camelCase field names on every run, flat with no nesting. No HTML parsing, no selectors. Pass a row straight into an LLM context window, index it into a vector store, or hand it to an agent tool.

What happens when Snapchat changes its layout or anti-bot system?

The scraper is maintained, and because it reads Snapchat's structured ads-library endpoint rather than rendered markup, a front-end redesign of the library generally does not affect it at all. If Snapchat tightens IP-level rate limiting, the built-in backoff and the direct โ†’ datacenter โ†’ residential ladder absorb it without a config change on your side. Your field names and types stay the same.

Can I use Snapchat Ads Scraper without managing proxies?

Yes. Leave proxyConfiguration at its default and the Actor decides for you โ€” it starts with no proxy at all, and only reaches for a datacenter or residential rung if Snapchat actually rate-limits the run. You never create a proxy account or rotate an IP. Setting proxyConfiguration yourself simply overrides the starting rung.

Which Snapchat ad fields work best for AI training data and RAG indexing?

For RAG indexing: headline is the highest-information text per record, and pairing it with payingAdName, brandName and adType gives an embedding enough context to answer questions about who is saying what in which format. For training data: totalImpressions, adStatus, adType, snapMediaType and startDate are the most structurally consistent fields across records. All values return as typed primitives with no nesting, so no normalization pass is needed before indexing โ€” the one field to handle with care is brandName, which is derived from accountName when Snapchat does not publish a brand.

Scraper NameWhat it extracts
Snapchat Profile ScraperPublic Snapchat profile metadata for the brands behind the ads
TikTok Video ScraperVideo records and creator detail for cross-platform creative benchmarking
Facebook Posts ScraperPublic page post content and engagement for the same campaign period
Instagram Profile ScraperPublic profile metrics for the brands you track
Pinterest Pin Engagement Analytics ScraperPin-level engagement data for visual-creative research
Twitter/X Posts ScraperPublic post content for brand and campaign monitoring

๐Ÿ’ฌ Your feedback

Found a bug, or need a field that is in Snapchat's ad-preview response but not in the 15 the Actor writes? Open an issue on the Actor's Issues tab. Reports that include the exact input JSON and the advertiser name you searched are the fastest to reproduce and fix.