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",
    "resolvedAdvertiser": {
      "id": "AR16735076323512287233",
      "name": "Nike, Inc.",
      "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233"
    },
    "otherMatches": [
      {
        "id": "AR04119126533128323073",
        "name": "Nike, Inc."
      },
      {
        "id": "AR06535278389996027905",
        "name": "NIKE, Inc."
      }
    ],
    "resolution": null,
    "country": "US",
    "totalReturned": 2,
    "adsCountEstimate": 10000,
    "hasMore": true,
    "nextCursor": "eyJ2IjoxLCJhZHZlcnRpc2VySWQiOiJBUjE2NzM1MDc2MzIzNTEyMjg3MjMzIiwicnBjQ3Vyc29yIjoiQ2dvQVA3em1oenU0OVJhdkVoRFlxZUdHbW03YWpmdmJ6NUlBQUFBQUdnbjgrR2NhK0x6UUl3OD0iLCJyZWdpb25Nb2RlIjoicmVxdWVzdGVkIiwiYWRzQ291bnRFc3RpbWF0ZSI6MTAwMDAsIm5hbWUiOiJOaWtlLCBJbmMuIiwib3RoZXJNYXRjaGVzIjpbeyJpZCI6IkFSMDQxMTkxMjY1MzMxMjgzMjMwNzMiLCJuYW1lIjoiTmlrZSwgSW5jLiJ9LHsiaWQiOiJBUjA2NTM1Mjc4Mzg5OTk2MDI3OTA1IiwibmFtZSI6Ik5JS0UsIEluYy4ifV19",
    "ads": [
      {
        "platform": "google",
        "id": "CR02977074963682426881",
        "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR02977074963682426881",
        "adFormat": "image",
        "firstShown": "2023-11-16T23:30:53.000Z",
        "lastShown": "2026-10-19T13:23:33.000Z",
        "advertiser": {
          "id": "AR16735076323512287233",
          "name": "Nike, Inc.",
          "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233",
          "logo": null,
          "location": null
        },
        "media": [
          "https://tpc.googlesyndication.com/archive/simgad/810345085057543146"
        ],
        "isActive": true,
        "text": null,
        "headline": null,
        "cta": null,
        "landingUrl": null
      },
      {
        "platform": "google",
        "id": "CR04247469939868303361",
        "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR04247469939868303361",
        "adFormat": "image",
        "firstShown": "2023-11-16T23:49:37.000Z",
        "lastShown": "2026-10-19T13:22:22.000Z",
        "advertiser": {
          "id": "AR16735076323512287233",
          "name": "Nike, Inc.",
          "url": "https://adstransparency.google.com/advertiser/AR16735076323512287233",
          "logo": null,
          "location": null
        },
        "media": [
          "https://tpc.googlesyndication.com/archive/simgad/12368039244432377269"
        ],
        "isActive": true,
        "text": null,
        "headline": null,
        "cta": null,
        "landingUrl": null
      }
    ]
  }
}

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. Non-ISO codes are a definitive 400 INVALID_COUNTRY.
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 access, 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 network timeout mid-fetch is never sold as resolved-no-ads: it is a 503, retryable, 0 credits.

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 network 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