---
title: "Get Google Ads campaign launch draft"
method: GET
path: "/api/apps/{app_id}/google-ads/campaign-launch-drafts/{draft_id}"
---

# Get Google Ads campaign launch draft

`GET /api/apps/{app_id}/google-ads/campaign-launch-drafts/{draft_id}`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/google-ads/campaign-launch-drafts/{draft_id}`
- Auth: HTTP bearer

<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 AI 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` records a launch from the draft's review page in the builder, or through [Launch Google Ads campaign](/api-reference/launch-google-ads-campaign) with the draft's `id` as `draft_id`. A launch without `draft_id` doesn't mark the draft, so nothing stops the same draft from being launched again.

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>

## Path parameters

- `app_id` string, required: ID of the app to advertise.
- `draft_id` string, required: ID of the draft. The AI chat returns it as `draft_id` when it saves a launch draft, and its review link carries it as `?draft=`.

## Response `200`

The draft as the builder chat saved it.

- GoogleAdsCampaignLaunchDraft: A Performance Max campaign the AI chat prepared for review.
  - `id` string, required: ID of the draft.
  - `app_id` string, required: ID of the app the draft is for.
  - `campaign_name` string, required: Name for the campaign. Empty when the chat did not choose one.
  - `business_name` string, required: Business name to show in the ads. Empty when the chat did not set one.
  - `landing_page_url` string, required: Page the ads send clicks to. Empty when the chat did not set one.
  - `phone_number` string, required: 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.
  - `daily_budget_micros` integer, required: Daily budget in micros of `currency_code`, so `15000000` is 15.00.
  - `currency_code` string, required: 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.
  - `headlines` string[], required: Headlines, up to 15.
  - `long_headlines` string[], required: Long headlines, up to 5.
  - `descriptions` string[], required: Descriptions, up to 5.
  - `images` GoogleAdsLaunchDraftImage[], required: Pictures for the campaign, up to 20.
    - `url` string, required: Address of the picture.
    - `field_type` string, required: Which slot the picture fills on a Performance Max campaign, for example `MARKETING_IMAGE` or `SQUARE_MARKETING_IMAGE`. Ignore it on `logos` entries.
  - `logos` GoogleAdsLaunchDraftImage[], required: Logos, up to 5. Often empty, and a Performance Max campaign needs one to launch.
    - `url` string, required: Address of the picture.
    - `field_type` string, required: Which slot the picture fills on a Performance Max campaign, for example `MARKETING_IMAGE` or `SQUARE_MARKETING_IMAGE`. Ignore it on `logos` entries.
  - `geo_targets` string[], required: Locations to target, as Google geo target constants. Empty means everywhere.
  - `targeted_locations` GoogleAdsLaunchDraftLocation[], required: The same locations as `geo_targets`, with their names.
    - `resource_name` string, required: Google's identifier for the location, as it appears in `geo_targets`.
    - `name` string, required: The location's name.
  - `language` string, required: Two-letter code of the language the ads are written in.
  - `launched_at` string, date-time, nullable: When a campaign was launched from this draft, or `null` while none has. Launching through the API sets it only when you pass the draft's `id` as `draft_id`.
  - `created_date` string, date-time, required: When the chat saved the draft.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: 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`: There is no launch draft with this ID for this app.
- `429`: The app has used up the 120 requests a minute it shares with List Google Ads advertising languages. Retry later.

## Changes

- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-10-10** `fc604cdcc3a2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/campaign-launch-drafts/:draft_id/get.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/b5b4ebd82a1e?raw)
