> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Google Ads 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>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/google-ads/analytics/search-terms
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/google-ads/analytics/search-terms:
    get:
      summary: List Google Ads search terms
      description: >-
        <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>
      operationId: get_search_terms_api_apps__app_id__google_ads_analytics_search_terms_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads reporting you want to read.
            title: App Id
          description: ID of the app whose Google Ads reporting you want to read.
          example: 6820f3a4e7b91d003c45a1f2
        - name: date_range
          in: query
          required: false
          schema:
            type: string
            description: >-
              A preset window, for example `LAST_7_DAYS` or `LAST_MONTH`.
              Ignored when `start_date` and `end_date` are both set.
            default: LAST_30_DAYS
            title: Date Range
          description: >-
            A preset window, for example `LAST_7_DAYS` or `LAST_MONTH`. Ignored
            when `start_date` and `end_date` are both set.
          example: LAST_30_DAYS
        - name: start_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              First day of an explicit window, as `YYYY-MM-DD`. Requires
              `end_date`.
            title: Start Date
          description: >-
            First day of an explicit window, as `YYYY-MM-DD`. Requires
            `end_date`.
          example: '2026-08-01'
        - name: end_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Last day of an explicit window, as `YYYY-MM-DD`. Requires
              `start_date`.
            title: End Date
          description: >-
            Last day of an explicit window, as `YYYY-MM-DD`. Requires
            `start_date`.
          example: '2026-08-31'
      responses:
        '200':
          description: Up to 100 search terms, highest impressions first.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SearchTermRow'
                title: SearchTerms
        '400':
          description: >-
            `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':
          description: Missing or invalid credentials.
        '403':
          description: >-
            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':
          description: The app has no connected Google Ads account.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    SearchTermRow:
      properties:
        search_term:
          type: string
          title: Search Term
          description: The term the user searched for.
          example: oak dining table
        campaign:
          type: string
          title: Campaign
          description: Name of the campaign whose ad the term matched.
          example: Spring sale - Search
        impressions:
          type: integer
          title: Impressions
          description: Impressions the term drove in the window.
          example: 980
        clicks:
          type: integer
          title: Clicks
          description: Clicks the term drove in the window.
          example: 17
        cost_micros:
          type: integer
          title: Cost Micros
          description: >-
            Amount spent on the term in the window, in micros of the account's
            currency.
          example: 24500000
        conversions:
          type: number
          title: Conversions
          description: Conversions attributed to the term in the window.
          example: 2
      type: object
      required:
        - search_term
        - campaign
        - impressions
        - clicks
        - cost_micros
        - conversions
      title: SearchTermRow
      description: One search term someone used before seeing an ad.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````