Google Ads Transparency Center API - Competitor Ads
Pricing
from $1.50 / 1,000 ad saveds
Google Ads Transparency Center API - Competitor Ads
Google Ads Transparency Center API and ad library: advertiser ads by domain with full creatives, formats, regions and dates. Track new or stopped ads.
Pricing
from $1.50 / 1,000 ad saveds
Rating
0.0
(0)
Developer
Christian Barbosa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Share
Scrape the Google Ads Transparency Center for any advertiser, brand or website and get full ad creatives, not just metadata: headlines, descriptions, calls to action, image URLs, YouTube video URLs and landing pages, plus first and last shown dates, regions, platforms and EU impression ranges. Run it once for competitor ad research, or schedule it in monitoring mode to receive only the ads that are new or stopped since the last run. You pay only for rows saved. Empty results, errors and duplicates are free.
This Actor works as a Google Ads Transparency API: call it from your code, a schedule, Google Sheets, Zapier, Make, n8n or an AI agent through MCP.
What this Google Ads Transparency scraper does
- Search by advertiser name, domain or advertiser ID. A domain such as
nike.comreturns every ad that points to that website, from all advertiser accounts. A name such asNikeis matched against the Transparency Center advertiser search. - Full creatives for every format. Text, image and video ads. With Full creative on, the Actor reads every variation of each ad and returns all headlines, descriptions, calls to action, image URLs with their size, YouTube video URLs and landing pages.
- Monitoring mode. Keeps a snapshot of each advertiser in a named key-value store and returns only ads that are
NEW,STOPPEDorRESUMEDsince the previous run. Unchanged ads cost nothing. - Filters. Country, date range, ad format (text, image, video) and platform (Google Search, YouTube, Shopping, Maps, Play).
- Clean, normalized data. Dates in ISO 8601 (UTC), country codes in ISO 3166, a validated
formatvalue and anisActiveflag on every row. - Reliable by design. No browser. The Actor calls the same endpoints the Transparency Center website uses, retries with backoff and new IP addresses, and switches from datacenter to residential proxies automatically when Google rate-limits.
- Batches of domains. Enter hundreds of domains or advertiser IDs in one run. Up to three inputs are processed in parallel within the request limit you set.
Use cases
- Competitor ad monitoring. Schedule a daily run for your top competitors and receive a webhook or a Google Sheets row only when they launch or stop an ad.
- Creative research and swipe files. Collect every headline, description, image and video a brand runs, with first and last shown dates to see which creatives last longest.
- Agency pitches and market analysis. Show a prospect what their competitors run, in which countries and on which platforms.
- Brand protection. Find every ad that points to your domain, including ads from accounts you do not control.
- Regional campaign tracking. Filter by country to see local campaigns and, in the EU, impression ranges per platform.
- Academic and policy research on online advertising.
How to use it
- Enter one or more advertiser names or domains (for example
Nikeornike.com), or advertiser IDs (for exampleAR11877675844556029953, or the advertiser page URL). - Optional filters: region (
US,GB,CO,ES,BR), Shown from and Shown until, ad format and platform. - Set Max ads per advertiser or domain. The limit is applied in code, so you never pay for more ads than this.
- Choose the level of detail:
- Fetch ad details (on by default): regions, dates per region, ad text, media and landing page.
- Full creative (premium): every variation of each ad, with all text, images and videos.
- Optional: turn on Only new or stopped ads since the last run to use monitoring mode.
- Run the Actor, or schedule it.
Input examples
One-off competitor research with full creatives:
{"searchQueries": ["nike.com", "adidas.com"],"region": "US","maxAdsPerAdvertiser": 100,"fullCreative": true}
Daily monitoring of three competitors (schedule this input):
{"searchQueries": ["rappi.com"],"advertiserIds": ["AR11877675844556029953"],"maxAdsPerAdvertiser": 200,"monitorChanges": true,"monitorStoreName": "competitors-co","stoppedAfterDays": 3}
Monitoring mode: only new or stopped ads
Monitoring mode turns the Actor into a competitor ad tracker.
- First run (baseline). The current ads of each advertiser are saved and returned with
changeType: "NEW"andmonitorBaseline: true. - Later runs. Only changes are returned:
NEW: an ad that was not in the previous snapshot.STOPPED: an ad that was active and whose last shown date is now older than Stopped after (days) (default 3).RESUMED: an ad that had stopped and is running again.
- Snapshot storage. One record per advertiser or domain, and per region, format and platform filter, in the named key-value store set in Monitoring store name (default
google-ads-monitor). Named stores are kept between runs in your Apify account. Use a different store name for each independent setup. - What is checked. In this mode, Max ads per advertiser is how many of the most recent ads are checked on each run. Known active ads that fall outside that window are looked up one by one (up to 100 per advertiser and run) to confirm whether they stopped.
- Cost safety. The snapshot only records rows that were actually saved. If your maximum cost per run stops the Actor early, the remaining changes are returned on the next run, not lost.
- Statuses. An input without changes ends as
NO_CHANGESand is not charged.
Advertiser summary: one row per advertiser
Turn on Advertiser summary to get one row per advertiser instead of one row per ad. It is useful for comparing many competitors at a glance before pulling their full ad lists.
- Fields.
advertiserId,advertiserName,adsReportedByGoogle(total shown by the Transparency Center for an advertiser ID; it may be rounded),adsScanned,scanComplete,activeAds,textAds,imageAds,videoAds,formats,regionsandplatforms(most frequent first),regionsCount,adsWithDetails,firstSeen,lastSeen,advertiserUrl, plusrecordType: "advertiserSummary",input,filters,sourceUrlandscrapedAt. - What is scanned. Max ads per advertiser sets how many of the most recent ads are read. Regions and platforms come from the ads opened with Fetch ad details on (up to 100 per advertiser). Formats, dates and active ads come from every ad scanned.
- Domains. A domain can show ads from several advertisers (resellers, regional branches, agencies); each one gets its own row.
- Limits. It cannot be combined with Full creative or monitoring mode. Region, format, platform and date filters apply.
- Cost. Summary rows use the
advertiser-summaryevent; noadevent is charged in this mode. See the Pricing section.
Output
Each row is one unique ad. The output tab has four views: Ads overview, Ad content, Full creative and Monitoring changes. Download as JSON, CSV, Excel or HTML, or read it through the API.
{"advertiserId": "AR11877675844556029953","advertiserName": "RAPPI INC","creativeId": "CR09363344213577564161","format": "VIDEO","firstShown": "2024-06-12T04:53:02.000Z","lastShown": "2026-10-31T19:31:48.000Z","daysShown": 873,"isActive": true,"regions": ["MX"],"headline": "Vender en Rappi sí funciona","channelName": "Rappi Restaurantes","videoUrl": "https://www.youtube.com/watch?v=AKlF58rtl3c","landingUrl": "https://merchants.rappi.com/es-mx/restaurants","landingDomain": "merchants.rappi.com","variationsCount": 3,"variationsRead": 3,"allHeadlines": ["Vender en Rappi sí funciona", "Afíliate hoy a Rappi"],"allVideoUrls": ["https://www.youtube.com/watch?v=AKlF58rtl3c","https://www.youtube.com/watch?v=6JgAgbc1aWI"],"creativeAssetsCount": 4,"changeType": null,"previewUrl": "https://adstransparency.google.com/advertiser/AR11877675844556029953/creative/CR09363344213577564161?region=anywhere","input": "rappi.com","scrapedAt": "2026-11-01T20:52:31.035Z"}
Field dictionary
| Field | Type | Meaning | When it is null or empty |
|---|---|---|---|
advertiserId, advertiserName | string | Transparency Center advertiser ID and verified name. | advertiserName when Google does not report it |
creativeId | string | Unique ad ID. Rows are deduplicated by this ID. | Never |
format | string | TEXT, IMAGE or VIDEO. | Never |
firstShown, lastShown | ISO 8601 | First and last time the ad was shown (UTC). | When Google does not report the date |
daysShown | number | Days the ad was shown. | When Google does not report it |
isActive | boolean | true when lastShown is within Stopped after (days). | Never |
regions | array | Country codes where the ad was shown. | Details off and no region filter |
regionStats | array | Per region: code, name, first and last shown date, impression range and platforms. | Details off |
platforms | array | SEARCH, YOUTUBE, SHOPPING, MAPS, PLAY. | Outside the EU without a platform filter |
impressionsMin, impressionsMax | number | Total impression range (EU only). | Outside the EU |
headline, longHeadline, description, callToAction | string | Ad text. | Ads Google stores only as an image |
adText | string | Visible text of ads rendered as HTML, such as Search, Maps and Shopping ads. | Structured or image-only ads |
appName, channelName | string | App name (app ads) or YouTube channel (video ads). | Not applicable |
imageUrl, imageUrls | string, array | Ad image or the rendered snapshot of a text ad. | Video and HTML ads without an image |
videoId, videoUrl, videoThumbnailUrl | string | YouTube video of the ad. | Non-video ads |
landingUrl, landingDomain | string | Page the ad links to and its domain. | When Google does not include it |
variationsCount | number | Variations shown in the Transparency Center. | Details off |
variations | array | Full creative only: one entry per variation with text, image URL and size, video URL and landing page. | Full creative off |
allHeadlines, allDescriptions, allCallsToAction | array | Full creative only: every distinct text asset. | Full creative off |
allImageUrls, allVideoUrls, allLandingUrls | array | Full creative only: every distinct image, video and landing page. | Full creative off |
creativeAssetsCount, variationsRead | number | Full creative only: assets found and variations read. | Full creative off |
changeType | string | Monitoring only: NEW, STOPPED or RESUMED. | Monitoring off |
monitorBaseline | boolean | Monitoring only: true on the first run of an advertiser. | Monitoring off |
detailsFetched | boolean | true when the ad detail was read. | Never |
previewUrl | string | The ad in the Transparency Center, to check it yourself. | Never |
input, filters, sourceUrl | mixed | The input and filters that found the ad, and the matching Transparency Center page. | Never |
scrapedAt | ISO 8601 | When the data was collected (UTC). | Never |
Pricing and cost calculator
This Actor uses pay-per-event pricing. You pay only for the events below; inputs with no ads, failed inputs, unchanged ads in monitoring mode and duplicate ads (the same ad found through two inputs) are never charged. Your maximum cost per run is respected: the Actor checks the remaining budget before saving each row and stops as soon as it is reached.
| Event | Price | When it is charged |
|---|---|---|
ad | USD 0.0015 | Each unique ad saved, including NEW rows in monitoring mode. Ad details are included. |
ad-creative-full | USD 0.003 | Premium, only with Full creative on: each ad saved that has at least one creative asset (text, image or video). |
ad-change-detected | USD 0.002 | Premium, monitoring mode only: each STOPPED or RESUMED row. |
advertiser-summary | USD 0.01 | Advertiser summary mode only: each advertiser row. |
| Scenario | Rows | Approximate cost |
|---|---|---|
| Weekly check of 5 competitors, 50 ads each | 250 ads | USD 0.38 |
| The same check with Full creative | 250 ads | USD 1.13 |
| 20 advertisers, 100 ads each | 2,000 ads | USD 3.00 |
| Full history of one large advertiser | 10,000 ads | USD 15.00 |
| Daily monitoring of 10 competitors: baseline of 100 ads each, then 30 new and 10 stopped ads per day | 1,000 ads once, then 40 rows a day | USD 1.50 once, then about USD 0.07 a day |
Formula: ads × 0.0015 + ads with assets × 0.003 (Full creative) + stopped or resumed rows × 0.002 (monitoring).
Integrations: schedules, API, webhooks, Google Sheets, Zapier, Make and AI agents
-
Schedules. In Apify Console, open Schedules, create a schedule (for example daily at 07:00), and add this Actor with your saved input. Combine it with monitoring mode to track competitors automatically.
-
API. Run the Actor and get the rows in one call:
curl -X POST "https://api.apify.com/v2/acts/ocius-data~google-ads-transparency-reliable/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["nike.com"],"maxAdsPerAdvertiser":50}'Python, with the official
apify-clientpackage:from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ocius-data/google-ads-transparency-reliable").call(run_input={"searchQueries": ["nike.com"], "monitorChanges": True})for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["changeType"], ad["creativeId"], ad["headline"]) -
Webhooks. In the Actor's Integrations tab, add a webhook for the event
ACTOR.RUN.SUCCEEDED. Your endpoint receives the run, and the rows are at/v2/datasets/{defaultDatasetId}/items. In monitoring mode every row is a change, so the webhook works as a "competitor launched or stopped an ad" alert. -
Google Sheets. Use the Google Sheets integration in the Integrations tab to append the rows of each run to a sheet.
-
Zapier, Make and n8n. Use the official Apify app in each tool: trigger on "Actor run finished" and read the dataset items, or start a run from your own workflow.
-
MCP and AI agents. The Actor runs with limited permissions and a flat input, so it can be used through the Apify MCP server (
mcp.apify.com) by Claude, ChatGPT, Cursor and other MCP clients. Ask the agent to runocius-data/google-ads-transparency-reliablewith a domain and it returns structured ads.
Related Actor from the same developer: Google Trends Scraper, to compare the search demand behind the brands you monitor.
Statuses and errors
Every input ends with one status in the RUN_SUMMARY record (Storage, key-value store), together with ads requested, available and delivered, and the reason when fewer were delivered.
| Status | Meaning | Charged | What to do |
|---|---|---|---|
OK | Ads returned. reason explains any shortfall. | Rows saved | Nothing |
NO_RESULTS | No matching advertiser, or no ads for these filters. | No | Check the name or domain, or widen the filters. |
NO_CHANGES | Monitoring: nothing new, stopped or resumed. | No | Nothing |
PARTIAL | Some ads saved, then Google kept rate-limiting or failed. | Rows saved | Run again later. |
BLOCKED | Google kept rate-limiting after all retries and proxy changes. | No | Run again later or use residential proxies. |
SOURCE_ERROR | The Transparency Center returned an error. | No | Run again; if it persists, open an issue. |
INVALID_INPUT | The advertiser ID is not valid. | No | Use an ID such as AR11877675844556029953. |
NOT_PROCESSED | The run stopped first: cost limit reached or five inputs failed in a row. | No | Raise the cost limit or run again. |
Invalid filters stop the run within seconds with a message that explains how to fix them. If more than 20% of inputs fail, the run is marked as failed so you notice.
Known limits
- Google stores many text ads only as a rendered image. For those you get the image snapshot and no text; Full creative still returns every snapshot with its size.
- Full creative reads up to 10 preview scripts per ad. Ads with more variations report the total in
variationsCount. - Platforms and impression ranges are disclosed by Google only for EU countries. Google applies the platform filter only to ads shown since 4 September 2023.
- The ad count Google reports for large advertisers is approximate.
- Monitoring compares runs with the same region, format and platform filters. Changing those filters starts a new baseline; date filters do not.
STOPPEDandRESUMEDuse the global last shown date Google reports for the ad, also when a region filter is set. An ad that stops in one country but keeps running elsewhere stays active.- Google rate-limits by IP address. Very large runs take longer because the Actor paces requests to avoid blocks.
FAQ
Is it legal to scrape the Google Ads Transparency Center? The Actor collects ads that Google publishes so anyone can review them. Advertisers are businesses and no personal data is collected. Check the rules that apply to your use case.
What is the difference between Fetch ad details and Full creative? Details add regions, dates per region, the main text, media and landing page, at the base price. Full creative reads every variation and returns all assets, for an extra premium event.
How do I get only new competitor ads every day? Turn on monitoring mode and create a daily schedule. The first run is the baseline; after that you receive only changes.
Can I monitor many advertisers? Yes. Each advertiser or domain has its own snapshot record. Use one store name per project.
Why is the ad text empty for some ads? Google stores those ads only as an image. The image URL is included.
Why do counts differ from the website? The website shows rounded counts. Use the same region, dates, format and platform to compare.
Do you offer volume pricing? For more than one million rows per month, open an issue on the Actor page to agree on a volume price.
Related Actors from ocius-data
Built to the same standard: a status for every input in RUN_SUMMARY, actionable error messages and list-based inputs, so they chain well in one workflow:
- Bulk Keyword Search Volume & CPC - Keyword Planner: absolute monthly search volume, cost per click (CPC) and competition from Google Ads data, no Ads account needed.
- Bulk Domain Authority & Backlinks Checker API: domain authority (0 to 100), backlinks and referring domains for up to 50,000 domains.
- Google Trends API: Interest, Related & Trending Now: relative interest over time and by region, related queries and Trending Now.
Changelog
- November 2026 Advertiser summary mode (off by default): one row per advertiser with ads scanned, active ads, ads per format, regions, platforms and first and last seen dates. Event
advertiser-summary, USD 0.01 per advertiser. - 0.2 (November 2026) Full creative mode with every variation, image size and all video URLs (premium event
ad-creative-full). Monitoring mode withNEW,STOPPEDandRESUMEDrows, snapshots in a named key-value store and lookups of ads that left the list (premium eventad-change-detected).isActivefield. Video IDs and landing pages found in more ad types. Budget checked before each row. Up to three inputs in parallel. - 0.1 (November 2026) First version: search by name, domain or advertiser ID; region, date, format and platform filters; ad details; pay per ad; per-input statuses and run summary.
Support
Open an issue on the Actor page. Issues are reviewed every day and fixes are released quickly.