X’s ad repository still breaks DSA Article 39, seven months after the €120M fine

July 13, 2026
Brand card reading: DSA enforcement. X is still breaking Article 39. Seven months after the 120 million euro fine, X’s ad repository still fails every point the European Commission raised.

On 5 December 2025 the European Commission fined X €120 million, its first non-compliance decision under the Digital Services Act. Part of that fine was for X’s advertising repository, which the Commission found breached Article 39 of the DSA: it was not meaningfully searchable, it was missing required data, and it was slowed by artificial delays.

X was given 90 working days to submit a plan to fix it. That deadline has passed. Rather than fix the repository, X filed an appeal at the EU General Court on 16 February 2026.

We went to X’s ad repository on 12 July 2026 and tested it against what Article 39 actually requires. Nothing has been fixed. On one measure it is worse.

What Article 39 requires

Article 39 says a very large platform that runs ads must keep a public repository that is searchable and reliable, supports queries on multiple criteria, and offers programmatic access. For every ad it must hold: the content of the ad, including the product, brand and subject matter; the person the ad was run on behalf of; the person who paid for it, where that is different; the period it ran; whether it was targeted and the main targeting parameters used; and the total number of people reached, broken down by member state.

What X actually provides

1. You cannot search by anything that matters

The only filters are advertiser account, country and date range. There is no way to search by ad content, by who paid, or by targeting parameters. The advertiser box only accepts an exact account handle, so you have to already know who you are looking for. You cannot discover a campaign you do not already know exists. That is the opposite of the multi-criteria search Article 39 requires.

X ad repository search form with the advertiser, country and date filters highlighted; no way to search by content, funder or targeting.

X’s ad repository, searched for @Google across the entire EU for 2026. The only filters are advertiser, country and date, and it returns nothing.

2. The data itself is almost empty

X offers a single bulk file, the “Commercial Communications” dataset, as its full record. That file has three columns: a date, a link to a tweet, and the tweet’s ID. That is all.

X commercial communications dataset showing only three columns, createdAt, creativeUrl and tweetId, every row dated December 2023.

The full “Commercial Communications” dataset offered for download: three columns, and every row dated December 2023.

It does not contain the funder or paying entity, an advertiser field, the ad content or subject matter, any targeting information, or reach figures broken down by member state. Article 39 requires all of those. A date and a link is not an ad repository.

3. The tool is deliberately slow

In 2024 the Commission measured X inflating the repository’s response time to 3 minutes and 20 seconds. We ran two reports and timed each one from the moment we pressed “Create report” to the moment the download unlocked. One took 5 minutes and 2 seconds. The other took 5 minutes and 36 seconds. Both were for searches that returned zero ads, so there was no data to assemble. The delay is imposed, and it is now longer than when the Commission fined X for it.

X ad repository "Preparing your report" dialog for a search that returned zero ads, which still took over five minutes.

A report for @xai that returned no ads still took over five minutes to prepare.

4. The repository returns nothing for the current year

Every row in the bulk file is dated December 2023. The dataset appears frozen at launch. When we searched major advertisers across the entire EU for 2026, including Amazon, Google and Musk’s own xAI, the repository returned “No ads found” for all of them. A repository that holds no current ads for the largest advertisers on the platform is not the reliable, complete record Article 39 requires.

The bottom line

Seven months after being fined, and with the remediation deadline gone, X’s ad repository still fails Article 39 on every point the Commission raised. It is not searchable, it does not contain the required data, and it is slowed by artificial delays. On top of that, it appears to hold no ad data more recent than December 2023.

Methodology: we tested the live repository at ads.x.com/ads-repository on 12 July 2026. Response times were measured from a single connection and are reported as observed. The original findings are set out in the Commission’s decision of 5 December 2025.

Latest blog posts

View All
  • The European Union flag with the words Digital Services Act — why this social-media transparency data only exists in the EU.
    July 12, 2026

    Why this transparency data only exists in the EU

    The monthly-active-user counts, ad libraries and transparency reports behind this site all exist for one reason: the EU's Digital Services Act forces very large platforms to publish them. Here are the specific articles that make it possible — and why the same numbers don't exist anywhere else.

  • A fanned stack of DSA transparency reports with a checkmark, 2025-26 roundup
    June 26, 2026

    What the Latest Round of DSA Transparency Reports Reveals (2025–26)

    The latest EU DSA transparency reports are in: TikTok (178.3M EU users, July–Dec 2025), X (102M, Apr–Jun 2025) and Google/YouTube (Jan–Jun 2025). What the platforms reported, and why the numbers don't compare directly.

  • EU vs US ad library transparency — EU side with a checkmark under the star ring, US side dim and unmarked
    January 23, 2026

    Advertising Library Transparency: Comparing the US and the EU

    EU advertising libraries mandate archiving, reach data, and transparency under the DSA, enabling fraud and influence detection even after ads stop running. In contrast, most US online ads disappear without trace, making large-scale manipulation effectively invisible.