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

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

Returns one campaign, with the status fields Google reports for it.

Use this for a single campaign's current state. It reads the same cache as [List campaigns](/api-reference/list-google-ads-campaigns) and additionally folds in a live check of whether Google has disapproved the campaign's assets, so a rejected Performance Max campaign shows up here.

<Note>A campaign's name, budget, and targeting come from Base44's own record, which is refreshed in the background, so a change made directly in the Google Ads UI can take a few minutes to appear here.</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/campaigns/{campaign_id}
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/{campaign_id}:
    get:
      summary: Get Google Ads campaign
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns one campaign, with the status fields Google reports for it.


        Use this for a single campaign's current state. It reads the same cache
        as [List campaigns](/api-reference/list-google-ads-campaigns) and
        additionally folds in a live check of whether Google has disapproved the
        campaign's assets, so a rejected Performance Max campaign shows up here.


        <Note>A campaign's name, budget, and targeting come from Base44's own
        record, which is refreshed in the background, so a change made directly
        in the Google Ads UI can take a few minutes to appear here.</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_campaign_api_apps__app_id__google_ads_campaigns__campaign_id__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: campaign_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              Base44's ID for the campaign, as returned in `id` by [List
              campaigns](/api-reference/list-google-ads-campaigns). This is not
              the Google Ads campaign ID, which is reported separately as
              `google_campaign_id`.
            title: Campaign Id
          description: >-
            Base44's ID for the campaign, as returned in `id` by [List
            campaigns](/api-reference/list-google-ads-campaigns). This is not
            the Google Ads campaign ID, which is reported separately as
            `google_campaign_id`.
          example: 68b1c0d4e7b91d003c45a1f2
      responses:
        '200':
          description: The campaign.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignResource'
        '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, or there is no campaign
            with this ID.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CampaignResource:
      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. Empty while a just-created campaign
            is still being pushed to Google.
          example: '21098765432'
        campaign_name:
          type: string
          title: Campaign Name
          description: Name shown for the campaign.
          example: Spring sale in Berlin
        campaign_type:
          type: string
          enum:
            - SMART
            - PERFORMANCE_MAX
            - SEARCH
            - DISPLAY
            - SHOPPING
            - VIDEO
            - DEMAND_GEN
            - LOCAL
            - UNKNOWN
          title: Campaign Type
          description: >-
            Campaign type. Base44 creates `SMART` and `PERFORMANCE_MAX`; the
            other values appear only on campaigns created outside Base44 and
            synced in.
          example: SMART
        status:
          type: string
          enum:
            - ENABLED
            - PAUSED
            - REMOVED
            - UNKNOWN
          title: Status
          description: >-
            Serving state in Base44's cache. `REMOVED` is a deleted campaign,
            which Google keeps for reporting.
          example: ENABLED
        daily_budget_micros:
          type: integer
          title: Daily Budget Micros
          description: >-
            Daily budget in micros of the account currency: 1,000,000 micros is
            one unit, so `15000000` is 15.00.
          example: 15000000
        landing_page:
          type: string
          title: Landing Page
          description: URL the ads send clicks to.
          example: https://example.com/spring
        geo_targets:
          items:
            type: string
          type: array
          title: Geo Targets
          description: Google Ads geo target constant IDs the campaign targets.
          example:
            - '1003854'
        phone_number:
          type: string
          title: Phone Number
          description: Call-extension phone number, empty when the campaign has none.
          example: '+493012345678'
        learning_ends_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Learning Ends At
          description: >-
            When Smart Bidding's learning period is expected to end, about 14
            days after creation. `null` on a campaign that has not started
            learning.
          example: '2026-09-08T11:20:00Z'
        review_status:
          type: string
          title: Review Status
          description: >-
            Google's policy review status, passed through as Google reports it
            (`REVIEWED`, `UNDER_REVIEW`, …). Empty until the first sync after
            creation.
          example: REVIEWED
        serving_status:
          type: string
          title: Serving Status
          description: >-
            Google's serving status, passed through as Google reports it. Can
            still report review gating after policy review clears, so read it
            alongside `review_status`.
          example: SERVING
        primary_status:
          type: string
          title: Primary Status
          description: >-
            Google's summary of whether the campaign is serving well, passed
            through as Google reports it (`ELIGIBLE`, `LIMITED`, `NOT_SERVING`,
            …).
          example: ELIGIBLE
        primary_status_reasons:
          items:
            type: string
          type: array
          title: Primary Status Reasons
          description: >-
            Google's reasons behind `primary_status`, e.g. why a campaign is
            limited. Empty when there is nothing to explain.
          example:
            - CAMPAIGN_BUDGET_LIMITED
        created_date:
          type: string
          format: date-time
          title: Created Date
          description: When the campaign was created in Base44.
          example: '2026-08-25T11:20:00Z'
        updated_date:
          type: string
          format: date-time
          title: Updated Date
          description: When Base44 last changed its record of the campaign.
          example: '2026-08-25T14:05:00Z'
      type: object
      required:
        - id
        - google_campaign_id
        - campaign_name
        - campaign_type
        - status
        - daily_budget_micros
        - landing_page
        - geo_targets
        - phone_number
        - review_status
        - serving_status
        - primary_status
        - primary_status_reasons
        - created_date
        - updated_date
      title: CampaignResource
      description: The campaign fields this API commits to.
    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.

````