Snapchat Political Ads Scraper: Spend & Targeting avatar

Snapchat Political Ads Scraper: Spend & Targeting

Pricing

from $0.40 / 1,000 political ads

Go to Apify Store
Snapchat Political Ads Scraper: Spend & Targeting

Snapchat Political Ads Scraper: Spend & Targeting

Scrape Snap's Political Ads Library, 80,000+ ads from 54 countries since 2018, no login or API key. Get the paying advertiser, organization, candidate or ballot, spend, impressions, dates, targeted regions, ages, interests and a direct media link. JSON, CSV or API; pay per ad delivered.

Pricing

from $0.40 / 1,000 political ads

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

5 days ago

Last modified

Share

Snapchat Political Ads Scraper: Spend & Targeting

Get Snapchat political ads from Snap's public Political Ads Library as clean rows: who paid, how much they spent, how many impressions they bought, when the ad ran, and which countries, states, districts, ages and interests it targeted, with a direct link to the media file of every creative.

Snap publishes its Political Ads Library as one file per year, 2018 to 2026, worldwide. On 2026-10-06 the nine files held 80,162 ads from 54 countries in 11 currencies; 58,484 of them (73 percent) are United States ads. This Actor reads those files, applies your filters to each ad and delivers one row per ad. No login and no API key.

  • Every column. All 38 columns of Snap's file as parsed fields, 54 fields per row, plus Snap's 38 columns exactly as written if you ask for them.
  • A direct media file link per creative (mediaUrl, creatives[]). Snap's own column links lead to an HTML page; ours is the file itself. In a sample of 360 ads across all nine years, 374 of 374 creative links answered.
  • ISO dates and codes: startDate and endDate in ISO 8601 UTC, countryCode and billingCountryCode as ISO two letter codes, ageMin and ageMax as numbers.
  • A country filter that takes codes and names (US or United States), and whole word matching on advertiser, organization, candidate and committee names.
  • A row that says why a run is empty, and each ad charged once with a monitor name.

The 2026 file covers the US midterm election year: on 2026-10-06 it held 5,382 United States ads, 5,133 of which started in 2026, with USD 6.27 million of reported spend so far. Snap rewrote the files about every hour on the day we measured (2026-10-06).

This is an independent tool, not affiliated with, endorsed by or sponsored by Snap Inc. "Snapchat" and "Snap" name the data source only.

Quick start

  1. Pick the years (the prefill is 2026, an empty field reads the newest file, all reads the whole archive since 2018).
  2. Optional: countries as codes or English names (US, GB, United States), and search terms such as an advertiser, organization or candidate name, one per line.
  3. Optional filters: startedFrom and startedTo (or startedWithinDays), status (active or ended), minSpend, minImpressions, currencies, targetRegions (for example Pennsylvania).
  4. Choose sortBy (newest, spend or impressions) and set maxItems (the prefill is 20; 100 when the field is left out). Run, then export the dataset as JSON, CSV or Excel, or read it through the API.
  5. To receive only new ads on a schedule, give a monitorName such as us-midterms-2026 and schedule the run.

What you get

Political ad row

One row per ad (type = politicalAd). Fill rates are measured over all 80,162 ads in the archive on 2026-10-06; a derived field is filled when the column it comes from is.

FieldWhat it isFilled
adIdSnap's ad id (64 hex characters)100%
archiveYearThe yearly file the ad sits in100%
payingAdvertiserNameWho paid for the ad100%
organizationNameThe organization that ran the ad (often the agency)100%
billingAddress, billingCountryCodeBilling address as Snap writes it, and its ISO country code100% (address)
candidateBallotInformationCandidate or ballot measure37.6%
committeeName, committeeIdentificationNumber, disclosureNameOfCommitteeCommittee details2.4% each
advertisingJurisdictionJurisdiction stated for the ad2.4%
spend, currencySpend to the day the file was written, in the ad's own currency100%
impressionsImpressions to the day the file was written100%
cpmSpend per 1,000 impressions, computed (null when impressions is 0)from spend and impressions
startDate, endDateISO 8601 UTC100%, 83.2%
isActiveStarted and not ended at the moment the run startedfrom the dates
countryCode, countryISO code and English name of the delivery country98.1%
mediaUrl, mediaType, creativeCount, creatives[]Direct media file link of the first creative, its type, and every creative with pageUrl, mediaUrl, mediaType99.8%
landingUrl, callToActionLinks, creativePropertiesLanding link and the call to action links86.3% (creativeProperties)
ageBracket, ageMin, ageMaxTargeted ages as written and as numbers96.3%
genderTargeted gender10.6%
regionsIncluded, regionsExcludedTargeted states and regions37.8%, 7.0%
electoralDistrictsIncluded, electoralDistrictsExcludedTargeted electoral districts0.9%, under 0.1%
metrosIncluded, metrosExcludedTargeted metro areas8.9%, 1.3%
postalCodesIncluded, postalCodesExcludedTargeted postal codes14.8%, 1.9%
radiusTargetingIncluded, radiusTargetingExcludedCircles as latitude, longitude, radius5.3%, 0.2%
locationCategoriesIncluded, locationCategoriesExcludedLocation categoriesunder 0.1%
interestsTargeted interests21.1%
segmentsAudience segments53.3%
languagesTargeted languages31.0%
advancedDemographicsAdvanced demographics3.1%
osType, targetingConnectionType, targetingCarriersDevice and network targeting5.0%, 0.2%, under 0.1%
matchedSearchWhich of your search terms and fields matched (only with search)when searched
sourceFileUrl, sourceFileUpdatedAtThe yearly file and the time Snap last wrote it100%
sourceColumnsSnap's 38 columns exactly as written (only with includeSourceColumns)optional
scrapedAtWhen the row was made100%

One real row from a run on 2026-10-06 (full row, no field removed):

{
"type": "politicalAd",
"adId": "15d04ab14a81f30d7a4bfe73587b15979be27047b2611d6c20b1ca33ecc990dc",
"archiveYear": 2026,
"payingAdvertiserName": "No on Prop 40",
"organizationName": "GMMB, Inc",
"candidateBallotInformation": "40",
"currency": "USD",
"spend": 257,
"impressions": 30889,
"cpm": 8.3201,
"startDate": "2026-10-06T04:00:13Z",
"endDate": "2026-10-13T03:59:00Z",
"isActive": true,
"countryCode": "US",
"country": "United States",
"mediaUrl": "https://storage.googleapis.com/ad-manager-political-ads-dump-shadow/2839e2452cba744e7d3f35d730346588260b97b1b74c24598f4ba04aaf90a987.mp4",
"mediaType": "mp4",
"creativeCount": 1,
"creatives": [
{
"pageUrl": "https://www.snap.com/political-ads/asset/2839e2452cba744e7d3f35d730346588260b97b1b74c24598f4ba04aaf90a987?mediaType=mp4",
"mediaUrl": "https://storage.googleapis.com/ad-manager-political-ads-dump-shadow/2839e2452cba744e7d3f35d730346588260b97b1b74c24598f4ba04aaf90a987.mp4",
"mediaType": "mp4"
}
],
"landingUrl": "https://www.factson40.org/?&utm_medium=paid-social&utm_content=List&utm_campaign=NoOn40",
"callToActionLinks": [
{
"type": "web_view_url",
"url": "https://www.factson40.org/?&utm_medium=paid-social&utm_content=List&utm_campaign=NoOn40"
}
],
"billingAddress": "3050 K Street,Washington,20007,US",
"billingCountryCode": "US",
"committeeName": "No on Prop 40 - Doctors, Teachers, Small Businesses, Working Families and Public Safety Against the Reckless Wealth Tax Experiment",
"committeeIdentificationNumber": "1492108",
"disclosureNameOfCommittee": "No on Prop 40 - Doctors, Teachers, Small Businesses, Working Families and Public Safety Against the Reckless Wealth Tax Experiment. Ad committee’s top funders: California Primary Care Association Advocates & California Medical Association.",
"advertisingJurisdiction": "California",
"gender": null,
"ageBracket": "18+",
"ageMin": 18,
"ageMax": null,
"regionsIncluded": [
"California"
],
"regionsExcluded": [],
"electoralDistrictsIncluded": [],
"electoralDistrictsExcluded": [],
"radiusTargetingIncluded": [],
"radiusTargetingExcluded": [],
"metrosIncluded": [],
"metrosExcluded": [],
"postalCodesIncluded": [],
"postalCodesExcluded": [],
"locationCategoriesIncluded": [],
"locationCategoriesExcluded": [],
"interests": [],
"osType": null,
"segments": null,
"languages": [],
"advancedDemographics": [],
"targetingConnectionType": null,
"targetingCarriers": [],
"creativeProperties": "web_view_url:https://www.factson40.org/?&utm_medium=paid-social&utm_content=List&utm_campaign=NoOn40",
"sourceFileUrl": "https://storage.googleapis.com/ad-manager-political-ads-dump/political/2026/PoliticalAds.zip",
"sourceFileUpdatedAt": "2026-10-06T11:11:36.000Z",
"scrapedAt": "2026-10-06T11:55:12.389Z"
}

Status and summary rows (free)

Every run ends with rows that say what happened. They are never charged.

type / statusWhen
status / invalid_inputOne row listing every problem in the input; the run reads no file
status / not_publishedA year you asked for has no file
status / failedA yearly file could not be read; the other years go on
status / partly_readSome records of a yearly file were damaged and left out; the rest was delivered and the summary says the coverage is not complete
status / no_adsNothing matched, or everything was delivered before under the monitor name
status / limit_reachedThe row cap (maxItems) or the run's charge limit was reached, with the number of ads that matched and were not delivered
status / monitor_unavailableThe monitor name is in use by another run, or its memory could not be opened or saved; ads delivered after a failed save are not charged
status / stoppedThe run was stopped before it finished, with the number of ads delivered
summaryOne per run: counts per year and per search term, and the billing counters

How much does it cost to scrape Snapchat political ads?

You pay per Political ad row delivered plus a small start fee per run. Status rows and the run summary are free, and so are ads that do not pass your filters.

EventFREEBRONZESILVERGOLD
Political ad (political-ad, one ad delivered as a row)$0.50 / 1,000$0.50 / 1,000$0.45 / 1,000$0.40 / 1,000
Actor start (apify-actor-start, once per run)$0.004$0.004$0.004$0.004

Platinum and Diamond plans pay the Gold price. The Actor start event is a flat fee with no tier discount, charged once per run whatever the run delivers (it is charged per GB of memory, and this Actor runs at 512 MB).

The Store pricing card shows these same prices per 1,000 events: "$0.50 / 1,000" on the Political ad row means one ad costs 0.05 cents.

Worked examples (start fee included, ad counts of 2026-10-06):

RunFREE and BRONZESILVERGOLD
A search that finds nothing (the start fee)$0.004$0.004$0.004
20 ads (the prefill)$0.014$0.013$0.012
1,000 ads$0.504$0.454$0.404
The whole 2026 file, 8,008 ads$4.008$3.6076$3.2072
The whole archive, 80,162 ads$40.085$36.0769$32.0688

Each total is the start fee plus the number of ads times the tier's price per ad: 20 ads on Free cost $0.004 + 20 x $0.0005 = $0.014. At Gold the whole archive costs $0.004 + 80,162 x $0.0004 = $32.0688, that is USD 32.07.

Speed on the platform at the default 512 MB (measured 2026-10-06): 20 ads in 3 seconds, the whole 2026 file (8,009 ads) in 9 seconds, all nine files read and searched in 5 to 6 seconds, the whole archive (80,162 ads) in about four and a half minutes.

Input

InputWhat it does
yearsThe yearly files to read, 2018 to 2026, or all. Empty: the newest file
countriesISO two letter codes or English country names. Empty: every country
searchNames or keywords, one per line (up to 200). Matched on paying advertiser, organization, candidate or ballot information, committee name and disclosure name of the committee; capitals, accents and punctuation make no difference
searchMatchwords (default): every word of the term as a whole word, any order. exact: the field is exactly the term
startedWithinDaysAds that started within this many days before the run started, up to the moment it started (1 to 3650). Not combined with the two date fields
startedFrom, startedToStart date window, YYYY-MM-DD
statusall (default), active or ended, judged at the moment the run starts
minSpendMinimum spend in the ad's own currency, whole units
minImpressionsMinimum impressions
currenciesThree letter codes: USD, EUR, GBP, NOK, CAD, AUD, SEK, INR, DKK, NZD, AED
targetRegionsIncluded regions, metros or electoral districts exactly as Snap writes them, for example Pennsylvania or California 45th District
sortBynewest (default), spend or impressions; decides which ads are delivered when more match than maxItems
maxItemsThe most Political ad rows this run may deliver and charge (1 to 1,000,000; 100 when left out)
monitorNameDeliver only new ads: each ad is delivered and charged once per monitor name
includeSourceColumnsAdd sourceColumns with Snap's 38 columns as written, no extra charge

Monitor: deliver only new ads

Give a name such as us-midterms-2026 and schedule the run. Each ad is delivered and charged once per monitor name; later runs skip what the monitor already delivered, including ads Snap adds to the file late. Use a new name when you change the filters. Two runs on one name at the same time: the second delivers nothing. The first run of a monitor over a large selection takes longer than a plain run (the list of delivered ads is saved after every batch); later runs deliver only what is new.

Use cases

  • Journalists: who paid for political ads on Snapchat in a state or district, how much they spent and which ages and interests they targeted, with the creative itself one link away.
  • Campaign analysts: spend, impressions and CPM per advertiser, committee or ballot measure, sorted by spend, for the 2026 election year or any year since 2018.
  • Researchers: the whole archive, 80,162 ads in 54 countries, with ISO codes and dates and Snap's own columns as written for reproducible work.
  • Ad transparency and compliance teams: a scheduled monitor (for example us-midterms-2026) that delivers the ads newly added to the library, each once.

API examples

Replace <YOUR_APIFY_TOKEN> with your Apify API token.

curl

curl -X POST "https://api.apify.com/v2/acts/automation_craft~snapchat-political-ads-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"years": ["2026"], "countries": ["US"], "targetRegions": ["Pennsylvania"], "sortBy": "spend", "maxItems": 20}'

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('automation_craft/snapchat-political-ads-scraper').call({
years: ['2026'],
countries: ['United States'],
search: ['Planned Parenthood'],
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
if (item.type === 'politicalAd') console.log(item.payingAdvertiserName, item.spend, item.currency, item.mediaUrl);
}

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("automation_craft/snapchat-political-ads-scraper").call(run_input={
"years": ["2026"],
"countries": ["US"],
"status": "active",
"monitorName": "us-midterms-2026",
"maxItems": 1000,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["type"] == "politicalAd":
print(item["payingAdvertiserName"], item["regionsIncluded"], item["spend"])

What this Actor does not do

  • It does not return commercial ads from Snapchat's EU Ads Gallery. This Actor reads the Political Ads Library only.
  • It does not search sponsored creator content, which is part of the Ads Gallery, not of the Political Ads Library.
  • It has no count only mode: the free summary row of every run carries the number of ads that matched, per year and per search term, so a run with maxItems 1 gives you the counts.
  • It has no option to leave out or mask the billing address: the row carries the 38 columns of Snap's public file, and Snap's file describes this one as the address of the organization that created the ad. Drop the field on your side if you do not want it.
  • It does not convert spend to one currency: the archive has 11 currencies and amounts are as Snap reports them.
  • It keeps no change history: each run returns Snap's current totals, and the spend and impressions of running ads change from day to day (1,627 of 7,961 ads of the 2026 file changed between 2026-10-05 and 2026-10-06). A monitor delivers an ad once and not its later updates.
  • It does not check the bytes of media files: mediaType is the type Snap's link names (in a sample, 19 of 65 files named png held JPEG data).
  • It links media files and does not download them.
  • It does not state the unit of radius targeting, because Snap does not.
  • It does not move ads between years: an ad sits in the yearly file Snap assigned it to, which is not the start year for about 1 percent of ads.
  • It does not show ads before Snap publishes them: ads appear in the file when Snap publishes them, sometimes days or months after their start date.
  • It does not predict anything, and it does not cover TV, other platforms or ads Snap has not published.
  • It grants no licence: Snap states no licence for the files, so check your own use.

FAQ

How much is spent on Snapchat political ads?

On 2026-10-06 the archive held 80,162 ads since 2018 in 54 countries, 58,484 (73 percent) of them in the United States. The 2026 file held 5,382 United States ads, 5,133 of which started in 2026, with USD 6.27 million of reported spend. Sort by spend to see the biggest ads; amounts stay in each ad's own currency.

How were Snapchat political ads targeted?

Each row carries the targeting Snap publishes: ages (ageMin, ageMax), gender, regionsIncluded, electoralDistrictsIncluded, metrosIncluded, postalCodesIncluded, radius circles, interests, segments and languages. Filter on a state, metro or district with targetRegions; fill rates per field are in the table above.

Who paid for a Snapchat political ad?

Every row names the paying advertiser (payingAdvertiserName), the organization that ran it (organizationName) and the billing address, and where Snap gives them the candidate or ballot measure and the committee name and id. Search advertiser, organization, candidate and committee names with search, whole word by default.

Can I track Snapchat political ads for the 2026 midterms?

Yes, for ads Snap publishes: the 2026 file covers the election year, and a scheduled run with a monitorName such as us-midterms-2026 delivers the newly added ads, each once, including ads Snap adds late. It does not predict results or cover TV or other platforms.

Does this Actor return commercial Snapchat ads?

No. It does not return commercial ads from Snapchat's EU Ads Gallery. This Actor reads the Political Ads Library only.

Why does this Actor run with limited permissions?

It runs with Apify's limited permissions, the least privilege level: it reads its input and writes only its own run's storages. The one exception is the monitor: when you give a monitorName, it opens a named key-value store it creates itself (snap-political-monitor-v1-...) to remember which ads it delivered. It touches nothing else in your account.

Changelog

See CHANGELOG.md. 0.1 (2026-10-06): first release.

More data tools by Automation Craft

Ad libraries: Meta Ad Library Scraper - All Placements, Filters, Facebook Ads Library Scraper - Page Ads, No Login, Instagram Ads Library Scraper - Creatives, Video, TikTok Ads Library Scraper: EU Ads, No Login, TikTok Creative Center Scraper: Top Ads, No Login, Google Ads Transparency Scraper - Decoded Creatives, Google Ads Library Scraper - Competitor Ads, No Login, YouTube Ads Scraper - Video Ads by Advertiser, LinkedIn Ad Library Scraper: Ads by Company.

Other data: Google News Scraper: Search, Topics, Decoded URLs, Substack Scraper: Posts, Notes and Profiles, Google Trends Scraper - Compare and Trending Now, Telegram Channel Scraper: Posts, Views, Dates, SEC Form D Scraper: Offerings & Funding Leads.