Google Ads Transparency Center Scraper by Domain
Pricing
from $1.28 / 1,000 ad founds
Google Ads Transparency Center Scraper by Domain
Every Google ad a company runs, by domain or advertiser name, from the Ads Transparency Center. Batch domains, export to CSV or Clay.
Pricing
from $1.28 / 1,000 ad founds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Features
Share
What's new (October 2026)
- Only new ads. Set the new
only_new_adsinput totrueon a scheduled run and you get only the ads no earlier run delivered for that company, region, and format filter. Only those new ad rows are charged. The summary row carries the newnew_adscount. The optionalstate_keyinput keeps separate lists for separate schedules. Off by default.
No price change. Existing fields and saved inputs work as before.
See every Google ad a company runs. Enter a company domain or an advertiser name and get one row per ad from Google's Ads Transparency Center, with the format, first and last shown dates, a creative link, and the ad's permalink. Each input also gets one company summary row that answers the question most teams actually ask: does this company run Google ads, how many, and in which formats.
Rows are flat and snake_case, so they load straight into a spreadsheet, a CRM, or a Clay table.
⨠Features
- Company keyed. A domain such as
stripe.comin, the ads Google lists for that domain out. No advertiser ID lookup needed. - Advertiser names too. Enter a name such as
HubSpot, Inc.and the actor finds the matching verified advertisers, up to 5, and says on every row whether the match was exact or the closest suggestion. - A company summary row. Ads returned, Google's own ad count band (for example 8,000 to 9,000), formats seen, and the first and last dates seen.
- Filters that run on Google's side. Region by country code, and format (text, image, or video).
- Last shown window. Keep only ads shown in the last N days, 90 by default.
- Safe when Google changes its page. The actor checks the shape of every response. If Google changes it, you get a free
source_changedrow instead of empty rows that look real. - Reads robots.txt on every run and stops with a free
blockedrow if Google ever disallows the pages it reads. - Batch input. Up to 500 domains or advertiser names per run.
- Only new ads on a schedule. With
only_new_adson, each run returns and charges only the ads earlier runs did not deliver. Off by default.
đĨ Input
| Field | Type | Description |
|---|---|---|
company_domain | string | A company domain, for example stripe.com |
advertiser_name | string | An advertiser name, for example Stripe, Inc. |
domains | list | Several domains, one per line |
advertiser_names | list | Several advertiser names, one per line |
region | string | anywhere (default) or a two letter country code |
formats | list | text, image, video; empty means all |
max_ads | string | Ad rows per input, 1 to 1,000, default 50 |
since_days | string | Only ads last shown in this many days, default 90; 0 for all |
include_summary | string | true (default) or false |
max_charge_usd | string | Optional cost cap for the run |
skipCache | string | true to skip the 24 hour cache |
only_new_ads | string | false (default). true returns only ads not delivered by an earlier run with the same state_key, input, region, and formats; only those are charged |
state_key | string | Optional name for the saved list of delivered ads, one per schedule |
proxy_mode | string | auto (default): direct, then the Apify proxy default pool if Google refuses a request; direct: proxy off, never use a proxy, so a refused request returns a free blocked row; or residential: the Apify residential proxy from the start. Proxy use adds nothing to your price |
Supported region codes: US, CA, MX, BR, AR, CL, CO, PE, GB, IE, DE, FR, ES, IT, PT, NL, BE, LU, CH, AT, DK, SE, NO, FI, IS, PL, CZ, SK, HU, RO, BG, GR, HR, SI, RS, UA, EE, LV, LT, CY, MT, TR, IL, AE, SA, QA, EG, ZA, NG, KE, MA, IN, PK, BD, SG, MY, ID, TH, VN, PH, JP, KR, TW, HK, AU, NZ.
Example:
{ "company_domain": "stripe.com", "max_ads": "20", "since_days": "90" }
đ¤ Output
One row per ad (row_type ad) and one summary row per input (row_type summary). Every row carries every field; a field that does not apply is null.
| Field | Example | Notes |
|---|---|---|
row_type | ad | ad or summary |
company_domain | stripe.com | |
advertiser_id | AR16951989901585285121 | Google advertiser ID |
advertiser_name | Stripe, Inc. | Verified advertiser name |
ad_id | CR17494586812444704769 | Google creative ID |
format | image | text, image, video, or unknown |
first_shown, last_shown | 2024-08-13T02:39:41Z | UTC |
days_running | 798 | First to last shown, inclusive |
creative_url | link | Creative image, or Google's preview script for text and video ads |
ad_url | link | The ad's page on the Ads Transparency Center |
advertiser_url | link | The advertiser's page |
ads_returned | 20 | Summary row |
total_ads_min, total_ads_max | 8000, 9000 | Summary row: Google's ad count band for the input and filters |
advertisers_count, advertisers_json | 2 | Summary row. A domain can be advertised by resellers and agencies too |
formats_seen | ["image","text"] | Summary row |
first_seen_any, last_seen_any | dates | Summary row |
runs_google_ads | true | Summary row: Google lists at least one ad for the input and filters |
new_ads | 3 | Summary row with only_new_ads on: ad rows this run returned that no earlier run had delivered. Null when only_new_ads is off |
row_status | ok | ok, no_ads, blocked, source_changed, error |
error_reason | null | Why a row is not ok |
billable_events_json | {"ad-found":1} | What the row was billed as; {} is free |
from_cache, source, checked_at |
đĩ Pricing
Pay per event. You pay for ad rows returned and for a summary row when ads were found, plus a small start fee per run.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Ad found (ad-found), per ad row | $0.00200 ($2.00 per 1,000) | $0.00190 ($1.90 per 1,000) | $0.00180 ($1.80 per 1,000) | $0.00170 ($1.70 per 1,000) |
Company summary (company-summary), per input with ads | $0.00300 ($3.00 per 1,000) | $0.00285 ($2.85 per 1,000) | $0.00270 ($2.70 per 1,000) | $0.00255 ($2.55 per 1,000) |
Actor start (apify-actor-start), per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
- Free rows:
no_ads,blocked,source_changed, anderrorrows cost nothing, and so do rows served from the 24 hour cache. - A run stops at the maximum cost per run you set in Apify, and at
max_charge_usdif you set it. - Free Apify plan: 1.50 USD of evaluation a month, which is 750 ad rows at the free plan price. Any paid Apify plan removes the cap.
max_adscaps the ad rows, and so the cost, per input. 20 ads plus a summary costs $0.0435 on the free plan price, start fee included.- Proxy traffic is included. You pay only the events above: Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
proxy_modeis a reliability setting. In the defaultautomode a run that Google refuses switches to the Apify proxy and keeps going;directnever uses a proxy, so a refused input returns a freeblockedrow instead.
đ Usage examples
Console or API. POST https://api.apify.com/v2/acts/mambalabs~google-ads-transparency-monitor/runs with the input above, then read the default dataset.
Batch of accounts.
{ "domains": ["stripe.com", "hubspot.com", "notion.so"], "max_ads": "10", "region": "US" }
Video ads only, by advertiser name.
{ "advertiser_name": "Nike, Inc.", "formats": ["video"], "max_ads": "25" }
Weekly schedule, new ads only.
{ "company_domain": "stripe.com", "only_new_ads": "true", "state_key": "stripe-weekly", "since_days": "0", "max_ads": "200" }
The first run returns every ad and records them. Each later run returns only ads that appeared since, and its summary row says how many in new_ads.
Clay. Call the actor from a Clay column with the domain column mapped to company_domain. Clay sends every field as a string, which this actor expects. Set include_summary to true and max_ads to 1 for a cheap "runs Google ads" column.
MCP. The @mambalabsdev/mcp-google-ads-transparency-monitor server exposes the tool get_google_ads to AI agents.
â ī¸ Error handling
| Situation | What you get |
|---|---|
| Google lists no ads | One free summary row, row_status no_ads, runs_google_ads false |
Ads exist but none in the since_days window | One free summary row, no_ads, runs_google_ads true |
| No advertiser matches the name | One free summary row, no_ads |
| Google refuses a request (HTTP 429, a challenge page, or its sorry page) | In auto mode the run switches to the Apify proxy default pool and tries twice more; if that is refused too, one free blocked row, and ads already read are kept |
| robots.txt disallows the pages read, or cannot be read | One free blocked row per input; no request is made |
| Google changes its response shape | One free source_changed row naming the missing piece |
| Anything else | One free error row with the reason |
â ī¸ Limitations
- The data comes from Google's own public page, which is not a documented API. When Google changes it, this actor reports
source_changeduntil it is updated. - The ad count is Google's band (for example 8,000 to 9,000), not an exact number.
- A domain search returns every advertiser Google lists for that domain, which can include resellers and agencies.
advertisers_jsonshows who ran what. - Text ads are shown as Google's rendered preview image or preview script, not as plain headline text.
- One format filter runs on Google's side. Choosing two formats filters on the actor's side, so the count band then covers all formats.
- Google rate limits bursts from one address. In
automode the run moves to the Apify proxy default pool when that happens, at no extra cost to you. - No login, no key, and no personal data: the rows describe advertisers and ads.
đ§Š Want other GTM data?
Mamba Labs builds a fleet of enrichment actors that share one flat output convention:
Every actor in the suite takes a domain or a company and returns flat rows, so they stack in the same table without reshaping anything.
đ Support
Found a bug? Open an issue on the Issues tab. Response time is typically within 48 hours.
âšī¸ Sourcing. Ads come from Google's public Ads Transparency Center at adstransparency.google.com. No login is used and robots.txt is read on every run. You are responsible for how you use the output.
Built by Mamba Labs.