---
title: "List Google Ads search terms"
method: GET
path: "/api/apps/{app_id}/google-ads/analytics/search-terms"
---

# List Google Ads search terms

`GET /api/apps/{app_id}/google-ads/analytics/search-terms`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the search terms that triggered the account's ads, ordered by impressions.

Pass either `date_range` or both `start_date` and `end_date`. Sending only one of the two dates is rejected with a 400, as is a `start_date` after `end_date`. Explicit dates win over `date_range`.

`date_range` accepts `TODAY`, `YESTERDAY`, `LAST_7_DAYS`, `LAST_14_DAYS`, `LAST_30_DAYS`, `LAST_90_DAYS`, `THIS_WEEK_MON_TODAY`, `THIS_WEEK_SUN_TODAY`, `LAST_WEEK_MON_SUN`, `LAST_WEEK_SUN_SAT`, `LAST_BUSINESS_WEEK`, `THIS_MONTH`, and `LAST_MONTH`, and defaults to `LAST_30_DAYS`. `LAST_7_DAYS`, `LAST_30_DAYS` and `LAST_90_DAYS` count back from today in the account's own time zone and include today; the other values are Google Ads' windows, which end yesterday.

At most 100 terms come back and there is no paging, so a busy account returns only its top 100. Terms are gathered from every campaign type on the account and merged into one list. When one of those reads fails the rest are still returned, under a 200 and with nothing in the response to say some terms are missing.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

## Path parameters

- `app_id` string, required — ID of the app whose Google Ads reporting you want to read.

## Query parameters

- `date_range` string — A preset window, for example `LAST_7_DAYS` or `LAST_MONTH`. Ignored when `start_date` and `end_date` are both set.
- `start_date` string, nullable — First day of an explicit window, as `YYYY-MM-DD`. Requires `end_date`.
- `end_date` string, nullable — Last day of an explicit window, as `YYYY-MM-DD`. Requires `start_date`.

## Response `200`

Up to 100 search terms, highest impressions first.

- SearchTermRow[]
  - `search_term` string, required — The term the user searched for.
  - `campaign` string, required — Name of the campaign whose ad the term matched.
  - `impressions` integer, required — Impressions the term drove in the window.
  - `clicks` integer, required — Clicks the term drove in the window.
  - `cost_micros` integer, required — Amount spent on the term in the window, in micros of the account's currency.
  - `conversions` number, required — Conversions attributed to the term in the window.

## Other responses

- `400` — `date_range` is not one of the supported values, only one of `start_date` / `end_date` was sent, a date is not `YYYY-MM-DD`, or `start_date` is after `end_date`.
- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, the app does not exist, or you used a workspace API key. A missing app and an app you cannot reach are deliberately the same answer.
- `404` — The app has no connected Google Ads account.

## Changes

- **2026-08-30** `394136a6cdd4` — 1 info
  - removed the non-success response with the status `422`
- **2026-08-26** `f2727732ced1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/analytics/search-terms/get.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/idealspot/base44-app-management-api/revisions/394136a6cdd4/schema)
