YouTube Ad Library — Google Ads Landing Page & EU DSA
Pricing
$1.50 / 1,000 ad creative scrapeds
YouTube Ad Library — Google Ads Landing Page & EU DSA
YouTube ad library and Google ad library from the Google Ads Transparency Center. Landing page URLs with UTM parameters, direct MP4 video URLs, and EU DSA reach for YouTube, Search, and Display. No browser.
Pricing
$1.50 / 1,000 ad creative scrapeds
Rating
0.0
(0)
Developer
Joel Smith
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
YouTube Ad Library — Google Ads Transparency Landing Page & EU DSA
YouTube ad library and Google ad library export for the Google Ads Transparency Center. Search by domain, advertiser ID (AR…), or brand. Each ad includes the ads transparency landing page (decoded URL with UTM parameters), a direct MP4 videoUrl, and EU DSA impression ranges by country and platform for YouTube, Search, and Display.
$1.50 per 1,000 ads (ad-scraped at $0.0015). You pay only for ads that are returned. A 5-ad sample costs $0.0075. Pure HTTP, 256 MB, no browser.
Use this Actor when you need:
- competitor landing pages and UTM campaign structure from live Google ads
- direct video files instead of a Google preview link
- EU Digital Services Act impression buckets by country and by YouTube / Search / Display
- a scheduled watch on one domain (raise
maxResults, run daily)
Start here
The Store example is the Klarna Sweden sample. Leave it as-is and click Start.
{"domain": "klarna.com","region": "SE","format": "ALL","maxResults": 5,"fetchDetails": true}
Then open the dataset view Landing pages, videos, EU DSA reach. The columns that matter are landingPageUrl, videoUrl, totalEuImpressionsMin, and totalEuImpressionsMax.
Landing page UTMs and MP4 creatives
landingPageUrl is the final destination, including UTM parameters, decoded from the creative preview (content.js / fletch). It is not Google's obfuscated preview link. videoUrl and videoDurationSeconds are a direct googlevideo.com MP4 when the creative is a video. Image URLs are in assetUrls.
EU DSA impression reach
With fetchDetails: true, each ad includes per-country impressionsMin / impressionsMax, the first and last shown dates, and the summed bounds totalEuImpressionsMin and totalEuImpressionsMax. Google publishes these as bucket ranges for EEA and UK countries where the ad was shown, not as an exact impression count.
YouTube, Search, and Display
The same EU DSA block splits those buckets by platform: YOUTUBE, GOOGLE_SEARCH, and GOOGLE_DISPLAY_AND_DISCOVER. Targeting flags cover demographic, geographic, contextual, and customer-list / remarketing, as Google reports them. Advertiser legal name and country come from the Transparency Center.
Pricing
| Event | ad-scraped |
| Price | $0.0015 per ad ($1.50 / 1,000) |
| Charged when | An ad is written to the dataset |
| Not charged | Runs that find nothing, or ads blocked by your spend cap |
| Compute | 256 MB HTTP. Platform compute is a fraction of a cent per sample run |
Set maxResults to how many ads you want. The run stops when it hits that count or your maxTotalChargeUsd cap, whichever comes first.
Other ways to search
- Domain:
"domain": "spotify.com" - Advertiser ID:
"advertiserId": "AR04217635482122584065" - Brand name:
"query": "Spotify"(resolved through SearchSuggestions)
If you set both domain and query, both targets are scraped. For one brand, fill only one of them.
region is an ISO-2 code (SE, DE, US, GB, …) or ALL. format is ALL, TEXT, IMAGE, or VIDEO.
Real output item
{"creativeId": "CR11556379073538162689","advertiserId": "AR13229661558549774337","advertiserName": "Precis Digital Syd AB","advertiserLegalName": "Precis Digital Syd AB","advertiserCountry": "SE","domain": "klarna.com","format": "VIDEO","formatCode": 3,"regionFilter": "SE","firstShown": "2026-10-12T08:00:00+00:00","lastShown": "2026-10-20T17:00:00+00:00","daysActive": 8,"landingPageUrl": "https://www.klarna.com/se/campaign-app?utm_campaign=se-olv-yt-b2c-aw-reach-shower-brand-Q4_VVC_shorts-wcRj","landingPageDomain": "klarna.com","videoUrl": "https://rr3---sn-jvhixh-bvuk.googlevideo.com/videoplayback?...&mime=video/mp4&dur=30.069","videoDurationSeconds": 30,"regionsShown": ["SE"],"totalEuImpressionsMin": 0,"totalEuImpressionsMax": 1000,"euDsaTargeting": {"demographicTargeting": { "included": true, "excluded": true },"geographicTargeting": { "included": true, "excluded": false },"contextualTargeting": { "included": true, "excluded": false }},"euDsaRegionalReach": [{"regionCode": "SE","googleGeoId": 2752,"impressionsMin": 0,"impressionsMax": 1000,"firstShownDate": "2026-10-12","lastShownDate": "2026-10-20","platforms": [{ "platform": "YOUTUBE", "impressionsMin": 0, "impressionsMax": 1000 }]}],"transparencyUrl": "https://adstransparency.google.com/advertiser/AR13229661558549774337/creative/CR11556379073538162689"}
Call it from code
Python:
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("drlipton/google-ads-transparency-scraper").call(run_input={"domain": "klarna.com", "region": "SE", "maxResults": 5, "fetchDetails": True},max_total_charge_usd=0.05,)items = client.dataset(run["defaultDatasetId"]).list_items().items
JavaScript:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "<APIFY_TOKEN>" });const run = await client.actor("drlipton/google-ads-transparency-scraper").call({ domain: "klarna.com", region: "SE", maxResults: 5, fetchDetails: true },{ maxTotalChargeUsd: 0.05 },);const { items } = await client.dataset(run.defaultDatasetId).listItems();
MCP (Claude, Cursor, or any client that speaks MCP): point the server at https://mcp.apify.com with your Apify token, then ask for drlipton/google-ads-transparency-scraper. Pass domain. Leave maxResults at 10 or lower for the first call.
n8n: import distribution/examples/n8n_competitor_ads_digest.json (Import from File). It runs Klarna, Spotify, Revolut, and Wise, then posts each landing page, MP4, and EU DSA range to Slack. Or use the Apify node, resource Actor, operation Run actor and get dataset items, actor drlipton/google-ads-transparency-scraper, input JSON as in the sample above. One run accepts one domain; the workflow calls it once per brand so each brand returns its own ads.
FAQ
Are EU impression numbers exact? No. Google publishes DSA reach as bucket ranges. This Actor returns those bounds and labels them impressionsMin / impressionsMax.
Do I pay if the domain has no ads? No. The ad-scraped event fires only when an ad is saved.
Why is the sample 5 ads? So the first run finishes quickly and costs under one cent. Set maxResults to 100 or 1000 for a real pull.
Does it use a browser? No. It calls the public Ads Transparency HTTP RPC endpoints.
