Google Ads Transparency Scraper, Checker & Competitor Monitor
Pricing
from $1.50 / 1,000 ad returneds
Google Ads Transparency Scraper, Checker & Competitor Monitor
Google Ads checker and ad library scraper: check if a company or domain is running Google Ads (yes/no per domain), export competitor Search, YouTube and Display ads, or get only NEW ads since your last run. No login. Pay per result.
Pricing
from $1.50 / 1,000 ad returneds
Rating
0.0
(0)
Developer
Signal Grid
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Google Ads Transparency Monitor: new competitor ads only, as diff alerts
Get an alert-ready list of the Google ads your competitors launched since your last check, and pay only for what's new. Most Google Ads Transparency Center scrapers re-download and re-bill every ad on every run. This Actor remembers what you've already seen. Schedule it with onlyNewAds: true, and each run returns only new creatives, plus one summary row per advertiser with new, dropped and active counts. On quiet weeks a run costs a few cents.
It covers Search text, Display/image and YouTube video ads from the public Google Ads Transparency Center. No login, no cookies, no proxies. By Signalgrid.
30-second start (diff alerts)
{"targets": ["hubspot.com", "salesforce.com", "Notion Labs"], "region": "US","maxAdsPerTarget": 100, "onlyNewAds": true, "monitorId": "my-competitors"}
Save it as a Task and add a weekly Schedule. Connect the dataset to Slack, Sheets, email or a webhook. The first run sets the baseline. After that, every run is a "new ads this week" diff.
New in 0.5
- Bulk domain list plus ad activity tier. Paste up to 200 prospect or competitor domains into
domainListand setactivityTierOnly: true. You get one row per advertiser with active ads, ad count, oldest and latest shown dates, the longest-running ad and aadActivityTierofnone,low,mediumorhigh. You pay only $0.003 per advertiser and nothing per ad. It helps you qualify which prospects actually spend on Google Ads before a sales call. - No silent zeros. When Google returns an empty response or 0 ads for a resolved advertiser, you get an explicit, free
errorrow (empty-upstream-responseorno-ads-returned) instead of a misleading "0 ads" summary. You're never charged for it.
Three ready-made tasks (copy the input, save as a Task)
1. Weekly new-competitor-ads alert. Only ads launched since last week; schedule weekly.
{"targets": ["hubspot.com", "salesforce.com", "pipedrive.com"], "region": "US", "maxAdsPerTarget": 100, "onlyNewAds": true, "monitorId": "crm-competitors"}
2. Bulk ad export (one-off library pull). Every recent ad for a few brands, with previews.
{"targets": ["Notion Labs", "asana.com"], "region": "ANY", "maxAdsPerTarget": 500}
3. Google Ads checker for a prospect list (is this company running Google Ads?). One flat row per domain, $0.003 each, no per-ad charge.
{"domainList": "hubspot.com\nmonday.com\nexample-local-plumber.com", "activityTierOnly": true, "region": "US"}
Each domain returns runsGoogleAds (true / false / null = unknown, retry), adActivityTier, activeAdsNow and transparencyUrl (a link to check by hand). Domains with no advertiser come back as free rows with runsGoogleAds: false. Temporary failures have retryable: true and are never reported as "no ads".
Use it from AI agents (Claude, MCP, scripts)
The output is small, predictable JSON with stable field names, so it works well as an agent tool.
- Apify MCP server: add
signalgrid/google-ads-transparency-monitoras a tool in the Apify MCP server (mcp.apify.com) and ask Claude: "Check which of these 30 domains are running Google ads and rank them by ad activity tier." Or: "What new ads did hubspot.com launch since last week?" - One HTTP call:
curl -X POST "https://api.apify.com/v2/acts/signalgrid~google-ads-transparency-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN&maxTotalChargeUsd=0.50" \-H 'Content-Type: application/json' \-d '{"domainList":"hubspot.com\nmonday.com\nasana.com","activityTierOnly":true,"region":"US"}'
- Agent tips: filter rows by
type(ad,advertiser-summaryorerror). Always passmaxTotalChargeUsd. Reuse onemonitorIdper watchlist, so the diff memory persists. ASKILL.mdfor agent frameworks is included in the source.
Input
| Field | Example | Notes |
|---|---|---|
targets | ["hubspot.com", "Notion Labs", "AR10072600183532683265"] | Domain, brand name or advertiser ID |
domainList | "a.com\nb.com\nc.com" | Bulk paste, one per line. Merged with targets (max 200 total) |
activityTierOnly | true | Summary rows only, with no per-ad charges |
region | US | ANY, US, GB, CA, AU, DE, FR, IN, BR, ES, IT, NL, MX, JP |
maxAdsPerTarget | 100 | Newest first. You pay per ad returned |
onlyNewAds | true | Repeat runs return only ads you haven't seen |
monitorId | competitors-q4 | Runs with the same ID share "seen" memory |
Output
Ad row
{"type":"ad","advertiserName":"monday.com LTD","format":"VIDEO","firstShown":"2026-10-13T20:24:53Z","lastShown":"2026-10-20T03:30:11Z","daysShown":7,"isActive":true,"isNewSinceLastRun":true,"adUrl":"https://adstransparency.google.com/advertiser/AR15972262369074085889/creative/CR04944652816883908609?region=US","advertiserId":"AR15972262369074085889","creativeId":"CR04944652816883908609","region":"US"}
Advertiser summary row (one per advertiser per run)
{"type":"advertiser-summary","input":"hubspot.com","advertiserName":"Hubspot, Inc.","adsFetched":200,"activeNow":187,"startedLast7Days":12,"newSinceLastRun":12,"noLongerReturnedSinceLastRun":4,"adActivityTier":"high","activeAdsNow":187,"oldestFirstShown":"2021-10-25T07:00:00Z","latestLastShown":"2026-10-20T16:14:32Z","longestRunningAdDays":1822,"formatMix":{"TEXT":120,"IMAGE":50,"VIDEO":30}}
Error row (free)
{"type":"error","input":"example.com","errorType":"empty-upstream-response","error":"... This is NOT the same as 'no ads'; retry later. You were not charged for this advertiser."}
Pricing (pay per event)
- $1.50 per 1,000 ads returned
- $0.003 per advertiser summary
- Error rows are free
Two examples:
- A weekly diff on 10 competitors that finds 40 new ads costs 10 × $0.003 + 40 × $0.0015 = $0.09.
- A ad-activity-tier check of 100 prospect domains costs $0.30.
Fair charging
- Hit your max charge per run? The Actor stops cleanly, and undelivered new ads stay unseen, so they come back on the next run.
- Unknown advertiser, outage or empty upstream response: you get a free
errorrow. If every target fails upstream, the run fails and you're charged nothing. - Ad-activity-tier runs don't consume your "new ads" memory.
Monitor vs. one-shot scraper
| Typical scraper | This monitor | |
|---|---|---|
| Repeat runs | Re-return and re-bill all ads | Only new ads |
| Per-advertiser diff | No | New, dropped, active, last 7 days |
| Bulk domain ad-activity check | No | Yes, summary-only pricing |
| Empty or blocked upstream | Often a silent "0 results" | Explicit free error row |
FAQ
How do I get alerts when a competitor launches new Google ads? Create a Task with onlyNewAds: true and a fixed monitorId, schedule it, and connect it to Slack or a webhook.
Can I see ad spend? No. Google doesn't publish spend for commercial ads. adActivityTier counts public ads only (rule: none = 0 ads; high = 20+ active or 200+ ads; medium = 5+ active or 40+ ads; else low). It is not a spend estimate. The old budgetSignal field and budgetSignalOnly input still work as aliases.
How do I track several clients separately? Use one monitorId per client.
Limits
- Data covers only what Google publishes. Coverage varies by region.
- A domain resolves to the advertiser that owns most of the ads pointing at it. Other advertisers are listed in
otherAdvertisersOnDomain. - Not affiliated with Google.
Changelog
- 0.7 (Oct 20 2026): flat per-domain answer (
runsGoogleAds,transparencyUrl),retryableon error rows, three example tasks. - 0.6 (Oct 20 2026): renamed budget signal to
adActivityTierwith its rule documented (old names still work); fuller dataset schema for agents. - 0.5 (Oct 20 2026): bulk
domainList,activityTierOnlymode with ad-activity-tier fields, explicit free error rows for empty upstream responses, agent/MCP docs and SKILL.md. - 0.4 (Oct 2026): output schema and listing updates.
- 0.2 (Oct 2026): budget-safe charging, free error rows, input dedupe.
- 0.1 (Oct 2026): first version.