Google Ads Transparency Scraper — Creatives & Run Dates avatar

Google Ads Transparency Scraper — Creatives & Run Dates

Pricing

from $3.00 / 1,000 scraped ads

Go to Apify Store
Google Ads Transparency Scraper — Creatives & Run Dates

Google Ads Transparency Scraper — Creatives & Run Dates

Scrape Google Ads Transparency Center ads by domain or advertiser name, with advertiser, ad ID, format, preview image, regions and first and last shown dates. Works with Apify MCP and the API.

Pricing

from $3.00 / 1,000 scraped ads

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

57

Total users

2

Monthly active users

9 days ago

Last modified

Share

What is Google Ads Transparency Scraper?

Google Ads Transparency Scraper turns a company domain, an advertiser name or an advertiser page link into one row per ad from the Google Ads Transparency Center. Each row contains the source advertiser and creative IDs, format, and available preview/date fields. Missing fields remain absent. A source page lets you check each creative. Marketers, agencies, competitive-intelligence teams and AI agents use it to see which ads a competitor runs on Google Search, YouTube and display, with no Google account or API key.

Why marketers use it for competitor ad research

  • Any competitor, three ways in. Search by domain like hubspot.com, by advertiser name like Coca-Cola, or paste an advertiser page link.
  • Reported date ranges. first_shown_date and last_shown_date preserve dates returned by the source. Availability varies by route, region and creative variation; duration alone does not establish performance.
  • Format and market filters. Narrow to text, image or video ads, and to a country such as US, GB, DE or ANY.
  • Verified advertiser identity. advertiser_name and advertiser_id come from Google's own verification, so related brands stay separate.
  • Pay per ad. One charge per ad saved.

How to use it

All recent ads for a competitor's domain in the US:

{
"searchQuery": "hubspot.com",
"searchType": "domain",
"countryCode": "US",
"maxResults": 50
}

Image ads by advertiser name, worldwide:

{
"searchQuery": "Shopify",
"searchType": "advertiserName",
"countryCode": "ANY",
"adFormat": "IMAGE",
"maxResults": 25
}
InputWhat it controls
searchQueryA domain such as nike.com, or a brand name such as Nike
searchTypedomain for a website, advertiserName for a brand name
startUrlsAdvertiser page links, such as https://adstransparency.google.com/advertiser/AR16735076323512287233?region=US
countryCodeTwo-letter country code, or ANY for all regions (default US)
adFormatALL, TEXT, IMAGE or VIDEO
maxResultsAds to save (default 50)
enrichDetailsVisit each ad's page for extra detail (default on)

Want the ads running on Google Search right now for a keyword? Continue with Google Ads Scraper linked below.

Output: Google ads data you receive

A real row from a nike.com search in the US:

{
"advertiser_name": "Nike, Inc.",
"advertiser_id": "AR16735076323512287233",
"advertiser_domain": "nike.com",
"ad_id": "CR17050812151263920129",
"ad_format": "TEXT",
"ad_image_url": "https://tpc.googlesyndication.com/archive/simgad/10633112158864726501",
"regions_shown": ["US"],
"first_shown_date": "2022-11-30",
"last_shown_date": "2026-10-01",
"is_political_ad": false,
"scraped_at": "2026-10-01T06:12:34.809Z",
"source_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR17050812151263920129"
}
FieldWhat it contains
advertiser_name, advertiser_idGoogle-verified advertiser and its ID
advertiser_domainThe domain you searched, in domain mode
ad_id, ad_formatCreative ID and format: TEXT, IMAGE or VIDEO
ad_image_urlPreview image of the ad, when Google provides one
regions_shownRegions explicitly exposed by the detail page; empty when unavailable. The requested country filter is reported in OUTPUT.countryCode.
first_shown_date, last_shown_dateValid source-reported dates in YYYY-MM-DD form, when available. Public detail pages may expose only last shown.
is_political_adWhether Google lists it as a political ad
source_url, scraped_atThe ad's Transparency Center page and collection time

Preview images are optional. A missing image does not establish that an ad is invalid; text/video creatives and preview-only renderers may not expose a direct image. The browser route associates media only with that creative’s own card. Headline/body copy, landing pages and platform values remain absent unless the source supplies them.

OUTPUT in the default key-value store reports the run outcome, ads saved, the advertiser matched for name searches, and routeServed (which route saved the ads).

How it works

  1. Own data route (primary). The Actor asks the Transparency Center for the creatives of the domain or advertiser through the same JSON requests its public website uses, with the country and format filters applied by Google, page by page up to maxResults. Advertiser names are first matched to Google's advertiser ID through the site's own advertiser search. With enrichDetails, each creative's own detail record adds the regions where it was shown. Requests go through Apify Proxy (datacenter first, residential if Google rate-limits the first attempt).
  2. Own browser route. Only if the first route is blocked and saved nothing, the Actor opens the Transparency Center page in its own browser and reads the creative cards.
  3. Fallback provider. Only if both own routes saved nothing and neither confirmed an empty result, the Actor calls a specialist Ads Transparency Actor on Apify. A real empty result from an own route (no ads for that domain, country and format) ends as VALID_EMPTY without the fallback.

Example workflow: a quarterly competitor ad review

A SaaS marketing team reviews four competitors each quarter. They run each domain with maxResults at 100 and sort by first_shown_date to see which ads have run the longest. They open the long-running source_url pages to read the copy and note the angles that stick. They compare ad_format counts to see who is investing in video. Then they check Google Ads Scraper for their core keywords to see which of those ads appear in live search results.

Pricing

This Actor uses Pay per event plus Apify platform usage. You pay one event per ad saved, plus a start event and the platform usage of the run. The live Pricing tab on this page shows the current price.

  • 4 competitors × 25 ads = 100 ad events + platform usage.
  • maxResults caps each run, so it doubles as a cost ceiling.
  • The own routes add no charges beyond this Actor's events and platform usage.
  • Only when the fallback provider is used (see How it works), it runs as a separate Actor in your account with its own small per-ad charge shown in your usage. It bills the source records it retrieves, including records excluded by a format filter; format filters there inspect up to five times the remaining result limit (maximum 1,000 source records per call), and a partial outcome identifies that scan cap. One combined budget bounds those child charges (OUTPUT.providerBudgetUsd); the parent Max charge setting applies to the parent run only. OUTPUT.providerFallbackCalls shows whether it was used.

Ad research with AI agents (MCP)

Connect this Actor to an AI agent through Apify MCP and ask in plain language:

Show me the video ads Salesforce has run in the US, and which ones have been running the longest.

Agent checklist:

  1. Use searchType: "domain" for a website, or "advertiserName" for a brand name.
  2. Set countryCode and adFormat to match the question; keep maxResults small for quick answers.
  3. Read rows with get-dataset-items; sort by first_shown_date for long-running ads.
  4. Share source_url so the user can view each ad.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~google-ads-transparency-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQuery": "canva.com", "searchType": "domain", "countryCode": "US", "adFormat": "VIDEO", "maxResults": 20}'
Your next stepUseWhy
When you then want live search ads for a keywordGoogle Ads ScraperSponsored results with copy and position
When you research Facebook and Instagram adsMeta Ad Library ScraperMeta ad creatives and run dates
When you research TikTok adsTikTok Ads ScraperTop TikTok ads with performance signals
When you research Pinterest adsPinterest Ads Library ScraperPinterest ad creatives and disclosed targeting

Best results

Starting situationHelpful actionExpected outcome
You know the competitor's websiteUse searchType: "domain"Every ad tied to that domain
A brand with many local entitiesUse searchType: "advertiserName"Ads from the best-matching advertiser and its related accounts
A known advertiser pagePaste it into startUrlsAds from exactly that advertiser
Researching one marketSet countryCodeAds shown in that country

Builder's note

I found that the most useful signal in a competitor's ads is how long each one keeps running, so every row carries first_shown_date and last_shown_date. I learned that brand names often map to several verified advertisers, so name searches pick the advertiser with the most ads and keep each advertiser's own name on its rows.

FAQ

Do I need a Google Ads account?

No. The Transparency Center is public, and the Actor needs no login or API key.

Does it show ad text and headlines?

Rows include the ad's preview image when Google provides one, plus a source_url that opens the full ad in the Transparency Center.

Which countries can I filter by?

Any two-letter country code Google supports, such as US, GB, DE, FR or IN, or ANY for all regions.

What happens if an advertiser has no ads?

You get zero rows and an outcome of VALID_EMPTY, at no ad charge.

Can I track a competitor every week?

Yes. Save your input as a task and schedule it; compare ad_id values between runs to spot new ads.

Responsible use

This Actor collects public ad information from the Google Ads Transparency Center. Use it for competitive research and follow Google's terms. Read Apify's guide on whether web scraping is legal for more context. Google is a trademark of Google LLC. This independent Actor is not affiliated with, associated with, or endorsed by Google. For questions or bugs, open a ticket in the Issues tab.