Google Ad Library · Guide

How to get Google Ad Library company ads

TL;DR
To get Google Ad Library company ads, sign up for a free Captapi key, then send one 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. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 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. 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

NameTypeRequiredDescription
advertiserstring YesAdvertiser name, domain (e.g. nike.com), or Google advertiser ID (AR…). Prefer AR… from advertiser-search.
countrystringNoTwo-letter ISO country / region code (soft filter). Default US. Alias: region.
regionstringNoAlias for country.
start_datestringNoYYYY-MM-DD — keep creatives whose shown window overlaps this start.
end_datestringNoYYYY-MM-DD — keep creatives whose shown window overlaps this end.
sortstringNoClient-side sort: last_shown (recent activity first) or first_shown. Default is ATC order.
cursorstringNoPagination cursor from nextCursor.
topicstringNoOnly "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.
limitintegerNoMax items to return (default 20, max 200). Flat 2 credits when results are returned; 0 credits when totalReturned is 0.
cachebooleanNoSet 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