Google Ads Transparency API — Real-time Ad Lookup avatar

Google Ads Transparency API — Real-time Ad Lookup

Pricing

from $1.00 / 1,000 ads

Go to Apify Store
Google Ads Transparency API — Real-time Ad Lookup

Google Ads Transparency API — Real-time Ad Lookup

Real-time HTTP API over the Google Ads Transparency Center (ad library). GET /ads with a domain, brand or advertiser ID returns its ads: text (OCR for image-only ads), image, YouTube ID, per-country impressions (EEA/TR), platforms, targeting, topic, Shopping price. Pay per ad.

Pricing

from $1.00 / 1,000 ads

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

A real-time HTTP API over the public Google Ads Transparency Center. Send a domain, brand or advertiser ID and get its ads back in seconds: ad text — read from the ad's picture (OCR) when Google keeps only a picture — image or preview, Shopping price, YouTube video ID, first and last shown date, per-country impressions and platform breakdown (EEA and Turkey), audience-targeting approach, topic and the advertiser's legal name.

This is the Standby (always-on API) edition of Google Ads Transparency Scraper. Same code, same fields, same pricing events. Use this one to call it from your app or agent one query at a time. Use the scraper for large batch jobs, schedules and monitoring.

Call it

curl -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
"https://foxlabs--google-ads-transparency-api.apify.actor/ads?query=nike.com&maxAds=10"
curl -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
"https://foxlabs--google-ads-transparency-api.apify.actor/ads?query=Decathlon&region=FR&maxAds=5"
curl -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
"https://foxlabs--google-ads-transparency-api.apify.actor/advertisers?query=hubspot"

Endpoints

GET /ads

ParameterValuesDefault
query (required)Domain (nike.com), brand name (Nike), advertiser ID (AR…) or Transparency Center URL—
regionISO country code (US, DE, TR …) or anywhereanywhere
adFormatall, text, image, videoall
platformall, search, youtube, maps, play, shoppingall
datePresetany, last7, last30, last90, last365, custom (+ dateFrom, dateTo as YYYY-MM-DD; the dates also work on their own, and a fixed period takes precedence over them)any
maxAds1–100 per request40
maxAdvertisersBrand names only: how many of the brand's advertiser entities (1–5)1
includeDetailstrue / false — regions, impressions, platforms, targeting, topictrue
includeAdCopytrue / false — text lines, CTA, display URL, YouTube ID, Shopping title, price and merchanttrue
ocrtrue / false — read the text of ads Google keeps only as a picture (OCR, Latin-script languages); 0.6–7.5 s per picture, depending on how busy the platform's server istrue

Response: { "query", "count", "items": [ … ], "report": { "status", "ads", "totalAdsLow", "totalAdsHigh", "advertisersMatched", "message", "note" }, "dateNote" }. Each item has the same fields as a dataset row of the scraper. The full list and a sample row are in the scraper's README. report.note says when no advertiser carries the exact brand name and the closest match was used; dateNote says when a fixed period overrode dateFrom / dateTo.

Errors: HTTP 400 with { "error" } giving the reason for a missing query, an unknown region, adFormat, platform or datePreset, a malformed or reversed date, or a non-numeric maxAds / maxAdvertisers. HTTP 502 when Google cannot be reached or keeps rate-limiting.

GET /advertisers

Advertiser accounts matching a name, best match first, with ID, country and ad-count range, plus matching domains. region prefers advertisers based in that country. Not billed.

An OpenAPI 3 description of both endpoints is attached to the Actor.

Measured on the Apify platform (2026-09-23)

RequestResultTime
/ads?query=nike.com&maxAds=10, first request (cold start)10 ads, all with details10.7 s
/ads?query=Decathlon&region=FR&maxAds=5, warm5 ads, matched Decathlon France SASU5.4 s
/advertisers?query=hubspot3 advertiser accounts + 10 domains1.1 s

Pricing

Pay per event, same as the scraper: ad for every delivered ad, plus ad-detail when details were returned and ad-copy when text or other copy fields were read, from the preview or from the ad's picture (OCR). /advertisers, requests that return no ads and requests refused with HTTP 400 are not charged. See the Pricing tab.

Limits and notes

  • Up to 100 ads per request. The platform expects the first response within five minutes. For more ads, use the scraper.
  • Impressions are published by Google only for the EEA and Turkey, and only for ads that have run there for about three months; new ads have none yet.
  • Google keeps many search ads, and most image ads, only as a picture of the ad. With ocr on (the default) their text is read from the picture: adCopyStatus: "ocr" and ocrConfidence (0–100). Pictures that hold no ad are marked image-placeholder. Measured: hubspot.com ads with text went from 3.5% to 100 of 100; the scraper's README has coverage, the accuracy review and speed. OCR makes a request slower when many ads are pictures.
  • A domain query returns the ads that lead to that domain, whoever runs them; query the AR… advertiser ID for one account only.
  • Advertiser names are published by Google and can be the names of individuals (sole traders); treat those as personal data where GDPR or similar laws apply.
  • Every request needs an Apify API token.
  • Not affiliated with Google. The Actor reads the public Ads Transparency Center, whose web interface can change.

Changelog

0.1.9 — 2026-09-26

Same code as the scraper's 0.1.13: the text of ads Google keeps only as a picture is read by OCR (ocr=true by default), with adCopyStatus: "ocr" and ocrConfidence; pictures that hold no ad are marked image-placeholder. See CHANGELOG.md.

0.1.8 — 2026-09-26

Same code as the scraper's 0.1.9, before publication: invalid parameters (unknown region, format, platform or date preset, malformed dates, non-numeric maxAds) are answered with HTTP 400 and the reason instead of being dropped; dateFrom / dateTo work on their own; Shopping items get price and merchantName no longer holds prices; creative URLs keep the YouTube ID; icons and invisible characters are no longer reported as ad content. See CHANGELOG.md.

0.1 — 2026-09-23

First version. See CHANGELOG.md.