Google Ads Transparency Center Scraper & Google Ads Library
Pricing
from $0.64 / 1,000 ad returneds
Google Ads Transparency Center Scraper & Google Ads Library
Google Ads Transparency Center scraper (Google Ads Library) by domain, advertiser name or ID: run dates, landing domain, image, countries by name; ad copy when Google's preview serves it. Bench 10-09: 8 of 11 hand-checked facts vs 5 of 11; Google refused 1 of 4 runs. $0.75/1k ads. Unofficial.
Pricing
from $0.64 / 1,000 ad returneds
Rating
0.0
(0)
Developer
hiver
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Google Ads Transparency Center Scraper & Google Ads Library: ad copy and countries by company
See the ads any company runs on Google, and where they ran, by country name. The Google Ads Transparency Center is Google's public ad library. Give this Actor company domains, advertiser names or advertiser IDs and get one row per ad: advertiser, first and last shown dates, landing domain, format, image URL, and the countries it ran in as names (United States), not just codes. Headline, body text and YouTube ID are added when Google's preview serves them; that is best effort, and each row's contentStatus says whether the creative content is complete or partial.
$0.75 per 1,000 ads on the free Apify plan, less on paid plans. No start fee. Failed and empty queries return no ad and are not charged.
Unofficial. Not affiliated with, endorsed by or sponsored by Google. Reads the public Ads Transparency Center without a login. No spend estimates, invented copy, OCR or private targeting data.
Measured against the most-used alternative
Our board's Lab bench gives this Actor and the most-used Google Ads Transparency Actor on the Apify Store (about 900 monthly users) the same four jobs in the US: nike.com text ads, nike.com video ads, notion.so text ads, and nike.com text ads in metadata-only mode (includeAdCopy: false). It checks the answers against 11 facts verified by hand in the Ads Transparency Center (headline, body text, landing domain, country names, image, YouTube ID). Latest bench run 2026-10-09 22:17 UTC, build 0.1.26; the bench verdict was FAIL, because this Actor finished fewer runs with results:
| This Actor | Most-used alternative | |
|---|---|---|
| Runs finished with ads | 3 of 4 | 4 of 4 |
| Hand-checked facts matched | 8 of 11 | 5 of 11 |
| nike.com text ads: headline, body text, landing domain, country name | 4 of 4 | 1 of 4 |
| nike.com video ads: YouTube ID | 1 of 1 | 0 of 1 |
| notion.so text ads: images, country name | 3 of 3 | 2 of 3 |
| nike.com text ads, metadata-only mode | 0 of 3 (Google refused the first request) | 2 of 3 |
| Fields filled | 64% | 59% |
| Average run time per job | 44.5 s | 2.7 s |
| Price per 1,000 ads in these runs (bench account on Apify's Starter plan) | $0.72 | $2.00 |
Refusal risk, plainly: in that bench Google answered one of this Actor's four runs with a redirect to google.com on the first request, and the run stopped with 0 ads and an uncharged error row. This Actor does not retry through other IPs or identities, so expect some runs to stop like that; re-run later. When it does get through, it returned more of the hand-checked ad copy than the alternative. The alternative finishes much faster. Four jobs are a small sample; earlier benches on builds 0.1.16 to 0.1.25 are not repeated here because the latest build did not reproduce them.
Runs use one Apify datacenter proxy session by default; if Google refuses a request, the run stops there (see "What happens on a block?").
Input
queries: domains (nike.com), names (Nike) or exact advertiser IDs (AR16735076323512287233). A name chooses the first matching advertiser unlessmaxAdvertisersPerNameis increased.maxAdsPerQuery: 1–10,000, default 100.regions: optional ISO two-letter countries, such asUS,GB,DE. These are converted to Google's geo-target IDs, not ISO numeric codes.format:any,text,image,video.startDate,endDate: optional YYYY-MM-DD filters. Invalid dates are ignored individually; reversed ranges are ignored. Unknown region codes are skipped while valid codes remain. The status message explains each correction and what to try. These input-correction runs finish successfully and all returned rows are uncharged. A truly emptyqueriesinput still fails.includeRegions: default true. Turning this off omits region data, not creative extraction.includeAdCopy: true(default, full mode): best-effort headline, body and video extraction with paced preview GETs; on the 2026-10-09 22:17 UTC bench (build 0.1.26) the three full-mode jobs took 12.6 s to 97.5 s.includeAdCopy: false(metadata-only mode): no preview GETs or copy extraction; keeps list images, landing domains and country names from the detail RPC, withcontentStatus: skipped_by_input. In the same bench Google refused this mode's run on its first request (0 ads), so no speed or completeness figure is claimed for it.requestDelaySecs: optional; omitted means a 2-second post-response pause in full mode or serialized RPC starts at least 1 second apart in fast mode (response time counts toward that interval). Explicit values retain a post-response pause in either mode, minimum 1 second. Full-mode preview GETs wait at least 5 seconds before contact; successful exact-URL previews are reused within the run (up to 16 cached). Requests are serialized. Uncharged error rows includesourceRefusalwith request stage, HTTP status and redirect host only (no redirect query).proxyConfiguration: defaults to Apify datacenter (auto group), one fixed session for Google RPCs only; previews stay direct, unavailable proxy falls back to direct before requests, and a Google refusal stops the run without retry or routing changes.
{"queries": ["nike.com"], "regions": ["US"], "format": "text", "maxAdsPerQuery": 10}
Output
Identifiers and metadata: advertiserId, advertiserName, adId, format, firstShown, lastShown, landingDomain, variationCount, adUrl, previewUrl.
Creative content:
headline,text: ad copy from native creative HTML or Google's preview content.js (text-ad data-p records and semantic headline/description anchors). The advertiser name or landing domain is never substituted for a missing headline.imageUrl: an image exposed in creative HTML or the preview source, not a logo or tracking pixel.videoUrl,youtubeId: filled only when Google's preview exposes a YouTube ID. Video files are not downloaded.contentSources: per-field source (creative_rpc_html,preview_content_js, etc.).contentUnavailableReasons: why a content field is null: source does not expose it, format is not video, fetch/parse failure, or unsupported preview URL.contentStatus:skipped_by_inputin metadata-only mode (includeAdCopy: false); otherwisecompletewhen text ads have headline and body, image ads have an image, or video ads have a video URL plus headline and body; otherwisepartial. Text ads that Google serves only as a picture keep their image and null copy with a reason. This is a per-row extraction indicator, not a bench score or a claim that all variations were retrieved.
Regions:
regions: ISO country codes, such asGB,US.regionNames: human-readable country names, such asUnited Kingdom,United States.regionIds: the original Google geo-target IDs, such as2826,2840.regionDetails: original ID, code, name and per-region dates. Unknown IDs stay inregionIdsand have a null name with a reason. Missing dates stay null.
Country names use Google's geo-target country CSV, version 2026-08-12.
Empty queries and failures produce an uncharged success: false row with an error. A metadata row with unavailable creative content is still a charged ad; check contentStatus and the null reasons before relying on ad copy.
Uses
- Competitor ad research: which ads a rival runs on Google, in which countries and since when, with the ad copy when Google's preview serves it.
- Agency pitches and audits: pull a prospect's live ads and landing domains before the call.
- Monitoring: run it per competitor on a schedule and compare
firstShowndates to spot new ads.
Creative limitations
Google sometimes serves only a flattened screenshot or a preview with no machine-readable copy. This Actor does not transcribe text from images. It downloads public content.js with a plain HTTP GET and decodes the HTML passed to Google's preview insertion function without executing JavaScript or starting a browser. It parses text-ad data-p records and headline/description anchors. It does not visit advertiser landing pages or stream videos. Up to three available preview representations are tried per ad; results are the first available fields, not an exhaustive export of every variation. Source changes, expired previews and rate limits can leave fields null.
A domain query includes ads pointing to that domain from any advertiser, including agencies or resellers. Use an advertiser ID for one legal entity. Dates and counts are Google's public values on the day of the run.
Pricing
Pay per event, one ad-result event per ad returned:
| Ads returned, per 1,000 | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Price | $0.75 | $0.72 | $0.68 | $0.64 |
There is no run fee, start event or separate detail charge. A ten-ad billable run on the free plan costs $0.00750. Empty results and input-correction runs cost $0. Set maxAdsPerQuery to cap spending. Apify platform usage is included in these prices.
FAQ
Is every ad or variation returned?
Google determines the public catalog. Search filters and public previews can vary over time. The cap applies per query; full variation export is not supported.
Is a preview link the same as ad text?
No. previewUrl is only the source preview. headline and text contain extracted ad copy; when extraction fails they are null with reasons.
Does it get video ad content?
Best effort. Video rows carry the YouTube ID and link, headline and body text only when Google serves the preview. If Google rate-limits the preview, the run stops cleanly and the rows are marked contentStatus: partial, with a reason in contentUnavailableReasons. Fetched video rows keep advertiser, dates and landing domain. Video files are not downloaded.
What happens on a block?
The run stops with an uncharged error row and no further source requests. Already fetched ads are preserved, including the remaining search-page metadata when an optional preview or detail request refuses access; these valid ad rows are charged even when content is partial, unless input corrections made the run uncharged. enrichmentUnavailableReason explains the refusal. It does not follow refused redirects, solve CAPTCHAs, rotate IPs or change identity to bypass the block. Re-run later with a lower request rate.
How do I report missing content?
Open an issue on this Actor's Issues tab with the input, run link and adId. Include contentUnavailableReasons if present.