Google Ads Transparency API — Real-time Ad Lookup
Pricing
from $1.00 / 1,000 ads
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
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®ion=FR&maxAds=5"
curl -H "Authorization: Bearer YOUR_APIFY_TOKEN" \"https://foxlabs--google-ads-transparency-api.apify.actor/advertisers?query=hubspot"
Endpoints
GET /ads
| Parameter | Values | Default |
|---|---|---|
query (required) | Domain (nike.com), brand name (Nike), advertiser ID (AR…) or Transparency Center URL | — |
region | ISO country code (US, DE, TR …) or anywhere | anywhere |
adFormat | all, text, image, video | all |
platform | all, search, youtube, maps, play, shopping | all |
datePreset | any, 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 |
maxAds | 1–100 per request | 40 |
maxAdvertisers | Brand names only: how many of the brand's advertiser entities (1–5) | 1 |
includeDetails | true / false — regions, impressions, platforms, targeting, topic | true |
includeAdCopy | true / false — text lines, CTA, display URL, YouTube ID, Shopping title, price and merchant | true |
ocr | true / 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 is | true |
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)
| Request | Result | Time |
|---|---|---|
/ads?query=nike.com&maxAds=10, first request (cold start) | 10 ads, all with details | 10.7 s |
/ads?query=Decathlon®ion=FR&maxAds=5, warm | 5 ads, matched Decathlon France SASU | 5.4 s |
/advertisers?query=hubspot | 3 advertiser accounts + 10 domains | 1.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
ocron (the default) their text is read from the picture:adCopyStatus: "ocr"andocrConfidence(0–100). Pictures that hold no ad are markedimage-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.