Google Ads Transparency API: Google Ads Library & Ad Spy avatar

Google Ads Transparency API: Google Ads Library & Ad Spy

Pricing

from $0.85 / 1,000 ads

Go to Apify Store
Google Ads Transparency API: Google Ads Library & Ad Spy

Google Ads Transparency API: Google Ads Library & Ad Spy

Every ad a competitor runs on Google Search, YouTube, Display, Maps and Play, from the Google Ads Transparency Center (Google Ads Library). Google ad library and ads spy by domain, brand or advertiser ID: YouTube ads, format, first and last shown dates, images, per-country reach. $1 per 1,000 ads.

Pricing

from $0.85 / 1,000 ads

Rating

0.0

(0)

Developer

Saulius AutomatesIT

Saulius AutomatesIT

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

See every ad a competitor runs on Google: Search, YouTube, Display, Maps, Play and Shopping. This Actor reads Google's public Ads Transparency Center and returns the ads as clean JSON, CSV or Excel. No Google account, no login, no cookies.

Give it a website domain (hubspot.com), a brand name (HubSpot), an advertiser ID (AR10072600183532683265) or any Transparency Center URL. For each ad you get:

  • Advertiser: Google-verified legal name and advertiser ID.
  • Format: text, image or video.
  • Dates: when Google first and last showed the ad, and on how many days it ran. Long-running ads are the ones that work.
  • Creative: the ad image (text ads are archived by Google as images too), the live preview link, and for video ads the YouTube video ID and URL.
  • Optional detail: every country the ad ran in with first and last shown dates, impression ranges where Google publishes them (EU countries), and all creative variations.

Why use it

  • $1 per 1,000 ads. The Store's best-known Google Ads Transparency scrapers charge $1.48 to $2 per 1,000 on the free plan, plus extra for details. Paid Apify plans get the usual discounts on top.
  • Domain search finds every advertiser. Agencies, resellers and regional entities that point ads to the same website all come back in one query.
  • Filters that matter. Country, format (text, image, video) and a date range, so a weekly run only returns ads shown that week.
  • YouTube links included. Video ads come with the YouTube URL at no extra cost, ready for our YouTube Transcript Scraper if you want the script of every competitor video ad.
  • Built for bulk and schedules. Each request goes out on a fresh proxy IP, so large brands with tens of thousands of ads finish without rate-limit failures. Empty queries cost nothing.

What it's used for

  • Competitor ad monitoring: a weekly scheduled run per competitor domain, filtered to the last 7 days, shows every new creative.
  • Creative research: find a brand's longest-running ads (daysShown) to see which messages and formats they keep paying for.
  • Agency prospecting: list every business advertising in a country and format, then check how active they are.
  • Brand protection: catch advertisers using your brand or domain.
  • Ad intelligence for AI agents: an agent can pull a competitor's ads and summarise their positioning.

Is there a Google Ads Transparency Center API?

Only in part. Google says it provides API access to Ads Transparency Center data about ads served in the EEA (an EU Digital Services Act requirement), and, for ads elsewhere, only to regulators and self-regulatory organisations at its discretion (Google Ads policy help). For ads shown in the US, UK and the rest of the world there is no public API, and the Google Ads API only reads your own accounts' campaigns. Developers who need competitor ads as data, in any country, either automate the Transparency Center website themselves or use a service that does.

This Actor is the service: give it a domain, brand or advertiser ID, get every ad as JSON from Python, JavaScript, cURL, no-code tools or an AI agent. No Google account, no browser on your side, $1 per 1,000 ads.

It is also the quickest way to see a competitor's ads from the Google Ads Library (the Transparency Center's other common name) in bulk, with filters for country, format and dates.

Input

FieldWhat it doesDefault
queriesDomains, brand names, advertiser IDs or Transparency Center URLs, one per line
modeads, or advertisers to look up advertiser names and IDs onlyads
regionTwo-letter country code (US, GB, DE...) or anywhereanywhere
formatall, text, image or videoall
dateFrom, dateToOnly ads shown in this window (YYYY-MM-DD)all time
maxAdsPerQueryCap per query line, newest ads first100
includeDetailsAdd per-country dates, EU impression ranges and all variationsfalse
includeVideoIdsAdd YouTube video ID and URL to video ads (free)true
maxAdvertisersPerNameFor brand names: how many matching advertisers to scrape, most ads first1

Example:

{
"queries": ["hubspot.com", "salesforce.com"],
"region": "US",
"dateFrom": "2026-09-01",
"maxAdsPerQuery": 500
}

Domain or brand name? A domain is the most complete: it returns ads from every advertiser that sends traffic to that site. A brand name is matched against Google's verified advertiser names (HubSpot finds "Hubspot, Inc."). Names that are common words can match the wrong company, so use the domain or the advertiser ID when it matters. Run mode: "advertisers" first to see which advertisers a name matches.

Output

One item per ad:

{
"type": "ad",
"query": "hubspot.com",
"region": "US",
"advertiserId": "AR10072600183532683265",
"advertiserName": "Hubspot, Inc.",
"creativeId": "CR02085961376810926081",
"format": "video",
"firstShown": "2026-06-29T21:00:29.000Z",
"lastShown": "2026-10-03T11:59:19.000Z",
"daysShown": 97,
"spanDays": 97,
"domain": "hubspot.com",
"imageUrl": null,
"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...",
"videoId": "yiG2lE3wqrY",
"videoUrl": "https://www.youtube.com/watch?v=yiG2lE3wqrY",
"adUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR02085961376810926081?region=US",
"scrapedAt": "2026-10-03T13:06:00.404Z"
}

Image and text ads carry imageUrl (with imageWidth and imageHeight). With includeDetails on, each ad also has:

{
"regionCount": 9,
"regions": [
{ "countryCode": "FR", "country": "France", "firstShown": "2025-05-30", "lastShown": "2026-09-21", "impressionsMin": 1000 }
],
"euImpressionsMin": 1000,
"variationCount": 3,
"variations": [{ "imageUrl": "https://tpc.googlesyndication.com/archive/simgad/...", "width": 348, "height": 269 }]
}

daysShown is Google's count of days the ad was shown; spanDays is the calendar span from first to last shown. In advertisers mode each item is an advertiser: advertiserName, advertiserId, country, adCountMin, adCountMax, advertiserUrl and related domains.

The run summary (ads delivered, queries without results, failures) is saved as OUTPUT in the run's key-value store.

Pricing

Pay per result, no subscription:

EventPrice
Ad$0.001 per ad ($1.00 per 1,000)
Ad details (only with includeDetails)$0.001 per ad
Advertiser record (advertisers mode)$0.0005 per advertiser
Actor start$0.00005 per run

Queries that find nothing are free. Set Maximum cost per run in the run options and the run stops cleanly when it is reached.

Tutorial: Python, schedules and AI agents

You need an Apify API token (Apify Console > Settings > API & Integrations). Apify's free plan includes $5 of monthly credit, about 5,000 ads.

1. Python: every ad a competitor ran this month

$pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("sauliusautomatesit/google-ads-transparency-api").call(run_input={
"queries": ["hubspot.com"],
"region": "US",
"dateFrom": "2026-09-01",
"maxAdsPerQuery": 1000,
})
ads = list(client.dataset(run.default_dataset_id).iterate_items())
longest = sorted(ads, key=lambda a: a["daysShown"] or 0, reverse=True)[:10]
for ad in longest:
print(ad["format"], ad["daysShown"], "days", ad.get("videoUrl") or ad.get("imageUrl"))

run.default_dataset_id is for apify-client 3.x; on 2.x write run["defaultDatasetId"]. Pass max_total_charge_usd=1 to .call() to cap a run at $1.

JavaScript (Node.js), after npm install apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('sauliusautomatesit/google-ads-transparency-api').call({
queries: ['hubspot.com'],
region: 'US',
format: 'video',
maxAdsPerQuery: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((ad) => console.log(ad.daysShown, 'days', ad.advertiserName, ad.videoUrl));

cURL, one HTTP call with the ads in the response:

curl -X POST "https://api.apify.com/v2/acts/sauliusautomatesit~google-ads-transparency-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "content-type: application/json" \
-d '{"queries": ["hubspot.com"], "region": "US", "maxAdsPerQuery": 50}'

2. Weekly competitor monitoring

Save an input like this as a Task and give it a weekly schedule. Each run returns only ads shown in the last 7 days; connect the Task to Slack, Google Sheets or a webhook in the Integrations tab.

{
"queries": ["competitor-one.com", "competitor-two.com", "competitor-three.com"],
"region": "US",
"dateFrom": "2026-09-26",
"maxAdsPerQuery": 2000
}

3. AI agents: one MCP URL, one tool

This URL gives any MCP client exactly one tool, this Actor:

https://mcp.apify.com/?tools=sauliusautomatesit/google-ads-transparency-api

Claude Code:

$claude mcp add --transport http google-ads-transparency "https://mcp.apify.com/?tools=sauliusautomatesit/google-ads-transparency-api"

Cursor, Claude Desktop, VS Code and other clients that take JSON:

{
"mcpServers": {
"google-ads-transparency": {
"url": "https://mcp.apify.com/?tools=sauliusautomatesit/google-ads-transparency-api",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Then ask: "Which video ads has Salesforce run in the UK since August, and which ran longest?"

  • Google Trends API: search interest over time for the keywords and brands your competitors advertise on.
  • YouTube Transcript Scraper: the full script of every competitor video ad, from the YouTube links this Actor returns.
  • Google Hotels API: hotel prices by destination, for travel and hospitality advertisers.
  • Bing Search API: the organic results for the same brands and keywords, to set next to their paid ads.

Limits and notes

  • Data comes from Google's public Ads Transparency Center. Google lists ads from verified advertisers; it does not publish spend, clicks or keywords (except for political ads), and it publishes impression ranges only for EU countries.
  • Text ads are archived by Google as images, so their wording is in imageUrl, not as text.
  • A platform filter (Search only, YouTube only) is not offered yet.
  • Not affiliated with Google.

FAQ

Is there an official Google Ads Transparency Center API? Only for ads served in the EEA, and for regulators. For every other country Google offers the website only; this Actor turns it into an API for any country.

Can I see how much a competitor spends on Google Ads? No. Google publishes spend only for political ads. You get every creative, when it ran, for how many days, in which countries, and EU impression ranges.

Can I get the text of text ads? Google archives text ads as images, so their wording is in imageUrl. Run the images through any OCR or vision model if you need the words as text.

How do I find a competitor's YouTube ads? Set format to video: each ad comes with its YouTube URL, and our YouTube Transcript Scraper gives you the script of each one.