X Ads Transparency Scraper: Twitter Ads Library avatar

X Ads Transparency Scraper: Twitter Ads Library

Pricing

from $0.06 / 1,000 ad saveds

Go to Apify Store
X Ads Transparency Scraper: Twitter Ads Library

X Ads Transparency Scraper: Twitter Ads Library

Scrape the X (Twitter) Ads Repository for ads served in Europe: advertiser handle, creative text (via oEmbed), targeting, impressions, reach, funding and dates. Optional only-new monitor for competitor tracking. No X login.

Pricing

from $0.06 / 1,000 ad saveds

Rating

0.0

(0)

Developer

Northloop Labs

Northloop Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Scrape the public X Ads Repository (Twitter ads transparency for Europe) by advertiser handle. For every ad you get the tweet URL, creative text (via public oEmbed), country, targeting, impressions, reach, funding type/currency, account name and approval status.

Track new competitor ads: turn on Only new ads, schedule the Actor, and each run saves only ads that were not seen before (state lives in a key-value store in your Apify account).

No X login and no developer app. Complements our Google Ads and Meta Ads scrapers.

Coverage note: X's repository is built for EU Digital Services Act transparency. It lists ads served in European markets. Empty results usually mean the advertiser had no EU-served ads in that date range — not that the tool is broken.

What you can use it for

  • Competitor research: see which creatives and markets rivals are running on X in Europe.
  • Compliance / transparency datasets: impressions, reach, funding and targeting as X discloses them.
  • Brand monitoring: schedule daily runs and get only new ads for watched handles.
  • Cross-platform ad intel: pair with Meta and Google Ads scrapers for the same brand.

How to scrape X Ads Repository ads

FieldDescription
advertisersHandles, @handles or https://x.com/... URLs (up to 50)
marketPreseteu27, dach, nordics, uk_ie, benelux, southern, eea or custom
countriesTwo-letter codes when preset is custom
startDate / endDateInclusive delivery window (YYYY-MM-DD)
maxResultsHard cap on ads saved (and charged)
onlyNewSkip ads already in the monitor store
monitorStoreNameKV store name (default x-ads-monitor)
enrichCreativesResolve tweet text via oEmbed (default on, free)
searchTermsOptional keyword filter on creative / targeting
minImpressions / minReachDrop small campaigns
useProxyOff by default; enable only if you hit blocks

Input example

{
"advertisers": ["Apple", "SamsungMobile"],
"marketPreset": "dach",
"startDate": "2026-01-01",
"maxResults": 50,
"enrichCreatives": true
}

Only-new watch:

{
"advertisers": ["Nike"],
"marketPreset": "eu27",
"startDate": "2026-01-01",
"onlyNew": true,
"maxResults": 200
}

Output example

{
"adKey": "2012134234748760425|54125326|DE|4503599691193047",
"tweetId": "2012134234748760425",
"tweetUrl": "https://x.com/i/status/2012134234748760425",
"advertiserHandle": "Apple",
"advertiserName": "Apple",
"country": "DE",
"accountName": "APPLE EMEA MAL 2 - NEW",
"fundingType": "NonExclusiveIo",
"fundingCurrency": "EUR",
"approvalStatus": "Verified",
"creativeText": "Jetzt 3x mehr Schutz vor Kratzern mit dem Ceramic Shield 2.",
"targetingNames": ["Europe", "AgeOver18"],
"impressions": 18635967,
"reach": 1383216,
"scrapedAt": "2026-10-24T16:00:00.000Z"
}

X does not always keep the underlying tweet public. When oEmbed fails, metrics and targeting still save and enrichmentStatus explains why.

How much does it cost?

Pay per event (platform usage included; Apify takes its usual Store cut from the prices below):

EventPriceWhen
Actor start$0.001 per GB of memoryEvery run (default 256 MB → ~$0.00025)
Ad saved$0.00008 ($0.08 / 1,000)Each unique ad written. Duplicates and already-seen ads in only-new mode are free. Empty searches are free.

Examples: 50 ads ≈ $0.004. 1,000 ads ≈ $0.08.

No session fee and no OCR fee. The repository works over a guest HTTP session. Creative text comes from X's public oEmbed — we do not OCR images.

Priced under the main Store rival (~$0.10 / 1k) while keeping a positive margin after Apify's cut.

Reliability notes

  • X sometimes returns rate limits or temporary over-capacity. The Actor retries with backoff; raise requestDelayMs if needed.
  • Empty results for a handle + market + date range are valid and uncharged.
  • Repository data can lag live delivery. Coverage is limited to what X discloses for European markets.

Tips

  • Start with marketPreset: "dach" or a few countries, then widen to eu27.
  • Use onlyNew + an Apify schedule for competitor alerts.
  • Keep enrichCreatives on for readable copy; turn it off only if you need the absolute minimum request count.

Use with AI agents, MCP, Make, Zapier, n8n and the API

AI agents and the Apify MCP server

https://mcp.apify.com?tools=northloop-labs/x-ads-transparency-scraper

API

curl -X POST "https://api.apify.com/v2/acts/northloop-labs~x-ads-transparency-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"advertisers": ["Apple"], "marketPreset": "dach", "startDate": "2026-01-01", "maxResults": 30}'
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("northloop-labs/x-ads-transparency-scraper").call(
run_input={"advertisers": ["Apple"], "marketPreset": "dach", "startDate": "2026-01-01", "maxResults": 30}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Data & privacy

  • The Actor reads only the public X Ads Repository and public oEmbed responses. It collects advertiser handles, disclosed account/funding fields, targeting labels, impressions, reach and creative text that X already publishes.
  • It collects no personal data about people who saw or clicked ads beyond what X discloses in the repository.
  • Results are written only to the run's default Apify dataset in your account. In only-new mode, seen ad keys are kept in a key-value store in your account (monitorStoreName), which you can delete anytime. No external storage or webhooks.

The Ads Repository is a public transparency tool required under the EU Digital Services Act. The Actor reads it the same way a browser does, at a moderate pace. Tweet creatives can be protected by copyright and trademarks — use them for research and analysis, not to republish as your own. This is not legal advice; check the rules that apply to your use.

FAQ

How much does it cost?

About $0.08 per 1,000 ads, plus a tiny Actor-start charge at 256 MB. Empty searches cost essentially nothing beyond start.

Why is there no session fee?

Unlike Meta, X's Ads Repository accepts a guest HTTP session without a residential browser warm-up for typical runs.

Does it need an X login or API key?

No.

Can I get US-only ads?

X's live repository is oriented to European delivery. US-only commercial ads are generally not listed here. For historical US political archives, other tools exist; this Actor targets current EU-served ads.

Can I watch one brand every day?

Yes: set advertisers, turn on onlyNew, save a task and schedule it.

How this Actor was made

This Actor was made with AI. An AI agent wrote and tested the code, this README and the store listing, and a human owns and maintains the Actor.

More Actors from Northloop Labs

Feedback

Want LinkedIn or TikTok ad libraries, richer creative media URLs, or a filter that's missing? Open an issue in the Issues tab.