Google Ads Transparency Center Scraper & Tracker avatar

Google Ads Transparency Center Scraper & Tracker

Pricing

from $0.34 / 1,000 baseline ad results

Go to Apify Store
Google Ads Transparency Center Scraper & Tracker

Google Ads Transparency Center Scraper & Tracker

Scrape Google Ads Transparency Center creatives, advertisers and dates. Track competitor Google ads and detect new, updated and safely ended ads.

Pricing

from $0.34 / 1,000 baseline ad results

Rating

0.0

(0)

Developer

Luka

Luka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Use this Google Ads Transparency scraper to collect current ads from the Google Ads Transparency Center, or reuse the same search as a change feed for competitor monitoring. For a one-time Google Ads scraper run, enter a brand, domain, advertiser ID, or Transparency Center URL and receive normalized advertiser identity, creative format, dates, media and copy when Google exposes them, destination candidates, and explicit coverage status.

For the easiest first run, choose Baseline, keep the prefilled nike.com target and 15-ad limit, then click Start.

Google Ads Transparency output with advertiser rows, formats, dates, and coverage

🚀 Start in 60 seconds

  1. Keep Baseline — current ads.
  2. Enter a brand, domain, AR… advertiser ID, or Transparency Center URL.
  3. Keep 15 ads per target for a small first test.
  4. Click Start and open the Dataset when the run finishes.
{
"productLevel": "BASELINE",
"searchTargets": ["nike.com"],
"region": "ANYWHERE",
"adFormat": "ALL",
"maxAdsPerTarget": 15
}

One run accepts at most 25 targets. The Console starts with a buyer-friendly 15-result prefill. Increase the result limit only when you need a larger export.

🎯 Choose the right workflow

WorkflowUse it whenFirst runLater run with the same scopeResult billing
BaselineYou need the ads visible nowReturns current matching adsReturns a fresh current snapshotOne baseline_ad_result per delivered row
ChangesYou want alerts or repeat monitoringCreates state and returns current ads as NEWReturns only NEW, UPDATED, and safely proven ENDED adsOne detected_change per delivered change

You do not need to run Baseline before Changes. The first successful Changes run creates its own comparison state and returns the current ads as billable NEW rows.

On later runs, unchanged observations are not delivered and do not create a result charge. If nothing changed, the Dataset can be empty; the run-start event still applies.

For meaningful comparisons, repeat the same:

  • brand, domain, advertiser ID, or Transparency Center URL;
  • region and adFormat filters;
  • maxAdsPerTarget value.

Run the same monitoring scope sequentially. Changing any of these values creates a different comparison, and overlapping runs of the same scope should be avoided.

📦 What you get

Each row is a normalized Google ad record. Optional fields appear only when the source exposes them for that creative format.

Field groupExamplesAvailability
Ad identitycreativeId, advertiserId, advertiserName, sourceAdUrlCore identity fields
Format and datesformat, firstShownAt, lastShownAtWhen published by Google
Creative mediaimageUrls, primaryMediaUrl, previewUrlDepends on creative format
Structured copyheadlines, descriptionsOnly when Google exposes machine-readable copy
Destination evidencedisplayDomain, landingPageCandidateUrlCandidate only; not a verified final landing page
Search contextregion, searchTarget, coverageStatusExplains the query and collection boundary
MonitoringchangeStatus, changedFields, observedAtChanges workflow

Representative Baseline row:

{
"creativeId": "CR02992220324038180865",
"advertiserId": "AR18378488041124659201",
"advertiserName": "Nike Retail BV",
"displayDomain": "nike.com",
"format": "IMAGE",
"headlines": ["Nike Official"],
"imageUrls": ["https://tpc.googlesyndication.com/archive/example"],
"region": "ANYWHERE",
"searchTarget": "nike.com",
"coverageStatus": "COMPLETE",
"sourceAdUrl": "https://adstransparency.google.com/advertiser/AR…/creative/CR…",
"observedAt": "2026-08-20T21:16:14.254Z"
}

The Dataset includes focused views for quick review:

  • Buyer overview — the most useful identity, creative, date, destination, change, and coverage fields;
  • Detected changes — monitoring events only;
  • Creative research — media, copy, dates, and destination candidates;
  • All buyer fields — complete normalized export for API, CSV, or downstream analysis.

Google does not expose structured copy, a direct media URL, or a destination candidate for every ad format. Missing values remain absent instead of being guessed. landingPageCandidateUrl is the destination observed in the creative data; it is not presented as a verified final advertiser landing page.

🎛️ Input guide

InputWhat it controlsPractical advice
productLevelCurrent snapshot or actionable repeat changesStart with Baseline; use Changes for scheduled monitoring
searchTargetsBrands, domains, AR… IDs, and Transparency URLsOne target per line, maximum 25
maxAdsPerTargetResult ceiling for each targetConsole prefill is 15; reaching it produces CAPPED coverage
regionWhere ads were shownUse ANYWHERE for the broadest view; keep it stable in Changes
adFormatAny, text, image, or video adsLeave ALL unless format is part of your question
maxDeliveryEventsWhole-run billed-row guardApplies across all targets combined and stops delivery at the limit
timeoutSecondsWhole-run time limitStops safely with PARTIAL coverage if the selected time limit is reached

For a low-cost first run, keep maxAdsPerTarget at 15. Increase it for representative or large exports.

💰 Pricing

This Actor uses Pay per event. The current active price is:

Baseline total = $0.01 run start + delivered rows × baseline result price
Changes total = $0.01 run start + delivered NEW/UPDATED/ENDED rows × detected-change price
Apify planBaseline per 1,000 rowsDetected changes per 1,000 rows
Free$0.400$0.800
Bronze$0.380$0.760
Silver$0.360$0.720
Gold, Platinum, Diamond$0.340$0.680

Examples on the Free plan:

Example runCalculationEvent charge
15 Baseline rows$0.01 + 15 × $0.0004$0.0160
100 Baseline rows$0.01 + 100 × $0.0004$0.0500
First Changes run with 100 current ads$0.01 + 100 × $0.0008$0.0900
Repeat Changes run with no changes$0.01 + 0 result rows$0.0100
1,000 detected changes across multiple targets$0.01 + 1,000 × $0.0008$0.8100

Coverage summaries, unchanged observations, warnings, and state operations are not separate result events. Copy and media fields do not add a separate enrichment fee.

The examples show event charges at the listed rates. Your Apify account still applies its own platform billing rules shown at run time.

✅ Coverage you can trust

The Actor reports why a target stopped instead of presenting every short result as complete.

StatusMeaning
COMPLETEThe source was exhausted within the selected limits
CAPPEDmaxAdsPerTarget was reached before source exhaustion
PARTIALA selected limit or recoverable source problem prevented complete collection
EMPTYNo matching ad was found and the target summary records whether source exhaustion was proven

ENDED is conservative. It is emitted only when the previous comparison state and the current scan provide complete-enough evidence. A CAPPED or PARTIAL run cannot convert a missing ad into ENDED.

If collection cannot meet that contract, the run reports the limitation or fails closed instead of silently claiming complete coverage.

🔌 API and automation

Use the same stable input keys from the Console through the Apify API:

const run = await client.actor('luminar/google-ads-transparency-intelligence').call({
productLevel: 'CHANGES',
searchTargets: ['nike.com'],
region: 'ANYWHERE',
adFormat: 'ALL',
maxAdsPerTarget: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

After one successful manual run, save the input as your own private Apify Task and add a Schedule. Webhooks, Make, Zapier, n8n, or your own code can alert only on delivered NEW, UPDATED, or ENDED rows.

For Facebook and Instagram campaign research, use the companion Meta Ads Library Scraper + Tracker.

❓ FAQ and support

Do I need to run Baseline before Changes?

No. The first Changes run establishes state and returns current ads as NEW. Repeat the same scope to receive only actionable changes.

Why did a successful Changes run return an empty Dataset?

On repeat runs, unchanged observations are intentionally not delivered. An empty Dataset can therefore mean the monitored scope was collected successfully and nothing changed; check the run summary and target coverage.

Why are copy, media, or destination fields missing on some ads?

Google exposes different machine-readable fields by creative format. Values that are not present in the source remain absent rather than being inferred.

Is landingPageCandidateUrl the verified final landing page?

No. It is an observed destination candidate. Shopping, comparison-service, and intermediary URLs can appear there, so the Actor does not label it as a verified final advertiser page.

Can I schedule competitor monitoring?

Yes. First confirm the input manually, then save it as a private Task and attach an Apify Schedule. Keep the monitoring scope unchanged between runs.

Do I need to provide a Google account or cookies?

No account credentials are requested in the input. Never paste passwords, cookies, API tokens, or other private credentials into a target field.

How do I report a problem?

Open the Actor's Issues or Support tab and include the run ID, sanitized input, expected result, and the target coverage status. Do not post API tokens or private credentials.