Most people assume YouTube ads can't be spied on. They can — Google publishes them.
Pass a domain and get back every video ad the advertiser is running, when each one started, when it was last seen live, and a link to watch it. As JSON, for as many companies as you want.
No credit card required
Every video ad
not a sample, the full library
First seen and last seen
dates Meta's library never gives you
JSON via API
run it across a whole competitor set
Facebook's ad library trained everyone to expect a public archive of ads. Almost nobody realises Google runs one too. The Google Ads Transparency Center publishes what every verified advertiser is running, and that includes their video ads — the ones served on YouTube.
There's no official API for it. Adyntel scrapes it and hands you clean JSON, so you can pull one advertiser or five hundred without touching the interface.
So a YouTube ad spy tool doesn't need to do anything clever to see a competitor's campaigns — the archive is already public. What it has to get right is coverage and structure: every creative, not a sample, in a shape you can feed straight into a spreadsheet or an AI model.
Dedicated YouTube ad spy tools like VidTao and BigSpy wrap that same public data in a browsable library with creative analysis, which suits marketers who want to sit and scroll. Adyntel is aimed at performance marketing teams who would rather have the ad intelligence as data they can join against their own reporting, and at agencies who fold it into their competitive research services for clients.
Filter a pull to video with media_type: "video" and you get the YouTube side of an advertiser's spend on its own.
start and last_seen on every creative. An ad that's been live for eight months is one a competitor keeps choosing to fund. Sort a library by that gap and their proven creatives sit at the top.
original_url opens the creative in the Google Ads Transparency Center, where the video plays. One click per ad, no login.
advertiser_name and advertiser_id — the legally verified entity paying for the ads. Useful for spotting when a brand buys under a parent company or through an agency.
creative_id stays constant across pulls. Store it and re-run weekly to get a clean diff of what launched, what's still live, and what quietly disappeared.
total_ad_count tells you how deep the library goes, and continuation_token pages through it. Large advertisers run thousands of video creatives — you can pull all of them rather than eyeballing whatever loads first.
Each video ad comes back with a variants[].content URL pointing at Google's creative preview service. That URL serves the rendered ad, and the underlying YouTube video ID sits inside it — which means you can get to the video and its thumbnail with one extra request.
import re, requests
ads = requests.post('https://api.adyntel.com/google', json={
'api_key': key,
'email': email,
'company_domain': 'slack.com',
'media_type': 'video'
}).json()['ads']
for ad in ads:
preview = requests.get(ad['variants'][0]['content']).text
match = re.search(r'ytimg\.com/vi/([\w-]{11})/', preview)
if match:
vid = match.group(1)
print(f"https://www.youtube.com/watch?v={vid}")
print(f"https://i3.ytimg.com/vi/{vid}/hqdefault.jpg")
That gives you a watchable YouTube URL and a thumbnail for every ad in the library. To go further, the video intelligence endpoint takes a YouTube URL and returns frame-by-frame screenshots plus a full audio transcript — enough to run a competitor's entire video strategy through an LLM and get back the hooks, claims and offers they lead with.
The API is the reason most people pick Adyntel, but you don't have to write a line of code to use it. Log into the platform, type a domain, filter to video, and the same results render as a browsable list — creatives, run dates and advertiser detail, with a CSV export when you want the whole set in a spreadsheet.
In practice teams use both: the UI for a quick look before a pitch or a one-off competitor check, the API once the same question needs answering every week across a list of accounts.
Checking whether competitors are actually investing in YouTube before committing a video production budget to it.
Pulling every video ad in a category to find the hooks and formats that keep getting funded, then briefing against the gaps.
Walking into a pitch already knowing what the prospect and their three closest competitors are running in video.
Tracking creative launches on a schedule so a competitor's new campaign shows up in a report instead of by accident.
For search and display ads too, see the Google ads scraper. For paid social, see the Facebook ads scraper.
original_url to watch the ad in the Transparency Center, and a variants[].content preview URL that contains the YouTube video ID. One extra request and a regex gets you the watch link and thumbnail — the snippet above does it in six lines.advertiser_name and advertiser_id to see who's really running the account, and expect some results from sibling brands under the same parent.country_code on the response but doesn't take a country filter on the request, so results come back across all regions and you filter afterwards. If you need country-level targeting on the request itself, the Meta endpoint supports it.