Home › Guides › Google Ads Transparency API
Google Ads Transparency API: look up a domain's or brand's Google ads in real time
The Google Ads Transparency API is a real-time HTTP API over Google's public Ads Transparency Center. Send a domain, brand name or advertiser ID to GET /ads and the ads come back in the response: ad text (read from the ad's picture by OCR when Google keeps only a picture), image or preview, Shopping price, YouTube video ID, first and last shown dates, per-country impressions and platforms for the EEA and Turkey, the targeting approach, the topic and the advertiser's legal name. It is the Standby (always-on) edition of the Google Ads Transparency Scraper: same code, same fields, same pricing events.
Who it's for
- Developers adding competitor-ad lookups to a product, a dashboard or an internal tool.
- AI agents and automations that look up one domain, brand or advertiser at a time and need the ads in the HTTP response.
- Sales and agency tools that check whether a prospect advertises on Google —
/advertisersreturns matching advertiser accounts with their ad-count range and is not billed.
Call it
Each request carries your Apify API token in the Authorization header. Three example requests:
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 (with dateFrom / dateTo as YYYY-MM-DD) | any |
maxAds | 1–100 per request | 40 |
maxAdvertisers | Brand names only: how many of the brand's advertiser entities (1–5) | 1 |
includeDetails | Regions, impressions, platforms, targeting, topic | true |
includeAdCopy | Text lines, CTA, display URL, YouTube ID, Shopping title, price and merchant | true |
ocr | Read the text of ads Google keeps only as a picture (Latin-script languages) | true |
The response holds query, count, items — each item has the same fields as a dataset row of the scraper — and a report object (status, ads, totalAdsLow, totalAdsHigh, advertisersMatched, message, note), plus dateNote. 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 are explicit: HTTP 400 with an error giving the reason (a missing query, an unknown region, format, platform or date preset, a malformed or reversed date, a non-numeric limit), and HTTP 502 when Google cannot be reached or keeps rate-limiting.
GET /advertisers
Advertiser accounts matching a name, closest 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 response times
Requests on the Apify platform on 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 |
OCR adds 0.6–7.5 seconds per picture, depending on how busy the platform's server is, so a request is slower when many of the advertiser's ads are pictures. Set ocr=false when you do not need the text of image-only ads.
API or batch scraper?
| You need | Use |
|---|---|
| One query at a time from an app or agent, with the answer in the response | This API — up to 100 ads per request |
| Large lists, schedules, new-ad monitoring | The batch scraper — up to 100,000 ads per query, onlyNewAds monitoring |
Honest limits
- 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.
- Many ads exist only as pictures. With
ocron, their text is read from the picture (adCopyStatus: "ocr", withocrConfidence0–100); pictures that hold no ad are markedimage-placeholder. Measured: hubspot.com ads with text went from 3.5% to 100 of 100. - 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 can be the names of individuals (sole traders); treat those as personal data where GDPR or similar laws apply.
- Not affiliated with Google. The actor reads the public Ads Transparency Center, whose web interface can change.
Pricing
Pay per event, the same as the scraper: one ad event 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 by OCR. /advertisers, requests that return no ads and requests refused with HTTP 400 are not charged. Current prices are on the actor's Pricing tab on Apify.
Get an API token, then call /ads: the first ads of a domain come back in seconds, as JSON.
Related
The Google Ads Transparency Scraper guide has the full field list, data-quality measurements and the OCR accuracy review. For LinkedIn's public Ad Library, see the LinkedIn company data guide. All Google datasets are in the Google data section.
Frequently asked questions
How do I authenticate?
Every request needs an Apify API token, sent as a Bearer token in the Authorization header. No Google account or Google API key is involved.
How many ads can one request return?
Between 1 and 100, set with maxAds (default 40). The platform expects the first response within five minutes. For more ads per query, schedules or monitoring, use the batch Google Ads Transparency Scraper.
Is it the same data as the Google Ads Transparency Scraper?
Yes. The API is the Standby (always-on) edition of the scraper: same code, same fields and same pricing events. Each item in the response has the same fields as a dataset row of the scraper.
What does the /advertisers endpoint do?
It lists the advertiser accounts that match a name, closest match first, with ID, country and ad-count range, plus matching domains. A region parameter prefers advertisers based in that country. It is not billed.
What happens with an invalid parameter?
The API answers HTTP 400 with the reason, for example a missing query, an unknown region or format, or a reversed date range. Requests refused with HTTP 400 are not charged. HTTP 502 means Google could not be reached or kept rate-limiting.
Google Ads Transparency API — real-time, pay per event, OpenAPI description included.
Call the API on Apify →