Campaign Drafts

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.

Creating a draft

Creating a CampaignDraft is as simple as any other entity creation in the Google Ads API. Create a CampaignDraft and specify its base_campaign and name, then call CampaignDraftService.MutateCampaignDrafts, passing in the newly created CampaignDraft as a create operation.

The create request behaves like a typical API call in that a response is returned immediately.

Modifying a draft campaign

Once you create your campaign draft, you will need to look up the resource name of its associated draft campaign so that you can begin making changes. You can do this using the following query in GoogleAdsService.SearchStream:

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

Once you have your draft campaign resource name, you can modify that campaign the same way you would any real campaign in your account. The draft campaign cannot serve ads but serves as a staging area for changes that you can apply to a real campaign later.

Promote or remove a draft campaign

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

  1. Promote the draft campaign to the base campaign, applying all the changes you made in the draft campaign to the base campaign. This is an asynchronous operation. This can be performed by calling CampaignDraftService.PromoteCampaignDraft.
  2. Remove the campaign draft by setting its status to REMOVED. This will throw away the changes if you decided not to proceed. This is a synchronous operation and works like any other API call.