Google Ads Transparency Center Scraper
Pricing
$1.00 / 1,000 ad creatives
Google Ads Transparency Center Scraper
Collect Google Ads Transparency Center creatives by domain or advertiser across 237 regions. Export ad formats, dates, previews, and available destinations; pay per delivered creative row.
Pricing
$1.00 / 1,000 ad creatives
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
2
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Collect Google Ads Transparency Center ads by domain or advertiser, in Vietnam and other supported regions, as creative rows you can export.
- Advertiser names and IDs, creative IDs, formats, and first and last shown dates.
- Preview images, ad text, video information, and destination links when available.
- Filters for 237 country and territory collections, plus
anywhere. - Domain, advertiser, and supported political-advertiser searches in one run.
- Pay for delivered creative rows: $1 per 1,000 rows on every Apify plan.
What does Google Ads Transparency Center Scraper do?
Google Ads Transparency Center Scraper collects public ad records from adstransparency.google.com. Use it to monitor competitors, compare creative formats, or maintain an advertiser's ad inventory. Each paid row represents one creative, not one advertiser or one search page.
- Domain search: find ads pointing to a website using
targets[].searchMode: "domain". - Advertiser search: supply an advertiser name or
ARID withsearchMode: "advertiser". - Political-advertiser search: use
searchMode: "political"with a supported region. This returns creatives, not spending or impression totals. - Enrichment: creative details, preview content, and advertiser information are enabled by default for up to eight rows per target. These add fields to existing rows, not separately billed rows.
What data can you extract from Google Ads Transparency Center?
Creative rows use rowType: "creative". Empty fields mean the value was unavailable or not retrieved; they are not estimates.
| Field | Description | Example |
|---|---|---|
rowType | Type of paid row | creative |
id | Creative identifier used to remove duplicates | CR11832615049141157889 |
creativeId | Google's creative ID | CR11832615049141157889 |
advertiserId | Google's advertiser ID | AR06152299239998226433 |
advertiserName | Advertiser name supplied by Google | Example Company |
advertiserCountryRaw | Regulatory country from advertiser lookup | null |
region | Collection filter, not an advertiser address | VN |
searchMode | Search that produced the row | domain |
searchValue | Domain, advertiser name, or ID searched | tiki.vn |
targetLabel | Your optional grouping label | Domain monitoring |
formatLabel | Creative's own format | video |
previewUrl | Link to the creative preview | null |
previewImageUrl | Image supplied with the search result | null |
detailUrl | Creative's Transparency Center page | https://adstransparency.google.com/advertiser/AR06152299239998226433/creative/CR11832615049141157889 |
firstShown | First shown date in ISO-8601 format | 2026-08-01T19:48:31+00:00 |
lastShown | Last shown date in ISO-8601 format | 2026-10-13T11:45:09+00:00 |
headline | Ad headline, when present | null |
description | Ad text, when present | null |
destinationUrl | Final advertiser destination from preview content | null |
redirectUrl | Click redirect, separate from the final destination | null |
videoId | Video identifier from preview content | Zk6YniKMwvo |
variantCount | Number of detail variants, or null if not retrieved | 3 |
variants | Up to 50 variant records | [] |
resultCountLower | Lower bound of the query's result-count range | "700" |
resultCountUpper | Upper bound of the query's result-count range | "800" |
org | Advertiser identity and optional country or D-U-N-S number | {"name":"Example Company","id":null,"country":null} |
web | Destination website and related web fields | {"website":null,"socials":[]} |
leadAbsences | Reasons contact or destination fields are empty | {} |
warnings | Missing enrichment or search warnings | ["enrichment_skipped_budget"] |
scrapedAt | Time the row was collected | 2026-10-13T12:27:10+00:00 |
platforms and creativeFormats record the search filters, not a creative's individual placements. Use formatLabel for its format. Result-count bounds describe the query, not an ad's impressions. firstShownRaw and lastShownRaw preserve source timestamps, commonly Unix seconds as strings.
The current output leaves phones and emails empty, postal address fields null, and geo and person null. It does not infer contacts from advertiser IDs. org.country is regulatory information, not a postal address. leadSource, leadReveal, and leadAbsences describe availability; some absence reasons are source-defined Chinese text. runId identifies the delivering run.
How to scrape Google Ads Transparency Center
- Open Google Ads Transparency Center Scraper in Apify Console. A free Apify account is enough to try it.
- Fill
targetswith one domain or advertiser. Leave the other fields at their defaults initially. - Set
maxResultsto5and review Maximum cost per run. - Click Start and wait for the run to finish.
- Download the dataset or read it through the API.
An empty input {} starts the shopee.vn example in VN, limited to three rows. This is a normal billable example, not a promise of free rows. INPUT_REPORT records that it was an example run. If you provide filters but leave the target empty, those filters can also affect the example.
Domain search
Set searchMode to domain and searchValue to a domain such as shopee.vn. A URL on that domain also works: its scheme, path, and leading www. are removed. A bare domain string in targets selects this mode automatically.
Advertiser search
Set searchMode to advertiser and provide a name or AR ID. Bare AR IDs and other non-domain strings are recognized as advertiser targets. Name search selects an exact name match when available; otherwise it selects the first suggestion. Check the returned identity, or use an ID to avoid ambiguity.
Political-advertiser search
Set searchMode explicitly to political, provide the advertiser name or ID, and set region to US, GB, DE, FR, CA, or AU. Do not leave the default VN for this mode. Preview destination decoding and advertiser-country lookup are skipped for political targets.
What to fill in
| Field | What to enter | Default |
|---|---|---|
targets | Array of target objects or recognized strings | Example when empty |
targets[].searchMode | domain, advertiser, or political for an object | Required in objects |
targets[].searchValue | Domain, URL, advertiser name, or ID | Required in objects |
targets[].targetLabel | Optional label copied into rows | None |
region | Supported two-letter country code or anywhere | VN |
maxResults | Most creative rows per distinct target, from 1 to 1,000 | 70; form example 3 |
maxCreativesPerTarget | Optional smaller target limit | Unset |
maxPagesPerTarget | Page limit from 1 to 50; omit for automatic pagination | Derived |
creativeFormats | text, image, and/or video | All |
platforms | youtube, search, display, shopping, maps, and/or play | All |
enrichDetails | Master switch for the three enrichment options below | true |
includeCreativeDetails | Add creative details and variants | true |
includeVariantContent | Read available preview text and destinations | true |
includeAdvertiserLookup | Add advertiser country and verification information | true |
maxEnrichments | Rows enriched per target, from 0 to 1,000 | 8 |
includeDunsMapping | Add org.duns when a matching number exists; political targets also attempt this | false |
includeRawJson | Keep raw source data on each row | false |
requestTimeoutSecs | Timeout for an individual request, in seconds | 30 |
strictErrors | Stop on lookup errors instead of retaining rows with warnings | false |
Domain example:
{"targets": [{"searchMode": "domain", "searchValue": "shopee.vn"}],"region": "VN","maxResults": 5}
Advertiser example:
{"targets": [{"searchMode": "advertiser", "searchValue": "Nike"}],"region": "US","creativeFormats": ["video"],"platforms": ["youtube"],"maxResults": 5}
Political-advertiser example; use the advertiser you want to research:
{"targets": [{"searchMode": "political", "searchValue": "Biden"}],"region": "US","maxResults": 3}
maxItemsandlimitare aliases formaxResults.targetaliasestargets;countryandmarketaliasregion.- Close field-name misspellings are corrected when recognized; other unknown fields are ignored with a note. Invalid format or platform values are dropped. Out-of-range integer limits are adjusted to their allowed range.
- Invalid target input fails before any creative row is charged, for example
INVALID_INPUT: targets[0].searchMode must be domain, advertiser, or political. INPUT_REPORTin the default key-value store records input normalization and ignored fields.RUN_SUMMARYrecords delivered-row counts, target counts, and warnings; failed runs can haveERROR_SUMMARY.
enrichDetails=false disables the three enrichment lookups. The default maxEnrichments=8 applies across a target's collection, not separately to each page. Later rows remain billable search rows with enrichment_skipped_budget; variantCount is null when details were not retrieved. includeRawJson preserves data but does not enable lookups.
Output example
This excerpt illustrates one creative row, not a guarantee that every field will be filled:
{"rowType": "creative","id": "CR11832615049141157889","creativeId": "CR11832615049141157889","advertiserId": "AR06152299239998226433","region": "VN","searchMode": "domain","searchValue": "tiki.vn","formatLabel": "video","firstShown": "2026-08-01T19:48:31+00:00","lastShown": "2026-10-13T11:45:09+00:00","headline": null,"destinationUrl": null,"variantCount": 3,"videoId": "Zk6YniKMwvo"}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. JSON preserves nested org, web, and variants fields for further processing.
Why use this Google Ads Transparency Center scraper?
- Pay per creative row. Searches and optional fields do not create extra creative charges.
- Several inputs per run. Mix domains and advertisers; duplicate targets are removed, and creative IDs are deduplicated before delivery.
- Visible missing data. Warnings distinguish absent content from skipped or failed enrichment.
- No proxy setup. You do not need to set up proxies or supply a Google Ads account.
- Reusable exports. Keep IDs and collection dates to compare inventories over time.
How much does it cost to scrape Google Ads Transparency Center?
The Actor uses pay-per-event pricing. One result-item event is charged for each delivered creative row. Platform usage is included in these prices.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.001 | $1.00 |
| Starter | $0.001 | $1.00 |
| Scale | $0.001 | $1.00 |
| Business | $0.001 | $1.00 |
The same row price applies to all plans. No separate start-event price is listed in the supplied pricing information, so no start fee is estimated here. Example at the default 1024 MB memory: five delivered rows cost 5 × $0.001 = $0.005 in row charges. Review the price breakdown shown before starting.
maxResults defaults to 70 per distinct target, with a maximum of 1,000. It is a ceiling, not a guaranteed count. maxCreativesPerTarget, available ads, deduplication, and page limits can reduce the result. Free-plan runs are capped at 200 rows across all inputs, and free-plan users may run this Actor 10 times. The whole run also stops at Maximum cost per run (maxTotalChargeUsd in the API).
What happens when the run timeout is too short
Some collections, such as several targets with a large maxResults and enrichment turned on, can take longer than the run timeout you chose. In that case the run does not fail. It ends early with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." and shows as ABORTED for a while.
When the results are ready, the same run starts again by itself, reports "Resumed: delivering N rows.", writes the creative rows to the same dataset and finishes as SUCCEEDED. Rows that were already delivered are skipped, so no row is delivered or charged twice. You do not need to start another run.
- This can happen at most 3 times per run. To avoid it, keep the default timeout of 3600 seconds.
- The synchronous API endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For larger jobs, start the run asynchronously and read the dataset after the run reaches SUCCEEDED, or use a webhook on the "succeeded" event.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this Actor to an MCP client that supports remote servers:
https://mcp.apify.com?tools=lentic_clockss/google-ads-transparency-center-vn
Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns the run and dataset IDs; read the rows with get-dataset-items. Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/google-ads-transparency-center-vn with APIFY_TOKEN set.
Example prompt: "Collect up to five Google ad creatives pointing to shopee.vn in Vietnam. Return advertiser names, formats, dates, and available destination links."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/google-ads-transparency-center-vn").call(run_input={"targets": [{"searchMode": "domain", "searchValue": "shopee.vn"}], "maxResults": 5})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/google-ads-transparency-center-vn').call({targets: [{ searchMode: 'domain', searchValue: 'shopee.vn' }], maxResults: 5});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~google-ads-transparency-center-vn/runs with your token in the Authorization: Bearer header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or a webhook through the Actor's Integrations tab. Use Apify Schedules for recurring collections.
FAQ
Is it legal to scrape Google Ads Transparency Center?
The Actor collects public transparency data, not private account records. You are responsible for complying with applicable terms and data-protection law. Processing personal data requires a lawful basis; public availability alone does not establish one.
Why did my run end as ABORTED?
Inspect the run log and status message to find the cause, including whether the run was stopped. Do not assume an aborted run will restart automatically. Check the dataset for delivered rows; collection before an interruption does not guarantee delivery.
How many results can I get?
Request up to 1,000 creative rows per target, subject to the run's cost and free-plan limits. Search pages contain up to 40 creatives. Automatic pagination allows a spare page for short results; an explicit page cap can produce max_pages_reached warnings in the run summary.
Why are some fields empty?
Google may not expose them, enrichment may be disabled, or the row may exceed maxEnrichments. Lookups can also fail or be skipped near a time limit. Check warnings and leadAbsences; null variantCount does not mean zero variants.
Does this only collect ads in Vietnam?
No. VN is the default. Ordinary searches accept 237 mapped country and territory codes plus anywhere, although coverage varies. Political targets accept only the six regions listed above.
Can I filter by ad format and platform?
Yes. Set creativeFormats and platforms, or leave them empty for all supported values. Narrow filters can return fewer rows than requested.
Does it return spending, impressions, or private campaign data?
No. Spending, impressions, conversions, and private account targeting settings are not output fields. Political mode does not change that limitation.
What does QUEUE_FULL mean?
The collection could not start within the allowed wait. RUN_SUMMARY reports QUEUE_FULL, and the dataset receives one uncharged explanation row with status: "queue_full" and a suggested retry delay. That row is not an ad creative.
Limitations
- Advertiser-name searches do not enumerate every matching advertiser. Check the selected ID.
- Regional coverage and preview content depend on what Google makes available. Search or detail failures can limit results.
- The Actor does not crawl advertiser landing pages or extract contacts from those websites.
- A preview image can be available without enrichment; a final destination URL may still be missing.
- Variant lists contain at most 50 records within a creative row, not separate billed rows.
- Rows already written remain in the dataset, but delivery of every partially collected row after an abort or timeout is not guaranteed.
Related scrapers
More ad library and ads intelligence scrapers from the same publisher:
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.