Google Ads Transparency Scraper avatar

Google Ads Transparency Scraper

Under maintenance

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Google Ads Transparency Scraper

Google Ads Transparency Scraper

Under maintenance

Searches Google Ads Transparency Center for an exact public advertiser name and returns bounded creative-grid records with advertiser identity, format, links, and available media. Supports regional filters and optional proxies; stops at access barriers.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

Share

What does Google Ads Transparency Scraper do?

This Actor uses the public Google Ads Transparency Center interface to select one exact advertiser suggestion and collect a bounded set of public creative cards. Each dataset row retains the historical recordType, status, recordId, and extractionMethod fields alongside advertiser and creative identity, visible creative format, public URLs, advertiser context, target region, query, and source-page timestamp. Terminal failures are saved as typed DIAGNOSTICS key-value records and summarized in OUTPUT plus the backward-compatible OUTPUT_SUMMARY; only creative rows enter the dataset.

The Actor is useful for small competitive-creative snapshots, advertiser-presence checks, and regional creative review. It uses ordinary browser behavior and optional explicit proxy routing. Apify API access, scheduling, integrations, run history, and monitoring can be used around the Actor without changing Google's public access boundary.

Why use it?

  • Capture stable public advertiser and creative IDs.
  • Compare visible image, video, and rich-media creative formats.
  • Preserve advertiser verification, base-region, disclaimer, and approximate ad-count context when Google displays them.
  • Keep blocked, unavailable, and empty outcomes explainable through a separate key-value summary.

How to use Google Ads Transparency data

  1. Open the Input tab and enter the exact advertiser label shown by Google.
  2. Choose a two-letter region or ANYWHERE and a conservative creative limit.
  3. Leave proxy configuration unset for direct access, or provide one explicit Apify/custom proxy configuration.
  4. Start the run and inspect the dataset plus OUTPUT_SUMMARY.

Input

Search configuration

FieldTypeDefaultDescription
advertiserNamestringrequiredExact advertiser suggestion text, normalized and limited to 100 characters.
countrystringUSTwo-letter region code or ANYWHERE.

Pagination and limits

FieldTypeDefaultDescription
maxItemsinteger10Maximum creative rows from the selected public grid, from 1 to 20.

Developer options

FieldTypeDefaultDescription
searchTimeoutMsinteger20000Browser wait bound from 5,000 to 30,000 milliseconds.
captureEvidencebooleanfalseSave suggestion and creative-grid HTML with exact-URL/SHA-256 metadata in the key-value store.
proxyConfigurationobjectdirectOne explicit Apify Proxy configuration or one HTTP(S) custom proxy. It is wired into Chromium and is not a CAPTCHA or fingerprint bypass.

Simple input:

{
"advertiserName": "Google LLC",
"country": "US",
"maxItems": 5
}

Bounded input:

{
"advertiserName": "Example Advertiser",
"country": "ANYWHERE",
"maxItems": 3,
"searchTimeoutMs": 10000
}

Developer/proxy input:

{
"advertiserName": "Example Advertiser",
"country": "US",
"maxItems": 2,
"searchTimeoutMs": 15000,
"proxyConfiguration": { "useApifyProxy": false, "proxyUrls": ["https://proxy.example.invalid:8443"] }
}

The Actor has one advertiser source and does not expose page-number pagination because the public grid is loaded by the selected advertiser view. maxItems is global to that grid. Unknown fields and conflicting proxy options are rejected.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Normal dataset rows retain the historical creative contract:

{
"recordType": "CREATIVE",
"status": "OK",
"recordId": "CR456",
"rank": 1,
"advertiserId": "AR123",
"creativeId": "CR456",
"advertiserName": "Example Advertiser",
"advertiserVerified": true,
"creativeFormat": "IMAGE",
"creativeUrl": "https://adstransparency.google.com/advertiser/AR123/creative/CR456",
"advertiserProfileUrl": "https://adstransparency.google.com/advertiser/AR123",
"targetRegion": "US",
"query": "Example Advertiser",
"sourcePageUrl": "https://adstransparency.google.com/?region=US",
"extractionMethod": "ordinary_browser_public_creative_grid",
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

The OUTPUT_SUMMARY key-value record includes status, creative count, diagnostic count, advertiser, region, completion time, and—when applicable—bounded error code, message, source URL, HTTP status, and response size. The separate DIAGNOSTICS key-value record retains the historical recordType: "DIAGNOSTIC", status, message, HTTP evidence, and source context.

Data table

GroupFields
IdentityadvertiserId, creativeId, advertiserName, rank
Advertiser contextadvertiserVerified, advertiserBaseRegion, suggestionDisclaimer, approximateAdvertiserAds
CreativecreativeFormat, creativeUrl, advertiserProfileUrl, mediaUrl
ProvenancetargetRegion, query, sourcePageUrl, scrapedAt

Pricing, performance, and limitations

One browser page, the selected creative cap, wait timeout, and optional proxy startup drive runtime and compute use. Larger limits and timeouts can cost more. Google controls suggestions, regional inventory, creative ordering, media availability, markup, and access. The Actor does not log in, solve CAPTCHA challenges, use stealth/fingerprint masking, or promise complete advertiser inventory.

Responsible use and support

Use only public information and follow Google's terms, robots guidance, rate limits, privacy law, and applicable law. Results may contain personal data shown publicly by an advertiser; use a lawful purpose and minimize retention. This Actor is not affiliated with Google. For bugs or feature requests, use the Actor Issues/API tab and include a run ID plus the OUTPUT_SUMMARY status.

Creative identity and storage safeguards

Creative and advertiser profile URLs must identify the same Google advertiser and creative. When a card omits its advertiser name/profile, the exact selected public suggestion and the advertiser ID already present in its creative URL supply those fields. Summaries retain the number of confirmed writes if later persistence fails. Live Google extraction remains unverified by the local regression suite.

Bounded validation and evidence

qa-input.json uses Google LLC, US, maxItems: 2, a 20-second wait bound, direct access, and captureEvidence: true. It is a cloud-validation candidate, not evidence that Google currently returns records.

With evidence enabled, EVIDENCE_SUGGESTIONS_HTML captures the advertiser suggestions before selection, and EVIDENCE_HTML captures the creative grid after extraction. Their metadata keys are EVIDENCE_SUGGESTIONS and EVIDENCE. Each snapshot captures its DOM and exact URL atomically, then records UTF-8 byte count, SHA-256 and capture time. OUTPUT/OUTPUT_SUMMARY.evidenceStages lists the persisted snapshots and readback keys; .evidence preserves the creative/terminal snapshot. A terminal failure uses the historical EVIDENCE_HTML/EVIDENCE keys with stage terminal_page. This is rendered HTML, not a claimed raw HTTP response. Failed evidence capture or persistence is explicit in evidenceError and structured evidenceFailures: snapshot/save stage, sanitized original error name/message, API type/status where present, whether the HTML write completed, and attempted snapshot metadata. No automatic capture retry or source navigation is added. Missing verification badges produce no verification field, rather than a fabricated false value.

The actor uses Playwright 1.54.1 with the matching Apify image, honors CRAWLEE_DEFAULT_BROWSER_PATH, and stops on CAPTCHA, consent/login barriers, 401/403/429 or challenge text. There is no identity rotation, retry, stealth layer or proxy fallback. A missing grid without a visible empty-results message is source-unavailable, not a fabricated empty inventory.

Run npm ci && npm run check for syntax, offline contracts and strict input/dataset/summary schema checks. Run npm run test:browser separately for a local synthetic DOM fixture with outbound requests blocked. The browser fixture requires a host that permits Chromium IPC; see LOCAL_VERIFICATION.md for the current blocked stage.