Campaign drafts are a way of staging some set of intended changes to a base
campaign. Each campaign draft has a base campaign and a draft campaign
associated with it.

- The base campaign is a normal campaign in your account, with ads, ad groups, and other resources.
- The draft campaign is a virtual layer where changes are aggregated as you perform operations, but don't affect any real campaigns in your account. Once you are satisfied with the state of the draft campaign, you can apply it to a real campaign in a few different ways.

> [!IMPORTANT]
> **Key Term:** The **campaign draft** is a resource you use to create new drafts from a base campaign and to determine associations between base campaigns and draft campaigns. The **draft campaign** is a virtual campaign that acts as a campaign but cannot serve ads.

You can find a [complete example](https://developers.google.com/google-ads/api/samples/create-experiment) of
experiment creation in the code samples catalog.

## Create a draft

To create a [`CampaignDraft`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraft):

1. Create a [`CampaignDraft`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraft) object with the
   following fields:

   - [`base_campaign`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraft#base_campaign): The resource name of the campaign that this draft will be based on.
   - [`name`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraft#name): A name for your campaign draft.
2. Next, create a
   [`CampaignDraftOperation`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftOperation) with the
   [`create`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftOperation#create) field set to
   the [`CampaignDraft`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraft) object you created.

3. Finally, send this operation to the Google Ads API using the
   [`CampaignDraftService.MutateCampaignDrafts`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftService/MutateCampaignDrafts) method. The
   [`create`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftOperation#create) request is
   synchronous and returns a response immediately.

## Modify a draft campaign

After you create a campaign draft, you can retrieve its resource name from
the [`results`](https://developers.google.com/google-ads/api/reference/rpc/v26/MutateCampaignDraftsResponse#results%5B%5D) field of
the
[`MutateCampaignDraftsResponse`](https://developers.google.com/google-ads/api/reference/rpc/v26/MutateCampaignDraftsResponse).

You must retrieve the resource name of its associated draft campaign before you
can make changes to it. With the campaign draft resource name, you can query
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream)
to find the draft campaign:

    SELECT campaign_draft.draft_campaign
    FROM campaign_draft
    WHERE campaign_draft.resource_name = "CAMPAIGN_DRAFT_RESOURCE_NAME_HERE"

After you have the draft campaign's resource name, you can modify it like any
other campaign in your account. The draft campaign cannot serve ads, but acts as
a staging area for changes that you can apply to a base campaign later.

## Promote or remove a draft campaign

> [!IMPORTANT]
> **Key Term:** Asynchronous operations in the Google Ads API return what's called a **longrunning operation**. Longrunning operations serve as a convenient way to poll for operation completion without needing to make a full API call.

After you are done configuring your draft campaign, you have a few options:

1. **Promote** the draft campaign to the base campaign by calling [`CampaignDraftService.PromoteCampaignDraft`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftService/PromoteCampaignDraft). This applies all the changes you made in the draft campaign to the base campaign. This is an [asynchronous operation](https://developers.google.com/google-ads/api/reference/rpc/google.longrunning#operations).
2. **Remove** the campaign draft using the `remove` operation of [`CampaignDraftService.MutateCampaignDrafts`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignDraftService/MutateCampaignDrafts), passing in the resource name of the campaign draft. This cancels the draft and discards any changes if you decided not to proceed. This is a synchronous operation.