Google Ads Transparency Scraper - Competitor Ads & Ad Copy avatar

Google Ads Transparency Scraper - Competitor Ads & Ad Copy

Pricing

from $1.00 / 1,000 ads

Go to Apify Store
Google Ads Transparency Scraper - Competitor Ads & Ad Copy

Google Ads Transparency Scraper - Competitor Ads & Ad Copy

See every Google ad a competitor runs: Ads Transparency Center by domain, brand or advertiser, with the real ad copy (headlines, descriptions, 13 languages), landing pages, political ads, regions and dates. Search, YouTube, Shopping and Display. No login. From $1 per 1,000 ads.

Pricing

from $1.00 / 1,000 ads

Rating

0.0

(0)

Developer

Alom Dev

Alom Dev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Google Ads Transparency Center Scraper & API, with ad copy

See every Google ad a competitor runs: Search, YouTube, Shopping, Maps and Play. Look them up by domain, brand name or advertiser ID. You get first and last shown dates, days running, regions, A/B variations and the paying entity, plus the actual ad copy: headline, description, display URL and sitelinks of Search ads in 13 languages, Shopping product titles and YouTube video IDs. Add landing pages (title, H1, call to action), political ads with spend and targeting, or get one summary row per advertiser. Export as JSON, CSV or Excel. No login.

✅ The ad text, not just a screenshot. Google archives Search ads as images. This Actor reads them and returns the headline and description as text, so you can search, compare and analyse competitor messaging at scale. Each ad's language is detected automatically: English, German, French, Spanish, Italian, Portuguese, Russian, Ukrainian, Arabic, Chinese (simplified and traditional), Japanese and Korean. ✅ Landing pages, political ads, advertiser summaries. See where each ad sends people (final URL, title, H1, primary call to action), what election ads spend and whom they target, or check hundreds of companies with one row each. ✅ Finishes cleanly, no hanging runs. Google blocks IPs quickly. The Actor rotates IPs, retries automatically, and stops in time when you set a short timeout, keeping everything it collected. ✅ Honest results. A run that got nothing fails. A run that missed something says partial. You never pay for failed ads or for copy that couldn't be read. ✅ Drop-in compatible with common Transparency Center input fields (queries, domains, advertiserIds, startUrls, region, platform, adFormat, startDate/endDate, dateRangePreset, maxAdsPerSearch, maxAdsPerAdvertiser, onlyNewAds, resultType, political, enrichLandingPages, detailConcurrency).

What can you use Google Ads Transparency data for?

  • Competitor ad intelligence: every ad a competitor is running now, where, and for how long (daysShown is a strong "this ad works" signal).
  • Copywriting & messaging research: pull the real headlines and descriptions competitors test, and see which ones they keep running for months.
  • Swipe files and AI datasets: clean ad text plus image and video links, ready for LLM analysis or model training.
  • Lead generation / ad checks: find out which companies in a list advertise on Google, and how much.
  • Monitoring: schedule it and get only the new ads since the last run.
  • Compliance & brand protection: who runs ads pointing at your domain, in which countries, paid by whom.
  • Landing page research: the offer and call to action behind each ad, next to the ad copy.
  • Political ad tracking: election ads with spend and impression ranges, age / gender / location targeting and the advertiser's election ID.
  • Ad checks at scale: one row per advertiser - how many ads, which formats and platforms, active or not.

What data does it extract?

One row per ad (creative):

FieldWhat it is
advertiserName, advertiserId, advertiserVerifiedWho runs the ad
creativeId, creativeUrlThe ad, and its page on adstransparency.google.com
formatTEXT, IMAGE or VIDEO
firstShown, lastShown, daysShownWhen it ran and for how many days
domainThe domain the ad points to
imageUrl, width, heightDirect image of the ad (text ads are archived as images too)
previewUrl, googleCreativeId, googleCustomerId, adGroupIdGoogle's preview script and the IDs embedded in it (group ads by account or ad group)
platform, regionFilterThe filters the ad was found with
searchInput, searchType, scrapedAtWhich of your inputs found it

With "Extract ad copy":

FieldWhat it is
adCopy.headlinee.g. HubSpot - customer service management - View Pricing
adCopy.descriptionThe description text under the headline
adCopy.displayUrl, adCopy.displayNamewww.hubspot.com/, HubSpot
adCopy.sitelinksSitelinks, callouts and other extensions, in order
adCopy.rawText, adCopy.ocrConfidence, adCopy.sourceAll text read, a 0-100 confidence, and how it was read (ocr, html, shopping)
adCopy.languageen, de, fr, es, it, pt, ru, uk, ar, zh-Hans, zh-Hant, ja, ko (null when unsure)
adCopyStatusextracted, not-a-text-ad, low-confidence, unreadable, budget, deadline, fetch-failed
youtubeVideoId, youtubeUrlThe YouTube video behind a video ad

With "Include details":

FieldWhat it is
regionsEvery country the ad ran in, with its first and last shown date (EU/EEA: impression ranges and platforms)
variations, variationCountAll A/B variations of the creative (image or preview links)
payerNameWho paid for the ad (can differ from the advertiser, e.g. agencies)
platforms, targetingEU/EEA ads only: platforms served and which targeting types were used (demographics, geography, contextual…)

With "Include landing pages":

FieldWhat it is
landingPage.url, landingPage.urlSourceThe URL opened, and where it came from: the ad's click URL (video / display ads), its display URL (Search ads) or its domain
landingPage.finalUrl, landingPage.statusCodeWhere the page ended up after redirects
landingPage.title, landingPage.metaDescription, landingPage.h1What the page says
landingPage.primaryCtaThe main call-to-action button, e.g. Get a demo of HubSpot's premium software
landingPage.language, landingPage.canonicalUrl, landingPage.fetchedAtPage language, canonical URL, time fetched
landingPageStatusfetched (charged), empty (page rendered by JavaScript: URLs only, not charged), no-url, http-error, blocked, timeout, not-html, cap, budget, deadline

Political ads (political, with "Political ads only" or on election ads):

FieldWhat it is
political.spendSpend range per currency, e.g. [{ "currency": "USD", "low": 10000, "high": 15000 }]
political.impressionsLow, political.impressionsHighImpressions range
political.regions, political.fundedByElection regions (e.g. US) and who paid for the ad
political.audienceWith details: age and gender groups included / excluded, targeted locations (Google geo IDs, countries as ISO codes)
political.regulatoryIds, political.servedCountriesWith details: the advertiser's election IDs (e.g. a US EIN) and where the ad ran

Advertiser summaries (resultType: "advertisers", one row per advertiser):

FieldWhat it is
advertiserName, legalName, country, verifiedWho it is
totalAdsLow, totalAdsHighGoogle's estimate of the advertiser's ads under your filters
formats, adsSampledText / image / video mix of the listed ads
platformAds, platformsAd-count estimate per platform (Search, YouTube, Shopping, Maps, Play)
firstShown, lastShown, longestRunningDays, activeShareActivity: oldest and newest ad, longest-running ad, share of ads shown in the last 30 days
regions, domains, advertiserUrlYour region filter (else the billing country), domains, Transparency Center page

Values Google doesn't provide are null, never a made-up 0.

How ad copy extraction works

Google stores most Search ads as a picture of the ad, so other scrapers can only hand you an image link. This Actor reads the picture with OCR and uses the layout (the blue headline under the display URL, the gray description, the sitelinks below) to fill separate fields. Ads Google stores as HTML are read directly, with no OCR. Shopping ads give the product title, and video ads give the YouTube video ID.

Measured on 30 real Search ads from 10 advertisers, checked by hand against the images. On the 28 English or Latin-script ads, the headline was right on all 28 (2 with a one-letter slip), the description was fully right on 24 and usable on the other 4 (a few stray or missing words), and the display URL was right on all 28. In platform test runs, 29-30 of every 30 English Search ads came back with copy.

Other languages. Each ad is read in English first. If the text looks like German, French, Spanish, Italian or Portuguese, it is read again with that language's model, so accents come out right ("Confirmação", not "Confirmagao"). If the ad is in another script, the Actor detects it (Cyrillic, Arabic, Chinese, Japanese, Korean) and reads it with the right model. On 56 real non-English Search ads (Japanese, Korean, traditional Chinese, Arabic, Russian, Ukrainian, Portuguese, German, French, Spanish, Italian), 54 came back with copy; the other two (a Japanese ad covered by a photo and a Maps-format ad) were rejected and not charged. Of 21 of them checked by hand against the image, the headline was right on 18, off by one or two characters on 1 and incomplete on 2. Descriptions next to a photo are weaker in Chinese, Japanese and Korean. Use ocrLanguages to force languages.

You're charged for ad copy only when copy was extracted. Ads with no readable copy stay in your results at the normal price with adCopy: null and a reason in adCopyStatus.

Landing pages

Turn on Include landing pages to open the page each ad links to. Video and display ads carry their real click URL. Archived Search ads don't, so the Actor opens the display URL shown in the ad (with "Extract ad copy") and falls back to the site's home page, or the ad's domain. Each page is fetched once per run, even when many ads share it. You pay the landing page add-on only for ads that came back with landing page data.

Political ads

Turn on Political ads only to get election ads with their spend and impression ranges. Leave the search empty to list every political ad in a region (for example all US election ads), or combine it with an advertiser or domain. With Include details, each ad also gets its age, gender and location targeting and the advertiser's election ID. Google publishes political ads for the US, India, Brazil, Australia, Israel and other election regions. Google stopped running political ads in the EU in October 2025, so EU searches return little.

Advertiser summaries

Set Output to "One row per advertiser" for a cheap ad check. Each advertiser in your search gets one row with Google's ad-count estimate, format and platform mix, first and last shown dates and verification. The row is built from the ad listing (up to "Max ads per search" ads) plus a few small lookups, so hundreds of companies take minutes.

Why this Google Ads Transparency scraper?

This ActorTypical Transparency Center scrapers
Ad copy (headline, description, sitelinks) as text✅❌ image links only
Ad copy in 13 languages, detected per ad✅❌
Landing page title, H1 and call to action✅Rarely
Political ads: spend, impressions, targeting, election IDs✅Rarely
One row per advertiser (ad check)✅Some
Shopping product titles, YouTube video IDs✅Rarely
Search by domain, brand name, advertiser ID, advertiser or single-ad URL✅Usually one or two of these
Regions, variations, payer, EU targeting✅ (optional)Some
"Only new ads" monitoring✅Some
Google IP blocksAutomatic IP rotation and residential fallback, at no extra cost to youOften fails or needs your own proxies
Failed or empty runsFail loudly, partial when incompleteCan "succeed" with 0 results
Flat CSV (one row per ad) at no extra cost✅Some

Every release is tested end to end on the Apify platform before it ships: domains, advertiser IDs and URLs, brand names, format, region, platform and date filters, details, OCR, Shopping and YouTube, two-run monitoring, invalid input, and short-timeout runs.

How much does it cost to scrape the Google Ads Transparency Center?

Pay per result, with platform usage (compute and proxies) included.

Apify planPer 1,000 adsAd copy add-on, per 1,000 ads with copyLanding page add-on, per 1,000 pages
Free$2.00+$3.00+$2.00
Starter (Bronze)$1.50+$2.50+$1.50
Scale (Silver)$1.25+$2.25+$1.25
Business (Gold) and above$1.00+$2.00+$1.00

Landing pages are charged only for ads whose page came back with content (title, description or heading). An advertiser summary row costs the same as one ad.

Examples on the Free plan: a competitor's 300 latest ads = $0.60. The same 300 with ad copy (say 250 text ads read) = $1.35. A weekly "new ads only" check on 10 competitors (~200 new ads a month) = $0.40 a month.

"Include details" costs nothing extra. It only makes the run slower (one more request per ad). You pay nothing for ads that failed, and nothing for copy that couldn't be read.

How to use it

  1. Click Try for free.
  2. Enter domains (nike.com), brand names (Nike), advertiser IDs (AR…) or Transparency Center URLs.
  3. Optional: turn on Extract ad copy and Include details, and pick a region, platform, format or date range.
  4. Click Start. Download the results as JSON, CSV, Excel or HTML, or read them via API.

Input example

{
"searchQueries": ["hubspot.com", "Salesforce", "AR16735076323512287233"],
"region": "US",
"platform": "SEARCH",
"adFormat": "TEXT",
"maxResults": 200,
"extractAdCopy": true
}

Output example (shortened)

{
"advertiserName": "Hubspot, Inc.",
"advertiserId": "AR10072600183532683265",
"creativeId": "CR10567740334291288065",
"format": "TEXT",
"firstShown": "2024-04-29T20:13:08.000Z",
"lastShown": "2026-09-30T10:23:00.000Z",
"daysShown": 885,
"domain": "hubspot.com",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/13581778876229891660",
"creativeUrl": "https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR10567740334291288065?region=US",
"adCopy": {
"headline": "Sign Up for Free - Get Started Today",
"description": "A secure, reliable and powerful CRM from HubSpot. Now for free. Generate leads, close deals and",
"displayUrl": "www.hubspot.com/",
"displayName": "HubSpot",
"sitelinks": ["HubSpot Pricing HubSpot Free CRM Software"],
"ocrConfidence": 92,
"source": "ocr"
},
"adCopyStatus": "extracted",
"regions": [
{ "region": "US", "geoId": 2840, "firstShown": null, "lastShown": "2026-09-30", "impressionsLow": null, "impressionsHigh": null, "platforms": [] },
{ "region": "NL", "geoId": 2528, "firstShown": "2024-05-19", "lastShown": "2026-09-26", "impressionsLow": 0, "impressionsHigh": 1000, "platforms": ["SEARCH"] }
],
"payerName": "Hubspot, Inc."
}

Spreadsheet-ready CSV, free

Every run also saves RESULTS_FLAT.csv in the key-value store (see the Output tab). It has one row per ad, with the headline, description and sitelinks in their own columns, ready for Excel, Google Sheets or pandas.

Inputs

  • Search (searchQueries): a domain, a brand/advertiser name, an advertiser ID or a Transparency Center URL (advertiser page, single ad or domain search). The type is detected automatically. domains, advertiserIds and startUrls are also accepted.
  • Brand names are matched to Google's advertiser suggestions. The Actor keeps names that start with your text, largest advertisers first, up to Advertisers per name (default 3). For exact results, use the domain or advertiser ID.
  • Max ads per search (maxResults, default 100) applies to each domain and each advertiser. 0 = all (up to 50,000).
  • Ad copy languages (ocrLanguages): empty = detect per ad. Codes: eng, deu, fra, spa, ita, por, rus, ukr, ara, chi_sim, chi_tra, jpn, kor (or en, ja, zh-Hant...).
  • Date range preset (dateRangePreset): TODAY, YESTERDAY, LAST_7_DAYS, LAST_30_DAYS.
  • Region is a two-letter country code. Platform is one of Search, YouTube, Shopping, Maps or Play (Google filters by one platform at a time). Ad format is Text, Image or Video.

Monitoring (only new ads)

Turn on Only new ads since my last run, name the monitor (e.g. competitors-weekly) and schedule the run. Each run checks the newest maxResults ads of every input and returns only ads that no earlier run with that name returned. Google lists the most recently shown ads first, so new ads show up at the top.

{ "domains": ["competitor.com"], "maxResults": 200, "extractAdCopy": true, "deltaMode": true, "monitorName": "competitors-weekly" }

Limitations

  • OCR languages: English, German, French, Spanish, Italian, Portuguese, Russian, Ukrainian, Arabic, Chinese, Japanese and Korean. Other Latin-script languages (Turkish, Dutch, Polish...) are read with the English model and may lose accents. Greek, Hebrew, Thai and Hindi ads are returned without copy and not charged for copy. Non-English ads take 2-4x more processing time. Descriptions next to a product photo can pick up a few stray words, more so in Chinese, Japanese and Korean.
  • Landing pages of Search ads are their display URL or home page: Google's archive keeps no click URL for them. Some sites block automated visits (landingPageStatus: "blocked"); those rows are not charged for the landing page.
  • Ad copy is for Search text ads, Shopping titles and YouTube IDs. Text inside image banners and videos isn't read. Some Shopping ads are archived without a product title.
  • Date filters only reach back about 12 months. That's Google's limit: an older date range returns no ads, even for advertisers that ran ads then. Without a date filter you get all archived ads, including older ones.
  • Per-ad platforms, impressions and targeting exist only for EU/EEA ads (Google publishes them under the DSA). Elsewhere, platform shows the filter you used.
  • Speed: listing is fast (~2,000 ads in 90 s). Details add about 1 s per ad. Ad copy takes about 2.5 s per text ad at the default 1 GB memory. More memory is faster: about 1.7 s per text ad at 2 GB.
  • Brand-name search depends on Google's advertiser suggestions. If a brand advertises under a legal name ("Acme Holdings LLC"), use its domain or advertiser ID.

FAQ

Is there an official Google Ads Transparency API? No public API for ads data. This Actor returns the same data the Transparency Center website shows, as structured JSON.

Do I need a Google account or my own proxies? No. The Actor uses Apify's proxies and switches IPs automatically when Google blocks one.

Is it legal? The Transparency Center is a public archive that Google publishes for transparency. You are responsible for how you use the data.

Can I track a competitor every week? Yes. Use monitoring mode with a schedule, and connect a webhook, Slack, Google Sheets or Make/Zapier/n8n to get new ads automatically.

More scrapers from the same developer

Feedback

Missing a field, found a bug, or need a feature? Open an issue in the Issues tab and I'll take a look. If this Actor saved you time, a short review on the Store page helps other people find it.