Forecast again (am I too impatient?)

2023-10-13 Thread Bruce Axtens
I'm bouncing between product support and API because no one seems to have 
an answer to what I'm asking (or I'm not comprehending the answer.)

It all started with 
https://groups.google.com/g/adwords-api/c/SUmBsHLlTbM/m/iyMijs7CAwAJ where 
I started a correspondence about Forecast. Eventually API told me to talk 
to UX. So I wrote to ads-support. Their ticket numbers are 0-170034805 
and 3-350634582

While it may be true that API and UI follow the same limits, the API 
appears to be more flexible and UX less so. The API lets me do "what-if 
unlimited budget" but UX doesn't so I can't cross-check my API figures with 
UX.

Where to from here? Another department? 

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/b53409a8-5840-466c-bd4c-1483018d2378n%40googlegroups.com.


Re: forecasts

2023-10-10 Thread Bruce Axtens
Thanks Anash

The thing is, I'm bouncing between product support and API because no one 
seems to have an answer to what I'm asking (or I'm not comprehending the 
answer.)

It all started 
with https://groups.google.com/g/adwords-api/c/SUmBsHLlTbM/m/iyMijs7CAwAJ 
where I started a correspondence about Forecast. Eventually API told me to 
talk to UX. So I wrote to ads-support. Their ticket numbers 
are 0-170034805 and 3-350634582

While it may be true that API and UI follow the same limits, the API 
appears to be more flexible and UX less so. The API lets me do "what-if 
unlimited budget" but UX doesn't so I can't cross-check my API figures with 
UX.

Kind regards,
Bruce.
On Thursday, October 5, 2023 at 4:04:44 AM UTC+8 Google Ads API Forum 
Advisor wrote:

> Hi Bruce,
>
> The API and UI follow the same limits, so this is more a question for the 
> product support team.
>
> Regards
> Anash
>
> ref:_00D1U1174p._5004Q2p3Nw3:ref
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/e82ecc81-527d-496c-9145-187bd8ff1de5n%40googlegroups.com.


Forecasts

2023-10-03 Thread Bruce Axtens
Can the API do an unlimited "campaign budget" and an unlimited "daily 
budget" when configuring a forecast request? 

If unlimited is not possible, then what is the maximum "campaign budget" 
possible, and the maximum "daily budget" possible? 

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/521fb9f8-f5e2-4940-b8c5-fb7df11ab000n%40googlegroups.com.


Re: confusion about historical versus forecast in ads

2023-09-06 Thread axtens
Thank you for the prompt response. You said, " unable to provide a definite 
timeline ". How about a ballpark guesstimate? Six months? 12?

Kind regards,
Bruce

On Monday, 4 September 2023 at 10:43:58 pm UTC+8 Google Ads API Forum 
Advisor wrote:

> Hi Bruce,
>
>  
>
> Thanks for providing more context to this.
>
>  
>
> Allow me to raise a request for the feature to allow for more flexibility 
> in settings and give results that correlate better with the historical to 
> be exposed via the Google Ads API. Kindly note however that we would be 
> unable to provide a definite timeline with regard to it's release and would 
> instead recommend you keep an eye on our Ads Developer Blog 
>  for 
> future updates and latest announcements.
>
>  
>
> Let us know if we can assist you with anything else.
>
>  
> This message is in relation to case "ref:_00D1U1174p._5004Q2o9M4Q:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/ce077a4c-6d48-404a-a1bd-387d65ece91an%40googlegroups.com.


Re: confusion about historical versus forecast in ads

2023-09-04 Thread Bruce Axtens
Thanks for getting back to me.

As far as I can see, there's no means to change the $120 value. I'm very 
willing to be proved wrong.

-Bruce

On Monday, September 4, 2023 at 5:39:52 PM UTC+8 Google Ads API Forum 
Advisor wrote:

> Hello Bruce,
>
> Thank you for getting back to us.
>
> Can you please confirm if you are able to change the $120 value to 
> $1,000,000 in the Google Ads UI view? Please note that the Google Ads UI 
> and API mimic each other’s behavior. If you are able to modify this via UI 
> view it should also be possible to do this via the API. 
> This message is in relation to case "ref:_00D1U1174p._5004Q2o9M4Q:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/138e4c0b-1565-46e8-8117-7a6ff0817589n%40googlegroups.com.


Re: confusion about historical versus forecast in ads

2023-08-31 Thread Bruce Axtens
Hello "Team"

The difficulty of getting comparable values from the online Forecast tool 
is that the bidding strategy daily budget seems to be tied to the budget of 
the CCID's account. We're trying to find out what the impressions would be 
if the budget was effectively unlimited. Is there a way to do that in the 
Forecast tool?

Kind regards,
Bruce 

On Wednesday, August 30, 2023 at 3:32:59 PM UTC+8 Google Ads API Forum 
Advisor wrote:

> Hi Bruce,
>
> Thank you for reaching out to us.
>
> Kindly note that generating historical metrics and generating forecast 
> metrics differ from each other. *Historical metrics* 
>  provide metrics on 
> how keywords have previously performed on Google Search, including average 
> monthly searches (past 12 months), approximate monthly search volume (per 
> month), competition level, competition index, 20th percentile of bids, and 
> 80th percentile of bids, while *forecast metrics* 
>  provide metrics 
> for proposed or existing campaigns, including impressions, click-through 
> rate, average cost per click, clicks, and cost.
>
> Note that you can use historical metrics to reduce a large set of keywords 
> to a more manageable size based on their performance. However, if you 
> already know the keywords you want to use, you can skip historical metrics 
> and go straight to *forecast metrics* 
> 
> .
>
> On the other hand, kindly note that the Google Ads API mirrors the Google 
> Ads UI. Whatever data shows on the Ads UI report, the API should pull it 
> the same. With this being said, could you please provide us with the entire 
> UI screenshot where you can see the specific expected data you want to 
> retrieve in the API, so that our team can further check this and provide 
> appropriate recommendations to you?
>
> You may then send the requested information via the Reply privately to 
> author option. If this option is not available, you may send the details 
> directly to our googleadsa...@google.com alias instead.
>  
> This message is in relation to case "ref:_00D1U1174p._5004Q2o9M4Q:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/5024d744-bd8e-4bc3-b607-f458f6180e41n%40googlegroups.com.


Confusion about Historical versus Forecast in Ads

2023-08-29 Thread Bruce Axtens
Using the following settings 
"CcId": "6239854509",
"Keywords": "attractions",
"Language": "English",
"Location": "Western Australia,Australia",
"Network": "GoogleSearch",
"From": "01/07/2023",
"To": "31/07/2023"

we get the following out of a Historical request
"Metrics": {
"AvgMonthlySearches": 49500,
"Competition": 2,
"CompetitionIndex": 0,
"LowTopOfPageBidMicros": 0,
"HighTopOfPageBidMicros": 0,
"MonthlySearchVolumes": [{
"Year": 2023,
"HasYear": true,
"Month": 8,
"MonthlySearches": 49500,
"HasMonthlySearches": true
}
]
},
"Text": "attractions",
"CloseVariants": []

Compare that to the setting we use for a Forecast request (our code 
converts dollars to micros and language and location to their respective Id 
values),
"CcId": "6239854509",
"From": "2023-09-01",
"To": "2023-09-30",
"Language": "English",
"Location": "Western Australia,Australia",
"Network": "GoogleSearch",
"DevToken": "REDACTED",
"BiddingStrategyDailyBudgetDollars": 100,
"BiddingStrategyMaxCpcBidDollars": 1522,
"ConversionRate": 1,
"AdGroupsMaxCpcBidDollar": 1522,
"BiddableKeywords": "attractions",
"BiddableKeywordsMaxCpcBidDollars": 1522,
"BiddableKeywordsMatchType": "Broad"

and the result. 
"KeywordForecastMetrics": {
"Impressions": 774.91845703125,
"HasImpressions": true,
"ClickThroughRate": 0.13109692931175232,
"HasClickThroughRate": true,
"AverageCpcMicros": 4824580,
"HasAverageCpcMicros": true,
"Clicks": 101.58943176269531,
"HasClicks": true,
"CostMicros": 490126290,
"HasCostMicros": true,
"Conversions": 101.58943176269531,
"HasConversions": true,
"ConversionRate": 1,
"HasConversionRate": true,
"AverageCpaMicros": 4824579,
"HasAverageCpaMicros": true

Why is it that the Historical's AvgMonthlySearches value is so different to 
the Forecast's Impressions (49500 vs 774)? Is 774 for the full month or for 
some part thereof?

What are we not understanding correctly here? 

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/f5aaf6da-62c6-486c-8946-094a84464acen%40googlegroups.com.


Re: unique users metrics

2023-08-03 Thread Bruce Axtens
I'm trying to establish the audience size for campaigns or maybe  
census_audience_size. I keep going round and round in circles ending up at 
youtube-related requests which are totally irrelevant. Must I really spend 
time with ReachPlanService, GenerateReachForecast, PlannableLocation, 
ProductMetadadta and PlannedProductReachForecast. This doesn't seem to be 
getting me anywhere useful. These things all seem to think I want YouTube 
data when I most assuredly do NOT. 

-Bruce

On Thursday, August 3, 2023 at 3:25:03 PM UTC+8 Google Ads API Forum 
Advisor wrote:

> Hi Bruce,
>
> Thank you for reaching out to us.
>
> Could you confirm if the "*approximate numbers of people "reached" at the 
> campaign level as a metric*" you are referring to is the Average 
> impression frequency per user? If yes, then I am afraid that field and the 
> unique user metric field are still not supported within the Google Ads API, 
> but we have already raised a feature request for these. However, there is 
> no guarantee that this will be supported soon. With that, we recommend that 
> you follow our *blog* for updates and new releases.
>
>- *blog: *
>https://ads-developers.googleblog.com/search/label/adwords_api 
>
>   
> This message is in relation to case "ref:_00D1U1174p._5004Q2naVag:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/57be880d-2b1c-4b57-bf3f-6901c32d5c71n%40googlegroups.com.


unique users metrics

2023-08-02 Thread Bruce Axtens
A couple of years ago one Anastasiya Erko asked a question regarding the 
number of users targeted by a campaign as a metric 
(See https://groups.google.com/g/adwords-api/c/jbNGLCOEMBM)

Has anything changed? Can one get approx numbers of people "reached" at the 
campaign level as a metric? Currently the Ad Reach appears to be limited to 
YouTube and requires an involved application process. 

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/da504cfa-8760-4baf-a3b9-490f631639c5n%40googlegroups.com.


Re: c# access to generate forecast metrics

2023-07-31 Thread Bruce Axtens
All fixed. Works a treat now. Thank you!

-Bruce

On Monday, July 31, 2023 at 11:13:33 PM UTC+8 Google Ads API Forum Advisor 
wrote:

> Hi Bruce,
>
> Thank you for returning to our team.
>
> With regards to your new issue, I tried your request on my end and I also 
> got the same error. That being said, I tried using different values and you 
> may see and refer to the below request:
>   
>
>
> {
>   "forecastPeriod": {
> "startDate": "2023-08-30",
> "endDate": "2023-09-30"
>   },
>   "campaign": {
> "languageConstants": [
>   "languageConstants/1000"
> ],
> "geoModifiers": [
>   {
> "geoTargetConstant": "geoTargetConstants/2826"
>   }
> ],
> "keywordPlanNetwork": "GOOGLE_SEARCH",
> "biddingStrategy": {
>   "manualCpcBiddingStrategy": {
> "dailyBudgetMicros": 100,
> "maxCpcBidMicros": 50
>   }
> },
> "conversionRate": 0.1,
> "adGroups": [
>   {
> "maxCpcBidMicros": 200,
> "biddableKeywords": [
>   {
> "keyword": {
>   "matchType": "EXACT",
>   "text": "workforce management software"
> },
> "maxCpcBidMicros": 100
>   }
> ]
>   }
> ]
>   }
> }
>
>
> As you can notice, I used different values especially in the 
> *conversionRate* (
> https://developers.google.com/google-ads/api/rest/reference/rest/v14/customers/generateKeywordForecastMetrics#campaigntoforecast:~:text=campaign%20to%20forecast.-,conversionRate,0.02.%20If%20left%20empty%2C%20an%20estimated%20conversion%20rate%20will%20be%20used.,-CriterionBidModifier)
>  
> field. Please note that this field is the expected conversion rate (number 
> of conversions divided by number of total clicks) as defined by the user. 
> This value is *expressed as a decimal value*, so an expected conversion 
> rate of 2% should be entered as 0.02. If left empty, an estimated 
> conversion rate will be used.
>
> Let us know how it goes on your end.
>
>   
> This message is in relation to case "ref:_00D1U1174p._5004Q2mxRvV:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/1ff03223-e930-4f78-879e-43080c8eca32n%40googlegroups.com.


Re: ambiguous error. what is my invalid_value?

2023-07-31 Thread Bruce Axtens
>   I suggest using the other thread for better tracking and to avoid 
confusion.
 Fair call. I just wasn't sure if adding a second issue in the first would 
be noticed. 

Thanks,

On Monday, July 31, 2023 at 11:14:39 PM UTC+8 Google Ads API Forum Advisor 
wrote:

> Hi Bruce,
>
> Thank you for reaching out to our team.
>
> Upon checking, it appears that you have an existing thread with the 
> subject "*C# access to Generate Forecast Metrics*" where you also raised 
> this new issue. Having said that, I already provided suggestions on the 
> other thread and I suggest using the other thread for better tracking and 
> to avoid confusion.
>   
> This message is in relation to case "ref:_00D1U1174p._5004Q2nZHSZ:ref"
>
> Thanks,
>   
> [image: Google Logo] 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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/b023f134-0d6f-4a0d-8aad-1a9feab4fcafn%40googlegroups.com.


Ambiguous error. What is my INVALID_VALUE?

2023-07-31 Thread Bruce Axtens
Following on from my previous post,  another problem. 

The error "Request contains an invalid argument." is a tad ambiguous. A 
JSON serialization of the error object's Failure property includes 
'"KeywordPlanIdeaError": 3,"HasKeywordPlanIdeaError": true,' which is also 
a little ambiguous.

-Bruce

GoogleAds.DetailedRequestLogs Information: 1 : [2023-07-31 09:27:02Z] -
---BEGIN API CALL---

Request
---

Method Name: 
/google.ads.googleads.v14.services.KeywordPlanIdeaService/GenerateKeywordForecastMetrics
Host:
Headers: {
  "x-goog-api-client": "gl-dotnet/4.8.1 gapic/16.1.0 
gax/4.2.0+a8085e4f36ad24e2747b5e550f11079d4a891e78 grpc/2.46.3 gccl/3.0.0 
pb/3.21.5+638779f353731a0a04496bde20d14164684c3d93",
  "developer-token": "REDACTED",
  "login-customer-id": "2963060815",
  "x-goog-request-params": "customer_id=7415265454"
}

{ "customerId": "7415265454", "forecastPeriod": { "startDate": 
"2023-08-30", "endDate": "2023-09-30" }, "campaign": { "languageConstants": 
[ "languageConstants/1000" ], "geoModifiers": [ { "geoTargetConstant": 
"geoTargetConstants/2826" } ], "keywordPlanNetwork": "GOOGLE_SEARCH", 
"biddingStrategy": { "manualCpcBiddingStrategy": { "dailyBudgetMicros": 
"1000", "maxCpcBidMicros": "5" } }, "conversionRate": 0, 
"adGroups": [ { "maxCpcBidMicros": "100", "biddableKeywords": [ { 
"keyword": { "matchType": "EXACT", "text": "workforce management software" 
}, "maxCpcBidMicros": "1000" } ] } ] } }

Response

Headers: {
  "request-id": "K-2AVmTo4IfEsdJz1ADL9g",
  "date": "Mon, 31 Jul 2023 09:27:01 GMT",
  "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
  "google.ads.googleads.v14.errors.googleadsfailure-bin": 
"CiYKA+AEAxIfVGhlIGlucHV0IGhhcyBhbiBpbnZhbGlkIHZhbHVlLhIWSy0yQVZtVG80SWZFc2RKejFBREw5Zw==",
  "grpc-status-details-bin": 
"CAMSJVJlcXVlc3QgY29udGFpbnMgYW4gaW52YWxpZCBhcmd1bWVudC4aiAEKRHR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmFkcy5nb29nbGVhZHMudjE0LmVycm9ycy5Hb29nbGVBZHNGYWlsdXJlEkAKJgoD4AQDEh9UaGUgaW5wdXQgaGFzIGFuIGludmFsaWQgdmFsdWUuEhZLLTJBVm1UbzRJZkVzZEp6MUFETDln"
}

Fault: {
  "StatusCode": 3,
  "Details": "Request contains an invalid argument.",
  "RequestId": "K-2AVmTo4IfEsdJz1ADL9g",
  "Failure": {
"errors": [
  {
"errorCode": {
  "keywordPlanIdeaError": "INVALID_VALUE"
},
"message": "The input has an invalid value."
  }
],
"requestId": "K-2AVmTo4IfEsdJz1ADL9g"
  }
}
END API CALL

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/dae616bb-ffa1-47b8-a75d-2d5ab8da8c33n%40googlegroups.com.


Re: c# access to generate forecast metrics

2023-07-31 Thread Bruce Axtens
Okay that appeared to have fixed one problem. It was the email address 
used. Now I've got a different problem. The error "Request contains an 
invalid argument." is a tad ambiguous. A JSON serialization of the error 
object's Failure property includes '"KeywordPlanIdeaError": 
3,"HasKeywordPlanIdeaError": true,' which is also a little ambiguous.

-Bruce

GoogleAds.DetailedRequestLogs Information: 1 : [2023-07-31 09:27:02Z] - 
---BEGIN API CALL---

Request
---

Method Name: 
/google.ads.googleads.v14.services.KeywordPlanIdeaService/GenerateKeywordForecastMetrics
Host: 
Headers: {
  "x-goog-api-client": "gl-dotnet/4.8.1 gapic/16.1.0 
gax/4.2.0+a8085e4f36ad24e2747b5e550f11079d4a891e78 grpc/2.46.3 gccl/3.0.0 
pb/3.21.5+638779f353731a0a04496bde20d14164684c3d93",
  "developer-token": "REDACTED",
  "login-customer-id": "2963060815",
  "x-goog-request-params": "customer_id=7415265454"
}

{ "customerId": "7415265454", "forecastPeriod": { "startDate": 
"2023-08-30", "endDate": "2023-09-30" }, "campaign": { "languageConstants": 
[ "languageConstants/1000" ], "geoModifiers": [ { "geoTargetConstant": 
"geoTargetConstants/2826" } ], "keywordPlanNetwork": "GOOGLE_SEARCH", 
"biddingStrategy": { "manualCpcBiddingStrategy": { "dailyBudgetMicros": 
"1000", "maxCpcBidMicros": "5" } }, "conversionRate": 0, 
"adGroups": [ { "maxCpcBidMicros": "100", "biddableKeywords": [ { 
"keyword": { "matchType": "EXACT", "text": "workforce management software" 
}, "maxCpcBidMicros": "1000" } ] } ] } }

Response

Headers: {
  "request-id": "K-2AVmTo4IfEsdJz1ADL9g",
  "date": "Mon, 31 Jul 2023 09:27:01 GMT",
  "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
  "google.ads.googleads.v14.errors.googleadsfailure-bin": 
"CiYKA+AEAxIfVGhlIGlucHV0IGhhcyBhbiBpbnZhbGlkIHZhbHVlLhIWSy0yQVZtVG80SWZFc2RKejFBREw5Zw==",
  "grpc-status-details-bin": 
"CAMSJVJlcXVlc3QgY29udGFpbnMgYW4gaW52YWxpZCBhcmd1bWVudC4aiAEKRHR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmFkcy5nb29nbGVhZHMudjE0LmVycm9ycy5Hb29nbGVBZHNGYWlsdXJlEkAKJgoD4AQDEh9UaGUgaW5wdXQgaGFzIGFuIGludmFsaWQgdmFsdWUuEhZLLTJBVm1UbzRJZkVzZEp6MUFETDln"
}

Fault: {
  "StatusCode": 3,
  "Details": "Request contains an invalid argument.",
  "RequestId": "K-2AVmTo4IfEsdJz1ADL9g",
  "Failure": {
"errors": [
  {
"errorCode": {
  "keywordPlanIdeaError": "INVALID_VALUE"
},
"message": "The input has an invalid value."
  }
],
"requestId": "K-2AVmTo4IfEsdJz1ADL9g"
  }
}
END API CALL

 

On Monday, July 31, 2023 at 4:32:32 PM UTC+8 Google Ads API Forum Advisor 
wrote:

> Hi Bruce,
>
> Thank you for reaching out to Google Ads API Forum.
>
> I can see that you have encountered the *USER_PERMISSION_DENIED* error. 
> This error usually indicates that the authorized customer does not have 
> access to the operating customer.
>
> That being said, you will need to ensure that the user / email address you 
> used to generate the *OAuth2 credentials* indeed has *access* to the 
> account in your request. If the user / email address has access or is 
> associated with the MCC / manager account, you will need to* specify the 
> MCC / manager account's ID without hyphens (-) as the value of 
> the login-customer-id field.*
>
> Let us know how it goes on your end if this resolves your issue. If the 
> error persists after trying the suggested solution, then you may provide to 
> us the updated complete API logs (*request* and *response* with 
> *request-id *and *request header)* generated when you encountered the 
> said error along with the *email address* used to generate the OAuth2 
> credentials from your end so we can investigate further. You can provide it 
> via the Reply privately to author option. If this option is not available, 
> then send it instead on this email address googleadsa...@google.com 
> .
>
> Reference links included in this email:
>
>- USER_PERMISSION_DENIED: 
>
> *https://developers.google.com/google-ads/api/docs/best-practices/common-errors?hl=en#authorizationerror*
>  
>
> 
>  
>- OAuth2 credentials: 
>
> *https://developers.google.com/google-ads/api/docs/oauth/cloud-project?hl=en#create_a_client_id_and_client_secret*
>  
>
> 
>  
>- access: 
>
> *https://support.google.com/google-ads/answer/9978556?visit_id=637628826037447236-382779227=1*
>  
>
> 
>  
>- login-customer-id: 
>
> *https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid*
>  
>
> 
>  
>- request: 
>

C# access to Generate Forecast Metrics

2023-07-30 Thread Bruce Axtens
As can be seen in the current (2023-07-31) documentation 
,
 
there's currently no C# demo code. I've been trying to work it out anyway 
and am getting very close. However, I've hit a snag.

I've done the OAuth2 without difficulty. When I come to the actual 
GenerateKeywordForecastMetrics request I get the following error: "User 
doesn't have permission to access customer. Note: If you're accessing a 
client customer, the manager's customer id must be set in the 
'login-customer-id' header. See 
https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid;

I have checked and re-checked that I have the correct login-customer-id. I 
have enabled trace via  
TraceUtilities.Configure(
TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE,

$@"C:\logs\{Me}_{DateTime.Now:'-'MM'-'dd'-'HH'-'mm'-'ss'-'ff}_trace.log",
System.Diagnostics.SourceLevels.All);
and the output is clearly showing that the login-customer-id is being 
correctly supplied.

Am currently clueless on how to progress. Helpful suggestions welcome.

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/b438c855-c7da-42a1-8422-f5b8c2df1dc9n%40googlegroups.com.


Issue with CampaignToForecast

2023-07-25 Thread Bruce Axtens
I'm in the process of coding some C# to generate a CampaignToForecast as 
per the documentation 
at 
https://developers.google.com/google-ads/api/reference/rpc/v14/CampaignToForecast

I've got to the part where I'm trying to create a list of ForecastAdGroups. 
The intellisense is not offering me a "set" field for the biddable keywords 
and the negative keywords. I can set the  max_cpc_bid_micros value but not 
the  biddable_keywords[] and not the  negative_keywords[]. The latter two 
are marked "get" only. 

I've just noticed that the adGroups are not marked "Required" so that may 
mean I can get by for a while until V15 or whenever those fields become 
sets as well as gets.

Are ForecastAdGroups a thing yet?

-Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/c83622a4-66eb-4f11-9ba2-d0f163077020n%40googlegroups.com.


Accessing enums in Google.Ads.GoogleAds.V11

2022-10-26 Thread Bruce Axtens
I have code running the following snippet
```
PagedEnumerable 
searchPagedResponse =
googleAdsService.Search(request);

foreach (GoogleAdsRow googleAdsRow in 
searchPagedResponse)
{
```
Currently I'm serializing the googleAdsRow to JSON and back again so that I 
can programmatically access the values. There's probably a much better way 
but I haven't figured it out yet.

When I'm in Visual Studio's debugger I can access the values in 
googleAdsRow by entering things like `googleAdsRow.Customer.Id`. Fine, but 
suppose I'm passing in a string describing that path. How do I evaluate the 
contents of googleAdsRow so as to access Customer's Id and Campaign's Id 
and AdGroupAd.PolicySummary.ReviewStatus?

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/a846e43f-7ba0-4a2a-92b9-4ec242d55deen%40googlegroups.com.


ACTION_NOT_PERMITTED

2022-09-18 Thread Bruce Axtens
I expect this has been reported a multitude of times, it's just I don't 
quite get what this means, viz:
{ "errors": [ { "errorCode": { "authorizationError": "ACTION_NOT_PERMITTED" 
}, "message": "This request is not authorized to call ReachPlanningService. 
Developer Token not enabled.", "location": { } } ], "requestId": 
"6mAga-C8Yb_N9ENkuLh2_w" }

What does it mean "Developer Token not enabled"? I've been using this 
developer token for years!

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/e386529d-a134-4591-b27c-1106abb3789an%40googlegroups.com.


Problem instantiating Services.V11.ReachPlanService

2022-08-31 Thread Bruce Axtens
In the following, client is a valid GoogleAdsClient:
  client.GetService(Services.V11.ReachPlanService); 

However, it is throwing:
  Method not found: 'Grpc.Core.ChannelCredentials 
Grpc.Auth.GoogleGrpcCredentials.ToChannelCredentials(Google.Apis.Auth.OAuth2.ITokenAccess)'.

This is after a 
  uninstall-package google.ads.googleads -removedependencies -force
and a 
  install-package google.ads.googleads
which installed 
  Google.Ads.GoogleAds 14.0.0

So what's the fix?

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/ae9b5467-0cf1-4367-87f9-4f1cad7047bdn%40googlegroups.com.


How do I make Forecast Reach work?

2022-08-07 Thread axtens
I'm using the sample code at 
. 
I've connected to my GoogleAdsClient and have attempted to evaluate 
ListPlannableLocationsRequest request = new 
ListPlannableLocationsRequest();
ListPlannableLocationsResponse response = 
reachPlanServiceClient.ListPlannableLocations(request);
However, what I get in response is an error of 
"Message":"This request is not authorized to call ReachPlanningService. 
Developer Token not enabled: REDACTED"

How do I get my developer token (which works for everything else) to work 
with Reach Plan Service?

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/4836313b-a98b-41ca-9336-3a5ab2c57d02n%40googlegroups.com.


Reach for products other than YouTube

2022-07-25 Thread axtens
In the image there is a "Reach" value in the Google Ads Keyword Plan. Is 
there a way to calculate / generate this in C#?
[image: Reach.png]

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/cc0bbdf2-2802-480f-9e18-7c6df35e1806n%40googlegroups.com.


RE: How to enable AverageCpcMicros on GenerateHistoricalMetrics in V11's KeywordPlanService?

2022-07-22 Thread Bruce Axtens
Hello Ernie

Thanks for the help. With what you suggested I was able to work out the code 
below. Sadly, it doesn’t do anything more than before. However, the associate 
documentation states that AverageCpc is deprecated.

Oh well.

Kind regards,
Bruce.

public static (GenerateHistoricalMetricsResponse response, 
GoogleAdsException exception) GenerateHistoricalMetrics(GoogleAdsClient client, 
string plan)
{
KeywordPlanServiceClient kpServiceClient = 
client.GetService(Services.V11.KeywordPlanService);

GenerateHistoricalMetricsRequest generateHistoricalMetricsRequest = 
new GenerateHistoricalMetricsRequest()
{
KeywordPlan = plan,
HistoricalMetricsOptions = new 
Google.Ads.GoogleAds.V11.Common.HistoricalMetricsOptions() { IncludeAverageCpc 
= true },
AggregateMetrics = new 
Google.Ads.GoogleAds.V11.Common.KeywordPlanAggregateMetrics()
};
try
{
var response = 
kpServiceClient.GenerateHistoricalMetrics(generateHistoricalMetricsRequest);
return (response, null);
}
catch (GoogleAdsException e)
{
return (null, e);
}

}


From: Google Ads API Forum Advisor 
Sent: Friday, 22 July 2022 1:17 PM
To: Bruce Axtens 
Cc: Steve Poulson ; adwords-api@googlegroups.com
Subject: RE: How to enable AverageCpcMicros on GenerateHistoricalMetrics in 
V11's KeywordPlanService?

Hi Bruce,

Thank you for providing more details to your concern. I am also a member of the 
Google Ads API team and let me provide support to your concern.

If you want to include the 
average_cpc_micros<https://developers.google.com/google-ads/api/reference/rpc/v11/KeywordPlanHistoricalMetrics#average_cpc_micros>
 in response, then as initially mentioned by my colleague (Carmela), you will 
need to set the 
include_average_cpc<https://developers.google.com/google-ads/api/reference/rpc/v11/HistoricalMetricsOptions#include_average_cpc>
 as true in the 
KeywordPlanService.GenerateHistoricalMetrics<https://developers.google.com/google-ads/api/reference/rpc/v11/KeywordPlanService#generatehistoricalmetrics>
 request. Please note that the 
historical_metrics_options<https://developers.google.com/google-ads/api/reference/rpc/v11/GenerateHistoricalMetricsRequest#historical_metrics_options>
 is an object of the 
KeywordPlanService.GenerateHistoricalMetrics<https://developers.google.com/google-ads/api/reference/rpc/v11/KeywordPlanService#generatehistoricalmetrics>
 not just by the keywords ideas. This is the configuration that is missing in 
your request so the average cpc is missing as well in the response.

Unfortunately, there is no sample code that illustrate setting of this field in 
KeywordPlanService.GenerateHistoricalMetrics<https://developers.google.com/google-ads/api/reference/rpc/v11/KeywordPlanService#generatehistoricalmetrics>.
 With this, I would suggest reaching out to the author of the .Net client 
library via this link<https://github.com/googleads/google-ads-dotnet/issues> to 
know how you can implement the said field in the 
KeywordPlanService.GenerateHistoricalMetrics<https://developers.google.com/google-ads/api/reference/rpc/v11/KeywordPlanService#generatehistoricalmetrics>.
 They are more equipped to provide support on code related concerns.

Regards,

[Google Logo]
Ernie John
Google Ads API Team

[https://google-dev-relations.my.salesforce.com/servlet/servlet.ImageServer?oid=00D1U01174p=0184Q1I9DXZ=ext]

ref:_00D1U1174p._5004Q2bmEgh:ref

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/ME3P282MB1729FE6648350644302A8C2D9B909%40ME3P282MB1729.AUSP282.PROD.OUTLOOK.COM.


RE: How to enable AverageCpcMicros on GenerateHistoricalMetrics in V11's KeywordPlanService?

2022-07-21 Thread Bruce Axtens
ons described earlier
public static (MutateKeywordPlanCampaignKeywordResult resultArray, 
GoogleAdsException exception) CreateKeywordPlanCampaignNegativeKeywords(
GoogleAdsClient client,
string customerId,
KeywordPlanCampaignKeyword negativeKeyword,
bool debug = false)
{
if (debug) Debugger.Launch();
// Get the KeywordPlanCampaignKeywordService.
KeywordPlanCampaignKeywordServiceClient service = client.GetService(
Services.V11.KeywordPlanCampaignKeywordService);

// Create the campaign negative keyword for the keyword plan.
KeywordPlanCampaignKeyword kpCampaignNegativeKeyword = 
negativeKeyword as KeywordPlanCampaignKeyword;

KeywordPlanCampaignKeywordOperation operation = new 
KeywordPlanCampaignKeywordOperation
{
Create = kpCampaignNegativeKeyword
};

// Add the campaign negative keyword.
MutateKeywordPlanCampaignKeywordsResponse response =
service.MutateKeywordPlanCampaignKeywords(customerId,
new KeywordPlanCampaignKeywordOperation[] { operation });

// Display the result.
MutateKeywordPlanCampaignKeywordResult result = response.Results[0];
return (result, null);
}
GenerateHistoricalMetrics
Finally, I have created this method to generate the historical metrics data
public static (GenerateHistoricalMetricsResponse response, 
GoogleAdsException exception) GenerateHistoricalMetrics(GoogleAdsClient client, 
string plan)
{
KeywordPlanServiceClient kpServiceClient = 
client.GetService(Services.V11.KeywordPlanService);

try
{
var response = kpServiceClient.GenerateHistoricalMetrics(plan);
return (response, null);
}
catch (GoogleAdsException e)
{
return (null, e);
}
}
From: Google Ads API Forum Advisor 
Sent: Thursday, 21 July 2022 6:59 PM
To: Bruce Axtens 
Cc: adwords-api@googlegroups.com
Subject: Re: How to enable AverageCpcMicros on GenerateHistoricalMetrics in 
V11's KeywordPlanService?

Hi Bruce,

Thank you for the clarification.

Moving forward, could you confirm if you have considered checking this 
documentation<https://developers.google.com/google-ads/api/docs/keyword-planning/generate-historical-metrics>?
 I asked this because this document has the steps on how to generate historical 
metrics using the Google Ads API.

Regards,

[Google Logo]
Carmela
Google Ads API Team

[https://google-dev-relations.my.salesforce.com/servlet/servlet.ImageServer?oid=00D1U01174p=0184Q1I99hV=ext]

ref:_00D1U1174p._5004Q2bmEgh:ref

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/ME3P282MB1729C9D2AAF558F4696C74339B909%40ME3P282MB1729.AUSP282.PROD.OUTLOOK.COM.


Re: How to enable AverageCpcMicros on GenerateHistoricalMetrics in V11's KeywordPlanService?

2022-07-21 Thread Bruce Axtens
Hello Carmela

Yes, I am aware of the setting you describe. I have it in code already as 
request.HistoricalMetricsOptions = new 
HistoricalMetricsOptions()
{
IncludeAverageCpc = true
};
However, this targets KeywordPlanIdeaService via
KeywordPlanIdeaServiceClient keywordPlanIdeaService =
client.GetService(Services.V11.KeywordPlanIdeaService);

And this is NOT what I'm asking about. I am asking about the 
KeywordPlanService via
KeywordPlanServiceClient kpServiceClient = 
client.GetService(Services.V11.KeywordPlanService);

So what I want is the Cpc in the historical results derived from 
the GenerateHistoricalMetrics() call on KeywordPlanService not on the 
KeywordPlanIdeaService.

Kind regards,
Bruce.

On Thursday, July 21, 2022 at 2:29:49 PM UTC+8 adsapi wrote:

> Hi Bruce,
>
> Thank you for raising this concern to the Google Ads API team. Informing 
> you that I had to delete your initial post as it contained your logs.
>
> Reiterating your post without the logs: 
>
> "
>
> *I am making a request for historical data using the 
> GenerateHistoricalMetrics method on the Services.V11.KeywordPlanService 
> service. In the results that are returned the HasAverageCpcMicros field is 
> false and therefore there is nothing but zero in AverageCpcMicros. What do 
> I have to add to my KeywordPlan to enable this value? For reference, my 
> sources are publicly available on github 
> <https://github.com/axtens/Plugin_GoogleAds_Metrics>, and a full trace log 
> and the output JSON are attached.*"
>
> Moving forward to your concern,  I can see that this is mainly about the 
> *GenerateHistoricalMetrics *method. That being said, upon checking, 
> please note to set this include_average_cpc 
> <https://developers.google.com/google-ads/api/reference/rpc/v11/HistoricalMetricsOptions?hl=en#include_average_cpc>
>  field 
> in your request.
>
> Regards,
> [image: Google Logo] 
> Carmela 
> Google Ads API Team 
>   
>
> ref:_00D1U1174p._5004Q2bmEgh:ref
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/42cae272-379e-46a2-82b7-277f6ece2483n%40googlegroups.com.


How to enable AverageCpcMicros on GenerateHistoricalMetrics in V11's KeywordPlanService?

2022-07-20 Thread Bruce Axtens


I am making a request for historical data using the 
GenerateHistoricalMetrics method on the Services.V11.KeywordPlanService 
service. In the results that are returned the HasAverageCpcMicros field is 
false and therefore there is nothing but zero in AverageCpcMicros. What do 
I have to add to my KeywordPlan to enable this value?

For reference, my sources are publicly available on github 
<https://github.com/axtens/Plugin_GoogleAds_Metrics>, and a full trace log 
and the output JSON are attached.

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/ac051715-4916-472b-a314-d9b1e1ee0124n%40googlegroups.com.
GoogleAds.DetailedRequestLogs Verbose: 1 : [2022-07-18 02:01:36Z] - 
---BEGIN API CALL---

Request
---

Method Name: /google.ads.googleads.v11.services.GoogleAdsService/Search
Host: https://googleads.googleapis.com
Headers: {
  "x-goog-api-client": "gl-dotnet/4.8.0 gapic/12.1.0 
gax/3.5.0+6cfcac416e08abe8a5d580f8d87095c9fdba577e grpc/2.41.0 gccl/12.1.0 
pb/3.18.1+0dab03ba7bc438d7ba3eac2b2c1eb39ed520f928",
  "developer-token": "REDACTED",
  "login-customer-id": "7212153394",
  "x-goog-request-params": "customer_id=7273576109"
}

{ "customerId": "7273576109", "query": "SELECT customer.id, 
customer.descriptive_name, customer.currency_code, customer.time_zone, 
customer.tracking_url_template, customer.auto_tagging_enabled, customer.status 
FROM customer LIMIT 1" }

Response

Headers: {
  "content-disposition": "attachment",
  "request-id": "V3lLTfZZBN9ui37nHNZmSA",
  "date": "Mon, 18 Jul 2022 02:01:34 GMT",
  "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; 
ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; 
ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
}

{ "results": [ { "customer": { "resourceName": "customers/7273576109", "id": 
"7273576109", "descriptiveName": "Chamberlain Auto Electrics - 7061", 
"currencyCode": "AUD", "timeZone": "Australia/Perth", "autoTaggingEnabled": 
true, "status": "ENABLED" } } ], "fieldMask": 
"customer.id,customer.descriptiveName,customer.currencyCode,customer.timeZone,customer.trackingUrlTemplate,customer.autoTaggingEnabled,customer.status"
 }
END API CALL

GoogleAds.DetailedRequestLogs Verbose: 1 : [2022-07-18 02:01:37Z] - 
---BEGIN API CALL---

Request
---

Method Name: 
/google.ads.googleads.v11.services.KeywordPlanService/MutateKeywordPlans
Host: https://googleads.googleapis.com
Headers: {
  "x-goog-api-client": "gl-dotnet/4.8.0 gapic/12.1.0 
gax/3.5.0+6cfcac416e08abe8a5d580f8d87095c9fdba577e grpc/2.41.0 gccl/12.1.0 
pb/3.18.1+0dab03ba7bc438d7ba3eac2b2c1eb39ed520f928",
  "developer-token": "REDACTED",
  "login-customer-id": "7212153394",
  "x-goog-request-params": "customer_id=7273576109"
}

{ "customerId": "7273576109", "operations": [ { "create": { "forecastPeriod": { 
"dateInterval": "NEXT_QUARTER" }, "name": "Keyword plan GAM_2022-Jul-18 
02-01-36-548079" } } ] }

Response

Headers: {
  "content-disposition": "attachment",
  "request-id": "XncFhbKNsa3UaKrYwAowNQ",
  "date": "Mon, 18 Jul 2022 02:01:36 GMT",
  "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; 
ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; 
ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\""
}

{ "results&quo

Google.Protobuf.dll is right next to my .dll but it is not being found or loaded

2022-07-13 Thread Bruce Axtens
 <https://stackoverflow.com/posts/72961174/timeline>

I have a Framework 4.8 C# app that uses ClearScript 
<https://www.nuget.org/packages/Microsoft.ClearScript/> to allow JavaScript 
to be used as an extension language. I am able to write plugins as DLLs and 
attach them at runtime with code like:

attach(".\\Plugin_GoogleAds_Metrics.dll"); 
var H = Plugin_GoogleAds_Metrics.GoogleAds_Metrics.Historical; 
var auths = H.AuthoriseFromCFG(cfg,"7212153394");
var acc = H.GetAccountInformation(auths.Item1, 7273576109, true);

The C# code I'm using for the attach is 

JSE.Script.attach = (Func)Attach;

...

private static bool Attach(string dllPath, string name = "")
{
var status = false;
var htc = new HostTypeCollection();
try
{
var assem = Assembly.Load(AssemblyName.GetAssemblyName(dllPath));
htc.AddAssembly(assem);
if (name.Length == 0)
{
name = assem.FullName.Split(',')[0];
}

JSE.AddHostObject(name, htc); //FIXME checkout the hosttypes
Console.Error.WriteLine($"Attached {dllPath} as {name}");
status = true;
}
catch (ReflectionTypeLoadException rtle)
{
foreach (var item in rtle.LoaderExceptions)
{
Console.Error.WriteLine(item.Message);
T.Fail(item.Message);
}

}
catch (FileNotFoundException fnfe)
{
Console.Error.WriteLine(fnfe.Message);
T.Fail(fnfe.Message);

}
catch (Exception e)
{
Console.Error.WriteLine(e.Message);
T.Fail(e.Message);

}
return status;
}

The plugin code FWIW (which isn't much) is at 
<https://github.com/axtens/Plugin_GoogleAds_Metrics>

What's not working in this situation is that when I try to execute the 
plugin's GetAccountInformation method, and execution reaches the 
GoogleAdsServiceClient 
googleAdsService = client.GetService(Services.V11.GoogleAdsService); line, 
an error is thrown complaining about Google.Protobuf, viz
Exception has been thrown by the target of an invocation. at JScript global 
code (Script [23] [temp]:5:0) -> acc = H.GetAccountInformation(auths.Item1, 
7273576109, true) at 
Microsoft.ClearScript.ScriptEngine.ThrowScriptError(IScriptEngineException 
scriptError) at 
Microsoft.ClearScript.Windows.WindowsScriptEngine.ThrowScriptError(Exception 
exception) at 
Microsoft.ClearScript.Windows.WindowsScriptEngine.<>c__DisplayClass57_0`1.b__0()
 
at Microsoft.ClearScript.ScriptEngine.ScriptInvokeInternal[T](Func`1 func) 
at Microsoft.ClearScript.ScriptEngine.ScriptInvoke[T](Func`1 func) at 
Microsoft.ClearScript.Windows.WindowsScriptEngine.ScriptInvoke[T](Func`1 
func) at 
Microsoft.ClearScript.Windows.WindowsScriptEngine.Execute(UniqueDocumentInfo 
documentInfo, String code, Boolean evaluate) at 
Microsoft.ClearScript.Windows.JScriptEngine.Execute(UniqueDocumentInfo 
documentInfo, String code, Boolean evaluate) at 
Microsoft.ClearScript.ScriptEngine.Evaluate(UniqueDocumentInfo 
documentInfo, String code, Boolean marshalResult) at 
Microsoft.ClearScript.ScriptEngine.Evaluate(DocumentInfo documentInfo, 
String code) at Microsoft.ClearScript.ScriptEngine.Evaluate(String 
documentName, Boolean discard, String code) at 
Microsoft.ClearScript.ScriptEngine.Evaluate(String documentName, String 
code) at Microsoft.ClearScript.ScriptEngine.Evaluate(String code) at 
RulesetRunner.Program.Run(JScriptEngine& jSE, String scriptText, Config 
cfg, Dictionary`2 settings) in 
C:\Users\bugma\Source\Repos\Present\BORR\RulesetRunner\RunManagementPartials.cs:line
 
72 Exception has been thrown by the target of an invocation. Exception has 
been thrown by the target of an invocation. Could not load file or assembly 
'Google.Protobuf, Version=3.15.8.0, Culture=neutral, 
PublicKeyToken=a7d26565bac4d604' or one of its dependencies. The system 
cannot find the file specified. 

So

   1. I am using the latest Google.Ads.GoogleAds library 
   2. AutoGenerateBindingRedirects has been set to true in the csproj file 
   3. Add-BindingRedirect has been executed in the context of the Plugin's 
   project 
   4. The Plugin_GoogleAds_Metrics.dll is in the same folder as the 
   Google.Protobuf.dll
   
   
How is it that "The system cannot find the file specified."? And where do I 
go from here?

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 Gr

More confusion with Generate Historical Metrics

2022-05-30 Thread Bruce Axtens
According to the documentation To generate historical metrics:
Create a KeywordPlan, KeywordPlanCampaigns, KeywordPlanAdGroups, 
KeywordPlanCampaignKeywords, and KeywordPlanAdGroupKeywords.
Call KeywordPlanService.GenerateHistoricalMetrics with that keyword plan.


Now the weird thing is that the plans come out as a 4-element, 
slash-delimited string, 
e.g. customers/1879809528/keywordPlanCampaigns/413340892.  However, the 
GenerateHistoricalMetrics code (which is a documentation-inspired 
modification of code 
at 
https://developers.google.com/google-ads/api/docs/keyword-planning/generate-forecast-metrics)
 
expects a long, the keywordPlanId. 

I had thought that this number was the 4th item in the plan string, but 
this appears not to be the case (and I have traces to prove it.)

So how does one get from plan to metrics?

-- Bruce.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/87d15e1f-3a65-4e24-b41d-65fece310dbdn%40googlegroups.com.


Stymied on creating a keyword plan

2022-05-23 Thread Bruce Axtens
1. I have correctly authorised myself to the controlling account

2. I can demonstrate this by calling ListAccessibleCustomers and have it 
return a suitably long list of clients

3. I have copied and slightly adapted the  CreateKeywordPlan code from 
https://developers.google.com/google-ads/api/docs/keyword-planning/generate-historical-metrics?hl=en

4. When I execute the code I invariably get: 
Unhandled Exception: Google.Ads.GoogleAds.V10.Errors.GoogleAdsException: 
Status(StatusCode="PermissionDenied", Detail="The caller does not have 
permission", DebugException="Grpc.Core.Internal.CoreErrorDetailException: 
{"created":
"@1653366827.84500","description":"Error received from peer 
ipv4:142.250.70.202:443","file":"..\..\..\src\core\lib\surface\call.cc","file_line":1070,"grpc_message":"The
 
caller does not have permission","grpc_status":7}")

5. I have tried to generate a trace 
using TraceUtilities.Configure(TraceUtilities.DETAILED_REQUEST_LOGS_SOURCE, 
path, System.Diagnostics.SourceLevels.All); but that seems only to be 
created when the operation is successful and in this case it is not.

--Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/fce5e017-1151-49e6-aea7-446fdbb04602n%40googlegroups.com.


Generate Historical Metrics without a Keyword plan for a particular location / language

2022-05-18 Thread Bruce Axtens
As one Adil Khaji posted recently in another forum:

We can use the method GenerateKeywordHistoricalMetrics to generate search 
volume information, even when the keyword plan is not created. 
Refer to the below location for the method details
https://developers.google.com/google-ads/api/rest/reference/rest/v10/customers/generateKeywordHistoricalMetrics

But as part of this method in the HistoricalMetricsOptions, we can only 
pass start and end date, how can we get the search volume for a particular 
location and language? 

We'd like to know that answer to this one too.

-- Bruce.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/7cdff124-944b-4e84-8712-aeadf649316dn%40googlegroups.com.


More Google Ads confusion (in C#)

2022-05-10 Thread axtens
So according to the  
[KeywordPlanIdeaService](https://developers.google.com/google-ads/api/reference/rpc/v10/KeywordPlanIdeaService)
 
documentation there's `GenerateKeywordIdeas` and 
`GenerateKeywordHistoricalMetrics'.

On line 169 of 

 
one sees
```
GenerateKeywordIdeasRequest request = new GenerateKeywordIdeasRequest()
```
However, nowhere in the samples does one see 
```
GenerateKeywordHistoricalMetricsRequest request = new  
GenerateKeywordHistoricalMetricsRequest()
```
and the Google Ads library (at least the google-ads-dotnet one) knows 
nothing about such a symbol.

When might one expect the sources to catch up with the documentation?

--- Bruce.

```

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/75d273a9-c68e-4df5-bb87-0475b2bed55fn%40googlegroups.com.


How to capture/generate "Reach"

2022-05-09 Thread axtens
In the image there's a "Reach" column next to the location. How is this 
figure derived as is it possible to capture/generate it in code?

[image: Screenshot 2022-05-09 171039.png]
-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/4cb44b74-693d-4e4f-880d-14405858dc74n%40googlegroups.com.


Extraction proto fields from Ads results

2022-05-09 Thread axtens
The code below is what I'm currently using (confusion about Ideas vs 
Historical Metrics not withstanding) to generate a JSON representation of 
the captured data. My question is, is the use of the ` 
Google.Protobuf.Reflection.MessageDescriptor` and the use of Reflection 
actually going to work? It "appears" to work.

--- Bruce

```
public string GenerateHistoricalMetrics(GoogleAdsClient client, 
string customerIdString, string locationIdsList,string languageIdString, 
string keywordTextsList, string pageUrl, bool debug = true)
{
if (debug) Debugger.Launch();

long[] locationIds = (from id in locationIdsList.Split(',') 
select long.Parse(id)).ToArray();
string[] keywordTexts = keywordTextsList.Split(',');
long customerId = long.Parse(customerIdString);
long languageId = long.Parse(languageIdString);

KeywordPlanIdeaServiceClient keywordPlanIdeaService =
client.GetService(Services.V10.KeywordPlanIdeaService);

// Make sure that keywords and/or page URL were specified. The 
request must have
// exactly one of urlSeed, keywordSeed, or keywordAndUrlSeed 
set.
if (keywordTexts.Length == 0 && string.IsNullOrEmpty(pageUrl))
{
return JsonConvert.SerializeObject(new JSON() { Error = "At 
least one of keywords or page URL is required, but neither was specified." 
});
}

// Specify the optional arguments of the request as a 
keywordSeed, UrlSeed,
// or KeywordAndUrlSeed.
GenerateKeywordIdeasRequest request = new 
GenerateKeywordIdeasRequest()
{
CustomerId = customerId.ToString(),
};

if (keywordTexts.Length == 0)
{
// Only page URL was specified, so use a UrlSeed.
request.UrlSeed = new UrlSeed()
{
Url = pageUrl
};
}
else if (string.IsNullOrEmpty(pageUrl))
{
// Only keywords were specified, so use a KeywordSeed.
request.KeywordSeed = new KeywordSeed();
request.KeywordSeed.Keywords.AddRange(keywordTexts);
}
else
{
// Both page URL and keywords were specified, so use a 
KeywordAndUrlSeed.
request.KeywordAndUrlSeed = new KeywordAndUrlSeed
{
Url = pageUrl
};
request.KeywordAndUrlSeed.Keywords.AddRange(keywordTexts);
}

// Create a list of geo target constants based on the resource 
name of specified
// location IDs.
foreach (long locationId in locationIds)
{

request.GeoTargetConstants.Add(ResourceNames.GeoTargetConstant(locationId));
}

request.Language = ResourceNames.LanguageConstant(languageId);
// Set the network. To restrict to only Google Search, change 
the parameter below to
// KeywordPlanNetwork.GoogleSearch.
request.KeywordPlanNetwork = KeywordPlanNetwork.GoogleSearch; 
//.GoogleSearchAndPartners;

var resultList = new List();

var list = new List>();

try
{
// Generate keyword ideas based on the specified parameters.
var response =
keywordPlanIdeaService.GenerateKeywordIdeas(request);


// Iterate over the results and print its detail.
foreach (GenerateKeywordIdeaResult result in response)
{
KeywordPlanHistoricalMetrics metrics = 
result.KeywordIdeaMetrics;
Google.Protobuf.Reflection.MessageDescriptor descriptor 
= GenerateKeywordIdeaResult.Descriptor;
foreach (var field in 
descriptor.Fields.InDeclarationOrder())
{
object value = field.Accessor.GetValue(result);
if (value != null)
{
var props = 
value.GetType().GetProperties(BindingFlags.Public | 
BindingFlags.GetProperty | BindingFlags.GetField | BindingFlags.Instance);
var dict = new Dictionary();
foreach (string key in from prop in props
let key = 
Title(field.JsonName) + "." + prop.Name
where 
key.StartsWith("Keyword")
select key
)
{
dict.Add(key, value);
}

if (dict.Count() > 0)
list.Add(dict);
//Logging.Metrics("Decompose", 

Confused about Ads documentation

2022-05-09 Thread axtens
I've adapted the code at 
.
 
I don't understand why at one point why the example says,
```
var response =
keywordPlanIdeaService.GenerateKeywordIdeas(request);
```
and then about three lines later says,
```
KeywordPlanHistoricalMetrics metrics = 
result.KeywordIdeaMetrics;
```
It seems on the one hand to be generating keyword ideas and then on the 
other giving history.

Now in the documentation at 

 
it says that there's `GenerateKeywordHistoricalMetrics` and 
`GenerateKeywordIdeas`, however when I try to use the former in the 
example, VS2022 indicates that the name is unknown.

So my questions are:
1. What does the C# code on the "idea generation" page demonstrate Ideas or 
Historical Metrics (are these the same, conceptually, as AdWords' IDEAS and 
STATS respectively?)?
2. If it is in fact demonstrating Ideas, how would one adapt it for 
Historical Metrics?

--- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/9187dc42-8836-454e-8d53-5f967a992186n%40googlegroups.com.


AdWords to Ads

2022-05-08 Thread axtens
In AdWords one might have code like this
```
TargetingIdeaSelector selector = new TargetingIdeaSelector
{
requestType = RequestType.IDEAS,
```
and RequestType could be either IDEAS or STATS.

What is the GoogleAds equivalents for these when trying to report Targeting 
ideas?

-- bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/40947b04-3f99-44a2-992c-293dfe78e921n%40googlegroups.com.


Re: Serializing GoogleAdsRow in C#

2022-04-13 Thread axtens
So I've been able to retrieve the fields using FieldMask. Is it possible to 
programmatically access the fields in the GoogleAdsRow? For example, from 
the "Immediate Window" in VS2019 where result contains a list of 
GoogleAdsRows:
```
result[0].CustomerClient.ClientCustomer
"customers/7212153394"
result[0]["CustomerClient.ClientCustomer"]
error CS0021: Cannot apply indexing with [] to an expression of type 
'GoogleAdsRow'
```
How does one achieve a dynamic field selection?




On Wednesday, 13 April 2022 at 9:22:42 pm UTC+8 Zweitze wrote:

> When you request a report, you'll reserve a response object with a few 
> members, among that "Results" which is a list of returned GoogleAdsRows.
> Among the other members you will find "FieldMask" which contains a list of 
> names of the requested fields.
>
> With the FieldMask list, you can determine which fields you should include 
> in that report you want to make.
> On Wednesday, April 13, 2022 at 9:23:17 AM UTC+2 axtens wrote:
>
>> Having built up a list of GoogleAdsRow into
>> ```
>>  var result = new List();
>> ```
>> how can I now get a list of all the fields in each row so as to build up 
>> TSV report, with headings at the top and the columnar data below.
>>
>> -- Bruce
>>
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/7450b1c2-8644-47ed-a34c-0bf64cb0ad39n%40googlegroups.com.


Serializing GoogleAdsRow in C#

2022-04-13 Thread axtens
Having built up a list of GoogleAdsRow into
```
 var result = new List();
```
how can I now get a list of all the fields in each row so as to build up 
TSV report, with headings at the top and the columnar data below.

-- Bruce

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/07f80620-eeb8-47dd-9882-e95a1824a163n%40googlegroups.com.


Oddities in the new Ads API

2022-03-11 Thread axtens
I just issued a ` ListAccessibleCustomers` and got a list of supposedly 
accessible customers. However, when I then issued a query against one of 
them, I received a `User doesn't have permission to access customer.` error.

The code, FWIW, is below. The auth flow appears to work, and I suppose 
being able to execute `AccessibleCustomers` means somethings okay enough 
for that. I could be misspecifying the GAQL for all I know. However, the 
GAQL is exactly what's 
at https://developers.google.com/google-ads/api/docs/reporting/example

-- Bruce


```
public static (GoogleAdsClient, UserCredential) AuthoriseFromCFG(string 
cfg, string loginCustomerId, string scopes = GOOGLE_ADS_API_SCOPE, bool 
debug = false)
{
if (debug) Debugger.Launch();
var cfgDict = new Dictionary();
foreach (var keyValue in from line in File.ReadAllLines(cfg) 
select line.Split('='))
{
if (!keyValue[0].StartsWith("#"))
cfgDict[keyValue[0].Trim()] = keyValue[1].Trim();
}

string jsonPath = Path.ChangeExtension(cfg, "json");
dynamic jsonObj = 
JsonConvert.DeserializeObject(System.IO.File.ReadAllText(jsonPath));
string clientId = jsonObj.installed.client_id.Value;
string clientSecret = jsonObj.installed.client_secret;
string developerToken = cfgDict["developer.token"];
string credPathSuffix = Path.GetFileNameWithoutExtension(cfg);

GoogleAdsConfig config = new GoogleAdsConfig();
// Load the JSON secrets.
ClientSecrets secrets = new ClientSecrets()
{
ClientId = clientId,
ClientSecret = clientSecret,

};

// Authorize the user using desktop application flow.
Task task = 
GoogleWebAuthorizationBroker.AuthorizeAsync(
secrets,
scopes.Split(','),
"user",
CancellationToken.None,
new FileDataStore("BOGoogle-" + credPathSuffix, false)
);
UserCredential credential = task.Result;

// Store this token for future use.
string refreshToken = credential.Token.RefreshToken;

// To make a call, set the refreshtoken to the config, and
// create the GoogleAdsClient.
config.OAuth2RefreshToken = refreshToken;
config.DeveloperToken = developerToken;
config.LoginCustomerId = loginCustomerId;
//config.OAuth2AccessToken = credential.Token.AccessToken;
config.OAuth2ClientId = clientId;
config.OAuth2ClientSecret = clientSecret;
config.OAuth2RefreshToken = credential.Token.RefreshToken;
GoogleAdsClient client = new GoogleAdsClient(config);

// Now use the client to create services and make API calls.
// ...
return (client, credential);
}

...

public static string AccessibleCustomers(GoogleAdsClient client, bool debug 
= false)
{
if (debug) Debugger.Launch();
var result = new List();

CustomerServiceClient customerService = 
client.GetService(Services.V8.CustomerService);

try
{
// Retrieve the list of customer resources.
string[] customerResourceNames = 
customerService.ListAccessibleCustomers();

// Display the result.
foreach (string customerResourceName in 
customerResourceNames)
{
result.Add(customerResourceName);
}
}
catch (GoogleAdsException e)
{
return JsonConvert.SerializeObject(new JSONResponse()
{
Error = e.Failure,
Cargo = null
});
}
return JsonConvert.SerializeObject(new JSONResponse()
{
Error = null,
Cargo = result.ToArray()
});
}
public static string Report(GoogleAdsClient client, string 
customerId, string query, bool debug = false)
{
if (debug) Debugger.Launch();

// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = 
client.GetService(Services.V8.GoogleAdsService);
var result = new List();
try
{
// Issue a search request.
googleAdsService.SearchStream(customerId.ToString(), query,
delegate (SearchGoogleAdsStreamResponse resp)
{
// Display the results.
foreach (GoogleAdsRow criterionRow in resp.Results)
{
result.Add(criterionRow);
}
}
);
 

Re: What is wrong with this selector for AdWords

2022-02-28 Thread axtens
Well, to answer my own question, it appears that there is a Perth city and 
a Perth neighbourhood. The latter is 9060896 and AdWords doesn't think it's 
worth reporting on. Once I started using the right number I started to get 
results.

-- Bruce.

On Tuesday, 1 March 2022 at 12:39:49 pm UTC+8 axtens wrote:

> The following selector was exported from a running C# application using 
> JsonConvert.SerializeObject. As far I can see, there are no problems with 
> it. However, I am consistently receiving: 
> "AdWordsApiException: Exception of type 
> 'Google.Api.Ads.AdWords.Lib.AdWordsApiException' was thrown. \r\n\r\nError 
> returned when a SearchParameter doesn't match 
> the IdeaType specified in the  href='TargetingIdeaSelector'>TargetingIdeaSelector or is otherwise 
> invalid. Error trigger usually contains the parameter name, and error 
> details contain a more detailed explanation.. (Error: 
> TargetingIdeaError.INVALID_SEARCH_PARAMETERS, FieldPath: 
> selector.searchParameters[0].locations[0], Trigger: 
> LocationSearchParameter)\r\n\r\n"
>
> I have noticed others having issues with their CCID not being properly 
> specified. I'm looking into that also, though one would think that a 
> trigger of "LocationSearchParameter" would indicate an error with the 
> location search parameter.
>
> Should `SearchParameterType` be something other than null?
>
> Regarding the location search parameter, when I first encountered this 
> problem I was only specifying the id. I have added the type and 
> locationName in the pursuit of a solution but to no avail.
>
> -- Bruce
> ```
> {
> "searchParameters": [{
> "queries": ["fatigue driving", "driving fatigue", "driving 
> tired", "driver fatigue male", "driver fatigue female"],
> "SearchParameterType": null
> }, {
> "languages": [{
> "code": null,
> "name": null,
> "id": 1000,
> "idSpecified": true,
> "typeSpecified": false,
> "CriterionType": null
> }
> ],
> "SearchParameterType": null
> }, {
> "networkSetting": {
> "targetGoogleSearch": true,
> "targetGoogleSearchSpecified": true,
> "targetSearchNetwork": false,
> "targetSearchNetworkSpecified": true,
> "targetContentNetwork": false,
> "targetContentNetworkSpecified": true,
> "targetPartnerSearchNetwork": false,
> "targetPartnerSearchNetworkSpecified": true
> },
> "SearchParameterType": null
> }, {
> "locations": [{
> "locationName": "Perth,Western Australia,Australia",
> "displayType": null,
> "targetingStatusSpecified": false,
> "parentLocations": null,
> "id": 9060896,
> "idSpecified": true,
> "type": 12,
> "typeSpecified": true,
> "CriterionType": null
> }
> ],
> "SearchParameterType": null
> }
> ],
> "ideaType": 0,
> "ideaTypeSpecified": true,
> "requestType": 1,
> "requestTypeSpecified": true,
> "requestedAttributeTypes": [5, 6, 7, 2, 8, 1],
> "paging": {
> "startIndex": 0,
> "startIndexSpecified": true,
> "numberResults": 500,
> "numberResultsSpecified": true
> },
> "localeCode": null,
> "currencyCode": null
> }
> ```
>

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/0ca8e6c9-91e1-4ad7-8e31-bb0fe2ba479bn%40googlegroups.com.


What is wrong with this selector for AdWords

2022-02-28 Thread axtens
The following selector was exported from a running C# application using 
JsonConvert.SerializeObject. As far I can see, there are no problems with 
it. However, I am consistently receiving: 
"AdWordsApiException: Exception of type 
'Google.Api.Ads.AdWords.Lib.AdWordsApiException' was thrown. \r\n\r\nError 
returned when a SearchParameter doesn't match 
the IdeaType specified in the TargetingIdeaSelector or is otherwise 
invalid. Error trigger usually contains the parameter name, and error 
details contain a more detailed explanation.. (Error: 
TargetingIdeaError.INVALID_SEARCH_PARAMETERS, FieldPath: 
selector.searchParameters[0].locations[0], Trigger: 
LocationSearchParameter)\r\n\r\n"

I have noticed others having issues with their CCID not being properly 
specified. I'm looking into that also, though one would think that a 
trigger of "LocationSearchParameter" would indicate an error with the 
location search parameter.

Should `SearchParameterType` be something other than null?

Regarding the location search parameter, when I first encountered this 
problem I was only specifying the id. I have added the type and 
locationName in the pursuit of a solution but to no avail.

-- Bruce
```
{
"searchParameters": [{
"queries": ["fatigue driving", "driving fatigue", "driving 
tired", "driver fatigue male", "driver fatigue female"],
"SearchParameterType": null
}, {
"languages": [{
"code": null,
"name": null,
"id": 1000,
"idSpecified": true,
"typeSpecified": false,
"CriterionType": null
}
],
"SearchParameterType": null
}, {
"networkSetting": {
"targetGoogleSearch": true,
"targetGoogleSearchSpecified": true,
"targetSearchNetwork": false,
"targetSearchNetworkSpecified": true,
"targetContentNetwork": false,
"targetContentNetworkSpecified": true,
"targetPartnerSearchNetwork": false,
"targetPartnerSearchNetworkSpecified": true
},
"SearchParameterType": null
}, {
"locations": [{
"locationName": "Perth,Western Australia,Australia",
"displayType": null,
"targetingStatusSpecified": false,
"parentLocations": null,
"id": 9060896,
"idSpecified": true,
"type": 12,
"typeSpecified": true,
"CriterionType": null
}
],
"SearchParameterType": null
}
],
"ideaType": 0,
"ideaTypeSpecified": true,
"requestType": 1,
"requestTypeSpecified": true,
"requestedAttributeTypes": [5, 6, 7, 2, 8, 1],
"paging": {
"startIndex": 0,
"startIndexSpecified": true,
"numberResults": 500,
"numberResultsSpecified": true
},
"localeCode": null,
"currencyCode": null
}
```

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/a9313ed1-d904-4c22-a2f3-76c1b5deafb3n%40googlegroups.com.


Documentation question

2022-02-28 Thread axtens
In many places in the AdWords documentation, for example in 

 
in the blurb about Criterion.Type it says, "Specify xsi:type instead."

What does "Specify xsi:type instead" mean? And where can I see an example 
of doing so?

Bruce.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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 
"Google Ads API and AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/68e0c65f-7752-422b-8633-e4eb4a6592a1n%40googlegroups.com.


Change History -- programmatically

2017-10-10 Thread axtens
What the current status on Change History? 

I found a Java example for a "Get All Account Changes during the past 24 
hours" at 
.
 
Interestingly, no equivalent C# implementation can be found at 

 
so I had the unenviable task of converting the Java to C#. Wasn't too hard 
in the end.

So the code is fairly self-explanatory and does give some useful 
information. What it doesn't give (or at least I haven't found out how yet) 
is a way to find out WHO made the change. I'm contracting for an AdWords 
reseller in Western Australia. They've got a few people making changes to 
client accounts and it'd be really cool to be able to generate, from C#, 
not only WHAT was changed, and WHEN it was changed, but WHO changed it. Can 
this be done yet?

Kind regards,
Bruce.

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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.
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/b3080269-f836-4591-a4cb-562fbaf27ae6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


What is CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER and what does it mean?

2016-09-15 Thread axtens
In the course of running
LinkOperation lo = new LinkOperation();
lo.@operator = Operator.SET;

ManagedCustomerLink mcl = new ManagedCustomerLink();
mcl.managerCustomerId = managerId;
mcl.clientCustomerId = clientId;
mcl.linkStatus = LinkStatus.INACTIVE;

lo.operand = mcl;

ManagedCustomerService mcs = 
(ManagedCustomerService)user.GetService(AdWordsService.v201607.ManagedCustomerService);

ManagedCustomerLink[] mcls = mcs.mutateLink(new 
LinkOperation[] { lo });


"user" is okay as it's been passed into the method. "managerId" and 
"clientId" are okay as well and there is a linkage between them. 

The clientCustomerId was generated yesterday by programmatically creating 
the account. Said account has no budget orders, no shared budgets, no 
anything other than the account. 

I'm trying to write code to programmatically unlink accounts which were 
created in error (by other programs.)

The full exception (from the Locals window):
- $exception {"AdWordsApiException: One or more AdWords API errors have 
occurred. \r\n\r\nUnknown.. (Error: ManagedCustomerServiceError.UNKNOWN, 
FieldPath: operations[0], Trigger: )\r\n\r\n"} 
Google.Api.Ads.AdWords.Lib.AdWordsApiException
+ ApiException {Unknown.. (Error: ManagedCustomerServiceError.UNKNOWN, 
FieldPath: operations[0], Trigger: )} object 
{Google.Api.Ads.AdWords.v201607.ApiException}
+ Data {System.Collections.ListDictionaryInternal} 
System.Collections.IDictionary 
{System.Collections.ListDictionaryInternal}
HResult -2146233088 int
HelpLink null string
+ InnerException 
{"[ManagedCustomerServiceError.CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER 
@ operations[0]]"} System.Exception 
{System.Web.Services.Protocols.SoapException}
Message "AdWordsApiException: One or more AdWords API errors have occurred. 
\r\n\r\nUnknown.. (Error: ManagedCustomerServiceError.UNKNOWN, FieldPath: 
operations[0], Trigger: )\r\n\r\n" string
Source "Google.Ads.Common" string
StackTrace "   at 
Google.Api.Ads.Common.Lib.AdsSoapClient.MakeApiCall(String methodName, 
Object[] parameters)\r\n   at 
Google.Api.Ads.Common.Lib.AdsSoapClient.Invoke(String methodName, Object[] 
parameters)\r\n   at 
Google.Api.Ads.AdWords.v201607.ManagedCustomerService.mutateLink(LinkOperation[]
 
operations)\r\n   at WorkFlowMaxTool.AdWords.deactivateClient(AdWordsUser 
user, Int64 managerId, Int64 clientId) in 
e:\\sources\\BOWFMT\\WorkFlowMaxTool\\AdWords.cs:line 1099" string
+ TargetSite {System.Object[] MakeApiCall(System.String, System.Object[])} 
System.Reflection.MethodBase 
{System.Reflection.RuntimeMethodInfo}


So why the "CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER"


axtens/bugmagnet

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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.
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/abc651e6-3df6-49af-a059-803b1bb21cba%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


How to handle an AdWords failure: request one report, receive a different report

2016-08-22 Thread axtens
(I've already posted this on StackOverflow)

Context: Adwords, XML, REST

We had the weirdest thing happen recently: We sent a report request (in a 
large batch of related requests) for an Account Performance Report and 
received an Ad Performance Report. Also the report request specified a 
single day, but the result specified a range of days.

This is the Account Performance Report XML:

https://adwords.google.com/api/adwords/cm/v201607;>

AccountCurrencyCode
AccountDescriptiveName
AccountTimeZoneId
AdNetworkType1
AdNetworkType2
AverageCpc
AveragePosition
Clicks
Conversions
ConversionValue
Cost
CostPerConversion
Ctr
CustomerDescriptiveName
Device
ExternalCustomerId
Impressions
PrimaryCompanyName
Slot

20150706
20150706


101_1_133_196
ACCOUNT_PERFORMANCE_REPORT
CUSTOM_DATE
TSV


This is what came back. 


"AD_PERFORMANCE_REPORT (Jul 25, 2016-Jul 31, 2016)"
Campaign ID,Ad group ID,Ad ID,View-through conv.,Total conv. value,Day,Avg. 
position,Clicks,Impressions,Cost,Converted clicks,Conversions
Total, --, --,0,0.0, --,0.0,0,0,0,0,0.0
ame Top vs. Other
Total -- -- -- -- 0 0.0 0 0.0 0.0 0 0 0.00% -- -- -- 0 -- --

Yes, there are appears to be some mangling of the data. However, the status 
code of the REST call was 200 so the report data was assumed to be correct. 
Subsequent processing revealed the fault. 

This is the first time this has happened to us in all the years that we've 
been sending in this kind of report request. Is there anything I should be 
looking for with respect to incoming headers and the like that could be 
used to alert us to subsequent failures of this nature?

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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.
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/bed3dab8-c396-4641-900c-885e20bb112f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


v201603 + C# + ClearScript + JScript = error handling issue

2016-05-16 Thread axtens
I've already asked this question up on StackOverflow, but I'll try to 
summarise and amplify given the 3 or so hours since posting.

In my madness I've wrapped the AdWords API in a bit of C# that uses 
ClearScript to expose API types to JScript using code like this:

JSengine.AddHostType("AdWordsAppConfig", typeof(AdWordsAppConfig));
JSengine.AddHostType("AdWordsService", typeof(AdWordsService));
JSengine.AddHostType("AdWordsUser", typeof(AdWordsUser));
JSengine.AddHostType("ApiError", typeof(ApiError));
JSengine.AddHostType("BillingAccount", typeof(BillingAccount));
JSengine.AddHostType("Budget", typeof(Budget));
JSengine.AddHostType("BudgetBudgetDeliveryMethod", 
typeof(BudgetBudgetDeliveryMethod));
JSengine.AddHostType("BudgetBudgetStatus", typeof(BudgetBudgetStatus));
JSengine.AddHostType("BudgetOperation", typeof(BudgetOperation));
JSengine.AddHostType("BudgetOrder", typeof(BudgetOrder));
JSengine.AddHostType("BudgetOrderOperation", 
typeof(BudgetOrderOperation));
JSengine.AddHostType("BudgetOrderPage", typeof(BudgetOrderPage));
JSengine.AddHostType("BudgetOrderRequest", typeof(BudgetOrderRequest));
JSengine.AddHostType("BudgetOrderReturnValue", 
typeof(BudgetOrderReturnValue));
JSengine.AddHostType("BudgetOrderService", typeof(BudgetOrderService));
JSengine.AddHostType("BudgetPage", typeof(BudgetPage));
JSengine.AddHostType("BudgetReturnValue", typeof(BudgetReturnValue));
JSengine.AddHostType("DateRange", typeof(DateRange));
JSengine.AddHostType("Money", typeof(Money));
JSengine.AddHostType("Operator", typeof(Operator));
JSengine.AddHostType("OrderBy", typeof(OrderBy));
JSengine.AddHostType("Paging", typeof(Paging));
JSengine.AddHostType("Predicate", typeof(Predicate));
JSengine.AddHostType("PredicateOperator", typeof(PredicateOperator));
JSengine.AddHostType("Selector", typeof(Selector));
JSengine.AddHostType("SortOrder", typeof(SortOrder));

So far so good. I've got gets and mutates working. But I have a bit of a 
problem with what happens when an error occurs.

In the JScript script (yeah, Microsoft's server-side JavaScript) I have (in 
part)

var order = new BudgetOrder();
order.billingAccountId = acct.id;
order.startDateTime = "20160830 00 Australia/Perth";
order.endDateTime = "20160830 235959 Australia/Perth";
var amt = new Money();
amt.microAmount = 1000;
order.spendingLimit = amt;

var boo = new BudgetOrderOperation();
boo.operator = Operator.ADD;
boo.operand = order;
var mutations = ToTypedArray(BudgetOrderOperation, [boo]);

var response;
try {
  response = bos.mutate(mutations);
  Console.WriteLine(response.value[0].billingAccountId);
  Console.WriteLine(response.value[0].id);
  Console.WriteLine(response.value[0].lastRequest.status.ToString());
} catch (exc) {
  Console.WriteLine(exc.message);
}

If the mutate fails for whatever reason, in the last case due to an 
INVALID_BUDGET_DATE_RANGE, the catch fires. Fine. However the exc var 
contains very little useful information apart from

description: "" 
message: "" 
name: "Error" 
number: -2146190593 

Is there a callback or some global data structure I can hook into that will 
let me know what the result of the transaction attempt was? Are there any 
alternatives I should think about?

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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.
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/0eda4f2f-fc91-4c7e-a9df-19ad764f940a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Need C# GetAccountHierarchy without all the codeExample wrappings

2015-11-16 Thread axtens
Please could someone direct me to a barebones demo of GetAccountHierarchy 
in C#. C# is not my soup du jour and I'm finding it hard to peel the core 
concepts out of the codeExample wrapper.

TIA,
Bruce/bugmagnet

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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.
Visit this group at http://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/d9a91804-64aa-429a-a0f5-d53d8f040d32%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Where am I going wrong with this SOAP request?

2014-03-24 Thread axtens
Michael

Thank you!! I took that slab of XML, tweaked it to suit and ran it. Worked 
a treat. Most grateful.

Kind regards,
Bruce.




-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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/d/optout.


Why do I get AuthenticationError.USER_ID_INVALID programmatically but not via OAuth2.0 Playground?

2014-03-18 Thread axtens


Context: Windows 7, IE10, JScript, Peloton, Msxml2.ServerXMLHTTP.6.0

When I execute the following in OAuth2.0 Playground it works perfectly 

POST /api/adwords/reportdownload/v201402 HTTP/1.1
Host: adwords.google.com
Clientcustomerid: blah-blah
Developertoken: blah_blah
Content-type: application/x-www-form-urlencoded
Content-length: 545
Authorization: Bearer ya29.1.blahblahblah
__rdxml=reportDefinition 
xmlns=https://adwords.google.com/api/adwords/cm/v201402;selectorfieldsCampaignId/fieldsfieldsId/fieldsfieldsImpressions/fieldsfieldsClicks/fieldsfieldsCost/fieldspredicatesfieldStatus/fieldoperatorIN/operatorvaluesENABLED/valuesvaluesPAUSED/values/predicates/selectorreportNameCustom
 
https://www.en.adwords-community.com/t5/forums/editpage/board-id/Measure-AdWords/message-id/11644/is-draft/
 Adgroup Performance 
Report/reportNamereportTypeADGROUP_PERFORMANCE_REPORT/reportTypedateRangeTypeLAST_7_DAYS/dateRangeTypedownloadFormatTSV/downloadFormat/reportDefinition

 

However, when I submit the same values programmatically, I get 
`AuthenticationError.USER_ID_INVALID`

@ LETVARo1lCAPAdHocReport1|
reportDefinition xmlns=https://adwords.google.com/api/adwords/cm/v201402; 
https://www.en.adwords-community.com/t5/forums/editpage/board-id/Measure-AdWords/message-id/11644/is-draft/
selector
fieldsCampaignId/fields
fieldsId/fields
fieldsImpressions/fields
fieldsClicks/fields
fieldsCost/fields
predicates
fieldStatus/field
operatorIN/operator
valuesENABLED/values
valuesPAUSED/values
/predicates
/selector
reportNameCustom Adgroup Performance Report/reportName
reportTypeADGROUP_PERFORMANCE_REPORT/reportType
dateRangeTypeLAST_7_DAYS/dateRangeType
downloadFormatTSV/downloadFormat
/reportDefinition/@



@ DEFUDOLITLIT:Hp|__Transformer|
@ DEFKEYLIT__WSHLanguage|JScript/@
@ LETSCPPARurl|1/@
@ LETSCPPARhead|2/@
@ LETSCPPARbody|3/@
@ sayLETSCPCAPcode|
var SXH_OPTION_ESCAPE_PERCENT_IN_URL = 1;
var SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 2;
var SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3;
var SXH_OPTION_URL = -1;
var SXH_OPTION_URL_CODEPAGE = 0;

var SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = 256;
var SXH_SERVER_CERT_IGNORE_WRONG_USAGE = 512;
var SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID = 4096;
var SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = 8192;
var SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056;

function HTTPPOST4(url, rHeaders, body) {
  var oHTTP = new ActiveXObject(Msxml2.ServerXMLHTTP.6.0);
  oHTTP.setOption(SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS, 
oHTTP.getOption(SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS) - 
SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS);
  oHTTP.setTimeouts(100, 100, 100, 100);
  oHTTP.open(POST, url, false);

  for (var r in rHeaders) {
oHTTP.setRequestHeader(r, rHeaders[r]);
  }
  
  oHTTP.send(body);
  var res = oHTTP.responseText;
  return res;
}
var head = @ sayscphead/@;
var body = '@ SAYSCPbody/@';
HTTPPOST4('@ SAYSCPurl/@', head, body);
/@
@ LETRESCLCSCP...|code/@
@ DEFKEYLIT__WSHLanguage|VBScript/@
/@

 
The language wrapped around the JScript is called Peloton, and is used 
in-house. The header values are passed in as a JSON object and the body as 
a string.

The result XML I get from this says

?xml version=1.0 encoding=UTF-8 standalone=yes? 
reportDownloadErrorApiErrortypeAuthenticationError.USER_ID_INVALID/typetriggerlt;nullgt;/triggerfieldPath/fieldPath/ApiError/reportDownloadError

If the 'trigger' is to be believed, where is the 'lt;nullgt;'?

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

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/d/optout.


Ad hoc report oddity - simple request but no data returned

2012-05-10 Thread axtens
reportDefinition xmlns=https://adwords.google.com/api/adwords/cm/v201109;
selector
fieldsAccountDescriptiveName/fieldsfieldsAccountId/fields
/selector
reportName1_91_123_skinny/reportName
reportTypeACCOUNT_PERFORMANCE_REPORT/reportType
dateRangeTypeYESTERDAY/dateRangeType
downloadFormatTSV/downloadFormat
/reportDefinition

 Amazingly, that reportDefinition, which looks legit to me, doesn't return 
anything other than a title, fieldnames and a totals line. There's nothing 
else provided. What do I have to add/change to get a fuller response?

-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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


Ad hoc report, TSV output, no headers

2012-04-24 Thread axtens
I'm just starting to climb the learning curve of ad hoc reports. Is there a 
way with outputting TSV to turn off the field headers so that I just get 
the data?

Bruce.

-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
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