Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

from $1.50 / 1,000 ad results

Go to Apify Store
Google Ads Transparency Scraper

Google Ads Transparency Scraper

Scrape ads from the Google Ads Transparency Center by keyword, domain, advertiser ID or URL. Get headlines, descriptions, images, YouTube links, first/last shown dates and regions for Search, YouTube, Shopping, Maps and Play ads. Filter by country, format, platform and date. No login needed.

Pricing

from $1.50 / 1,000 ad results

Rating

0.0

(0)

Developer

Brisk Pebble

Brisk Pebble

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Extract ad creatives from the Google Ads Transparency Center. Search by keyword, website domain, advertiser ID or Transparency Center URL and get every ad an advertiser runs on Google Search, YouTube, Shopping, Maps and Play: headline, description, images, video links, first/last shown dates, and the regions it ran in.

The Actor calls the same JSON endpoints the Transparency Center web app uses, so it doesn't need a browser. That makes it fast and cheap to run.

What you can do with it

  • Competitor research. See what ads, offers and messages a competitor is running right now, and how long each one has been live.
  • Creative inspiration. Pull headlines, descriptions, CTAs, images and videos at scale.
  • Monitoring. Schedule daily runs with a date filter to catch new ads as they launch.
  • Political ad research. Election ads include impression and spend ranges, targeting and per-region data.
  • Lead generation. Check which domains advertise on Google at all, and how much.

Input

FieldDescription
Search Querynike (keyword), nike.com (domain), AR16735076323512287233 (advertiser ID) or a URL like https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US.
More search queries / URLsRun many queries in one go. Each one gets its own Max Results budget.
Max ResultsMaximum ads saved per query (0 = no limit). Default 100.
RegionOnly ads shown in one country (US, GB, DE, …) or anywhere.
PlatformsSEARCH, YOUTUBE, SHOPPING, MAPS, PLAY.
Ad formatTEXT, IMAGE, VIDEO.
Shown from / untilOnly ads shown within this date range.
Topicall or political (political needs a region).
Advertisers per keywordHow many matching advertisers a keyword expands to (default 1, best match).
Extract ad text, images and videosOpens each ad's preview to get the copy and media. On by default.
Include full ad detailsAdds per-country dates and impressions, targeting, topic, payer and all variations.

How queries are interpreted

QueryTreated as
AR + 20 digitsAdvertiser ID: all ads of that advertiser.
nike.com, https://www.nike.com/usDomain: all ads that point to that domain, from any advertiser.
Transparency Center URLAdvertiser, domain or single ad. A region in the URL overrides the Region filter.
Anything elseKeyword: matched against advertiser names (the site's search box). Exact name matches win, then the advertisers with the most ads. If no advertiser matches, the first suggested domain is used.

Example input:

{
"searchQuery": "nike.com",
"searchQueries": ["adidas", "AR16735076323512287233"],
"maxResults": 200,
"region": "US",
"platforms": ["YOUTUBE"],
"format": "VIDEO",
"dateFrom": "2026-09-01",
"extractAdContent": true,
"includeAdDetails": false
}

Output

One dataset item per ad. Example (trimmed):

{
"query": "nike.com",
"searchType": "domain",
"region": "US",
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"isAdvertiserVerified": true,
"creativeId": "CR12733663556793270273",
"format": "VIDEO",
"adUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR12733663556793270273?region=US",
"firstShown": "2026-10-19T15:25:01Z",
"lastShown": "2026-10-19T17:01:44Z",
"daysShown": 1,
"headline": "Nike® Pegasus Plus 2",
"description": "Comfort for your fastest miles. The Nike Pegasus Plus 2.",
"displayUrl": "www.nike.com/",
"callToAction": "Learn more",
"landingPageUrl": null,
"imageUrl": "https://tpc.googlesyndication.com/simgad/14944213133031273137",
"imageUrls": ["https://tpc.googlesyndication.com/simgad/14944213133031273137"],
"videoId": null,
"videoUrl": null,
"previewUrl": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?...",
"matchedDomain": null,
"scrapedAt": "2026-10-19T18:00:00.000Z"
}

With Include full ad details turned on, each item also has servedRegions, regionStats (per-country first/last shown dates, impression ranges and per-platform impressions where Google publishes them), euImpressionsLow/High, topic, targeting, paidBy, containsSyntheticMedia and variations.

The dataset has two views: Overview (thumbnail, advertiser, copy, dates) and Ad copy and media. Export to JSON, CSV, Excel or XML, or read it through the Apify API.

Notes on the data

  • Text ads are listed by Google as a rendered screenshot (imageUrl). With content extraction on, the Actor also reads the ad's renderer to get the real headline and description. Dynamic Search Ads show Google's own placeholder (<dynamically generated based on landing page content>) as the headline.
  • Impressions and spend are only published for political ads, and for ads shown in the EU (with full details on).
  • Counts are approximate. Google itself shows ranges ("~8,000 ads").
  • Fields that Google does not provide for an ad are null, never guessed.

Cost and performance

Each page of 40 ads is one request. Content extraction and full details each add about one request per ad, so turn them off when you only need IDs, dates and formats. Runs default to 1 GB memory and 10 parallel requests.

If you set a maximum cost per run, the Actor stops cleanly once it is reached. You are never charged for results it doesn't save.

Monetization (for the Actor owner)

The Actor works with Apify's pay-per-event setup out of the box:

EventCharged when
apify-actor-startThe run starts (synthetic, charged by the platform).
apify-default-dataset-itemEach ad is saved to the dataset (synthetic, charged by the SDK on every push).

Optionally, define a custom event named result instead of the dataset-item event and the Actor charges it per ad. Either way, it reads the charge result on every push and stops as soon as the user's maximum cost per run is reached. Pay-per-result pricing is also supported (ACTOR_MAX_PAID_DATASET_ITEMS).

Blocking and proxies

Google rate-limits by IP. The Actor rotates sessions (each with its own cookies and proxy IP), backs off on HTTP 429/403, CAPTCHA pages and /sorry/ redirects, and retries with a fresh session. Apify Proxy is on by default. If a run logs many blocked requests, switch to Residential proxies or lower Max concurrency. An ad that can't be enriched after all retries is still saved with its basic fields and an errors note.

Local development

npm install
npm test # unit tests + an end-to-end run against a local mock of the endpoints
npm run build
apify run --input='{"searchQuery":"nike.com","maxResults":20}'

Deploy with apify push.

How it works

StepEndpoint
Keyword → advertisers/domainsPOST /anji/_/rpc/SearchService/SearchSuggestions
List ads (40 per page, token pagination, filters)POST /anji/_/rpc/SearchService/SearchCreatives
Ad detailsPOST /anji/_/rpc/LookupService/GetCreativeById
Ad copy and mediaGET the ad's content.js preview renderer, and decode its overlay= parameter (base64 → gzip → protobuf)

Bodies are form-encoded f.req=<JSON> with protobuf field numbers as keys. The field numbers and enums in src/constants.ts and src/rpc.ts (format: TEXT=1, IMAGE=2, VIDEO=3; platform: PLAY=1, MAPS=2, SEARCH=3, SHOPPING=4, YOUTUBE=5; dates as YYYYMMDD) come from the protobuf descriptors in the Transparency Center's own frontend bundle.

This Actor only collects data Google publishes in its public Ads Transparency Center, about advertisers rather than private individuals. You are responsible for using the data in line with Google's terms and the laws that apply to you (for example GDPR). This Actor is not affiliated with or endorsed by Google.