Google Ads Transparency Scraper & Competitor Ad Monitor
Pricing
from $0.12 / 1,000 creative scanneds
Google Ads Transparency Scraper & Competitor Ad Monitor
Scrape the Google Ads Transparency Center for exact advertiser accounts and track what changed in a competitor's creative library. Export current ad creatives, formats, impression ranges, and start dates, then detect new, stopped, resumed, and changed ads in webhook-ready JSON.
Pricing
from $0.12 / 1,000 creative scanneds
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Track what changed in a verified competitor's Google Ads creative library.
This Actor scrapes current creatives from exact Google Ads Transparency advertiser accounts and tracks new, stopped, resumed, and changed creatives across later runs. It is designed for competitor research, swipe-file exports, scheduled monitoring, agency reporting, and webhook automation.
You do not need a Google Ads account, cookies, or a Google Ads API key.
What problem does it solve?
A normal Google Ads scraper downloads the same creative rows every day. Your workflow still has to decide what is actually new, what disappeared, and whether a failed or partial scrape created a false alarm.
This Actor keeps monitor history and returns a clean change feed:
NEW: a creative appeared after the baselineDISCOVERED: Google returned a previously unseen creative whose own first-shown date predates the last accepted scanMISSING_ONCE: one tentative absence, available only when requestedSTOPPED_CONFIRMED: absent from two consecutive complete scansRESUMED: a previously stopped creative returnedASSET_CHANGED: the same creative ID returned with different creative content
The first successful run creates the monitoring baseline. The default ALL_CHECKED output returns every current creative as a CURRENT row, while keeping existing ads out of the NEW event stream. Scheduled users can switch to CHANGES_ONLY.
Google can occasionally return an older creative that was absent from an earlier snapshot. The Actor labels that record DISCOVERED, not NEW. A NEW event requires the source's own firstShown date to be on or after the previous accepted scan date.
Why use this Actor?
Exact advertiser isolation
The input accepts native Google advertiser IDs such as AR13568824525935607809. Domain searches can mix official brand accounts, agencies, affiliates, and unrelated advertisers. Exact IDs keep each monitor tied to the account you selected.
Safer stopped-ad detection
A creative is not marked stopped after one absence. STOPPED_CONFIRMED requires:
- Two consecutive successful source runs
- Complete pagination in both runs
- The creative missing from both complete snapshots
- At least six hours between the first absence and confirmation
Failed, blocked, timed-out, or capped scans do not advance the stopped-ad counter. Immediate retries cannot confirm a stopped creative.
Google preview-container parameters can rotate without the creative changing. Those volatile parameters are excluded from asset identity. Direct media changes and stable creative fields can still produce ASSET_CHANGED.
When Google switches the same creative between an opaque preview container and a direct media URL, the Actor updates its evidence without claiming that the ad changed.
Automatic large-account protection
AUTO mode chooses the safest behavior for every advertiser:
- Complete scan: full lifecycle monitoring
- Result or page cap reached: new-launch feed only
The Actor never claims that an ad stopped when the account was only partially scanned.
Changes-only output
Use CHANGES_ONLY for scheduled runs. The dataset stays empty when nothing changed, making it easy to connect the Actor to Slack, Discord, Make, Zapier, n8n, or your own webhook.
Quick start
Use one exact advertiser ID for the first test:
{"advertiserIds": ["AR13568824525935607809"],"region": "US","monitorName": "competitor-watch","mode": "AUTO","lookbackDays": 7,"maxCreativesPerAdvertiser": 1000,"outputMode": "ALL_CHECKED"}
The first run returns the current creatives and creates the baseline. Run it again with the same monitorName, advertiser IDs, region, and activity window to receive verified changes.
Example change
{"recordType": "CHANGE","status": "NEW","eventId": "evt_2cad1f37712f32ad1af8a9a71f827452","eventType": "NEW","monitorName": "competitor-watch","modeUsed": "FULL_LIFECYCLE","region": "US","advertiserId": "AR13568824525935607809","advertiserName": "Linear Orbit, Inc.","creativeId": "CR_EXAMPLE","format": "VIDEO","firstShown": "2026-07-23","primaryAssetUrl": "https://tpc.googlesyndication.com/example-creative.mp4","sourceUrl": "https://adstransparency.google.com/advertiser/AR13568824525935607809/creative/CR_EXAMPLE?region=US","evidence": {"baseline": false,"runId": "competitor-watch:AR13568824525935607809:US:7d:2026-07-23T08:00:00.000Z"},"detectedAt": "2026-07-23T08:00:00.000Z","schemaVersion": "1.0"}
Example current creative
{"recordType": "CURRENT","status": "CURRENT","eventId": null,"eventType": null,"advertiserName": "Linear Orbit, Inc.","creativeId": "CR_EXAMPLE","format": "IMAGE","region": "US","firstShown": "2026-07-20","primaryAssetUrl": "https://tpc.googlesyndication.com/example-creative.png","sourceUrl": "https://adstransparency.google.com/advertiser/AR13568824525935607809/creative/CR_EXAMPLE?region=US"}
Input fields
| Field | Description | Default |
|---|---|---|
advertiserIds | 1-20 native AR... IDs or advertiser URLs | Required |
region | Country where the ads were shown | US |
monitorName | Stable history name for one watchlist | competitor-watch |
mode | AUTO, FULL_LIFECYCLE, or NEW_LAUNCH_FEED | AUTO |
lookbackDays | Rolling activity window from 1 to 90 days | 7 |
maxCreativesPerAdvertiser | Per-advertiser result and billing safety cap | 1000 |
outputMode | Current creatives plus changes, or changes only | ALL_CHECKED |
includeBaseline | In changes-only mode, label first-run creatives as NEW | false |
includeTentative | Include internal MISSING_ONCE events | false |
Monitoring modes
Auto
Recommended for most users. Full lifecycle is used only when all source pages finish. Large accounts automatically fall back to a safe new-launch feed.
Full lifecycle
Requires a complete advertiser scan. If the configured cap is reached, the target is reported as INCOMPLETE, history is not advanced, and no verified creative checks are billed for that target.
New launch feed
Tracks previously seen creative IDs and emits only new ones. This mode can operate on a capped recent window because it never produces stopped-ad claims.
Output modes
Changes only
Returns only lifecycle events. Use this for schedules, webhooks, Slack, Discord, Make, Zapier, and n8n. The first baseline produces zero rows because existing ads are not new launches.
Changes and all checked creatives
The default mode. Adds one CURRENT row per verified creative and includes any verified change events. Use it for the first run, one-time exports, audits, and swipe-file workflows.
Supported countries
The Actor currently supports 33 major Google Ads markets:
AE, AT, AU, BE, BR, CA, CH, CZ, DE, DK, ES, FI, FR, GB, GR, HU, IE, IN, IT, JP, KR, MX, NL, NO, NZ, PL, PT, RO, SE, SG, TR, US, ZA.
Country criteria use active Google geo target constants.
How to find the advertiser ID
- Open Google Ads Transparency Center.
- Search for the advertiser.
- Open the advertiser page.
- Copy the
AR...value from the URL.
Example:
https://adstransparency.google.com/advertiser/AR13568824525935607809
You can paste either the full URL or only the advertiser ID into the Actor input.
Scheduling and webhooks
For daily monitoring:
- Save the Actor input as an Apify Task.
- Keep the same
monitorNameand scope settings. - Add an Apify Schedule.
- Add a webhook for
ACTOR.RUN.SUCCEEDED. - Read the default dataset. Zero rows means no confirmed change was emitted.
Every change includes a deterministic eventId. Use it as the idempotency key when a webhook or downstream workflow retries delivery.
Changing monitorName, advertiser ID, region, or lookbackDays creates a different history scope.
Billing
The Actor charges per successfully verified creative check. A check can be billed even when an unchanged row is hidden by CHANGES_ONLY, because the source request, advertiser isolation, and history comparison were completed.
- Creatives scanned: $0.15 per 1,000
- Verified changes: $5.00 per 1,000 — never charged on a monitor's first run
- Actor start: $0.005 per GB of run memory
- Platform usage and proxies: included
You pay a low rate for looking, and only pay the higher rate when something actually changed. A full-dump scraper charges you the same amount every single day whether the library moved or not.
What daily monitoring actually costs
One advertiser, 1,000 creatives, checked daily for 30 days, with a typical five changes a day:
| This Actor | Full-dump scraper at $0.80 / 1K | |
|---|---|---|
| Day 1 (baseline, no change fee) | $0.15 | $0.80 |
| Each later day | $0.175 | $0.80 |
| 30-day total | $5.23 | $24.00 |
That is 4.6x cheaper for the same coverage — and the output is already reduced to what changed, so nothing downstream has to diff it again.
A one-off export is cheaper too: 1,000 creatives in a single run costs $0.15 against $0.80.
The default 1,000-creative cap limits scan charges to $0.15 per advertiser. With 20 advertisers at the full default cap, the maximum scan charge is $3.00 plus changes and the Actor start. Most advertisers return fewer rows and cost less.
Dataset rows are not a separate billable event, so ALL_CHECKED does not create a second result charge.
These cases are not billed as verified creative checks:
- Advertiser lookup failure
- Source request failure
- Advertiser contamination
- Explicit
FULL_LIFECYCLErun that cannot finish pagination - Suspicious empty snapshot after a previously active library
- Records beyond the run's maximum charge limit
The OUTPUT record contains the exact billed check count and a per-advertiser accounting summary.
Reliability evidence
The pre-launch benchmark on July 22-23, 2026 included:
- 25/25 successful source targets across the United States and Germany
- 820 source records with zero duplicate creative IDs
- 100% native creative ID, asset, and date coverage on non-empty targets
- 8 verified advertiser accounts with full pagination
- 1,072 creatives per complete canary round
- Two consecutive complete rounds with zero false lifecycle events
- Direct HTTP rate-limit detection with a browser-session fallback
- A separate live United Kingdom smoke test with complete pagination
Automated tests cover baseline behavior, duplicate handling, incomplete-run safety, two-run stopped confirmation, resume detection, asset fingerprint stability, billing limits, account isolation, and state persistence.
Important limitations
- Google Ads Transparency Center is a public transparency source, not the Google Ads performance API.
- The Actor does not provide spend, conversions, ROAS, exact impressions, or campaign performance.
- A missing transparency record does not prove that a campaign was deleted inside Google Ads.
- A complete but empty snapshot cannot erase a previously active library. The target is flagged as
SUSPICIOUS_EMPTY, history is preserved, and no stopped events are emitted. - Creative links and media availability depend on what Google exposes publicly.
- Very large advertisers may use
NEW_LAUNCH_FEEDin Auto mode rather than full stopped-ad detection. - The Actor monitors one delivery country per run. Create separate tasks for separate countries.
- Avoid overlapping runs that use the same monitor name and scope. Schedule the next run after the previous run finishes. Every change includes a deterministic
eventIdso downstream systems can safely deduplicate retried delivery. - Google reports source dates at day-level granularity. A
NEWevent means the source date is on or after the previous accepted scan date, not that the exact launch minute is known.
FAQ
Can I enter a domain such as nike.com?
Not in this Actor. Domain searches can mix multiple advertiser accounts. Use an exact advertiser ID to preserve account isolation.
Why was my first dataset empty?
You selected CHANGES_ONLY, so the first successful run created a silent baseline. Use the default ALL_CHECKED mode when you want the current creative snapshot on the first run.
Why did Auto mode use New Launch Feed?
The advertiser had more creatives than the configured cap. Auto mode refused to make stopped-ad claims from a partial snapshot.
Does a stopped event require two days?
It requires two consecutive complete scheduled runs, not a fixed number of days. With a daily schedule, confirmation normally takes two daily absences.
Can I monitor several competitors?
Yes. Add up to 20 advertiser IDs. Every advertiser receives an independent state and completeness decision.
Is this affiliated with Google?
No. This Actor is not affiliated with or endorsed by Google. Users are responsible for using public data lawfully and in accordance with applicable rules.