> ## 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.

# Get Google Ads performance dashboard

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

Returns the account's spend, clicks, impressions, conversions and return on ad spend for a date window, each with its change against the previous window of the same length, plus a per-campaign breakdown.

Base44 reads these numbers from Google Ads on every call. When Google is unavailable it falls back to its own nightly copy, which is the same shape minus `trend` and `conversion_goals`: write your client to treat both as optional rather than assuming the live shape.

Archived campaigns stay in both the totals and the breakdown, so the rows always sum to the figures above them.

`conversions` and `conversions_trend` are `null` for an account that records no conversions and has no conversion tracking configured, so a real zero stays distinguishable from an untracked account. [List conversion actions](/api-reference/list-google-ads-conversion-actions) shows whether the account has any goals at all.

Set `include_campaign_trend` to `false` to drop the per-campaign daily sparkline. It costs one Google Ads row per campaign per day, so leaving it on is noticeably slower on an account with many campaigns and a long window.

<Note>`start_date` and `end_date` are inclusive and must both be `YYYY-MM-DD`. Anything else is rejected with a 400.</Note>

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

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/google-ads/analytics/dashboard
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/dashboard:
    get:
      summary: Get Google Ads performance dashboard
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns the account's spend, clicks, impressions, conversions and return
        on ad spend for a date window, each with its change against the previous
        window of the same length, plus a per-campaign breakdown.


        Base44 reads these numbers from Google Ads on every call. When Google is
        unavailable it falls back to its own nightly copy, which is the same
        shape minus `trend` and `conversion_goals`: write your client to treat
        both as optional rather than assuming the live shape.


        Archived campaigns stay in both the totals and the breakdown, so the
        rows always sum to the figures above them.


        `conversions` and `conversions_trend` are `null` for an account that
        records no conversions and has no conversion tracking configured, so a
        real zero stays distinguishable from an untracked account. [List
        conversion actions](/api-reference/list-google-ads-conversion-actions)
        shows whether the account has any goals at all.


        Set `include_campaign_trend` to `false` to drop the per-campaign daily
        sparkline. It costs one Google Ads row per campaign per day, so leaving
        it on is noticeably slower on an account with many campaigns and a long
        window.


        <Note>`start_date` and `end_date` are inclusive and must both be
        `YYYY-MM-DD`. Anything else is rejected with a 400.</Note>


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


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time.</Warning>
      operationId: get_dashboard_api_apps__app_id__google_ads_analytics_dashboard_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: start_date
          in: query
          required: true
          schema:
            type: string
            description: First day of the window, as `YYYY-MM-DD`. Inclusive.
            title: Start Date
          description: First day of the window, as `YYYY-MM-DD`. Inclusive.
          example: '2026-08-01'
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            description: Last day of the window, as `YYYY-MM-DD`. Inclusive.
            title: End Date
          description: Last day of the window, as `YYYY-MM-DD`. Inclusive.
          example: '2026-08-31'
        - name: include_campaign_trend
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Include each campaign's daily series in
              `campaign_breakdown[].trend`. Set it to `false` to leave the
              series out, which is significantly faster on an account with many
              campaigns or a long window.
            default: true
            title: Include Campaign Trend
          description: >-
            Include each campaign's daily series in
            `campaign_breakdown[].trend`. Set it to `false` to leave the series
            out, which is significantly faster on an account with many campaigns
            or a long window.
          example: true
      responses:
        '200':
          description: The account's totals for the window, plus a row per campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DashboardResponse'
        '400':
          description: '`start_date` or `end_date` is not `YYYY-MM-DD`.'
        '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:
    DashboardResponse:
      properties:
        spend:
          type: number
          title: Spend
          description: Amount spent in the window, in the account's currency.
          example: 1240.75
        spend_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Spend Trend
          description: >-
            Percentage change in spend against the previous window of the same
            length. `null` when the previous window had no spend to compare
            against.
          example: 12.4
        impressions:
          type: integer
          title: Impressions
          description: Impressions in the window.
          example: 52100
        impressions_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Impressions Trend
          description: Percentage change in impressions against the previous window.
          example: -3.2
        clicks:
          type: integer
          title: Clicks
          description: Clicks in the window.
          example: 1830
        clicks_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Clicks Trend
          description: Percentage change in clicks against the previous window.
          example: 8.1
        conversions:
          anyOf:
            - type: number
            - type: 'null'
          title: Conversions
          description: >-
            Conversions in the window. `null` when the account has no conversion
            tracking configured and recorded none, because the number would read
            as a real zero.
          example: 64
        conversions_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Conversions Trend
          description: >-
            Percentage change in conversions against the previous window. `null`
            whenever `conversions` is `null`.
          example: 15
        roas:
          type: number
          title: Roas
          description: >-
            Return on ad spend: conversion value divided by spend. `0` when
            nothing was spent.
          example: 2.35
        roas_trend:
          anyOf:
            - type: number
            - type: 'null'
          title: Roas Trend
          description: Percentage change in return on ad spend against the previous window.
          example: 4.7
        campaign_breakdown:
          items:
            $ref: '#/components/schemas/DashboardCampaignRow'
          type: array
          title: Campaign Breakdown
          description: >-
            One row per campaign that has metrics in the window, archived
            campaigns included, so the rows sum to the totals above.
          example:
            - campaign_type: SEARCH
              clicks: 612
              conversions: 24
              conversions_value: 1830
              ctr: 3.33
              id: '21458812345'
              impressions: 18400
              name: Spring sale - Search
              spend: 412.5
              status: ENABLED
        top_search_terms:
          items:
            $ref: '#/components/schemas/DashboardTopSearchTerm'
          type: array
          title: Top Search Terms
          description: >-
            Up to four search terms that drove the most clicks in the last 30
            days, regardless of the window you asked for. Empty when the term
            read failed or the account has no campaigns yet.
          example:
            - clicks: 17
              term: oak dining table
        monthly_spend_cap_micros:
          type: integer
          title: Monthly Spend Cap Micros
          description: >-
            The account's monthly spend cap in micros, or `0` when no cap is
            set. Absent when the account has no synced campaigns yet.
          default: 0
          example: 50000000
        includes_estimated:
          type: boolean
          title: Includes Estimated
          description: >-
            `true` when some rows are Base44's own estimate rather than a figure
            Google reported.
          example: false
        trend:
          anyOf:
            - items:
                $ref: '#/components/schemas/DashboardTrendPoint'
              type: array
            - type: 'null'
          title: Trend
          description: >-
            Account-wide daily series for the window. Absent when Base44 served
            its own copy of the numbers instead of Google's live figures.
          example:
            - clicks: 48
              conversions: 3
              date: '2026-08-14'
        conversion_goals:
          anyOf:
            - items:
                $ref: '#/components/schemas/DashboardConversionGoal'
              type: array
            - type: 'null'
          title: Conversion Goals
          description: >-
            Every conversion goal on the account with its count for the window.
            Absent when Base44 served its own copy of the numbers, and `null`
            when the goal read failed.
          example:
            - category: PURCHASE
              conversions: 12
              name: Purchase
      type: object
      required:
        - spend
        - impressions
        - clicks
        - roas
        - campaign_breakdown
        - includes_estimated
      title: DashboardResponse
      description: Account-wide totals for the window, plus a per-campaign breakdown.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DashboardCampaignRow:
      properties:
        id:
          type: string
          title: Id
          description: >-
            The Google Ads campaign ID. This is not the Base44 campaign ID the
            campaign endpoints take, which is reported as `id` by [List
            campaigns](/api-reference/list-google-ads-campaigns).
          example: '21458812345'
        name:
          type: string
          title: Name
          description: Name of the campaign.
          example: Spring sale - Search
        status:
          type: string
          title: Status
          description: >-
            Google Ads campaign status, one of `ENABLED`, `PAUSED`, or
            `REMOVED`.
          example: ENABLED
        campaign_type:
          type: string
          title: Campaign Type
          description: >-
            Google Ads channel type, for example `SEARCH`, `PERFORMANCE_MAX`, or
            `SMART`.
          example: SEARCH
        spend:
          type: number
          title: Spend
          description: Amount spent in the window, in the account's currency.
          example: 412.5
        impressions:
          type: integer
          title: Impressions
          description: Impressions in the window.
          example: 18400
        clicks:
          type: integer
          title: Clicks
          description: Clicks in the window.
          example: 612
        conversions:
          type: number
          title: Conversions
          description: Conversions in the window.
          example: 24
        conversions_value:
          type: number
          title: Conversions Value
          description: Total value of those conversions, in the account's currency.
          example: 1830
        ctr:
          type: number
          title: Ctr
          description: >-
            Click-through rate for the window, as a percentage. `0` when the
            campaign had no impressions.
          example: 3.33
        trend:
          anyOf:
            - items:
                $ref: '#/components/schemas/DashboardTrendPoint'
              type: array
            - type: 'null'
          title: Trend
          description: >-
            Daily series for this campaign. Present when
            `include_campaign_trend` is true, and always present when Base44
            served its own copy of the numbers, which builds it regardless of
            the flag.
          example:
            - clicks: 48
              conversions: 3
              date: '2026-08-14'
        conversion_goals:
          anyOf:
            - items:
                $ref: '#/components/schemas/DashboardConversionGoal'
              type: array
            - type: 'null'
          title: Conversion Goals
          description: >-
            This campaign's share of each conversion goal. Absent when Base44
            served its own copy of the numbers, and `null` when the goal read
            failed.
          example:
            - category: PURCHASE
              conversions: 12
              name: Purchase
      type: object
      required:
        - id
        - name
        - status
        - campaign_type
        - spend
        - impressions
        - clicks
        - conversions
        - conversions_value
        - ctr
      title: DashboardCampaignRow
      description: One campaign's totals for the window.
    DashboardTopSearchTerm:
      properties:
        term:
          type: string
          title: Term
          description: The search term someone typed.
          example: oak dining table
        clicks:
          type: integer
          title: Clicks
          description: Clicks the term drove in the last 30 days.
          example: 17
      type: object
      required:
        - term
        - clicks
      title: DashboardTopSearchTerm
      description: One of the search terms that drove the most clicks in the last 30 days.
    DashboardTrendPoint:
      properties:
        date:
          type: string
          title: Date
          description: The day, as `YYYY-MM-DD`.
          example: '2026-08-14'
        clicks:
          type: integer
          title: Clicks
          description: Clicks across the account that day.
          example: 48
        conversions:
          type: number
          title: Conversions
          description: Conversions across the account that day.
          example: 3
      type: object
      required:
        - date
        - clicks
        - conversions
      title: DashboardTrendPoint
      description: One day of account-wide activity.
    DashboardConversionGoal:
      properties:
        category:
          type: string
          title: Category
          description: >-
            Google Ads conversion category, for example `PURCHASE` or
            `SUBMIT_LEAD_FORM`.
          example: PURCHASE
        name:
          type: string
          title: Name
          description: Name of the goal as Google Ads reports it.
          example: Purchase
        conversions:
          type: number
          title: Conversions
          description: >-
            Conversions recorded against this goal in the window. Goals that
            recorded nothing are still listed, with `0`.
          example: 12
      type: object
      required:
        - category
        - name
        - conversions
      title: DashboardConversionGoal
      description: One conversion goal on the account, with its count for the window.
    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.

````