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

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# Get Google Ads campaign launch draft

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

Returns a Performance Max campaign the builder chat prepared for someone to review before launch.

The chat saves a draft when you ask it to set up a campaign and choose a budget. It holds the copy, pictures, budget and locations as the chat left them. Nothing in it is checked against Google until launch, so a draft can be incomplete: a missing logo or landing page is common. Review it, fill in what is missing, and use its fields to build the request for [Launch Google Ads campaign](/api-reference/launch-google-ads-campaign).

`launched_at` only records a launch from the draft's review page in the builder. Launching through the API doesn't mark the draft, so `launched_at` stays `null` and nothing stops the same draft from being launched again. Keep track of which drafts you have launched yourself.

Only a draft for the app in the path is returned. Any other ID returns a 404.

This is limited to 120 requests a minute per app, shared with [List Google Ads advertising languages](/api-reference/list-google-ads-advertising-languages). Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key from anyone who can view the app, including a read-only 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/campaign-launch-drafts/{draft_id}
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/google-ads/campaign-launch-drafts/{draft_id}:
    get:
      summary: Get Google Ads campaign launch draft
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns a Performance Max campaign the builder chat prepared for someone
        to review before launch.


        The chat saves a draft when you ask it to set up a campaign and choose a
        budget. It holds the copy, pictures, budget and locations as the chat
        left them. Nothing in it is checked against Google until launch, so a
        draft can be incomplete: a missing logo or landing page is common.
        Review it, fill in what is missing, and use its fields to build the
        request for [Launch Google Ads
        campaign](/api-reference/launch-google-ads-campaign).


        `launched_at` only records a launch from the draft's review page in the
        builder. Launching through the API doesn't mark the draft, so
        `launched_at` stays `null` and nothing stops the same draft from being
        launched again. Keep track of which drafts you have launched yourself.


        Only a draft for the app in the path is returned. Any other ID returns a
        404.


        This is limited to 120 requests a minute per app, shared with [List
        Google Ads advertising
        languages](/api-reference/list-google-ads-advertising-languages). Some
        workspaces have a different limit.


        <Note>This endpoint accepts a personal API key from anyone who can view
        the app, including a read-only 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_launch_draft_api_apps__app_id__google_ads_campaign_launch_drafts__draft_id__get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app to advertise.
            title: App Id
          description: ID of the app to advertise.
          example: 6820f3a4e7b91d003c45a1f2
        - name: draft_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              ID of the draft. The builder chat returns it as `draft_id` when it
              saves a launch draft, and its review link carries it as `?draft=`.
            title: Draft Id
          description: >-
            ID of the draft. The builder chat returns it as `draft_id` when it
            saves a launch draft, and its review link carries it as `?draft=`.
          example: 68c2d1e5f8a92e004d56b2a3
      responses:
        '200':
          description: The draft as the builder chat saved it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GoogleAdsCampaignLaunchDraft'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You can't view 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: There is no launch draft with this ID for this app.
        '429':
          description: >-
            The app has used up the 120 requests a minute it shares with List
            Google Ads advertising languages. Retry later.
components:
  schemas:
    GoogleAdsCampaignLaunchDraft:
      properties:
        id:
          type: string
          title: Id
          description: ID of the draft.
          example: 68c2d1e5f8a92e004d56b2a3
        app_id:
          type: string
          title: App Id
          description: ID of the app the draft is for.
          example: 6820f3a4e7b91d003c45a1f2
        campaign_name:
          type: string
          title: Campaign Name
          description: Name for the campaign. Empty when the chat did not choose one.
          example: Spring sale in Berlin
        business_name:
          type: string
          title: Business Name
          description: >-
            Business name to show in the ads. Empty when the chat did not set
            one.
          example: Oakline Furniture
        landing_page_url:
          type: string
          title: Landing Page Url
          description: Page the ads send clicks to. Empty when the chat did not set one.
          example: https://oakline.base44.app
        phone_number:
          type: string
          title: Phone Number
          description: >-
            Phone number for a call button, in a form Google can place. Empty
            when there is none, including when the chat suggested a number
            Google couldn't place.
          example: '+493012345678'
        daily_budget_micros:
          type: integer
          title: Daily Budget Micros
          description: Daily budget in micros of `currency_code`, so `15000000` is 15.00.
          example: 15000000
        currency_code:
          type: string
          title: Currency Code
          description: >-
            Currency of `daily_budget_micros`, the currency the account is
            charged in, as a three-letter ISO 4217 code. It can differ from the
            currency of the Google Ads account's own budget.
          example: EUR
        headlines:
          items:
            type: string
          type: array
          title: Headlines
          description: Headlines, up to 15.
          example:
            - Handmade oak tables
            - Built in Berlin
        long_headlines:
          items:
            type: string
          type: array
          title: Long Headlines
          description: Long headlines, up to 5.
          example:
            - Solid oak dining tables, made to order in Berlin
        descriptions:
          items:
            type: string
          type: array
          title: Descriptions
          description: Descriptions, up to 5.
          example:
            - Visit our showroom or order online with free delivery.
        images:
          items:
            $ref: '#/components/schemas/GoogleAdsLaunchDraftImage'
          type: array
          title: Images
          description: Pictures for the campaign, up to 20.
          example:
            - field_type: MARKETING_IMAGE
              url: https://storage.base44.com/gads-assets/b7f3a1c8-landscape.png
        logos:
          items:
            $ref: '#/components/schemas/GoogleAdsLaunchDraftImage'
          type: array
          title: Logos
          description: >-
            Logos, up to 5. Often empty, and a Performance Max campaign needs
            one to launch.
          example:
            - field_type: MARKETING_IMAGE
              url: https://storage.base44.com/gads-assets/logo.png
        geo_targets:
          items:
            type: string
          type: array
          title: Geo Targets
          description: >-
            Locations to target, as Google geo target constants. Empty means
            everywhere.
          example:
            - geoTargetConstants/1003854
        targeted_locations:
          items:
            $ref: '#/components/schemas/GoogleAdsLaunchDraftLocation'
          type: array
          title: Targeted Locations
          description: The same locations as `geo_targets`, with their names.
          example:
            - name: Berlin
              resource_name: geoTargetConstants/1003854
        language:
          type: string
          title: Language
          description: Two-letter code of the language the ads are written in.
          example: de
        launched_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Launched At
          description: >-
            When someone launched a campaign from this draft's review page in
            the builder, or `null` while nobody has. Launching through the API
            doesn't set it.
          example: '2026-09-14T10:20:00Z'
        created_date:
          type: string
          format: date-time
          title: Created Date
          description: When the chat saved the draft.
          example: '2026-09-14T10:02:00Z'
      type: object
      required:
        - id
        - app_id
        - campaign_name
        - business_name
        - landing_page_url
        - phone_number
        - daily_budget_micros
        - currency_code
        - headlines
        - long_headlines
        - descriptions
        - images
        - logos
        - geo_targets
        - targeted_locations
        - language
        - created_date
      title: GoogleAdsCampaignLaunchDraft
      description: A Performance Max campaign the builder chat prepared for review.
    GoogleAdsLaunchDraftImage:
      properties:
        url:
          type: string
          title: Url
          description: Address of the picture.
          example: https://storage.base44.com/gads-assets/b7f3a1c8-landscape.png
        field_type:
          type: string
          title: Field Type
          description: >-
            Which slot the picture fills on a Performance Max campaign, for
            example `MARKETING_IMAGE` or `SQUARE_MARKETING_IMAGE`. Ignore it on
            `logos` entries.
          example: MARKETING_IMAGE
      type: object
      required:
        - url
        - field_type
      title: GoogleAdsLaunchDraftImage
      description: One picture saved on a launch draft.
    GoogleAdsLaunchDraftLocation:
      properties:
        resource_name:
          type: string
          title: Resource Name
          description: >-
            Google's identifier for the location, as it appears in
            `geo_targets`.
          example: geoTargetConstants/1003854
        name:
          type: string
          title: Name
          description: The location's name.
          example: Berlin
      type: object
      required:
        - resource_name
        - name
      title: GoogleAdsLaunchDraftLocation
      description: One location saved on a launch draft, with its name.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.