Methodology
Vipima ("measuring instruments" in Swahili) monitors political advertising on Meta platforms in two different regimes. Where Meta's political-ad archive exists (Brazil, the United States, Israel, Bosnia and Herzegovina, Zambia), we collect it directly. In the EU, where Meta stopped selling and labeling political ads in October 2025 rather than comply with the TTPA, we track de facto political advertising through the all-ads repository the Digital Services Act still requires (Sweden). This page describes both, country by country, and what the data can and cannot support. For Israel and the United States, where Google still sells election ads, Google's own register adds a second platform beside the Meta corpus.
Collection: political-archive countries
We pull the political-ad archive for each monitored country and re-pull it while the report is live. Every observation is stored append-only: one record per ad per pull. This matters because the archive itself is unstable: ads and entire advertiser pages can disappear between pulls. Append-only snapshots let us report what was visible at each point in time, and preserve records the archive no longer shows. Every report is a precomputed set of aggregates folded from the whole corpus (spend by office, side or party, week, payer, page and message), which the page renders; the figures on a page never change between two runs of the report.
Brazil is collected from 1 January 2025 onward, about 2.7 million ads, re-pulled daily through the 2026 general election and its runoff. Every figure sums Meta's bracket midpoints in BRL; ads priced in other currencies are counted but never summed.
The United States report covers ads delivered from 4 May 2026 to the day after the 3 November 2026 midterms: about 740,000 domestic ads priced in dollars on 24,000 pages, pulled in weekly windows, newest first, so that the campaign weeks landed before the summer. The archive back to November 2025 is still being collected, and the report will be re-run when it is in. Only dollar-priced ads are summed.
Israel (Knesset election of 27 October 2026) and Bosnia and Herzegovina (general election of 4 October 2026) were collected after the vote, which Meta's seven-year retention of political ads allows: every ad delivered from 1 October 2025 to 31 October 2026, 135,577 ads for Israel and 25,798 for Bosnia and Herzegovina. Israeli figures sum shekel-priced ads; Meta bills every advertiser in Bosnia and Herzegovina in US dollars, so its figures are in dollars.
Collection: the EU grey zone (Sweden)
Since October 10, 2025 no ad on Meta in the EU carries a political label, and the political archive is closed to new entries. The DSA (Art. 39) still obliges Meta to publish every ad delivered to EU users, with exact delivered reach, audience demographics, targeting parameters, and payer information, but with only about one year of retention. We collect that repository daily for a registry of tracked Swedish pages: parties, party leaders and youth wings, unions and their confederations, business federations, think tanks, domestic advocacy organisations, organisation-owned media, and the Election Authority.
Registry membership is evidence-based and documented per page. Pages are found through three complementary routes: Meta's own historical spend census (every advertiser that declared political ads before the ban), statistical keyword sweeps of the full ad archive (which also catch pages created after the ban), and payer-graph analysis linking pages funded by the same entity. Each entry carries a hand-verified identity note, shown on its advertiser page. International charity fundraising campaigns and government agencies other than the Election Authority are deliberately excluded.
Coverage is complete for tracked pages from August 17, 2025, spanning the final pre-ban weeks and the entire post-TTPA era. Because our snapshots are append-only, they preserve ads beyond Meta's rolling one-year deletion. A split-keyword capture–recapture exercise suggests roughly 90% coverage of currently advertising political pages. This is an indicative estimate rather than a census: the two discovery samples are not fully independent, and documented editorial exclusions still apply.
Collection: Google and YouTube (Israel, the United States)
Google publishes its election-ad register as a public dataset rather than an API: every verified advertiser, every ad with its format, dates, spend and impression ranges and targeting, and weekly spend per advertiser. We read it directly, the whole register for a region in one query, and keep a dated snapshot. Google covers the two monitored countries where it still sells election ads: Israel, and the United States from 1 January 2026. It stopped political ads in Brazil in May 2024 and in the EU in October 2025, and never registered advertisers in Bosnia and Herzegovina or Zambia, so no other report has the layer.
The register carries no ad text, so Google ads are never classified: no triage, no message analysis, no race. It is a spend-and-reach layer beside the Meta corpus. Spend and impressions are ranges, which we keep as bounds rather than midpoints; Google's top bucket has no upper bound, and a figure that includes it is shown as a floor with a plus.
Who an advertiser is comes from its verified name. Israel's advertisers are tied to the lists and candidates of the registry by their aliases and a hand-checked map. In the United States the name is matched to the FEC committee master the way the "Paid for by" lines are, and the side is the committee's record. The FEC places only federal committees, about half the money; every other advertiser above $10,000 (state campaigns and PACs, ballot committees, nonprofits, companies) is identified once by a web search of its verified name, with the evidence and sources stored, and the report takes its side, kind and race level from that verdict. On the page a side from the web search carries an asterisk. Measured on 38 hand-labeled advertisers, three iterations each: side 94.7%, kind 92.1%, race level 98.1%, state 94.7%.
An ad counts for a state only when its targeting (state names, television markets and ZIP codes, folded into states) names that state alone; ads aimed at several states are counted separately as "also aimed". Google's own state table is cumulative since 2018 and is not used.
Classification
Three model-assisted layers run over the raw archive. Each has its own hand-labeled evaluation set per country, run three times per case before a prompt ships, and the boundary rulings that settle its hard cases are recorded in the dataset itself. The figures below are the measured accuracy of the prompts in production.
- Triage (is this ad domestic politics, foreign spillover, or miscategorized commercial content?). Zambia 98%, Brazil 98.6%, the United States 99.5%, Israel 99.1%, Bosnia and Herzegovina 97.5%. Raw Ad Library counts overstate domestic activity: roughly 87% of ads "reaching" Zambia are not domestic politics, and in every country the archive is full of products that trade on the election (prediction markets, election streaming, partisan merchandise), organisations' non-political content, and placeholder networks with no payer.
- Actor attribution (which political actor is behind this page, and which side or party does it campaign for?). Deterministic rules against an official register come first, and the model is asked only what the register cannot know, with abstention when evidence is insufficient. Supporter pages praising a candidate are not attributed to that candidate. Measured correct ids: Zambia 99%, Brazil 98.5%, the United States 99%, Israel 100%, Bosnia and Herzegovina 98.9%.
- Message analysis (topics, tone, call to action, language) across a shared 13-topic taxonomy: Zambia 86%, Brazil 96.3%, the United States 93.5%, Israel 91.7%, Bosnia and Herzegovina 95.1%.
For Sweden the triage question inverts: every ad arrives unlabeled, and the classifier judges whether it is de facto political messaging (issue advocacy, electioneering, praise or criticism of parties and politicians, mobilisation) or non-political organisational content. Charity fundraising and member recruitment do not count as political; a voiced demand for policy change does, even beside a donation ask. Accuracy is measured continuously against a 144-case hand-labeled evaluation set, independently cross-reviewed twice, at three iterations per case: currently 95.4%. Every boundary policy is documented in the dataset itself.
Classification runs at the level of creative families (identical text from the same page), and family keys are page-scoped so that Meta's placeholder texts can never propagate a classification across unrelated advertisers.
Brazil's actors resolve against the TSE candidate register (20,984 registrations): the mandatory electoral byline, ballot names and declared social handles place most pages deterministically before any model call. Rules the model got wrong become code: when a scam network declaring Correios or a state traffic department as payer was found filed as government advertising (28 September 2026), a deterministic rule for mixed-script page names and a prompt rule for public-body payers on generic pages were added, measured, and the corpus re-classified.
The United States resolves against the FEC. The "Paid for by" line of every ad is matched to the FEC committee master (20,979 committees active in the 2026 cycle) by registered name, filed alias, acronym or stripped name; a match is the advertiser, and its side comes from the record: a candidate's party, a party committee's own, or for a committee with no party, the side its independent expenditures (Schedule E) favour, when at least 90% of them help one side. Support helps the candidate's party; opposition in a primary is a choice inside a party and places nothing. The model is asked what the register cannot know: the contest the ad is about (office, state, district), the side of an advertiser outside the FEC's reach (a 501(c)(4), a union, a state committee), and the advertiser type. It never names a committee or an id, so a hallucinated FEC id is impossible. Measured on 104 hand-labeled pages: correct id 99%, side 97.4%, race level 97.1%, state 97.8%, office 95.2%. "No side" is a category, not neutrality: issue groups, ballot measures, and pages that take no side or both. Ads are placed on a state from their text, their page and payer, or the candidate's FEC record; ads about no single state count as national.
Israel and Bosnia and Herzegovina each have a registry built for the election: for Israel the lists and the figures whose own pages ran paid ads (46 entries), with a candidate's list taken from their 2026 ads; for Bosnia and Herzegovina the parties and candidates of the Central Election Commission's certified 2026 lists (142 entries). A candidate's own page paid for by the party resolves to the candidate; a page that supports a list or party without being its own is not counted for it. Israeli ads are classified in Hebrew, Arabic and Russian; Bosnian ads in Bosnian, Croatian and Serbian in both scripts, which the taxonomy records as one language. English names, attack targets and ad texts on those reports are model translations, shown with the original beneath; the native-language pages show the original only.
Coordination detection text-matches ads across pages: identical and near-identical creatives run by at least two pages form a cluster, and clusters sharing pages form a network. It found the 20-page network of generic news and meme pages that ran the same vox-pop creatives against Likud in the last two weeks of the Israeli campaign, each page funding itself under its own name. We describe such a network as coordinated and undisclosed; who pays, and whether the pages are authentic, is not something the archive can tell.
Election results
Where a report sets spend against the result, the result comes from an official or wire count, named and dated on the page: the uncertified count of Israel's Central Elections Committee, the determination of the Central Election Commission of Bosnia and Herzegovina, and for the United States the NBC News and Associated Press calls for Senate, House and governor races and Ballotpedia for ballot measures. A race is called when they called it; uncalled races are shown as such, and the figures are refreshed as counts come in.
Setting Meta spend against a winner reads Meta ads only: television, mail, streaming and other platforms are not in the data, and in most races they cost more. In the United States a race counts as evidence only when the two sides together spent at least $100,000 on Meta, and a correlation with the winner says nothing about cause: favourites raise and spend more.
Known limitations
- Meta withholds creative content for ads that ran without required disclaimers or were removed. Collection can also occasionally succeed only without creative fields. We preserve that collection provenance and report it separately rather than attributing every missing creative to Meta. Message analysis covers only the visible slice, which skews toward compliant, established advertisers.
- Spend and impressions are reported by Meta as ranges; we use midpoints and mark all such figures as estimates. Impressions above one million are reported as "1M+", so impression totals are floors, and the biggest buyers are undercounted most. An ad's spend is its lifetime spend, counted in the week the ad started; ads still running at the last pull carry their spend as of that pull, so the last weeks of any live report are low and will grow.
- The Meta archive covers Meta platforms only, and the Google register adds Google and YouTube for Israel and the United States. Neither covers TikTok, radio, print, or organic content.
- Google: figures are the bounds of Google's ranges, not midpoints, and the Meta figures beside them are midpoints, so the two are not strictly comparable; the register publishes no ad text, so nothing is said about what a Google ad argued; a few per cent of the United States money sits with advertisers the search could not identify, shown as not placed, and a side from the search is the model's reading, not a filing.
- Coordination detection can only text-match ads whose creative survives; a null result is bounded by that coverage, and ads whose only political content is in images or video are a known blind spot for every text-based layer.
- United States: the FEC register lags. A committee registered after the master was built (1 November 2026), a state or local committee, and a nonprofit advertising from its treasury have no record, and their side is the model's reading, measured at 97.4%. Side describes the advertiser, not the ad's message: an issue group's side is where its money goes, whatever a given ad says.
- United States: the section on the war, gas prices and Epstein counts ads by keywords in their text; an ad that names a thing counts whatever it says about it, an ad that alludes without the word is missed, and an ad can count in several themes.
- Israel and Bosnia and Herzegovina: the English pages show model translations of names and ad texts. Translations are cached, so a published translation never changes, but they are not reviewed by a native speaker; the original is authoritative and shown beneath.
- Sweden: reach figures are cumulative ad reach (the same person is counted across multiple ads), and classification carries a measured ~5% error rate. Discovery is text-based, so ads whose only political content is in images or video are a known blind spot. Figures cover the tracked registry, not every advertiser in the country.
- Sweden: the pre-ban political archive (2019–2025) remains browsable on Meta's website but has been removed from API access for EU countries; pre-ban comparisons therefore rest on Meta's own published spend report and the final pre-ban weeks preserved in the DSA repository.
Contact
Questions, corrections, press inquiries, or data requests: [email protected]. We aim to answer within two working days, faster during election periods.