Google Ads Transparency Center Scraper avatar

Google Ads Transparency Center Scraper

Pricing

$1.00 / 1,000 ad creatives

Go to Apify Store
Google Ads Transparency Center Scraper

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

kane liu

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

2

Monthly active users

a day ago

Last modified

Categories

Security

Limited permissions

Share

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 AR ID with searchMode: "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.

FieldDescriptionExample
rowTypeType of paid rowcreative
idCreative identifier used to remove duplicatesCR11832615049141157889
creativeIdGoogle's creative IDCR11832615049141157889
advertiserIdGoogle's advertiser IDAR06152299239998226433
advertiserNameAdvertiser name supplied by GoogleExample Company
advertiserCountryRawRegulatory country from advertiser lookupnull
regionCollection filter, not an advertiser addressVN
searchModeSearch that produced the rowdomain
searchValueDomain, advertiser name, or ID searchedtiki.vn
targetLabelYour optional grouping labelDomain monitoring
formatLabelCreative's own formatvideo
previewUrlLink to the creative previewnull
previewImageUrlImage supplied with the search resultnull
detailUrlCreative's Transparency Center pagehttps://adstransparency.google.com/advertiser/AR06152299239998226433/creative/CR11832615049141157889
firstShownFirst shown date in ISO-8601 format2026-08-01T19:48:31+00:00
lastShownLast shown date in ISO-8601 format2026-10-13T11:45:09+00:00
headlineAd headline, when presentnull
descriptionAd text, when presentnull
destinationUrlFinal advertiser destination from preview contentnull
redirectUrlClick redirect, separate from the final destinationnull
videoIdVideo identifier from preview contentZk6YniKMwvo
variantCountNumber of detail variants, or null if not retrieved3
variantsUp to 50 variant records[]
resultCountLowerLower bound of the query's result-count range"700"
resultCountUpperUpper bound of the query's result-count range"800"
orgAdvertiser identity and optional country or D-U-N-S number{"name":"Example Company","id":null,"country":null}
webDestination website and related web fields{"website":null,"socials":[]}
leadAbsencesReasons contact or destination fields are empty{}
warningsMissing enrichment or search warnings["enrichment_skipped_budget"]
scrapedAtTime the row was collected2026-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

  1. Open Google Ads Transparency Center Scraper in Apify Console. A free Apify account is enough to try it.
  2. Fill targets with one domain or advertiser. Leave the other fields at their defaults initially.
  3. Set maxResults to 5 and review Maximum cost per run.
  4. Click Start and wait for the run to finish.
  5. 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.

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.

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.

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

FieldWhat to enterDefault
targetsArray of target objects or recognized stringsExample when empty
targets[].searchModedomain, advertiser, or political for an objectRequired in objects
targets[].searchValueDomain, URL, advertiser name, or IDRequired in objects
targets[].targetLabelOptional label copied into rowsNone
regionSupported two-letter country code or anywhereVN
maxResultsMost creative rows per distinct target, from 1 to 1,00070; form example 3
maxCreativesPerTargetOptional smaller target limitUnset
maxPagesPerTargetPage limit from 1 to 50; omit for automatic paginationDerived
creativeFormatstext, image, and/or videoAll
platformsyoutube, search, display, shopping, maps, and/or playAll
enrichDetailsMaster switch for the three enrichment options belowtrue
includeCreativeDetailsAdd creative details and variantstrue
includeVariantContentRead available preview text and destinationstrue
includeAdvertiserLookupAdd advertiser country and verification informationtrue
maxEnrichmentsRows enriched per target, from 0 to 1,0008
includeDunsMappingAdd org.duns when a matching number exists; political targets also attempt thisfalse
includeRawJsonKeep raw source data on each rowfalse
requestTimeoutSecsTimeout for an individual request, in seconds30
strictErrorsStop on lookup errors instead of retaining rows with warningsfalse

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
}
  • maxItems and limit are aliases for maxResults. target aliases targets; country and market alias region.
  • 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_REPORT in the default key-value store records input normalization and ignored fields. RUN_SUMMARY records delivered-row counts, target counts, and warnings; failed runs can have ERROR_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 planPrice per rowPrice 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 ApifyClient
client = 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

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.

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.