How to get Google Ad Library company ads
GET request to /v1/ad-library/google/company-ads with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Google publishes spend and impression ranges only for election ads; commercial advertisers omit both. isActive is true when lastShown is within 7 UTC days.How to get Google Ad Library company ads (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the Google Company Ads API
Send an authenticated GET request to /v1/ad-library/google/company-ads with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/ad-library/google/company-ads?advertiser=nike.com" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"advertiser": "nike.com",
"country": "US",
"totalReturned": 2,
"platformNote": "Google publishes spend and impression ranges only for election ads in regions that require disclosure; commercial advertisers omit both. isActive is derived from lastShown — true when the creative was seen within 7 UTC days.",
"ads": [
{
"platform": "google",
"id": "CR13596485266373083137",
"url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR13596485266373083137",
"adFormat": "image",
"firstShown": "2022-11-30T14:47:01.000Z",
"lastShown": "2026-07-26T13:01:42.000Z",
"isActive": true,
"advertiser": {
"id": "AR16735076323512287233",
"name": "Nike, Inc.",
"url": "https://adstransparency.google.com/advertiser/AR16735076323512287233"
},
"media": [
"https://tpc.googlesyndication.com/archive/simgad/1889619096914274581"
]
},
{
"platform": "google",
"id": "CR00101170943954518017",
"url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR00101170943954518017",
"adFormat": "image",
"firstShown": "2022-11-30T18:54:18.000Z",
"lastShown": "2026-07-26T12:53:39.000Z",
"advertiser": {
"id": "AR16735076323512287233",
"name": "Nike, Inc.",
"url": "https://adstransparency.google.com/advertiser/AR16735076323512287233"
},
"media": [
"https://tpc.googlesyndication.com/archive/simgad/3850814477191431652"
]
}
]
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| advertiser | string | Yes | Advertiser name, domain (e.g. nike.com), or Google advertiser ID (AR…). Prefer AR… from advertiser-search. |
| country | string | No | Two-letter ISO country / region code (soft filter). Default US. Alias: region. |
| region | string | No | Alias for country. |
| start_date | string | No | YYYY-MM-DD — keep creatives whose shown window overlaps this start. |
| end_date | string | No | YYYY-MM-DD — keep creatives whose shown window overlaps this end. |
| sort | string | No | Client-side sort: last_shown (recent activity first) or first_shown. Default is ATC order. |
| cursor | string | No | Pagination cursor from nextCursor. |
| topic | string | No | Only "all" is supported (commercial ATC). Google publishes spend and impression ranges only for election ads; commercial advertisers omit both. isActive is true when lastShown is within 7 UTC days. |
| limit | integer | No | Max items to return (default 20, max 200). Flat 2 credits when results are returned; 0 credits when totalReturned is 0. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Frequently asked questions
What does the Google Company Ads API do?
The Google Company Ads API lets you list items in bulk with metadata from a public Google Ad Library ad using one GET request to /v1/ad-library/google/company-ads. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Google Company Ads API cost?
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Google Ad Library API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why are text/spend null on Google creatives?
That is Google's limit, not a scrape miss. Google publishes spend and impression ranges only for election ads in regions that require disclosure; commercial advertisers omit both. isActive is derived from lastShown — true when the creative was seen within 7 UTC days. Image/video rows omit text/headline/cta/landingUrl (copy lives in the asset). Text-format rows keep those keys as null because the format is inferred from no media — ATC does not ship the copy. Use sort=first_shown to see isActive:false.
Why is ads[] empty — and did I pay?
Read resolution. not-in-library means Google's library has no matching advertiser (a domain like supermaker.ai). resolved-no-ads means we found the AR… entity and ATC answered with zero creatives — verified without the country filter too, so a region-tagged entity does not read as empty. resolved-filtered-out means a start_date/end_date window dropped every creative. All three are 0 credits — two byte-identical empties no longer bill differently. A proxy timeout mid-fetch is never sold as resolved-no-ads: that path retries on the extended tier and 502s only when every tier fails.
advertiser-search said adsCount 4 — why did company-ads return 0?
It should not anymore. That mismatch had one honest cause and one bug. Honest: country is a soft filter — when the AR entity's creatives carry no region tag for your country we automatically retry without the filter, so region-tagged inventory still comes back. Bug (fixed): a proxy timeout during the creatives pull used to ship ads=[] with resolution=resolved-no-ads; a transport failure now falls through to the extended tier instead of masquerading as an empty advertiser.
Why does otherMatches list a second advertiser?
A name or domain can match more than one Google AR… legal entity (Base44 vs Base44 Ltd). ads[] and adsCountEstimate are only resolvedAdvertiser. otherMatches is the rest — pass advertiser=AR… to fetch one of them. We do not merge those accounts.
What does resolution: null mean?
Ads were returned. The field is always keyed; null is not a leftover. Empty lists use not-in-library | resolved-no-ads | resolved-filtered-out.
Is the Google Company Ads API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get Google Ad Library company ads?
Start free with 100 credits — no credit card required.
Get your free API key