Google Ads Transparency Competitor Monitor
Pricing
from $1.00 / 1,000 google ad creative results
Google Ads Transparency Competitor Monitor
Monitor competitor Google Ads Transparency creatives and detect new or changed ads from public transparency data.
Pricing
from $1.00 / 1,000 google ad creative results
Rating
0.0
(0)
Developer
Juyeop Park
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Monitor competitor Google Ads Transparency Center creatives from public transparency data, export stable creative IDs, and detect newly launched, changed, or no-longer-observed ads across scheduled Apify runs.
This Actor is designed as a schedule-ready competitor intelligence monitor. It is not a complete landing page scraper, not a complete ad copy extractor, and not a replacement for the official Google Ads API.
What it does
- Searches public Google Ads Transparency Center data by competitor domain, advertiser ID, or both.
- Emits one dataset item per current creative using the stable key
advertiser_id::creative_id. - Captures advertiser ID/name/domain, creative ID, first/last seen dates, creative type code, media URL, preview URL, and fetch timestamp.
- Optionally parses public creative preview scripts for best-effort CTA, ad text snippets, and landing URLs.
- Diffs the current run against either an explicit previous dataset/run or a saved
monitorIdbaseline. - Marks creatives as
new,existing,changed, ornot_observedso scheduled users can see what changed since the last run. - Writes a compact JSON
OUTPUTsummary and human-readable MarkdownREPORTto the key-value store.
Good use cases
- Scheduled competitor ad monitoring for ecommerce, SaaS, agencies, or brand teams.
- Detecting new Google/YouTube/Display creative launches from known competitor domains.
- Checking which ads disappeared or changed after each weekly or daily run.
- Exporting stable creative IDs and media/preview URLs for downstream research.
- Building a lightweight ad-change report without Google login, cookies, or private account access.
Input examples
Small single-domain monitor
{"domains": ["adidas.com"],"region": "KR","maxAdsPerDomain": 10,"includePreviewParsing": true,"proxyConfiguration": {"useApifyProxy": true}}
First baseline run for a scheduled monitor
Run this once to create the baseline. The Actor saves the current dataset under monitorId, so later runs can compare automatically.
{"domains": ["nike.com"],"region": "KR","maxAdsPerDomain": 25,"monitorId": "nike-kr-weekly","autoDiff": true,"saveMonitorState": true,"includePreviewParsing": true,"proxyConfiguration": {"useApifyProxy": true}}
Later schedule run with automatic diff
Use the same monitorId in your Apify schedule. You do not need to paste previousDatasetId or previousRunId; when autoDiff=true, the Actor loads the last saved dataset and reports newly seen, changed, existing, and no-longer-observed ads.
{"domains": ["nike.com"],"region": "KR","maxAdsPerDomain": 25,"monitorId": "nike-kr-weekly","autoDiff": true,"saveMonitorState": true,"includePreviewParsing": true,"proxyConfiguration": {"useApifyProxy": true}}
Multiple competitors for a scheduled run
{"domains": ["nike.com", "samsung.com", "temu.com"],"region": "KR","maxAdsPerDomain": 25,"monitorId": "kr-competitors-weekly","autoDiff": true,"saveMonitorState": true,"includePreviewParsing": true,"proxyConfiguration": {"useApifyProxy": true}}
Direct advertiser ID
Use this when you already know the Google Ads Transparency Center advertiser ID. Set domains to an empty array for a pure advertiser-ID run, so no domain source is mixed into the results.
{"domains": [],"advertiserIds": ["AR14017378248766259201"],"region": "KR","maxAdsPerDomain": 10,"monitorId": "adidas-advertiser-kr","autoDiff": true,"includePreviewParsing": false}
Explicit diff against a previous run or dataset
Use either previousRunId or previousDatasetId from an earlier run when you want to control the baseline manually. previousDatasetId takes highest precedence, then previousRunId, then saved monitorId state.
{"domains": ["adidas.com"],"region": "KR","maxAdsPerDomain": 25,"previousRunId": "LAST_RUN_ID","monitorId": "adidas-kr-weekly","includePreviewParsing": true,"proxyConfiguration": {"useApifyProxy": true}}
Experiment without updating the saved baseline
Set saveMonitorState=false when you want a one-off test run that should not become the next baseline for the schedule.
{"domains": ["nike.com"],"region": "KR","maxAdsPerDomain": 5,"monitorId": "nike-kr-weekly","autoDiff": true,"saveMonitorState": false,"includePreviewParsing": false}
How scheduled auto-diff works
- Choose a stable
monitorId, for examplenike-kr-weeklyorclient-a-saas-us. - First run: no previous dataset is available, so the run is treated as a baseline and
diff_sourceisnone. - The run saves a small monitor state record with the current run ID, dataset ID, item count, domains, advertiser IDs, and region. It does not store raw preview scripts or page HTML.
- Second and later runs with the same
monitorIdandautoDiff=trueuse the saved dataset as the baseline.diff_sourcebecomessaved_monitor_state. - If you provide
previousDatasetId, it overrides everything. If you provide onlypreviousRunId, it overrides saved state. - If
saveMonitorState=false, the current run is not written as the next baseline.
Output fields
Each dataset item includes:
input_domain/input_advertiser_idmatched_input_domains/matched_input_advertiser_idsadvertiser_id,advertiser_name,advertiser_domaincreative_idstable_keyasadvertiser_id::creative_idfirst_seen,last_seenregion,region_codecreative_type_codemedia_url,preview_urlfetched_atcoverage_statuscta,ad_text_snippet,landing_url,landing_statuschange_statusandchanged_fieldswhen diffing is enabledmonitor_id,monitor_state_key,diff_source, andbaseline_dataset_idfor scheduled monitor runs
Diff source guide
none: baseline run; no explicit previous dataset/run and no saved monitor baseline was used.saved_monitor_state: the Actor used the last saved dataset for the same monitor.explicit_previous_dataset: you providedpreviousDatasetId; it took precedence.explicit_previous_run: you providedpreviousRunId; it took precedence over saved state.
Coverage status guide
ok: core creative metadata was collected.zero_results: source returned no creatives.partial_preview_parse: preview parsing found at least some optional CTA/text/landing signal, but coverage is still partial.preview_parse_failed: preview script was present but could not be parsed/fetched.blocked_or_unparseable: public RPC response was blocked or not parseable for that source.
Key-value store artifacts
OUTPUT: JSON summary with source counts, diff totals, monitor state, and limitations.REPORT: Markdown report for quick human review, including whether the run was a baseline or saved-state diff.
Pricing note
The intended Store pricing model is pay-per-event per collected creative/ad item. Initial pricing should stay in the low per-creative range ($0.001–$0.005) so scheduled monitoring remains affordable. The Actor uses the custom billing event creative-result for current creative rows; not_observed historical diff rows are not charged as new creative results.
Limitations
- Uses public Google Ads Transparency Center surfaces; it is not an official Google Ads API replacement.
- Google can change public RPC schemas or throttle unauthenticated access.
- CTA, ad text, and landing URL extraction are best-effort only and not guaranteed for every creative.
- Static image creatives often expose media URLs but not text without OCR; OCR is outside this MVP.
- The Actor parses public preview scripts but does not click or follow ad tracking links.
- It does not provide spend, targeting, conversion, impression, or final redirect metrics.
Recommended schedule pattern
- Run once with your competitor domains, region, and a stable
monitorId. - Create an Apify schedule with the same
monitorId, domains, and region. - Leave
autoDiff=trueso each later run compares against the last saved dataset automatically. - Review the
REPORTartifact and datasetchange_statusvalues after each run. - Use
saveMonitorState=falseonly for experiments you do not want to become the next baseline.
Store-facing copy candidates — draft only, not applied
These are draft wording options for a future Store metadata review. They do not change the Store title, pricing, PPE configuration, or public release status.
- Short description candidate: “Schedule Google Ads Transparency Center competitor monitoring and automatically detect new, changed, and no-longer-observed creatives by monitor ID.”
- Use-case headline candidate: “Set a competitor monitor once; get a weekly Google ads change report without manually copying previous run IDs.”
- Buyer-facing bullets:
- “Track competitor Google/YouTube/Display creative launches from public transparency data.”
- “Use
monitorIdto turn one-off scraping into repeat scheduled diff reports.” - “Get dataset rows plus a Markdown report that explains the baseline, diff source, and next-run behavior.”