# Google Ads Transparency Center API — every advertiser on Google and the ads they run: search advertisers by name or domain, verified legal name and country, all ads of an advertiser or a domain with format, first / last shown date and the creative image, filtered by country, format, platform (Search, YouTube, Shopping, Maps, Play) and date; one ad with every country it ran in, EU impression ranges by country and platform and EU audience selection; election ads with spend and impression ranges and age / gender / location targeting. No login, no key.

> Look up advertisers and domains by name, the way the Transparency Center search box does. Returns matching advertisers (id, name, country, approximate number of ads, verified) and matching domains. Use the advertiser_id with `ads` / `advertiser`, the domain with `ads`.
> ReefAPI engine `google-ads-transparency` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/google-ads-transparency/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/google-ads-transparency/v1/search — 1 credit
Look up advertisers and domains by name, the way the Transparency Center search box does. Returns matching advertisers (id, name, country, approximate number of ads, verified) and matching domains. Use the advertiser_id with `ads` / `advertiser`, the domain with `ads`.

**Parameters:**
- `query` (string, required) — Advertiser name or domain to look up (free text, as typed into the site's search box).
- `limit` (integer, optional, default 10) — Advertisers and domains to return, each (1-50).

**Returns:** advertisers[]{advertiser_id, name, country, ads_count_min, ads_count_max (the source gives a range), verified, advertiser_url}, domains[]{domain}

**Example request body:**
```json
{
  "query": "nike"
}
```

### POST https://api.reefapi.com/google-ads-transparency/v1/advertisers — 1 credit
Every advertiser whose name matches the query, paged, with the total the source reports. Rows carry the verified legal name and country.

**Parameters:**
- `query` (string, required) — Advertiser name or domain to look up (free text, as typed into the site's search box).
- `limit` (integer, optional, default 40) — Advertisers per page (1-100).
- `page_token` (string, optional) — `next_page_token` from the previous page's meta.

**Returns:** rows[]{advertiser_id, name, legal_name, country, verified, advertiser_url}. meta: total (broad queries start at 500 and grow page by page: total_is_exact false), next_page_token, has_more

**Example request body:**
```json
{
  "query": "nike"
}
```

### POST https://api.reefapi.com/google-ads-transparency/v1/advertiser — 1 credit
One advertiser: name, verified legal name, country, verification status and, for election advertisers, the number of election ads, the registration id (e.g. US EIN / FEC id) and the regions they are verified for.

**Parameters:**
- `advertiser_id` (string, required) — Advertiser id (AR + 20 digits) as returned by search, advertisers or ads.

**Returns:** advertiser{advertiser_id, name, legal_name, country, verified, verticals[] (commercial / political), political{political_ads_count, registration_ids[]{id, country}, country, regions[]} (election advertisers only), advertiser_url}

**Example request body:**
```json
{
  "advertiser_id": "AR16735076323512287233"
}
```

### POST https://api.reefapi.com/google-ads-transparency/v1/ads — 2 credits
All ads of one advertiser (`advertiser_id`) or all ads pointing to one domain (`domain`, any advertiser), newest first, with format, first / last shown date, days shown and the creative image or preview. Filter by country, format, platform and date range; page with page_token. One of advertiser_id or domain is required.

**Parameters:**
- `advertiser_id` (string, optional) — Advertiser id (AR + 20 digits). Give this OR `domain`.
- `domain` (string, optional) — Every ad that points to this domain, from any advertiser (e.g. nike.com). Give this OR `advertiser_id`.
- `region` (string, optional, default "anywhere") — Where the ad was shown: two-letter country code (244 covered; US, GB, DE, FR, IN, BR, JP …) or 'anywhere'.
- `format` (enum, optional) — Ad format: text, image or video. [one of: text, image, video]
- `platform` (enum, optional) — Where the ad ran: search, youtube, shopping, maps or play. [one of: search, youtube, shopping, maps, play]
- `date_from` (string, optional) — Only ads shown on or after this date (YYYY-MM-DD).
- `date_to` (string, optional) — Only ads shown on or before this date (YYYY-MM-DD).
- `limit` (integer, optional, default 40) — Ads per page (1-100; the source returns nothing above 100).
- `page_token` (string, optional) — `next_page_token` from the previous page's meta.

**Returns:** rows[]{creative_id, advertiser_id, advertiser_name, format (text/image/video), first_shown, last_shown (ISO-8601 UTC), days_shown (days the ad was shown; Google's day boundary is not UTC, so it can be one more than the UTC span), preview_type (image = a rendered picture of the ad; html = Google's ad preview script), image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id, ad_url, advertiser_url}. meta: total_min, total_max (the source reports a range), total_is_exact false, next_page_token, has_more

**Example request body:**
```json
{
  "advertiser_id": "AR16735076323512287233",
  "region": "US"
}
```

### POST https://api.reefapi.com/google-ads-transparency/v1/political_ads — 2 credits
Election ads shown in one country, newest first, with the advertiser, the impressions range and the amount spent range in the advertiser's currency (for an ad that also ran elsewhere these are the figures the source lists for this country; `ad` gives the ad's totals). Optionally one advertiser, one format or a date range. The total is exact.

**Parameters:**
- `region` (string, required) — Two-letter country code. Election ads are listed per region.
- `advertiser_id` (string, optional) — Advertiser id (AR + 20 digits). Give this OR `domain`.
- `format` (enum, optional) — Ad format: text, image or video. [one of: text, image, video]
- `date_from` (string, optional) — Only ads shown on or after this date (YYYY-MM-DD).
- `date_to` (string, optional) — Only ads shown on or before this date (YYYY-MM-DD).
- `limit` (integer, optional, default 40) — Ads per page (1-100; the source returns nothing above 100).
- `page_token` (string, optional) — `next_page_token` from the previous page's meta.

**Returns:** rows[]{creative_id, advertiser_id, advertiser_name, format (text/image/video), first_shown, last_shown (ISO-8601 UTC), days_shown (days the ad was shown; Google's day boundary is not UTC, so it can be one more than the UTC span), preview_type (image = a rendered picture of the ad; html = Google's ad preview script), image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id, ad_url, advertiser_url, impressions_min, impressions_max, spend{currency, min, max}, regions[]}. meta: total (exact), total_is_exact true, next_page_token, has_more

**Example request body:**
```json
{
  "region": "US"
}
```

### POST https://api.reefapi.com/google-ads-transparency/v1/ad — 1 credit
One ad in full: every variation (image or preview), the topic, every country it ran in with first / last shown date, and for EU countries the impressions range per country and per platform, the EU total and the audience selection (demographics, locations, contextual signals, topics of interest, customer lists: included / excluded). Election ads add spend, impressions and age / gender / location targeting.

**Parameters:**
- `creative_id` (string, required) — Ad id (CR + 20 digits) as returned by ads / political_ads.
- `advertiser_id` (string, optional) — Advertiser id of the ad (optional; the ad id alone resolves it).

**Returns:** ad{creative_id, advertiser_id, advertiser_name, format, political, first_shown (election ads), last_shown, days_shown (election ads), topic{id, name}, variation_count, variations[]{preview_type, image_url, width, height, preview_url, google_creative_id, google_customer_id, ad_group_id}, region_count, regions[]{region, region_name, criterion_id, first_shown, last_shown, impressions_min, impressions_max, impressions_by_platform[]{platform, impressions_min, impressions_max}} (first_shown and impressions for EU countries and election ads; elsewhere last_shown only), eu{first_shown, last_shown, impressions_min, impressions_max, impressions_by_platform[]}, audience_selection{demographic_info, geographic_locations, contextual_signals, topics_of_interest, customer_lists: {included, excluded}}, ad_url}. Election ads add shown_in[], impressions_min, impressions_max, spend{currency, min, max}, targeting{age_included[], age_excluded[], gender_included[], gender_excluded[], locations_included[]{criterion_id, region, region_name}, locations_excluded[]}

**Example request body:**
```json
{
  "creative_id": "CR04967699671523786753",
  "advertiser_id": "AR16735076323512287233"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=google-ads-transparency
- Human docs page: https://reefapi.com/docs/google-ads-transparency
- Overview page: https://reefapi.com/google-ads-transparency-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
