Re: How do I create an audience using the new Google Ads API?

2019-01-14 Thread Jon Oler
Thanks again for the response, Dhanya. I now have my answer. 

I realize that the new API is in beta and that the full API that includes 
all the functionality of the old SOAP API is supposed to be released this 
quarter. That said, I feel like both the API docs and the release notes 
could be clearer on this point. 

As I mentioned earlier, the release notes just state that as of version 
0.6.0, this functionality was added to the API: "Create audiences using 
UserListService". Any reader of the release notes is naturally going to 
assume that all types of audiences can now be created with the API. Just 
changing this to "Create CRMBasedUserList and SimilarUserList audiences 
using UserListService. Support for other types of audiences will be added 
in future releases".would make things much clearer.

The only things in the API docs that I can find that you referenced state:

Union field user_list. The user list.

Exactly one must be set. user_list can be only one of the following:

 

crm_based_user_list
similar_user_list

 
Again, no mention is made of the other possible types of user lists, so the 
reader of the API docs is left to wonder whether other types of users lists 
are actually supported or not. The fact that it is possible to read (what I 
now understand are incomplete versions) these all types of users lists 
(including ExpressionBasedUserList, LogicalUserList, etc.) also leads API 
users to believe that the API has full support for all types of user lists. 
Just adding a statement like "Support for creating other types of user 
lists will be added in future versions of the API " to this part of your 
API docs would make things much clearer.

Once again, thanks for clarifying this for me,

Jon

On Friday, January 11, 2019 at 2:30:02 PM UTC-7, Dhanya Sundararaju 
(AdWords API Team) wrote:
>
> Hi Jon,
>
> Currently, only CRMBased User Lists and Similar user lists are supported 
> as stated in this section 
> 
>  of 
> the guide. Please keep an eye on the blog 
>  for 
> updates on future releases.
>
> Regards,
> Dhanya, Google Ads API Team
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API and Google Ads API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/249b1d40-9258-423b-9107-137ad4163526%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: How do I create an audience using the new Google Ads API?

2019-01-11 Thread Jon Oler
Hi Dhanya,

Thank you very much for your response. However, I still don't see how I can 
create the user lists I need to create with the new Google Ads API. I only 
see CrmBasedUserListInfo and SimilarUserListInfo classes in the 0.6.0 java 
sdk. As I mentioned in my original post, I'm trying to create RULE_BASED 
and LOGICAL user lists, not CRM or Similar user lists. For example, here's 
some code that creates an ExpressionBasedUserList using the current (old) 
AdWords API (this code actually works using the current SOAP AdWords java 
sdk):

StringKey urlTypeKey = new StringKey("url__");
StringRuleItem urlStringRuleItem = new StringRuleItem();
urlStringRuleItem.setKey(urlTypeKey);
urlStringRuleItem.setOp(StringRuleItemStringOperator.CONTAINS);
urlStringRuleItem.setValue("oler.html");
RuleItem urlRuleItem = new RuleItem();
urlRuleItem.setStringRuleItem(urlStringRuleItem);

RuleItemGroup urlItemGroup = new RuleItemGroup();
urlItemGroup.setItems(new RuleItem[] {urlRuleItem});

Rule rule = new Rule();
rule.setGroups(new RuleItemGroup[] {urlItemGroup});

ExpressionRuleUserList expressionUserList = new 
ExpressionRuleUserList();
expressionUserList.setName("Oler test 1 7 day expression based user 
list");
expressionUserList.setDescription("Oler test 1 expression based user 
list description");
expressionUserList.setRule(rule);


expressionUserList.setPrepopulationStatus(RuleBasedUserListPrepopulationStatus.REQUESTED);
expressionUserList.setMembershipLifeSpan(7L);

UserListOperation operation = new UserListOperation();
operation.setOperand(expressionUserList);
operation.setOperator(Operator.ADD);

UserListReturnValue result =
adwordsUserListServiceInterface.mutate(new UserListOperation[] 
{operation});

I'd like to know how to do this exact same thing using the new Google Ads 
API. As I mentioned previously, the release notes for version 0.6.0 of the 
new Google Ads API states that the ability to "Create audiences using 
UserListService" was added in this release. Can you please tell me how I 
can create an ExpressionRuleUserList and a LogicalUserList using the new 
Google Ads API?

Thanks again,

Jon

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API and Google Ads API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/2704b933-ba3b-4b92-b041-81bc9f456e12%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


How do I create an audience using the new Google Ads API?

2019-01-10 Thread Jon Oler
I am unable to create a new audience using the new Google Ads API. The 
release notes for version 0.6.0 of the API 
(https://developers.google.com/google-ads/api/docs/release-notes) claim 
that the ability to "Create audiences using UserListService" was added in 
this release. I am using version 0.6.0 of the java Google Ads SDK. Here is 
my code (it's groovy code using the java sdk, not Java code):

  // Look up an existing rule-based user list...
  UserList existingUserList = 
userListServiceClient.getUserList("customers/6257802538/userLists/4598470")

  // Use the rule-based user list I looked up to create a new user 
list. I need to clear some attributes to avoid API errors...
  UserList newUserList = UserList.newBuilder(existingUserList)
  .setName(StringValue.of("Oler user list test 1"))
  .clearId()
  .clearResourceName()
  .clearClosingReason()
  .build()

  UserListOperation userListOperation = UserListOperation.newBuilder()
  .setCreate(newUserList)
  .build()

  userListServiceClient.mutateUserLists('6257802538', 
[userListOperation])

Here is the API error I receive when I make this call:

errors {
  error_code {
user_list_error: CONCRETE_TYPE_REQUIRED
  }
  message: "Concrete type of user list is required."
  trigger {
string_value: ""
  }
  location {
operation_index {
}
  }
}

I get the same error when trying to create a LOGICAL user list instead of a 
RULE_BASED user list as I'm doing in the example. In my example code, I'm 
trying to copy an existing user list, but I've also tried creating the user 
list from scratch, and I received the exact same API error ("concrete type 
required"). I don't see where I can set things like the url on a rule-based 
user list or add references to other user lists when creating a logical 
user list. Is creating user lists really supported in 0.6.0 of the Google 
Ads API as the release notes indicate? If so, what am I doing wrong when 
I'm attempting to create these things?

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API and Google Ads API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/76512321-bff4-4af9-b711-dbbf1cd97687%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: TrafficEstimatorService vs. bid landscapes with existing Campaigns/Ad Groups/Keywords

2015-04-29 Thread Jon Oler
ons regarding your use case.
>
> 8.  Bid landscapes only return a handful (I've seen 3 at the least and 9 
> at the most) of landscape points for various cpc bids.  Is the decision on 
> the number of landscape points to return determined by big differences in 
> cost/clicks/etc. at various bid points, so bidding in between these 
> landscape points wouldn't result in much different results in terms of 
> cost/clicks/etc.?  What if my ideal max cpc bid happens to be somewhere in 
> between two landscape points?  The TrafficEstimatorService allows the max 
> cpc bid to be specified in the request, so it has that working to its 
> advantage since we can decide how many estimates we want to retrieve.
> I'm looking into this question and will post back once I have an answer.
>
> Thanks,
> Josh, AdWords API Team
>
> On Tuesday, April 21, 2015 at 11:41:10 AM UTC-4, Jon Oler wrote:
>>
>> I'm trying to use the AdWords API to determine what the expected clicks 
>> and cost would be if I change the max cpc bid for existing keywords in 
>> existing campaigns and ad groups.  In my TrafficEstimatorService API 
>> requests, I included existing campaign ids, existing ad group ids, and 
>> existing keyword ids.  My question is what does the TrafficEstimatorService 
>> do with these ids when it generates traffic estimates?  The docs (
>> https://developers.google.com/adwords/api/docs/reference/v201502/TrafficEstimatorService.CampaignEstimateRequest)
>>  
>> are very vague about this:
>>
>> For existing campaigns, the campaign and optionally the ad group will be 
>> used as context to produce more accurate estimates.
>>
>> and 
>>
>> To make a keyword estimates request in which estimates do not consider 
>> existing account information (e.g. historical ad group performance), set 
>> campaignId 
>> <https://developers.google.com/adwords/api/docs/reference/v201502/TrafficEstimatorService.CampaignEstimateRequest#campaignId>
>>  to null.
>> This is about all of the documentation that I can find on this.  When I 
>> read that "the context" of the campaign/ad group/keyword would be used, 
>> then I assumed that the estimate would consider all of the keywords 
>> (including negative keywords) that were already in place in the given ad 
>> group.  However, this does not appear to be the case.  What seems to be 
>> happening is that the estimate is generated by considering only the 
>> keywords that are sent as part of the API request.  If the existing 
>> keywords aren't used when generating the estimate, then what "context" is 
>> used?  The docs seem to be too vague on this.
>>
>> Does the TrafficEstimatorService use the keyword id at all?  I'm 
>> wondering about this because even when I pass an existing keyword id in my 
>> request, I am required to specify a keyword text, a keyword match type, and 
>> a keyword max cpc bid.  If I don't include these, I get an API error saying 
>> these are required.  I would have expected the TrafficEstimatorService to 
>> use my keyword id to retrieve the keyword text, match type, and max cpc 
>> bid, but it doesn't seem to work this way.
>>
>> The TrafficEstimatorService documentation works is intended to provide 
>> estimates for existing campaigns/ad groups.  Is it intended to provide 
>> estimates for existing keywords as well, or is it mostly intended for use 
>> in generating estimates for new keywords?  I'm now wondering if the bid 
>> landscape functionality is really where I should be looking for estimates 
>> on existing keywords.
>>
>> In summary, my questions are:
>>
>> 1.  Is the keyword id used at all when included in the 
>> KeywordEstimateRequest sent to the TrafficEstimatorService, or are only and 
>> campaign id and ad group id used by this service?
>>
>> 2.  If the answer to #1 is no, then this means that an existing keyword's 
>> quality score, ctr, etc. aren't factored into an estimate, right?
>>
>> 3.  Does the TrafficEstimatorService consider other existing keywords, in 
>> an existing ad group (when the ad group id is specified) besides those 
>> included in the API request?  If not, then it would seem that it would be 
>> necessary to send all of the keywords in an ad group in a single API call 
>> in order to get accurate estimates because some keywords in an ad group may 
>> "steal" traffic from other keywords.
>>
>> 4.  Similar to question #2, but does the TrafficEstimatorService consider 
>> existing negative keywords for an existing ad group id when

TrafficEstimatorService vs. bid landscapes with existing Campaigns/Ad Groups/Keywords

2015-04-21 Thread Jon Oler
I'm trying to use the AdWords API to determine what the expected clicks and 
cost would be if I change the max cpc bid for existing keywords in existing 
campaigns and ad groups.  In my TrafficEstimatorService API requests, I 
included existing campaign ids, existing ad group ids, and existing keyword 
ids.  My question is what does the TrafficEstimatorService do with these 
ids when it generates traffic estimates?  The docs 
(https://developers.google.com/adwords/api/docs/reference/v201502/TrafficEstimatorService.CampaignEstimateRequest)
 
are very vague about this:

For existing campaigns, the campaign and optionally the ad group will be 
used as context to produce more accurate estimates.

and 

To make a keyword estimates request in which estimates do not consider 
existing account information (e.g. historical ad group performance), set 
campaignId 

 to null.
This is about all of the documentation that I can find on this.  When I 
read that "the context" of the campaign/ad group/keyword would be used, 
then I assumed that the estimate would consider all of the keywords 
(including negative keywords) that were already in place in the given ad 
group.  However, this does not appear to be the case.  What seems to be 
happening is that the estimate is generated by considering only the 
keywords that are sent as part of the API request.  If the existing 
keywords aren't used when generating the estimate, then what "context" is 
used?  The docs seem to be too vague on this.

Does the TrafficEstimatorService use the keyword id at all?  I'm wondering 
about this because even when I pass an existing keyword id in my request, I 
am required to specify a keyword text, a keyword match type, and a keyword 
max cpc bid.  If I don't include these, I get an API error saying these are 
required.  I would have expected the TrafficEstimatorService to use my 
keyword id to retrieve the keyword text, match type, and max cpc bid, but 
it doesn't seem to work this way.

The TrafficEstimatorService documentation works is intended to provide 
estimates for existing campaigns/ad groups.  Is it intended to provide 
estimates for existing keywords as well, or is it mostly intended for use 
in generating estimates for new keywords?  I'm now wondering if the bid 
landscape functionality is really where I should be looking for estimates 
on existing keywords.

In summary, my questions are:

1.  Is the keyword id used at all when included in the 
KeywordEstimateRequest sent to the TrafficEstimatorService, or are only and 
campaign id and ad group id used by this service?

2.  If the answer to #1 is no, then this means that an existing keyword's 
quality score, ctr, etc. aren't factored into an estimate, right?

3.  Does the TrafficEstimatorService consider other existing keywords, in 
an existing ad group (when the ad group id is specified) besides those 
included in the API request?  If not, then it would seem that it would be 
necessary to send all of the keywords in an ad group in a single API call 
in order to get accurate estimates because some keywords in an ad group may 
"steal" traffic from other keywords.

4.  Similar to question #2, but does the TrafficEstimatorService consider 
existing negative keywords for an existing ad group id when generating 
estimates when the negative keywords aren't included in the request?

5.  Can you describe in a bit more detail what "context" is used by the 
TrafficEstimatorService when existing campaign ids/ad group ids (and maybe 
keyword ids) are included in the request?  How does sending these ids 
result in more accurate estimates?

6.  Do bid landscapes consider the existing keywords in an ad group 
(including negative keywords) when a bid landscape is requested for a given 
keyword id?

7.  Which is the better way to get estimates for cost and clicks for 
existing keywords for various max cpc bids (and thus set a new max cpc 
bid)--the TrafficEstimatorService or bid landscapes?  The 
TrafficEstimatorService is a forward looking service in that it makes 
estimates for the future, so that would seem to be an advantage for it. 
 Unfortunately, I have doubts about how much data about existing keywords 
is applied for estimates on existing keywords.  On the other hand, bid 
landscapes are backwards looking (but we would prefer estimates for the 
future), but since they only require a keyword id to be specified, perhaps 
bid landscapes are able to utilize all of the context information of the 
keyword (other keywords in the ad group, negative keywords in the ad group, 
ctr, quality score, etc.).  If the bid landscape is for recent traffic, 
then it is also likely a good predictor of future traffic (which is why 
this functionality was created in the first place).

8.  Bid landscapes only return a handful (I've seen 3 at the least and 9 at 
the most) of landscape point

Re: ManagedCustomerService.get() sometimes returns inconsistent results

2013-10-23 Thread Jon Oler
It is now happening again with another AdWords account.  In this case, I'd 
done some further investigating.  We again have different results being 
returned by ManagedCustomerService.get().  Sometimes this AdWords account 
is included in the results, and sometimes it is not.  I'm now also calling 
CustomerService.get() with the effective client customer id set to this 
problem AdWords account.  CustomerService.get() always throws an 
AuthorizationError, apparently because this AdWords account is not in our 
MCC, so we don't have permission to access it.  The key thing here, though, 
is CustomerService.get() is consistent in its results, unlike 
ManagedCustomerService.get().  I searched several times for this account in 
the AdWords UI, and it did not show up.  It is possible that this client 
has unlinked from our MCC, but we are currently unsure of this.  We have 
over 1400 Adwords accounts linked to our MCC, so we have clients link and 
unlink from our MCC on a daily basis.  We really do need to be able to 
detect changes to accounts in our MCC and ManagedCustomerService.get() is 
returning incorrect and inconsistent results, so we'd really like to see 
this addressed quickly.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: ManagedCustomerService.get() sometimes returns inconsistent results

2013-10-22 Thread Jon Oler
We are seeing this problem again right now.  AdWords team, can you please 
confirm the problem and provide on estimate of when this will be fixed.  As 
things stand, ManagedCustomerService.get() is currently unusable for us.  I 
can provide AdWords account IDs if that would help you.  I can also provide 
you with SOAP logs showing that we have different results coming back over 
and over again within seconds of making the identical API call.

As of right now, there is one AdWords account that is sometimes (correctly) 
showing up in the results of ManagedCustomerService.get() when we request 
the contents of our MCC.  Other times, just seconds later, this same 
account is not showing up in the same exact call to 
ManagedCustomerService.get().  I have a test jig to test for the presence 
of this one AdWords account in our MCC by calling 
ManagedCustomerService.get() in a loop, and I can see the results of 
ManagedCustomerService.get() are definitely changing by looking at the SOAP 
requests and responses (I previously posted examples of this). 
 totalNumEntries is now always 1489 when the results are correct, but it is 
1488 when the results are wrong (missing this one AdWords account).  We 
need ManagedCustomerService.get() to return consistent results, so 
ManagedCustomerService.get() is essentially unusable for us right now and 
is causing us a lot of trouble.

Thanks for your help,

--Jon

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: ManagedCustomerService.get() sometimes returns inconsistent results

2013-10-22 Thread Jon Oler
I can also now verify that the problem happens even when we get all the 
results in a single API request.  In my previous posting, I noted that we 
were paging in the results with 1000 accounts per page.  Since we have over 
1400 AdWords accounts linked to our MCC, we required 2 calls to 
ManagedCustomerService.get() to get all the accounts.  We wondered whether 
getting all of the results in a single request might eliminate the problem 
we are seeing.  We have now tried that and looked at the SOAP requests and 
responses and found that the problem is currently happening even when we 
return our full MCC in a single ManagedCustomerService.get() request (we 
changed the page size to 2000).

Google AdWords API team, it really appears to us that 
ManagedCustomerService.get() is returning inconsistent (and incorrect) 
results for many hours at a time.  This makes is pretty much useless to us. 
 Can you please confirm and give us an estimate of when it will be fixed?

Thanks in advance for your help,

--Jon Oler

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://adwordsapi.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


ManagedCustomerService.get() sometimes returns inconsistent results

2013-10-18 Thread Jon Oler
You read my mind.  I actually just posted to that forum.  I also reported 
an issue from the thing that Morten emailed about in the Adwords UI awhile 
back.  My forum posting doesn't appear to be showing up yet--maybe the 
forum is moderated, so it will take a little while to make it.  It is kind 
of a pain to describe this problem.  Here is what I posted, so hopefully I 
get some kind of an answer:

We are seeing strange behavior with ManagedCustomerService.get().  We have 
a large MCC (over 1400 child AdWords accounts).  We are periodically 
calling ManagedCustomerService.get() to detect newly linked/unlinked child 
AdWords accounts.  In other words, we are periodically calling 
ManagedCustomerService.get() to retrieve our entire MCC tree and compare 
with previous results to detect changes.

This normally works just fine.  That is, when we call 
ManagedCustomerService.get(), we get exactly what we expect.  However, we 
are seeing times when our calls are returning unreliable results.  By 
unreliable results, I mean that we make one call to get and receive one 
result.  Then just a minute or so later, we make a second call and get a 
different result.  After just one more minute, we might get the first 
result again.  When this happens what we typically see are one or two 
AdWords accounts are excluded from the results of some of our calls, while 
they are included in other calls.  This situation remains for hours at a 
time (often more than 6 hours).  During this problem time period, it will 
always be the same AdWords accounts that are missing from some of the API 
calls but included in others.  Note that these missing accounts have not 
been removed from our MCC, so they should be in the results of the API 
call.  After many hours of this problematic situation where 
ManagedCustomerService.get() returns unreliable results (sometimes correct 
and sometimes missing a few AdWords accounts), then things will be fine 
again for awhile.  However, it doesn't usually take that long for the 
problem to recur (maybe a day or two).  When the problem does recur, then 
it will typically be different AdWords accounts that are missing from some 
of our API calls.

Our application requires that we detect changes to our MCC pretty quickly, 
so having these periods where ManagedCustomerService returns different 
results from minute to minute is a real problem for us.  From our 
software's point of view, it appears that there are a few random AdWords 
accounts that are added/removed/added/removed/added/removed/etc. over and 
over again during these periods.

Here is some proof from logging the SOAP calls.  Here's the first call. 
 Note the totalNumEntries reported in the result is 1465:

2013-10-15 22:18:47,191 [http-bio-8080-exec-1] INFO 
 AdWordsServiceClient.soapXmlLogger  - SOAP Request:
http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="
http://www.w3.org/2001/XMLSchema"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";>

https://adwords.google.com/api/adwords/mcm/v201302"; 
soapenv:mustUnderstand="0">
https://adwords.google.com/api/adwords/cm/v201302";>xyz
https://adwords.google.com/api/adwords/cm/v201302";>Shanghai: Oriental Pearl 
Tower (AwApi-Java, AdWords-Axis/1.15.2, Common-Java/1.15.2, Axis/1.4, 
Java/1.7.0_21, maven)
https://adwords.google.com/api/adwords/cm/v201302";>false
https://adwords.google.com/api/adwords/cm/v201302
">false



https://adwords.google.com/api/adwords/mcm/v201302";>

https://adwords.google.com/api/adwords/cm/v201302";>CustomerId
https://adwords.google.com/api/adwords/cm/v201302";>Name
https://adwords.google.com/api/adwords/cm/v201302";>CurrencyCode
https://adwords.google.com/api/adwords/cm/v201302";>DateTimeZone
https://adwords.google.com/api/adwords/cm/v201302
">CanManageClients
https://adwords.google.com/api/adwords/cm/v201302";>TestAccount
https://adwords.google.com/api/adwords/cm/v201302";>
0
1000






2013-10-15 22:18:47,191 [http-bio-8080-exec-1] INFO 
 AdWordsServiceClient.soapXmlLogger  - SOAP Response:
http://schemas.xmlsoap.org/soap/envelope/";>

https://adwords.google.com/api/adwords/mcm/v201302"; xmlns="
https://adwords.google.com/api/adwords/cm/v201302";>
0004e8d3ff3bc7f00aa4bc424348
ManagedCustomerService
get
0
1549
0



https://adwords.google.com/api/adwords/cm/v201302"; xmlns:ns2="
https://adwords.google.com/api/adwords/mcm/v201302";>

1465
ManagedCustomerPage

Foo
22
false
USD
America/New_York
   

ManagedCustomerService.get() sometimes returns unreliable results

2013-10-18 Thread Jon Oler
We are seeing strange behavior with ManagedCustomerService.get().  We have 
a large MCC (over 1400 child AdWords accounts).  We are periodically 
calling ManagedCustomerService.get() to detect newly linked/unlinked child 
AdWords accounts.  In other words, we are periodically calling 
ManagedCustomerService.get() to retrieve our entire MCC tree and compare 
with previous results to detect changes.

This normally works just fine.  That is, when we call 
ManagedCustomerService.get(), we get exactly what we expect.  However, we 
are seeing times when our calls are returning unreliable results.  By 
unreliable results, I mean that we make one call to get and receive one 
result.  Then just a minute or so later, we make a second call and get a 
different result.  After just one more minute, we might get the first 
result again.  When this happens what we typically see are one or two 
AdWords accounts are excluded from the results of some of our calls, while 
they are included in other calls.  This situation remains for hours at a 
time (often more than 6 hours).  During this problem time period, it will 
always be the same AdWords accounts that are missing from some of the API 
calls but included in others.  Note that these missing accounts have not 
been removed from our MCC, so they should be in the results of the API 
call.  After many hours of this problematic situation where 
ManagedCustomerService.get() returns unreliable results (sometimes correct 
and sometimes missing a few AdWords accounts), then things will be fine 
again for awhile.  However, it doesn't usually take that long for the 
problem to recur (maybe a day or two).  When the problem does recur, then 
it will typically be different AdWords accounts that are missing from some 
of our API calls.

Our application requires that we detect changes to our MCC pretty quickly, 
so having these periods where ManagedCustomerService returns different 
results from minute to minute is a real problem for us.  From our 
software's point of view, it appears that there are a few random AdWords 
accounts that are added/removed/added/removed/added/removed/etc. over and 
over again during these periods.

Here is some proof from logging the SOAP calls.  Here's the first call. 
 Note the totalNumEntries reported in the result is 1465:

2013-10-15 22:18:47,191 [http-bio-8080-exec-1] INFO 
 AdWordsServiceClient.soapXmlLogger  - SOAP Request:
http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>

https://adwords.google.com/api/adwords/mcm/v201302"; 
soapenv:mustUnderstand="0">
https://adwords.google.com/api/adwords/cm/v201302";>xyz
https://adwords.google.com/api/adwords/cm/v201302";>Shanghai: 
Oriental Pearl Tower (AwApi-Java, AdWords-Axis/1.15.2, Common-Java/1.15.2, 
Axis/1.4, Java/1.7.0_21, maven)
https://adwords.google.com/api/adwords/cm/v201302";>false
https://adwords.google.com/api/adwords/cm/v201302";>false



https://adwords.google.com/api/adwords/mcm/v201302";>

https://adwords.google.com/api/adwords/cm/v201302";>CustomerId
https://adwords.google.com/api/adwords/cm/v201302";>Name
https://adwords.google.com/api/adwords/cm/v201302";>CurrencyCode
https://adwords.google.com/api/adwords/cm/v201302";>DateTimeZone
https://adwords.google.com/api/adwords/cm/v201302";>CanManageClients
https://adwords.google.com/api/adwords/cm/v201302";>TestAccount
https://adwords.google.com/api/adwords/cm/v201302";>
0
1000






2013-10-15 22:18:47,191 [http-bio-8080-exec-1] INFO 
 AdWordsServiceClient.soapXmlLogger  - SOAP Response:
http://schemas.xmlsoap.org/soap/envelope/";>

https://adwords.google.com/api/adwords/mcm/v201302"; 
xmlns="https://adwords.google.com/api/adwords/cm/v201302";>
0004e8d3ff3bc7f00aa4bc424348
ManagedCustomerService
get
0
1549
0



https://adwords.google.com/api/adwords/cm/v201302"; 
xmlns:ns2="https://adwords.google.com/api/adwords/mcm/v201302";>

1465
ManagedCustomerPage

Foo
22
false
USD
America/New_York
false

...

Here's the second call, made 3 seconds after the first call.  It's for the 
second page of results, but note that the totalNumEntries reported in the 
response is now 1462:

2013-10-15 22:18:50,197 [http-bio-8080-exec-1] INFO 
 AdWordsServiceClient.soapXmlLogger  - SOAP Request:
http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:xsd="http://www.w3.org/2001/XMLS