Google Ads Transparency Scraper & Alerts | $1.50/1K
DeprecatedPricing
$1.50 / 1,000 ad returneds
Google Ads Transparency Scraper & Alerts | $1.50/1K
DeprecatedScrape competitors' Google ads from the Ads Transparency Center, Google's public ad library: ad copy of text ads as headline and description (OCR), images, YouTube videos, regions, platforms and impressions. Monitor advertisers and get Slack, Discord, webhook or e-mail alerts for new ads.
Pricing
$1.50 / 1,000 ad returneds
Rating
0.0
(0)
Developer
Layerwise Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
What does Google Ads Transparency Scraper & New Ad Alerts do?
It pulls your competitors' Google ads out of the Google Ads Transparency Center, Google's public ad library, as clean, structured data, and it can watch advertisers for you and send an alert when they launch a new ad: to Slack, Discord, any webhook (Make, Zapier, n8n) or by e-mail.
Give it a website domain (nike.com), an advertiser name (Zalando SE), an advertiser ID or a Transparency Center URL. For every ad you get:
- The words of text ads: headline, description and display URL. The Transparency Center shows search ads only as pictures; this Actor reads them with OCR, so you can search, compare and analyse the copy.
- Images and videos: image URL of image and shopping ads (with the product title), YouTube link, title and channel of video ads.
- Where and how much: countries with the first and last day shown, impressions per country and per platform (Search, YouTube, Shopping, Maps, Play), topic, number of variations.
- When: first shown, last shown, days running, plus a direct link to the ad in the Transparency Center.
At a glance
| This Actor | Other Ads Transparency scrapers | |
|---|---|---|
| New ads sent straight to Slack, Discord, a webhook or e-mail, with the ads in the message | ✅ built in | ❌ only a dataset; alerts need a separate integration |
| Alert missed because Slack or your server was down | ✅ sent again with the next run | ❌ no second try |
Text ads as headline, description and displayUrl | ✅ included | often missing or a paid add-on |
| Regions, impressions per country and platform, ad text: total price | ✅ $1.50 per 1,000 ads | $2 to $7 per 1,000 ads |
| Start fee | ✅ none | often $0.001 to $0.005 per run |
| Start from a domain, a company name, an advertiser ID or a link | ✅ all four | usually some of them |
Why use it?
- Alerts are built in. Other scrapers can return only new ads, but getting told about them means wiring up a separate integration. Here you switch on Only new ads, add a Slack, Discord, webhook or e-mail target, and schedule the Actor. Each alert lists the new ads with their headline and a link, and runs that find nothing new cost nothing.
- Ad copy as text, not as a picture. Google shows search ads only as images. The Actor reads them with OCR in the language of the region and uses the link colour to tell the headline from the description, so you get
headline,descriptionanddisplayUrlas separate fields you can search and compare. - Start from what you know. A domain, a company name, an advertiser ID or a link all work. A name finds every account of that company (legal forms like GmbH, Inc. or S.p.A. do not matter), so you do not have to look up IDs first.
- More per ad. Impressions per country and platform, topic, number of variations, product titles of shopping ads, and title and channel of YouTube ads.
- Runs that finish. Google blocks IPs that send many requests. When that happens, the Actor moves the affected requests to residential proxy IPs by itself, gives each retry a fresh IP, and goes back to the direct connection once the block has passed. You do not need to configure a proxy, and the proxy traffic is included in the price.
- Every Apify feature included: scheduling, API, webhooks, exports to JSON, CSV, Excel, Google Sheets, and 1,500+ integrations.
Who uses it
- Marketing and PPC teams tracking which messages, offers and creatives competitors test, and in which countries.
- Agencies preparing pitches and monthly competitor reports.
- Brand protection teams spotting ads that use their brand or domain.
- Sales and lead generation: find companies that actively advertise in a market or on YouTube.
- Researchers and journalists analysing advertising at scale.
How to use it
- Enter one or more advertisers: a domain such as
zalando.de, a name such asZalando SE, an advertiser ID such asAR17568630107302526977, or a URL copied from the Transparency Center. - Pick a region (country), and optionally a platform, an ad format and a date range.
- Set Max ads per advertiser and click Start.
- Download the ads from the Output tab, or read them through the API.
To monitor competitors: switch on Only new ads, add a Slack, Discord, webhook or e-mail target, save the input as a task, and give the task a schedule (for example every morning). The first run records the ads that already exist and returns nothing. Every later run returns only ads that were not there before and sends one alert with all of them.
How much does it cost to scrape Google Ads Transparency?
Pay per event: $1.50 per 1,000 ads returned ($0.0015 per ad). Apify platform usage and proxies are included, there is no start fee, and monitoring runs that find no new ads are free. An ad whose details or preview Google's servers fail to deliver comes free of charge.
| What you do | Price |
|---|---|
| 100 ads of one competitor with text, images, regions and impressions | $0.15 |
| 1,000 ads | $1.50 |
| Daily monitoring of 10 competitors that launch 5 new ads a week each | about $0.32 per month |
Free Apify plan users get $5 of credit every month, which is more than 3,000 ads.
Input
| Field | What it does |
|---|---|
advertisers | Domains, advertiser names, advertiser IDs or Transparency Center URLs. A domain returns every advertiser that promotes it. A name matches all accounts with that name (legal forms such as GmbH or Inc. do not matter); if none matches, the log lists similar advertisers. Ads found through several entries are returned once. |
region | Two-letter country code (DE, US, RS, …) or anywhere. |
platform | all, search, youtube, shopping, maps or play. |
adFormat | all, text, image or video. |
shownInLastDays, dateFrom, dateTo | Only ads shown in this period. |
maxAdsPerAdvertiser | Ads returned per advertiser, most recently shown first. Monitoring checks up to 5,000 per run and returns at most this many new ones; the rest follow with the next run. |
includeDetails | Regions, impressions, platforms, topic and variations (one extra request per ad). |
includeAdContent | Text of text ads (OCR), product titles and images, video links and titles. |
onlyNewAds, monitorName | Monitoring: return only ads not seen in an earlier run. |
slackWebhookUrl, discordWebhookUrl, webhookUrl, notifyEmail | Where to send alerts about new ads. E-mail alerts go to the e-mail address of your Apify account. |
ocrLanguages | Language for reading text ads, e.g. deu or fra. Defaults to the language of the region. |
proxyConfiguration | Leave it off: the Actor connects directly and moves to residential Apify Proxy by itself while Google blocks it. A proxy set here is used first, with residential Apify Proxy and the run's own IP as backup. |
Example:
{"advertisers": ["zalando.de", "Zalando Marketing Services GmbH"],"region": "DE","maxAdsPerAdvertiser": 100,"onlyNewAds": true,"slackWebhookUrl": "https://hooks.slack.com/services/…"}
Output
One item per ad. A text ad:
{"advertiserId": "AR15589870916631265281","advertiserName": "Zalando SE","creativeId": "CR03015864204902006785","format": "text","adUrl": "https://adstransparency.google.com/advertiser/AR15589870916631265281/creative/CR03015864204902006785?region=DE","firstShown": "2024-09-11T22:22:05Z","lastShown": "2026-10-21T18:51:44Z","daysShown": 381,"headline": "Winterstiefel & Schneestiefel online bei ZALANDO","description": "Warme Winterstiefel, Snowboots und Schneestiefel halten dich auch bei Minusgraden warm | Glattleder Veloursleder Lederimitat gefüttert","displayUrl": "www.zalando.de/","imageUrl": "https://tpc.googlesyndication.com/archive/simgad/11815649257317532177","variationCount": 3,"platforms": ["search", "youtube"],"impressionsMin": 5000,"impressionsMax": 6000,"regionStats": [{"region": "DE","regionName": "Germany","firstShown": "2024-09-11","lastShown": "2026-10-21","impressionsMin": 5000,"impressionsMax": 6000,"platforms": [{ "platform": "search", "impressionsMin": 5000, "impressionsMax": 6000 },{ "platform": "youtube", "impressionsMin": 0, "impressionsMax": 1000 }]}],"query": "zalando.de","region": "DE"}
A video ad has videoUrl, videoThumbnailUrl, videoTitle and videoChannel; an image or shopping ad has imageUrl, imageUrls and the product title in adText. In monitoring mode every item also has isNew: true.
The webhook alert is a JSON POST with monitor, newAdsCount, runUrl and newAds (the main fields of each new ad; the full items are in the run's dataset). More than 100 new ads are sent in several posts, numbered by part and parts.
Use it through the API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("layerwiselabs/google-ads-transparency-monitor").call(run_input={"advertisers": ["nike.com"],"region": "US","platform": "youtube","maxAdsPerAdvertiser": 50,})for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["advertiserName"], ad["videoTitle"], ad["videoUrl"])
AI agents can call the Actor through the Apify MCP server as a tool, for example "show me the ads Zalando launched in Germany this week".
FAQ
How does the new-ad alert work?
With Only new ads on, the first run records all ads the advertiser has (up to 5,000 per advertiser, whatever the date filters say), separately per task or monitor name, region, platform and format. Every later run checks the most recently shown ads, back to a week before the previous check and up to 5,000 (checking is free), and returns, and alerts about, those that were not recorded before. Old ads that start running again are not reported as new. An advertiser given by name stays tied to the accounts found on the first run. If an alert cannot be delivered, for example because Slack is down, it is sent with the next run.
If a run of the same monitor is still going when the next one starts, the new run stops right away, so no ad is reported twice. Running several monitors with the same advertisers through the API? Give each one its own Monitor name.
Why does the first monitoring run return no ads?
It records the advertiser's current ads as the starting point, so that you are not alerted about hundreds of old ads. You are not charged for it.
How exact is the text of text ads?
The Transparency Center only provides text ads as images, so the Actor reads them with OCR (Tesseract, in the language of the selected region). Headline, description and display URL come out correctly in the vast majority of cases; rare characters or unusual layouts can be misread. imageUrl always links the original image.
Can I get the landing page URL?
Google does not publish the click URL of most ads in the Transparency Center. When an ad preview contains one, it is in landingUrl. displayUrl shows the domain the ad displays.
Why are impressions missing for some ads?
Google publishes impression ranges only for some ads and regions. Where Google gives none, the fields are null.
The run says Google blocked requests. What should I do?
Usually nothing: the Actor moves blocked requests to residential proxy IPs and retries them from new IPs. If a request still fails after all retries, the log says which advertiser or ad is affected, and a new run picks it up.
Is it legal to scrape the Google Ads Transparency Center?
The Transparency Center is public: Google publishes these ads so that anyone can see them. The Actor collects only this public information about advertisers and their ads, no personal data of users. Check that your use complies with the laws that apply to you and with Google's terms.
Something does not work
Open an issue in the Issues tab with the input you used, and we will look into it.