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

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

Returns the app's Google Ads campaigns, including paused and deleted ones. Check `status` to tell them apart.

Each row carries the campaign's `id`, name, type, status, daily budget, and its performance metrics. Pass an `id` to [Get campaign](/api-reference/get-google-ads-campaign) for the campaign's landing page, targeting, and phone number, which the list rows leave out, or to the pause, resume, update, and delete endpoints.

By default Base44 reads the metrics live from Google Ads. Pass `include_metrics=false` to skip that round trip, which returns the same fields with the metric ones zeroed and `metrics_pending` set to `true`. Either way `primary_status` comes back empty on this endpoint; read one campaign to get it.

<Warning>The live read returns at most 50 campaigns, ordered by spend, and there is no pagination. An account with more than 50 active campaigns gets an incomplete list with nothing in the response to say so.</Warning>

<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/campaigns
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/campaigns:
    get:
      summary: List Google Ads campaigns
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns the app's Google Ads campaigns, including paused and deleted
        ones. Check `status` to tell them apart.


        Each row carries the campaign's `id`, name, type, status, daily budget,
        and its performance metrics. Pass an `id` to [Get
        campaign](/api-reference/get-google-ads-campaign) for the campaign's
        landing page, targeting, and phone number, which the list rows leave
        out, or to the pause, resume, update, and delete endpoints.


        By default Base44 reads the metrics live from Google Ads. Pass
        `include_metrics=false` to skip that round trip, which returns the same
        fields with the metric ones zeroed and `metrics_pending` set to `true`.
        Either way `primary_status` comes back empty on this endpoint; read one
        campaign to get it.


        <Warning>The live read returns at most 50 campaigns, ordered by spend,
        and there is no pagination. An account with more than 50 active
        campaigns gets an incomplete list with nothing in the response to say
        so.</Warning>


        <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: list_campaigns_api_apps__app_id__google_ads_campaigns_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads campaigns to manage.
            title: App Id
          description: ID of the app whose Google Ads campaigns to manage.
          example: 6820f3a4e7b91d003c45a1f2
        - name: include_metrics
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Whether to include each campaign's performance metrics, which are
              fetched from Google on the fly. Pass `false` to return the cached
              campaign records on their own, which is faster.
            default: true
            title: Include Metrics
          description: >-
            Whether to include each campaign's performance metrics, which are
            fetched from Google on the fly. Pass `false` to return the cached
            campaign records on their own, which is faster.
      responses:
        '200':
          description: >-
            The account's campaigns. The shape depends on `include_metrics`;
            this is the default, metrics-carrying one.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CampaignListItem'
                title: >-
                  Response 200 List Campaigns Api Apps  App Id  Google Ads
                  Campaigns Get
        '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:
    CampaignListItem:
      properties:
        id:
          type: string
          title: Id
          description: >-
            Base44's ID for the campaign. Pass this as `campaign_id` on the
            other campaign endpoints.
          example: 68b1c0d4e7b91d003c45a1f2
        google_campaign_id:
          type: string
          title: Google Campaign Id
          description: The campaign's ID in Google Ads.
          example: '21098765432'
        campaign_name:
          type: string
          title: Campaign Name
          description: Name shown for the campaign.
          example: Spring sale in Berlin
        campaign_type:
          type: string
          title: Campaign Type
          description: Campaign type.
          example: SMART
        status:
          type: string
          title: Status
          description: >-
            Serving state. `REMOVED` is a deleted campaign, which stays listed
            for reporting.
          example: ENABLED
        daily_budget_micros:
          type: integer
          title: Daily Budget Micros
          description: >-
            Daily budget in micros of the account currency, so `15000000` is
            15.00.
          example: 15000000
        start_date:
          type: string
          title: Start Date
          description: Date the campaign started, or empty when it has not.
          example: '2026-08-25'
        impressions:
          type: integer
          title: Impressions
          description: Impressions. `0` when `metrics_pending` is true.
          example: 15420
        clicks:
          type: integer
          title: Clicks
          description: Clicks. `0` when `metrics_pending` is true.
          example: 612
        cost_micros:
          type: integer
          title: Cost Micros
          description: >-
            Spend in micros of the account currency. `0` when `metrics_pending`
            is true.
          example: 248000000
        spend:
          type: number
          title: Spend
          description: '`cost_micros` as a decimal amount, for display.'
          example: 248
        conversions:
          type: number
          title: Conversions
          description: Conversions. `0` when `metrics_pending` is true.
          example: 31
        ctr:
          type: number
          title: Ctr
          description: Click-through rate. `0` when `metrics_pending` is true.
          example: 0.0397
        review_status:
          type: string
          title: Review Status
          description: Google's policy review status. Always empty on a deleted campaign.
          example: REVIEWED
        serving_status:
          type: string
          title: Serving Status
          description: Google's serving status. Always empty on a deleted campaign.
          example: SERVING
        primary_status:
          type: string
          title: Primary Status
          description: Always empty on this endpoint. Read one campaign to get it.
          example: ''
        primary_status_reasons:
          items:
            type: string
          type: array
          title: Primary Status Reasons
          description: >-
            Google's reasons why the campaign is limited or not serving. Always
            empty on a deleted campaign.
          example:
            - CAMPAIGN_BUDGET_LIMITED
        metrics_pending:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Metrics Pending
          description: >-
            Present and `true` only when you passed `include_metrics=false`,
            meaning the metric fields above are zeroed rather than measured.
          example: true
      type: object
      required:
        - id
        - google_campaign_id
        - campaign_name
        - campaign_type
        - status
        - daily_budget_micros
        - start_date
        - impressions
        - clicks
        - cost_micros
        - spend
        - conversions
        - ctr
        - review_status
        - serving_status
        - primary_status
        - primary_status_reasons
      title: CampaignListItem
      description: >-
        One row of the campaign list.


        Both `include_metrics` shapes share these keys (``_cached_campaign_row``
        /

        ``_local_paint_campaign_row`` in ``campaign_service.py``). Narrower than

        ``CampaignResource``: the list rows are normalized for the table, so
        they

        carry metrics but not the campaign's landing page, targeting, or phone

        number. Read one campaign for those.
    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.

````