Share via

CampaignManagement v13 GetCampaignsByAccountId returns empty, while Bulk API returns active campaign

Daisuke Mita 0 Reputation points
2026-04-28T09:11:56.1066667+00:00

Hello,

We are seeing inconsistent results between CampaignManagement SOAP API and Bulk API for the same account.

Environment

  • API: CampaignManagement v13 (GetCampaignsByAccountId)
  • Date/Time: 2026-04-28 13:57:30 JST (2026-04-28 04:57:30 UTC)
  • TrackingId: 11fe86d3-512a-431a-a832-a3d4d39205e5
  • AccountId: 188355338
  • CustomerId: 254786541
  • Request (GetCampaignsByAccountId)
  • CampaignType: Audience Hotel Search Shopping PerformanceMax
  • ReturnAdditionalFields: AdScheduleUseSearcherTimeZone MaxConversionValueBiddingScheme TargetImpressionShareBiddingScheme TargetSetting BidStrategyId CpvCpmBiddingScheme DynamicFeedSetting MultimediaAdsBidAdjustment VerifiedTrackingSetting DynamicDescriptionSetting DisclaimerSetting CampaignConversionGoal TargetCpaInMaxConversion ResponsiveSearchAdsSetting CostPerSaleBiddingScheme ShoppingSettingShoppableAdsEnabled ShoppingSettingFeedLabel CallToActionSetting PageFeedInPerformanceMaxSettings

Response

  • SOAP call succeeds (no fault), but returns empty campaigns:
    • <GetCampaignsByAccountIdResponse ...><Campaigns .../></GetCampaignsByAccountIdResponse>

However, Bulk API for the same account returns at least one active campaign:

  • Id: 487660970
  • Type: Campaign
  • CampaignType: Audience
  • Status: Active
  • ParentId (AccountId): 188355338

Sanitized Logs

  • Note: AuthenticationToken is redacted for security.

GetCampaignsByAccountId Request & Response

[2026-04-28 17:49:02] local.DEBUG: {
    "account_id": "188355338",
    "service": "GetCampaignsByAccountId",
    "request": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"https://bingads.microsoft.com/CampaignManagement/v13\"><SOAP-ENV:Header><ns1:CustomerAccountId>188355338</ns1:CustomerAccountId><ns1:CustomerId>254786541</ns1:CustomerId><ns1:DeveloperToken>107REW71HM927642</ns1:DeveloperToken><ns1:UserName/><ns1:Password/><ns1:AuthenticationToken>********</ns1:AuthenticationToken></SOAP-ENV:Header><SOAP-ENV:Body><ns1:GetCampaignsByAccountIdRequest><ns1:AccountId>188355338</ns1:AccountId><ns1:CampaignType>Audience Hotel Search Shopping PerformanceMax</ns1:CampaignType><ns1:ReturnAdditionalFields>AdScheduleUseSearcherTimeZone MaxConversionValueBiddingScheme TargetImpressionShareBiddingScheme TargetSetting BidStrategyId CpvCpmBiddingScheme DynamicFeedSetting MultimediaAdsBidAdjustment VerifiedTrackingSetting DynamicDescriptionSetting DisclaimerSetting CampaignConversionGoal TargetCpaInMaxConversion ResponsiveSearchAdsSetting CostPerSaleBiddingScheme ShoppingSettingShoppableAdsEnabled ShoppingSettingFeedLabel CallToActionSetting PageFeedInPerformanceMaxSettings</ns1:ReturnAdditionalFields></ns1:GetCampaignsByAccountIdRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
",
    "response": "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Header><h:TrackingId xmlns:h=\"https://bingads.microsoft.com/CampaignManagement/v13\">0e5df2d3-29b1-4bb8-9675-7551f22c1188</h:TrackingId></s:Header><s:Body><GetCampaignsByAccountIdResponse xmlns=\"https://bingads.microsoft.com/CampaignManagement/v13\"><Campaigns xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"/></GetCampaignsByAccountIdResponse></s:Body></s:Envelope>"

Bulk Result Snippet

Array
(
    [Type] => Campaign
    [Status] => Active
    [Id] => 487660970
    [ParentId] => 188355338
    [CampaignId] => 
    [SubType] => AudienceStatic
    [Campaign] => 【0420-0515】春キャンペーン
    [AdGroup] => 
    [AssetGroup] => 
    [Website] => 
    [SyncTime] => 
    [ClientId] => 
    [ModifiedTime] => 04/27/2026 15:00:22.213
    ...
    [CampaignType] => Audience
    ...
    [StartDate] => 04/20/2026 00:00:00
    [EndDate] => 04/30/2026 23:59:59
    ...
)

Questions

  1. Why can GetCampaignsByAccountId return empty while Bulk API returns an active Audience campaign in the same account?
  2. Are there any known limitations/filters for Audience campaigns (or lifetime-budget campaigns) in GetCampaignsByAccountId?
  3. Is there a recommended request pattern for CampaignType (e.g., omit it entirely vs. pass a value set) for this account/campaign setup?

Best regards,

Daisuke Mita

Microsoft Advertising API
Microsoft Advertising API

A Microsoft API that provides programmatic access to Microsoft Advertising to manage large campaigns or to integrate your marketing with other in-house systems.

0 comments No comments

1 answer

Sort by: Most helpful
  1. Q&A Assist
    2026-04-28T09:12:10.0933333+00:00
    AI generated content. This question contains an answer created with AI from Q&A Assist. Learn more
    1. GetCampaignsByAccountId can return an empty Campaigns array while the Bulk API returns campaigns because they are different services with different behaviors and filters. The Bulk service is optimized for background download/upload of campaign entity data and, as documented, can download specific campaigns by account via operations such as DownloadCampaignsByAccountIds and objects such as CampaignScope. The Campaign Management GetCampaignsByAccountId operation, on the other hand, returns campaigns according to its own request parameters (e.g., CampaignType, ReturnAdditionalFields) and may not return entities that do not match those filters. In the provided SOAP response, the call is successful and returns an empty <Campaigns/> element, which indicates that the service did not find any campaigns matching the specified criteria for that request, not that the account has no campaigns. The Bulk API confirming an active Audience campaign only shows that the campaign exists; it does not guarantee that it matches the CampaignType filter or other internal criteria applied by GetCampaignsByAccountId.
    2. From the provided documentation, GetCampaignsByAccountId does not list any special exclusion or limitation for Audience campaigns specifically. The Campaign data object explicitly supports Audience as a valid CampaignType, and the Settings element description states that the TargetSetting can be used with any campaign type except Performance Max. There is no mention in the context of Audience or lifetime‑budget campaigns being filtered out or hidden by GetCampaignsByAccountId. The only documented behavior relevant here is that some campaign settings are only returned if requested via ReturnAdditionalFields (for example, TargetSetting), but that affects which fields are populated on returned campaigns, not whether the campaigns are returned at all.
    3. The documented pattern for CampaignType in GetCampaignsByAccountId is to pass the campaign types that should be retrieved. Audience is a supported campaign type in the Campaign object description. The FAQ guidance in the context recommends using the Bulk service when managing many entities across campaigns, but for features not available in Bulk (such as certain settings) the Campaign Management service must be used. Based on the context, a reasonable request pattern is:
      • Use GetCampaignsByAccountId with CampaignType including the specific types needed (e.g., Audience, Shopping, DynamicSearchAds, etc.).
      • Use ReturnAdditionalFields only for fields that are needed, such as TargetSetting, ShoppingSetting, or other settings that are not returned by default.
      There is no documented requirement in the context to omit CampaignType entirely for Audience campaigns, nor any special handling for lifetime‑budget campaigns. If GetCampaignsByAccountId continues to return an empty list while Bulk clearly shows an active Audience campaign, the next step is to rely on Bulk for campaign discovery and use Campaign Management only where required for unsupported Bulk features, as suggested in the FAQ.

    References:

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.