Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Pricing

Pay per event

Go to Apify Store
Google Ads Transparency Scraper

Google Ads Transparency Scraper

Scrape Google Ads Transparency Center by brand, domain or advertiser ID. Get ad creatives with advertiser, format, shown dates, headline and previews. No login or API key. Pay per result: $0.001 per ad plus $0.005 per run start.

Pricing

Pay per event

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Look up any brand, domain or advertiser in Google's public Ads Transparency Center and get its ad creatives as clean rows. No login, no API key.

What data can you extract?

For each ad creative:

  • Advertiser name and ID, with a link to the advertiser page
  • Ad format: TEXT, IMAGE or VIDEO
  • First and last shown date
  • Image URL (text ads are rendered as an image) and the creative preview URL
  • Destination domain (domain searches)
  • The name, domain or advertiser ID that found the ad, plus the region filter used
  • Direct link to the creative in the Transparency Center

By default (includeAdDetails on) you also get the headline, description and display URL, the image and video links, the number of variations and the countries the ad was shown in. This needs extra lookups per ad and takes about 2-3 seconds per ad; switch it off for faster runs with list fields only. Not every ad shows text: many classic text ads are only published as an image, in which case headline stays empty and image_urls has the picture. Sitelinks and ratings shown in the Transparency Center are part of that image and cannot be read as text.

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client, including Claude Desktop, Claude.ai, Cursor, VS Code, LangChain and LlamaIndex.

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com?tools=santamaria-automations/google-ads-scraper",
"--header",
"Authorization: Bearer <APIFY_TOKEN>"
]
}
}
}

Example prompt: "Use google-ads-scraper to get the latest 50 US ads from Nike and show advertiser, format and last shown date as a table."

Example input

{
"searchTerms": ["nike"],
"region": "US",
"maxAds": 50
}

With ad details:

{
"searchTerms": ["nike"],
"region": "US",
"maxAds": 50,
"includeAdDetails": true
}

An empty input {} also works and runs the defaults (nike, 50 ads, all regions).

How searches work

  • Brand or advertiser names (searchTerms): the name is looked up in the Transparency Center's advertiser search. The closest name match wins (legal suffixes like Inc or GmbH are ignored), and among equal matches the advertiser with the most ads. maxAdvertisersPerTerm (default 1) controls how many matches are scraped. Free-text keyword search for ad content is not supported by Google's endpoint, only advertiser names.
  • Domains (domains, or a name like tesla.com): ads whose destination domain matches, from any advertiser. Domains are searched directly because the advertiser lookup does not resolve them.
  • Advertiser IDs (advertiserIds): all ads of one advertiser, for example AR17828074650563772417.

A creative found by several searches is returned once.

Input parameters

ParameterTypeDefaultDescription
searchTermsarray["nike"]Brand or advertiser names. Used only when domains and advertiserIds are empty too
domainsarraynoneDomains such as nike.com
advertiserIdsarraynoneAdvertiser IDs (AR plus 20 digits)
regionstringemptyTwo-letter country code to only get ads shown there (US, GB, DE, FR, CH, ...)
maxAdvertisersPerTerminteger1Advertisers to scrape per name (1-10)
maxAdsinteger50Total ads across all searches (1-100,000)
maxAdsPerQueryinteger0Optional cap per name, domain or advertiser (0 = only the total cap)
includeAdDetailsbooleantrueLoad the ad content (headline, description, display URL, images, video, variations, countries). Slower: about 2-3 seconds per ad

What you get

One row per ad creative:

FieldTypeDescription
creative_idstringUnique creative ID
advertiser_idstringAdvertiser ID (matched advertiser for name searches)
advertiser_namestringAdvertiser display name
advertiser_urlstringAdvertiser page in the Transparency Center
ad_formatstringTEXT, IMAGE or VIDEO
first_shown_datestringFirst date the ad was shown (YYYY-MM-DD)
last_shown_datestringLast date the ad was shown (YYYY-MM-DD)
image_urlstringAd image URL (text ads render as an image)
preview_urlstringGoogle preview script URL of the creative (image and video ads)
domainstringDestination domain (domain searches only)
search_termstringName, domain or advertiser ID that found this ad
search_typestringkeyword, domain or advertiser_id
regionstringRegion filter applied, empty for all regions
source_urlstringDirect link to the creative
scraped_atstringISO 8601 scrape time
headlinestringAd headline (with ad details)
descriptionstringAd description text (with ad details)
display_urlstringDisplay URL shown with the ad (with ad details)
destination_urlstringLanding page, when the ad exposes it (with ad details)
sitelinksarrayExtra links shown under a text ad, as {title, url}. Empty if none could be read (with ad details)
variations_countintegerNumber of variations of this creative (with ad details)
image_urlsarrayImage URLs of the ad variations (with ad details)
video_urlstringVideo link for video ads (with ad details)
regions_shownarrayCountries the ad was shown in, as two-letter codes (with ad details)
detail_statusstringnot_requested, ok, partial (ad text could not be loaded) or failed (list fields only)

The ad detail fields are always present. With includeAdDetails switched off they are empty and detail_status is not_requested. If the ad content cannot be loaded for an ad, the row is still returned with detail_status set to failed (list fields only) or partial (ad text missing, other details present). Each ad is billed once either way.

Output example (with ad details)

{
"creative_id": "CR00033613616649338881",
"advertiser_id": "AR16735076323512287233",
"advertiser_name": "Nike, Inc.",
"advertiser_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233",
"ad_format": "TEXT",
"first_shown_date": "2023-11-17",
"last_shown_date": "2026-10-21",
"image_url": "https://tpc.googlesyndication.com/archive/simgad/6766108139373326992",
"preview_url": "",
"headline": "Nike® Official Site",
"description": "Shop the official Nike® store for the latest shoes, apparel & gear.",
"display_url": "nike.com",
"destination_url": "",
"sitelinks": [],
"variations_count": 5,
"image_urls": ["https://tpc.googlesyndication.com/archive/simgad/6766108139373326992"],
"video_url": "",
"regions_shown": ["US"],
"detail_status": "ok",
"domain": "",
"search_term": "nike",
"search_type": "keyword",
"region": "US",
"source_url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR00033613616649338881",
"scraped_at": "2026-10-21T10:30:00Z"
}

Pricing

Pay per event:

EventWhenPrice
actor-startOnce per run, only if at least one ad was saved$0.005
google-ads-resultPer ad saved to the dataset$0.001

$0.001 per ad means $1.00 per 1,000 ads. Runs that find nothing cost nothing.

Data protection

This actor returns only data that is publicly visible on the source pages. Results can include personal data, such as names, phone numbers, email addresses and addresses of private persons, sole traders or contact persons. Where the source labels an entry type, it is included so you can filter the results yourself.

You are responsible for using the data lawfully, including the GDPR/DSGVO, national data-protection laws and unfair-competition rules (e.g. UWG) for marketing and outreach.

Notes

  • The Ads Transparency Center is a public database that Google publishes by law, no login required.
  • If a search finds no ads, the run ends with a clear status message and a failed exit, so you are not billed.
  • Google limits heavy use. Blocked requests are retried automatically; if a run still reports being blocked, try again later.