YouTube Ad Library — Google Ads Landing Page & EU DSA avatar

YouTube Ad Library — Google Ads Landing Page & EU DSA

Pricing

$1.50 / 1,000 ad creative scrapeds

Go to Apify Store
YouTube Ad Library — Google Ads Landing Page & EU DSA

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

Joel Smith

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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)

Run on Apify

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

Eventad-scraped
Price$0.0015 per ad ($1.50 / 1,000)
Charged whenAn ad is written to the dataset
Not chargedRuns that find nothing, or ads blocked by your spend cap
Compute256 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.

  • 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 ApifyClient
client = 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.