Hi Vitaly,
I joined the GoogleAds workshop recently and tried to do exactly what you want: create a complete hierarchy of entities (budget-campaigns-ad groups-ads-keywords) for a newly created managed account
My answer is Yes, you can create the complete Campaign hierarchy in one operation. Below is what I found:
1- Order of the operation that you put into List<MutateOperation> is important: CampaignBudgetOperation --> CampaignOperation --> AdGroupOperation --> AdGroupAdOperation --> AdGroupCriterionOperation
2- Use different temporary Ids for new resource:
CampaignBudget resourcename = customers/12345/campaignBudgets/ -1
Campaign resourcename = customers/12345/campaigns/ -2
AgGroup resourcename = customers/12345/adGroups/ -3
Below is the pseudo code in .NET but you'll get the idea:
var googleAdsService = client.GetService(Google.Ads.GoogleAds.Services.V1.GoogleAdsService);
googleAdsService.Mutate(googleAdsId, new List<MutateOperation>
{
new MutateOperation
{
CampaignBudgetOperation = new CampaignBudgetOperation
{
Create = new CampaignBudget { ResourceName = "customers/12345/campaignBudgets/-1", ... }
},
new MutateOperation
{
CampaignOperation = new CampaignOperation
{
Create = new Campaign { ResourceName = "customers/12345/campaigns/ -2", CampaignBudget = "customers/12345/campaignBudgets/-1" }
}
},
new MutateOperation
{
AdGroupOperation = new Google.Ads.GoogleAds.V1.Services.AdGroupOperation
{
Create = new AdGroup { ResourceName = "customers/12345/adGroups/ -3", Campaign = "customers/12345/campaigns/ -2" }
}
},
new MutateOperation
{
AdGroupAdOperation = new Google.Ads.GoogleAds.V1.Services.AdGroupAdOperation
{
Create = new AdGroupAd { ResourceName = [not required], AdGroup = "customers/12345/adGroups/ -3" }
}
},
new MutateOperation
{
AdGroupCriterionOperation = new Google.Ads.GoogleAds.V1.Services.AdGroupCriterionOperation
{
Create = new AdGroupCriterion { ResourceName = [not required], AdGroup = "customers/12345/adGroups/ -3" }
}
}
});
Hope this helps