---
title: "Google Ads search terms report"
method: GET
path: "/v1/ads/search-terms"
tags: ["Ad Insights"]
---

# Google Ads search terms report

`GET /v1/ads/search-terms`

The actual search queries that triggered your ads, with matched-keyword
status and spend metrics, the raw material for wasted-spend analysis and
negative-keyword lists. Reads Google's `search_term_view`, cached for
the quota window; defaults to the last 30 days. Rows are ordered by
cost, descending. Draws on the shared Google Ads operations budget.
The response carries `cachedAt` and `stale`, set when a quota-exhausted
call falls back to the last-good copy instead of a live read.

## Query parameters

- `accountId` string, required
- `customerId` string
- `fromDate` string, date
- `toDate` string, date
- `campaignId` string
- `adGroupId` string
- `pageToken` string

## Response `200`

Search terms

- object
  - `customerId` string
  - `data` object[]
    - `searchTerm` string, nullable
    - `status` string, nullable — ADDED / EXCLUDED / ADDED_EXCLUDED / NONE: whether the term is already a keyword or a negative.
    - `matchType` string, nullable — How the term matched (BROAD, PHRASE, EXACT, NEAR_PHRASE, NEAR_EXACT).
    - `campaignId` string, nullable
    - `campaignName` string, nullable
    - `adGroupId` string, nullable
    - `adGroupName` string, nullable
    - `impressions` integer
    - `clicks` integer
    - `costMicros` integer — Cost in micros of the account currency (divide by 1,000,000).
    - `conversions` number
    - `conversionsValue` number
  - `paging` object
    - `nextPageToken` string, nullable — Null when the last page was returned.
  - `cachedAt` string, date-time, nullable — When this data was fetched from Google. Null when it was never served from cache.
  - `stale` boolean — True when Google's daily API quota was exhausted and this is the last successful fetch, not a live read.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409` — The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.
- `429` — Google Ads operations budget exhausted; retry later.
- `501` — Only available on Google Ads accounts

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 3 info
  - added the optional property `details/budgetScope` to the response with the `400` status
  - added the optional property `details/budgetScope` to the response with the `404` status
  - added the optional property `details/budgetScope` to the response with the `409` status
- **2026-09-15** `0dba7d004d75` — 6 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaExhausted` to the response with the `409` status
  - added the optional property `details/quotaScope` to the response with the `400` status
  - …2 more
- **2026-09-10** `e70ed06e7150` — 2 info
  - added the non-success response with the status `404`
  - added the non-success response with the status `409`
- **2026-09-08** `d7a8fa118ef0` — 2 info
  - added the optional property `cachedAt` to the response with the `200` status
  - added the optional property `stale` to the response with the `200` status
- **2026-08-10** `1e9a379eafca` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/search-terms/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/339f59df69dd?raw)
