Google Ads Transparency Scraper - Competitor Ads & Ad Copy
Pricing
from $1.00 / 1,000 ads
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
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 (
daysShownis 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):
| Field | What it is |
|---|---|
advertiserName, advertiserId, advertiserVerified | Who runs the ad |
creativeId, creativeUrl | The ad, and its page on adstransparency.google.com |
format | TEXT, IMAGE or VIDEO |
firstShown, lastShown, daysShown | When it ran and for how many days |
domain | The domain the ad points to |
imageUrl, width, height | Direct image of the ad (text ads are archived as images too) |
previewUrl, googleCreativeId, googleCustomerId, adGroupId | Google's preview script and the IDs embedded in it (group ads by account or ad group) |
platform, regionFilter | The filters the ad was found with |
searchInput, searchType, scrapedAt | Which of your inputs found it |
With "Extract ad copy":
| Field | What it is |
|---|---|
adCopy.headline | e.g. HubSpot - customer service management - View Pricing |
adCopy.description | The description text under the headline |
adCopy.displayUrl, adCopy.displayName | www.hubspot.com/, HubSpot |
adCopy.sitelinks | Sitelinks, callouts and other extensions, in order |
adCopy.rawText, adCopy.ocrConfidence, adCopy.source | All text read, a 0-100 confidence, and how it was read (ocr, html, shopping) |
adCopy.language | en, de, fr, es, it, pt, ru, uk, ar, zh-Hans, zh-Hant, ja, ko (null when unsure) |
adCopyStatus | extracted, not-a-text-ad, low-confidence, unreadable, budget, deadline, fetch-failed |
youtubeVideoId, youtubeUrl | The YouTube video behind a video ad |
With "Include details":
| Field | What it is |
|---|---|
regions | Every country the ad ran in, with its first and last shown date (EU/EEA: impression ranges and platforms) |
variations, variationCount | All A/B variations of the creative (image or preview links) |
payerName | Who paid for the ad (can differ from the advertiser, e.g. agencies) |
platforms, targeting | EU/EEA ads only: platforms served and which targeting types were used (demographics, geography, contextual…) |
With "Include landing pages":
| Field | What it is |
|---|---|
landingPage.url, landingPage.urlSource | The 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.statusCode | Where the page ended up after redirects |
landingPage.title, landingPage.metaDescription, landingPage.h1 | What the page says |
landingPage.primaryCta | The main call-to-action button, e.g. Get a demo of HubSpot's premium software |
landingPage.language, landingPage.canonicalUrl, landingPage.fetchedAt | Page language, canonical URL, time fetched |
landingPageStatus | fetched (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):
| Field | What it is |
|---|---|
political.spend | Spend range per currency, e.g. [{ "currency": "USD", "low": 10000, "high": 15000 }] |
political.impressionsLow, political.impressionsHigh | Impressions range |
political.regions, political.fundedBy | Election regions (e.g. US) and who paid for the ad |
political.audience | With details: age and gender groups included / excluded, targeted locations (Google geo IDs, countries as ISO codes) |
political.regulatoryIds, political.servedCountries | With details: the advertiser's election IDs (e.g. a US EIN) and where the ad ran |
Advertiser summaries (resultType: "advertisers", one row per advertiser):
| Field | What it is |
|---|---|
advertiserName, legalName, country, verified | Who it is |
totalAdsLow, totalAdsHigh | Google's estimate of the advertiser's ads under your filters |
formats, adsSampled | Text / image / video mix of the listed ads |
platformAds, platforms | Ad-count estimate per platform (Search, YouTube, Shopping, Maps, Play) |
firstShown, lastShown, longestRunningDays, activeShare | Activity: oldest and newest ad, longest-running ad, share of ads shown in the last 30 days |
regions, domains, advertiserUrl | Your 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 Actor | Typical 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 blocks | Automatic IP rotation and residential fallback, at no extra cost to you | Often fails or needs your own proxies |
| Failed or empty runs | Fail loudly, partial when incomplete | Can "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 plan | Per 1,000 ads | Ad copy add-on, per 1,000 ads with copy | Landing 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
- Click Try for free.
- Enter domains (
nike.com), brand names (Nike), advertiser IDs (AR…) or Transparency Center URLs. - Optional: turn on Extract ad copy and Include details, and pick a region, platform, format or date range.
- 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,advertiserIdsandstartUrlsare 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(oren,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,
platformshows 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
- Google Trends API & Scraper: interest over time, regions, related queries and Trending Now, a pytrends alternative
- YouTube Scraper: videos, channels, Shorts, comments, subtitles and community posts without the API quota
- Threads Scraper: posts, profiles, replies and keyword search on Meta Threads, no login
- Bilibili Scraper: videos, creators, full comment threads and danmaku from B站, no login
- Google Hotels Scraper: hotel prices from every booking site across dates, room rates and reviews
- Threads Account Finder: Threads accounts by keyword with followers, bio links and the contacts they list
- Threads Hashtag & Keyword Monitor: only the new posts for your keywords and #hashtags, for scheduled runs
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.