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

# Create Google Ads campaign brief

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

Saves a new campaign brief.

A campaign brief is saved input for a campaign you have not launched yet: the business details, the keywords, the budget you have in mind, and the ad copy. Base44 stores it so you can build a campaign over several requests instead of one, and nothing about a brief reaches Google Ads until you create a campaign from it.

Every field is optional, so you can save a partial brief and fill it in later with [Update campaign brief](/api-reference/update-google-ads-campaign-brief). Set `platform_type` to `SMART` or `PERFORMANCE_MAX`; it is stored as sent and is not checked against that list.

<Warning>This creates a new brief every time it is called. There is nothing that keeps one brief per campaign type, so a retried request leaves you with duplicates. Read the list first and use [Update campaign brief](/api-reference/update-google-ads-campaign-brief) when you already have one.</Warning>

<Note>The `language` you send is stored as-is and echoed back here. [List campaign briefs](/api-reference/list-google-ads-campaign-briefs) and [Get campaign brief](/api-reference/get-google-ads-campaign-brief) report it normalized instead: a regional code is reduced to its primary subtag, so `pt-BR` reads back as `pt`, and a code Google Ads does not support reads back as `en`. Send a plain two-letter code to get the same value from every endpoint.</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. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>



## OpenAPI

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


        Saves a new campaign brief.


        A campaign brief is saved input for a campaign you have not launched
        yet: the business details, the keywords, the budget you have in mind,
        and the ad copy. Base44 stores it so you can build a campaign over
        several requests instead of one, and nothing about a brief reaches
        Google Ads until you create a campaign from it.


        Every field is optional, so you can save a partial brief and fill it in
        later with [Update campaign
        brief](/api-reference/update-google-ads-campaign-brief). Set
        `platform_type` to `SMART` or `PERFORMANCE_MAX`; it is stored as sent
        and is not checked against that list.


        <Warning>This creates a new brief every time it is called. There is
        nothing that keeps one brief per campaign type, so a retried request
        leaves you with duplicates. Read the list first and use [Update campaign
        brief](/api-reference/update-google-ads-campaign-brief) when you already
        have one.</Warning>


        <Note>The `language` you send is stored as-is and echoed back here.
        [List campaign briefs](/api-reference/list-google-ads-campaign-briefs)
        and [Get campaign brief](/api-reference/get-google-ads-campaign-brief)
        report it normalized instead: a regional code is reduced to its primary
        subtag, so `pt-BR` reads back as `pt`, and a code Google Ads does not
        support reads back as `en`. Send a plain two-letter code to get the same
        value from every endpoint.</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. Send only the fields documented here. Other request fields are not
        supported and their behavior can change.</Warning>
      operationId: create_campaign_brief_api_apps__app_id__google_ads_campaign_briefs_post
      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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              title: CreateCampaignBrief
              type: object
              properties:
                platform_type:
                  type: string
                  description: >-
                    Which campaign type the brief is for, `SMART` or
                    `PERFORMANCE_MAX`. Stored as sent and not checked against
                    that list.
                  default: SMART
                business_name:
                  type: string
                  description: Business name to advertise.
                business_description:
                  type: string
                  description: What the business does. Used when Base44 generates copy.
                landing_page_url:
                  type: string
                  description: URL the ads will send clicks to.
                language:
                  type: string
                  description: >-
                    Language the ad copy is in, as a lowercase two-letter code
                    such as `en` or `de`.
                  default: en
                keywords:
                  type: array
                  items:
                    type: string
                  description: Keywords the campaign should match.
                target_audience:
                  type: string
                  description: Free-text description of who the campaign is for.
                daily_budget_micros:
                  type: integer
                  description: >-
                    Planned daily budget in micros of the account currency, so
                    `15000000` is 15.00.
                geo_targets:
                  type: array
                  items:
                    type: string
                  description: Google Ads geo target constant IDs to target.
                headlines:
                  type: array
                  items:
                    type: string
                  description: Ad headlines.
                descriptions:
                  type: array
                  items:
                    type: string
                  description: Ad description lines.
                schedule_type:
                  type: string
                  description: >-
                    `always` to run continuously, or `custom` to use
                    `schedule_days`.
                  default: always
                schedule_days:
                  type: array
                  description: >-
                    Day and hour windows to run in, used only when
                    `schedule_type` is `custom`.
                  items:
                    type: object
                    properties:
                      day:
                        type: string
                        description: Day of the week, such as `MONDAY`.
                      start_hour:
                        type: integer
                        description: Hour the window opens, 0 to 23.
                      end_hour:
                        type: integer
                        description: Hour the window closes, 0 to 23.
            example:
              platform_type: SMART
              business_name: Nordwind Furniture
              business_description: Handmade oak furniture, delivered across Germany.
              landing_page_url: https://example.com/spring
              language: de
              keywords:
                - oak furniture
                - handmade table
              daily_budget_micros: 15000000
              geo_targets:
                - '1003854'
      responses:
        '200':
          description: The brief that was saved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignBriefResource'
        '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.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CampaignBriefResource:
      properties:
        id:
          type: string
          title: Id
          description: >-
            ID of the brief. Pass this as `brief_id` to read, update, or delete
            it.
          example: 68b1c0d4e7b91d003c45a1f5
        platform_type:
          type: string
          title: Platform Type
          description: Which campaign type the brief is for, `SMART` or `PERFORMANCE_MAX`.
          example: SMART
        source:
          type: string
          title: Source
          description: '`ai` when Base44 generated the brief, `user` when you created it.'
          example: user
        business_name:
          type: string
          title: Business Name
          description: Business name to advertise.
          example: Nordwind Furniture
        business_description:
          type: string
          title: Business Description
          description: What the business does. Base44 uses this when it generates copy.
          example: Handmade oak furniture, delivered across Germany.
        landing_page_url:
          type: string
          title: Landing Page Url
          description: URL the ads will send clicks to.
          example: https://example.com/spring
        language:
          type: string
          title: Language
          description: >-
            Language the ad copy is written in, as a lowercase two-letter code.
            See the note on this field in each endpoint: create and update echo
            what you send, while list and get report the normalized value.
          example: en
        keywords:
          items:
            type: string
          type: array
          title: Keywords
          description: Keywords the campaign should match.
          example:
            - oak furniture
            - handmade table
        target_audience:
          type: string
          title: Target Audience
          description: Free-text description of who the campaign is for. Empty when unset.
          example: Homeowners aged 30 to 55
        daily_budget_micros:
          type: integer
          title: Daily Budget Micros
          description: >-
            Planned daily budget in micros of the account currency, so
            `15000000` is 15.00. `0` when unset.
          example: 15000000
        geo_targets:
          items:
            type: string
          type: array
          title: Geo Targets
          description: Google Ads geo target constant IDs to target.
          example:
            - '1003854'
        headlines:
          items:
            type: string
          type: array
          title: Headlines
          description: Ad headlines. Populated by generate, or by you.
          example:
            - Handmade oak furniture
        descriptions:
          items:
            type: string
          type: array
          title: Descriptions
          description: Ad description lines.
          example:
            - Built to last. Delivered free.
        schedule_type:
          type: string
          title: Schedule Type
          description: '`always` to run continuously, or `custom` to use `schedule_days`.'
          example: always
        schedule_days:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Schedule Days
          description: >-
            Day and hour windows to run in, used only when `schedule_type` is
            `custom`.
          example:
            - day: MONDAY
              end_hour: 17
              start_hour: 9
        created_date:
          type: string
          format: date-time
          title: Created Date
          description: When the brief was created.
          example: '2026-08-25T11:20:00Z'
        updated_date:
          type: string
          format: date-time
          title: Updated Date
          description: When the brief was last changed.
          example: '2026-08-25T14:05:00Z'
      type: object
      required:
        - id
        - platform_type
        - source
        - business_name
        - business_description
        - landing_page_url
        - language
        - keywords
        - target_audience
        - daily_budget_micros
        - geo_targets
        - headlines
        - descriptions
        - schedule_type
        - schedule_days
        - created_date
        - updated_date
      title: CampaignBriefResource
      description: |-
        A saved campaign brief.

        Omits `app_id`, which the response repeats from the path.
    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.

````