Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This example demonstrates how to setup Expanded Text Ads for a search advertising campaign.
Note
- Upgrade your expanded text ads to responsive search ads by February 1, 2023. After this date, you will no longer be able to create new or edit existing expanded text ads. For more information, see About responsive search ads.
- Existing expanded text ads will continue to serve, and you'll be able to view reports on their performance.
- You'll still be able to pause, enable, or remove your expanded text ads. Otherwise, attempts to add or update expanded text ads will result in a
CampaignServiceAdTypeInvaliderror. - Learn more about this change.
Tip
Use the language selector in the documentation header to choose C#, Java, Php, or Python.
To get access and refresh tokens for your Microsoft Advertising user and make your first service call using the Bing Ads API, see the Quick Start guide. You'll want to review the Get Started guide and walkthroughs for your preferred language e.g., C#, Java, Php, and Python.
Supporting files for C#, Java, Php, and Python examples are available at GitHub. You can clone each repository or repurpose snippets as needed.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.BingAds.V13.CampaignManagement;
using Microsoft.BingAds;
namespace BingAdsExamplesLibrary.V13
{
/// <summary>
/// How to create Expanded Text Ads with the Campaign Management service.
/// </summary>
public class ExpandedTextAds : ExampleBase
{
public override string Description
{
get { return "Expanded Text Ads | Campaign Management V13"; }
}
public async override Task RunAsync(AuthorizationData authorizationData)
{
try
{
ApiEnvironment environment = ((OAuthDesktopMobileAuthCodeGrant)authorizationData.Authentication).Environment;
CampaignManagementExampleHelper CampaignManagementExampleHelper = new CampaignManagementExampleHelper(
OutputStatusMessageDefault: this.OutputStatusMessage);
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData: authorizationData,
environment: environment);
// Add a search campaign.
var campaigns = new[]{
new Campaign
{
BudgetType = BudgetLimitType.DailyBudgetStandard,
DailyBudget = 50,
CampaignType = CampaignType.Search,
Languages = new string[] { "All" },
Name = "Everyone's Shoes " + DateTime.UtcNow,
TimeZone = "PacificTimeUSCanadaTijuana",
},
};
OutputStatusMessage("-----\nAddCampaigns:");
AddCampaignsResponse addCampaignsResponse = await CampaignManagementExampleHelper.AddCampaignsAsync(
accountId: authorizationData.AccountId,
campaigns: campaigns);
long?[] campaignIds = addCampaignsResponse.CampaignIds.ToArray();
BatchError[] campaignErrors = addCampaignsResponse.PartialErrors.ToArray();
OutputStatusMessage("CampaignIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(campaignIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(campaignErrors);
// Add an ad group within the campaign.
var adGroups = new[] {
new AdGroup
{
Name = "Everyone's Red Shoe Sale",
StartDate = null,
EndDate = new Date {
Month = 12,
Day = 31,
Year = DateTime.UtcNow.Year + 1
},
CpcBid = new Bid { Amount = 0.09 },
}
};
OutputStatusMessage("-----\nAddAdGroups:");
AddAdGroupsResponse addAdGroupsResponse = await CampaignManagementExampleHelper.AddAdGroupsAsync(
campaignId: (long)campaignIds[0],
adGroups: adGroups,
returnInheritedBidStrategyTypes: false);
long?[] adGroupIds = addAdGroupsResponse.AdGroupIds.ToArray();
BatchError[] adGroupErrors = addAdGroupsResponse.PartialErrors.ToArray();
OutputStatusMessage("AdGroupIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(adGroupIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(adGroupErrors);
// Add keywords and ads within the ad group.
var keywords = new[] {
new Keyword
{
Bid = new Bid { Amount = 0.47 },
Param2 = "10% Off",
MatchType = MatchType.Phrase,
Text = "Brand-A Shoes",
},
};
OutputStatusMessage("-----\nAddKeywords:");
AddKeywordsResponse addKeywordsResponse = await CampaignManagementExampleHelper.AddKeywordsAsync(
adGroupId: (long)adGroupIds[0],
keywords: keywords,
returnInheritedBidStrategyTypes: false);
long?[] keywordIds = addKeywordsResponse.KeywordIds.ToArray();
BatchError[] keywordErrors = addKeywordsResponse.PartialErrors.ToArray();
OutputStatusMessage("KeywordIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(keywordIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(keywordErrors);
var ads = new Ad[] {
new ExpandedTextAd
{
TitlePart1 = "Contoso",
TitlePart2 = "Quick & Easy Setup",
TitlePart3 = "Seemless Integration",
Text = "Find New Customers & Increase Sales!",
TextPart2 = "Start Advertising on Contoso Today.",
Path1 = "seattle",
Path2 = "shoe sale",
FinalUrls = new[] {
"https://www.contoso.com/womenshoesale"
},
},
};
OutputStatusMessage("-----\nAddAds:");
AddAdsResponse addAdsResponse = await CampaignManagementExampleHelper.AddAdsAsync(
adGroupId: (long)adGroupIds[0],
ads: ads);
long?[] adIds = addAdsResponse.AdIds.ToArray();
BatchError[] adErrors = addAdsResponse.PartialErrors.ToArray();
OutputStatusMessage("AdIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(adIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(adErrors);
// Delete the campaign and everything it contains e.g., ad groups and ads.
OutputStatusMessage("-----\nDeleteCampaigns:");
await CampaignManagementExampleHelper.DeleteCampaignsAsync(
accountId: authorizationData.AccountId,
campaignIds: new[] { (long)campaignIds[0] });
OutputStatusMessage(string.Format("Deleted Campaign Id {0}", campaignIds[0]));
}
// Catch authentication exceptions
catch (OAuthTokenRequestException ex)
{
OutputStatusMessage(string.Format("Couldn't get OAuth tokens. Error: {0}. Description: {1}", ex.Details.Error, ex.Details.Description));
}
// Catch Campaign Management service exceptions
catch (FaultException<AdApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.Errors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<ApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<EditorialApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (Exception ex)
{
OutputStatusMessage(ex.Message);
}
}
}
}
package com.microsoft.bingads.examples.v13;
import java.util.ArrayList;
import java.util.Calendar;
import com.microsoft.bingads.*;
import com.microsoft.bingads.v13.campaignmanagement.*;
import java.util.HashSet;
import java.util.List;
public class ExpandedTextAds extends ExampleBase {
public static void main(java.lang.String[] args) {
try
{
authorizationData = getAuthorizationData();
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData,
API_ENVIRONMENT,
ICampaignManagementService.class);
// Add a search campaign.
ArrayOfCampaign campaigns = new ArrayOfCampaign();
Campaign campaign = new Campaign();
campaign.setBudgetType(BudgetLimitType.DAILY_BUDGET_STANDARD);
campaign.setDailyBudget(50.00);
ArrayOfstring languages = new ArrayOfstring();
languages.getStrings().add("All");
campaign.setLanguages(languages);
campaign.setName("Everyone's Shoes " + System.currentTimeMillis());
campaign.setTimeZone("PacificTimeUSCanadaTijuana");
campaigns.getCampaigns().add(campaign);
outputStatusMessage("-----\nAddCampaigns:");
AddCampaignsResponse addCampaignsResponse = CampaignManagementExampleHelper.addCampaigns(
authorizationData.getAccountId(),
campaigns);
ArrayOfNullableOflong campaignIds = addCampaignsResponse.getCampaignIds();
ArrayOfBatchError campaignErrors = addCampaignsResponse.getPartialErrors();
outputStatusMessage("CampaignIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(campaignIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(campaignErrors);
// Add an ad group within the campaign.
ArrayOfAdGroup adGroups = new ArrayOfAdGroup();
AdGroup adGroup = new AdGroup();
adGroup.setName("Everyone's Red Shoe Sale");
adGroup.setStartDate(null);
Calendar calendar = Calendar.getInstance();
adGroup.setEndDate(new com.microsoft.bingads.v13.campaignmanagement.Date());
adGroup.getEndDate().setDay(31);
adGroup.getEndDate().setMonth(12);
adGroup.getEndDate().setYear(calendar.get(Calendar.YEAR));
Bid CpcBid = new Bid();
CpcBid.setAmount(0.09);
adGroup.setCpcBid(CpcBid);
adGroups.getAdGroups().add(adGroup);
outputStatusMessage("-----\nAddAdGroups:");
AddAdGroupsResponse addAdGroupsResponse = CampaignManagementExampleHelper.addAdGroups(
campaignIds.getLongs().get(0),
adGroups,
false);
ArrayOfNullableOflong adGroupIds = addAdGroupsResponse.getAdGroupIds();
ArrayOfBatchError adGroupErrors = addAdGroupsResponse.getPartialErrors();
outputStatusMessage("AdGroupIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adGroupIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(adGroupErrors);
// Add keywords and ads within the ad group.
ArrayOfKeyword keywords = new ArrayOfKeyword();
Keyword keyword = new Keyword();
keyword.setBid(new Bid());
keyword.getBid().setAmount(0.47);
keyword.setParam2("10% Off");
keyword.setMatchType(MatchType.PHRASE);
keyword.setText("Brand-A Shoes");
keywords.getKeywords().add(keyword);
outputStatusMessage("-----\nAddKeywords:");
AddKeywordsResponse addKeywordsResponse = CampaignManagementExampleHelper.addKeywords(
adGroupIds.getLongs().get(0),
keywords,
false);
ArrayOfNullableOflong keywordIds = addKeywordsResponse.getKeywordIds();
ArrayOfBatchError keywordErrors = addKeywordsResponse.getPartialErrors();
outputStatusMessage("KeywordIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(keywordIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(keywordErrors);
ArrayOfAd ads = new ArrayOfAd();
ExpandedTextAd expandedTextAd = new ExpandedTextAd();
expandedTextAd.setTitlePart1("Contoso");
expandedTextAd.setTitlePart2("Quick & Easy Setup");
expandedTextAd.setTitlePart3("Seemless Integration");
expandedTextAd.setText("Find New Customers & Increase Sales!");
expandedTextAd.setTextPart2("Start Advertising on Contoso Today.");
expandedTextAd.setPath1("seattle");
expandedTextAd.setPath2("shoe sale");
com.microsoft.bingads.v13.campaignmanagement.ArrayOfstring finalUrls = new com.microsoft.bingads.v13.campaignmanagement.ArrayOfstring();
finalUrls.getStrings().add("https://www.contoso.com/womenshoesale");
expandedTextAd.setFinalUrls(finalUrls);
ads.getAds().add(expandedTextAd);
outputStatusMessage("-----\nAddAds:");
AddAdsResponse addAdsResponse = CampaignManagementExampleHelper.addAds(
adGroupIds.getLongs().get(0),
ads);
ArrayOfNullableOflong adIds = addAdsResponse.getAdIds();
ArrayOfBatchError adErrors = addAdsResponse.getPartialErrors();
outputStatusMessage("AdIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(adErrors);
// Delete the campaign and everything it contains e.g., ad groups and ads.
outputStatusMessage("-----\nDeleteCampaigns:");
ArrayOflong deleteCampaignIds = new ArrayOflong();
deleteCampaignIds.getLongs().add(campaignIds.getLongs().get(0));
CampaignManagementExampleHelper.deleteCampaigns(
authorizationData.getAccountId(),
deleteCampaignIds);
outputStatusMessage(String.format("Deleted CampaignId %d", deleteCampaignIds.getLongs().get(0)));
}
catch (Exception ex) {
String faultXml = ExampleExceptionHelper.getBingAdsExceptionFaultXml(ex, System.out);
outputStatusMessage(faultXml);
String message = ExampleExceptionHelper.handleBingAdsSDKException(ex, System.out);
outputStatusMessage(message);
}
}
}
<?php
use Microsoft\MsAds\Rest\ApiException;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AddKeywordsRequest;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AdGroup;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Bid;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\BudgetLimitType;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Campaign;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Date;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\ExpandedTextAd;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Keyword;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\MatchType;
use Microsoft\MsAds\Rest\Test\RestApiTestBase;
class ExpandedTextAdsTest extends RestApiTestBase
{
/**
* Add a new search campaign.
* @throws ApiException
*/
public function testAddCampaigns()
{
print("-----\r\nAdding Campaigns:\r\n");
$campaign = new Campaign();
$campaign->setName("Women's Shoes ".self::generateRandomAlphaNumeric());
$campaign->setBudgetType(BudgetLimitType::DAILY_BUDGET_STANDARD);
$campaign->setDailyBudget(50.00);
$campaign->setLanguages(['All']);
$campaign->setTimeZone('PacificTimeUSCanadaTijuana');
return self::addCampaignsRequest([$campaign]);
}
/**
* Add an ad group within the campaign.
* @depends testAddCampaigns
* @throws ApiException
*/
public function testAddAdGroups($campaignIds)
{
print("-----\r\nAdding Ad Groups:\r\n");
$adGroup = new AdGroup();
$adGroup->setName("Women's Red Shoe Sale".self::generateRandomAlphaNumeric());
$adGroup->setCpcBid((new Bid())->setAmount(0.09));
$adGroup->setEndDate((new Date())
->setDay(31)
->setMonth(12)
->setYear(date("Y")));
return self::addAdGroupsRequest($campaignIds[0], [$adGroup]);
}
/**
* Add keywords to the ad group.
* @depends testAddAdGroups
* @throws ApiException
*/
public function testAddKeywords($adGroupIds)
{
print("-----\r\nAdding Keywords:\r\n");
$keyword = new Keyword();
$keyword->setText("Brand-A Shoes".self::generateRandomAlpha());
$keyword->setMatchType(MatchType::BROAD);
$keyword->setBid((new Bid())->setAmount(0.47));
$keyword->setParam2("10% Off");
$request = new AddKeywordsRequest([
'AdGroupId' => $adGroupIds[0],
'Keywords' => [$keyword]
]);
$response = self::$campaignManagementServiceApi->addKeywords($request);
$keywordIds = $response->getKeywordIds();
print("KeywordIds:\r\n");
print_r($keywordIds);
print("PartialErrors:\r\n");
print_r($response->getPartialErrors());
self::assertEmpty($response->getPartialErrors());
self::assertNotEmpty($keywordIds);
return $adGroupIds;
}
/**
* Add an expanded text ad to the ad group.
* @depends testAddKeywords
* @throws ApiException
*/
public function testAddExpandedTextAd($adGroupIds)
{
print("-----\r\nAdding Ads:\r\n");
$ad = new ExpandedTextAd();
$ad->setTitlePart1("Contoso");
$ad->setTitlePart2("Quick & Easy Setup");
$ad->setTitlePart3("Seamless Integration");
$ad->setText("Find New Customers & Increase Sales!");
$ad->setTextPart2("Start Advertising on Contoso Today.");
$ad->setPath1("seattle");
$ad->setPath2("shoe sale");
$ad->setFinalUrls(["http://www.contoso.com/womenshoesale"]);
return self::addAdsRequest($adGroupIds[0], [$ad]);
}
/**
* Delete the campaign and everything it contains.
* @depends testAddCampaigns
* @depends testAddExpandedTextAd
* @throws ApiException
*/
public function testDeleteCampaigns($campaignIds)
{
self::deleteCampaignsRequest($campaignIds);
}
}
import uuid
from auth_helper import *
from openapi_client.models.campaign import *
def main(authorization_data):
try:
# Create a campaign
print("Creating campaign...")
campaign = Campaign(
name=f"Campaign_{uuid.uuid4()}",
budget_type=BudgetLimitType.DAILYBUDGETSTANDARD,
daily_budget=50.00,
languages=['All'],
time_zone='PacificTimeUSCanadaTijuana',
campaign_type=CampaignType.SEARCH
)
add_campaigns_request = AddCampaignsRequest(
account_id=authorization_data.account_id,
campaigns=[campaign]
)
add_campaigns_response = campaign_service.add_campaigns(
add_campaigns_request=add_campaigns_request
)
campaign_ids = add_campaigns_response.CampaignIds
print(f"Created Campaign ID: {campaign_ids[0]}")
# Create an ad group
print("\nCreating ad group...")
ad_group = AdGroup(
name=f"AdGroup_{uuid.uuid4()}",
start_date=None,
end_date=Date(day=31, month=12, year=datetime.now().year),
cpc_bid=Bid(amount=0.10),
language="English"
)
add_ad_groups_request = AddAdGroupsRequest(
campaign_id=campaign_ids[0],
ad_groups=[ad_group]
)
add_ad_groups_response = campaign_service.add_ad_groups(
add_ad_groups_request=add_ad_groups_request
)
ad_group_ids = add_ad_groups_response.AdGroupIds
print(f"Created Ad Group ID: {ad_group_ids[0]}")
# Create expanded text ads
print("\nCreating expanded text ads...")
ads = []
for i in range(3):
expanded_text_ad = ExpandedTextAd(
title_part1=f"Contoso Quick Setup {i}",
title_part2="Fast & Easy",
title_part3="Seamless Integration",
text=f"Find New Customers & Increase Sales! Start Advertising on Contoso Today. Ad {i}",
text_part2="Start Advertising on Contoso Today.",
path1="seattle",
path2="shoe sale",
final_urls=["http://www.contoso.com/womenshoesale"],
final_mobile_urls=["http://mobile.contoso.com/womenshoesale"]
)
ads.append(expanded_text_ad)
add_ads_request = AddAdsRequest(
ad_group_id=ad_group_ids[0],
ads=ads
)
add_ads_response = campaign_service.add_ads(
add_ads_request=add_ads_request
)
ad_ids = add_ads_response.AdIds
print(f"Created {len(ad_ids)} ads")
print(f"Ad IDs: {ad_ids}")
if add_ads_response.PartialErrors:
print(f"Partial Errors: {add_ads_response.PartialErrors}")
# Get ads
print("\nGetting ads...")
get_ads_request = GetAdsByAdGroupIdRequest(
ad_group_id=ad_group_ids[0],
ad_types=[AdType.EXPANDEDTEXT],
return_additional_fields=None
)
get_ads_response = campaign_service.get_ads_by_ad_group_id(
get_ads_by_ad_group_id_request=get_ads_request
)
retrieved_ads = get_ads_response.Ads
print(f"Retrieved {len(retrieved_ads)} ads")
for ad in retrieved_ads:
if ad and hasattr(ad, 'Id'):
print(f" Ad ID: {ad.Id}")
if hasattr(ad, 'TitlePart1'):
print(f" Title Part 1: {ad.TitlePart1}")
# Update ads
print("\nUpdating ads...")
update_ads = []
if len(retrieved_ads) > 0 and retrieved_ads[0]:
update_ad = ExpandedTextAd(
id=ad_ids[0],
title_part1="Updated Contoso Quick Setup",
title_part2="Updated Fast & Easy",
text="Updated - Find New Customers & Increase Sales!",
final_urls=["http://www.contoso.com/womenshoesale"]
)
update_ads.append(update_ad)
if update_ads:
update_ads_request = UpdateAdsRequest(
ad_group_id=ad_group_ids[0],
ads=update_ads
)
update_ads_response = campaign_service.update_ads(
update_ads_request=update_ads_request
)
if update_ads_response.PartialErrors:
print(f"Partial Errors: {update_ads_response.PartialErrors}")
else:
print("Ads updated successfully")
# Delete ads
print("\nDeleting ads...")
delete_ads_request = DeleteAdsRequest(
ad_group_id=ad_group_ids[0],
ad_ids=ad_ids
)
delete_ads_response = campaign_service.delete_ads(
delete_ads_request=delete_ads_request
)
if delete_ads_response.PartialErrors:
print(f"Partial Errors: {delete_ads_response.PartialErrors}")
else:
print(f"Deleted {len(ad_ids)} ads")
# Delete ad group
print("\nDeleting ad group...")
delete_ad_groups_request = DeleteAdGroupsRequest(
campaign_id=campaign_ids[0],
ad_group_ids=ad_group_ids
)
campaign_service.delete_ad_groups(
delete_ad_groups_request=delete_ad_groups_request
)
print(f"Deleted Ad Group ID {ad_group_ids[0]}")
# Delete campaign
print("\nDeleting campaign...")
delete_campaigns_request = DeleteCampaignsRequest(
account_id=authorization_data.account_id,
campaign_ids=campaign_ids
)
campaign_service.delete_campaigns(
delete_campaigns_request=delete_campaigns_request
)
print(f"Deleted Campaign ID {campaign_ids[0]}")
except Exception as ex:
print(f"Error occurred: {str(ex)}")
if __name__ == '__main__':
print("Loading the web service client...")
authorization_data = AuthorizationData(
account_id=None,
customer_id=None,
developer_token=DEVELOPER_TOKEN,
authentication=None,
)
authenticate(authorization_data)
campaign_service = ServiceClient(
service='CampaignManagementService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
main(authorization_data)