Trying to find some c# sample code for sending a Dynamic Remarketing csv file up to Google's AdWords system.

562 views
Skip to first unread message

Justin

unread,
Nov 8, 2016, 12:17:03 AM11/8/16
to AdWords API Forum
Hi folks,

I'm trying to find a way to push up a CSV file to google adwords for some dynamic remarketing we wish to do.

We are in the realestate segment so I found some nice documentation about this:


I've read that AdWords has a specific template for real estate (ref: https://developers.google.com/adwords/api/docs/appendix/placeholders#real_estate) which looks perfect for us.

But I just can't find any C# / .NET samples that target dynamic remarketing :( I thought this SDK c# sample code might have been it (ref: https://github.com/googleads/googleads-dotnet-lib/tree/master/examples/AdWords/CSharp/v201609/Remarketing ) but i think that's for a different remarketing?

Can anyone please help me, with some links to some examples please?

-J-

Peter Oliquino

unread,
Nov 8, 2016, 3:36:51 AM11/8/16
to AdWords API Forum
Hi Justin,

The creation of dynamic remarketing ads via the AdWords API is currently not supported and I am not exactly sure if CSV upload is available in the AdWords UI. You may confirm with the AdWords Community Forum if it is possible to use bulk uploads for dynamic remarketing via the AdWords UI.

Going back to the AdWords API, you may be able to manage dynamic remarketing ads as mentioned in this guide, as long as you have created these ads first via the AdWords UI.

Best regards,
Peter
AdWords API Team

Justin

unread,
Nov 14, 2016, 10:48:14 PM11/14/16
to AdWords API Forum
Hi Peter,

Urgh :( Really - there's no API or support for Dynamic remarketing ads via the API?

So - is the _only way_ to upload dynamic remarketing ads ... is to upload a csv file _manually_ via the adwords UI/website?

If yes - is this
- an oversight 
- just an issue with not-enough-developers+time, etc (which we all have :/ )
- something that will _not_ be coming to adwords API 

cheers and sad-panda-face :(

Peter Oliquino

unread,
Nov 14, 2016, 11:11:50 PM11/14/16
to AdWords API Forum
Hi Justin,

The scope of support that the AdWords API provide is only for managing dynamic remarketing ads as discussed in the guide. Unfortunately, its creation is not yet supported. There has been no word regarding this feature about if and when it could be available, and we cannot comment as well unless announcements have been posted. In the meantime, you may follow our blog for any future updates or announcements regarding this feature.

As for creation of dynamic remarketing ads via the AdWords UI, you may contact the AdWords Community Forum for further information. Hope this helps.

Justin

unread,
Nov 14, 2016, 11:55:17 PM11/14/16
to AdWords API Forum
Hi Peter - thanks again for the prompt reply.

So are you saying this:


- First, manually create a feed and manually upload some initial data to your adwords account. (Refer to the other AdWords Community Forum about how this can be done).
- Now, u can use the AdWords API to push up new products, one at a time ?

Taken from the guide (which you've linked above) with emphasis, mine.

"Using the AdWords API, you can maintain the Feeds, FeedMappings and FeedItems that drive your Dynamic Remarketing ads on the Display Network."

What does _maintain_ mean? 
- You can only upload 1x product or remove 1x product, per API call?
- The feed, etc has to be manually created via the UI?

That guide is using Java for their example and using RealEstate listings as the example-product. So - using that guide as an example .. imagine I have a list of 10 thousand or 50 thousand real estate listings I wish to upload to AdWords for dynamic remarketing. Can this be done, based on that guide?

I'm sorry if I sound or confused - I've been spending a fair amount of time on this and i'm so stumped. I'm not trying to be rude, though so please don't take my questions as sounding rude or ungrateful.

-J-

Michael Cloonan (AdWords API Team)

unread,
Nov 15, 2016, 10:49:41 AM11/15/16
to AdWords API Forum
Hello,

You can modify what data appears in these ads using the Feed Services, but you don't have to limit to one request at a time. You should be able to create thousands of feed items in a single mutate request by adding more operations. The guide probably only shows one because it wants to show a basic case that can be expanded.

Maintain means that the initial setup has to be done on the web interface, and any ad creation has to be done on the web interface, but you can add and remove feed items to populate ad data with the API, and this can be done in bulk.

Regards,
Mike, AdWords API Team

Justin

unread,
Nov 16, 2016, 12:14:37 AM11/16/16
to AdWords API Forum
Hi Mike - thanks for the reply :) really appreciate it (and to the others who have also helped out :) 

> You should be able to create thousands of feed items in a single mutate request by adding more operations
Ok - kewl :) i'll have to figure out how to do that and off I go :)

>initial setup has to be done on the web interface
Ok :)

> and any ad creation has to be done on the web interface
hmm.. ad creation?

> but you can add and remove feed items to populate ad data with the API

hmm Ok :( I'm confused :(

So a feed is like a database table right? Where 1 feed will hold many feed items (aka rows).

so if i wish to do some dynamic remarketing for property listings (as the example in the guide is doing), I would (somehow) create a PropertyListing feed manually in the Web/UI and then somehow use the API to add/remove Property Listings that are for sale on the market?
If yes .. then where do 'ads' come into this? I thought each feed item (aka each property listing) is an ad?

-J-

Michael Cloonan (AdWords API Team)

unread,
Nov 16, 2016, 8:41:05 AM11/16/16
to AdWords API Forum
Hello,

When I said "ad creation", I was referring to "Dynamic Ads" as described here: https://support.google.com/adwords/answer/3124536

This cannot be done via the API, and is a one-time step that needs to be done on the web interface before you begin.

Yes, feeds are very much like custom databases of information that are stored in AdWords. You can think of a Feed as a table, a FeedAttribute as a column, a FeedItem as a row, and a FeedItemAttributeValue as a cell within a row.

Essentially, get your dynamic remarketing ads into a very basic but functional state using the web interface (one-time setup), and then you can use the API to add/remove feed items from the feed you're using to power them to change what ads are able to show.

Regards,
Mike, AdWords API Team

Justin

unread,
Nov 20, 2016, 9:52:42 PM11/20/16
to AdWords API Forum
OK great! 

So this is the current status of things right now about how I've interpreted the answers and what i'm trying to do but am stuck:

1 - Create a Feed in the Web Interface.
2 - Have a C# background application that uses the FeedService 1x a day to add and/or delete FeedItem's to my Feed.
3 - Use the guide which PeterO suggested, to help do this.

~Assuming~ those 3 points are correct ...

Lets look at point #2.

I'm actually really struggling to port the Java example to C# code :( Now, i've ported Java before, so this is not a syntax issue (which would mean I need to solve this by myself) but an issue with matching up the JAVA API to the .NET API.

So the guide says this:

1 - "you'll need to retrieve the FeedMapping for your Feed and the Real Estate vertical's placeholder type. The FeedMapping will tell you the FeedAttribute in your Feed that corresponds to each placeholder field."
2 - Construct operations to add the new listings (which are 5 steps in themselves)

So first i'll talk about the API problems I can't seem to find :(

> install-package Google.AdWords  (using version 18.33.0)
Framework: .NET 4.61 

First, post the java code to .NET for the guide's example method getPlaceholderToAttributeMap

I can't find these in the SDK provided...

a) AdWordsSession
b) AdWordsServices
c) SelectorBuilder

The rest of the custom AdWords classes in the second part of the guide I can find (eg. FeedItemOperation, FeedItemAttributeValue etc.)

** It's really like that GUIDE needs to have an updated .NET C# version .. if _anything_ at least a SAMPLE of this found in the .NET samples please ?

So can anyone please help me by saying where those classes exist in the .NET C# version. Or what they are renamed as OR if there are any C# samples doing this, please?

-J- :) :)

Thanet Knack Praneenararat (AdWords API Team)

unread,
Nov 21, 2016, 5:10:21 AM11/21/16
to AdWords API Forum
Hello Justin,

I respond to this thread instead of Mike because he's on vacation.
First, let me summarize what you've learned from my colleagues to check if you still have misunderstanding. :)

The best way to get started with using feeds would be reading this page. It's the introduction to feed services, where what you're trying to do (adding dynamic remarketing feeds) is relying on.
I think almost all the techniques and caveats in that page apply to the dynamic remarketing feeds as well.
Feed is more like database as Mike already explained and ads are more like a template.
Without ads, you will have only data in the database so no ads will be shown to your users. This is why Mike also mentioned that you have to create ads first.

Unfortunately, unlike expanded text ads or image ads, this type of ads (dynamic remarketing) are not supported in AdWords API yet, so you need to create this via UI.
On the other hand, however, feeds are supported in the API for a long time. Thus you can create them via API (or of course, via UI as well).

So, regarding your summary:
1 - Create a Feed in the Web Interface.
Yes, you can do that, and you can do that via API as well. The Introduction to Feed Services guide shows how you can do it. 
Although in the example, sitelinks are created. You could apply this to create the real estate without difficulty (only placeholder type ID and placeholder fields are different).
 
2 - Have a C# background application that uses the FeedService 1x a day to add and/or delete FeedItem's to my Feed.
I'm not sure I understand your sentence correctly, but yes, you can create such an application and modify / add / delete FeedItems in whatever ways you want.
Please beware of rate limits as well.

3 - Use the guide which PeterO suggested, to help do this.
This is correct.  Please note that this is somewhat similar to this section of Introduction to Feed Services.
This is because the guide that Peter has shared with you is just an example of how to add / delete / update the feed items.

For the C# client library questions, I don't think translating from Java to C# by yourself is an easy way to do.
Instead, how about reading other similar examples like AddSitelinksUsingFeed first (this is also bundled with DotNet client library as well)?

You should be able to get an idea of how fundamental objects in DotNet library are created and used together.
Each library has its own way to do, so you probably can't map all objects available in one library to another very easily.

To answer your questions more specifically,
a) AdWordsSession
b) AdWordsServices
c) SelectorBuilder
I don't think DotNet has a) and b), instead DotNet library uses AdWordsUser. Please the AddSitelinksUsingFeed example for more information.
SelectorBuilder is also not available in the lib. You can see how to use a selector in DotNet in GetCampaigns example.

Finally, we're trying to cover all languages in each guide as much as possible.
Sorry for this inconvenience.

Cheers,
Thanet, AdWords API Team

Justin

unread,
Nov 25, 2016, 1:04:06 AM11/25/16
to AdWords API Forum

Hi Thanet and thank you kindly for your reply.


I've been quiet in the last few days because I've been trying to follow yours (and the above) advice in getting this to work.

So far -- i've made SOME progress, but still not there yet. (yeah - this is really taking a long time).

So this is what i've done and how far I've got and something is still not working for me :(

- Created a _TEST_ adwords campaign manager account and then a campaign.
- Create a Feed (Shared Library -> Business Data -> new Data Feed -> upload some fake data)




- Next I'm trying to do the first part of the GUIDE : Placeholder to Attribute Mapping.



Doing this, I can auth, I get back a FeedMappingService but the attributeMappingFields are NULL.

I've double checked my FeedId and my ClientId and they seem to be ok ... when i had the manager-accountId as my clientId, I got NO .entries before... so I _feel like_ these Id's are correct.

Is there any reason why the attributeMappingFields would be NULL

-J- (still attempting to get this working :/ )

Thanet Knack Praneenararat (AdWords API Team)

unread,
Nov 25, 2016, 2:53:01 AM11/25/16
to AdWords API Forum
Hello Justin,

Oh, that would be hard time for you during these days. 
You're almost there. Let's get through this together. :)

I see in your code, the selector requests FeedId, Status and PlaceholderType, which is not consistent with what's written in our guide:
 Selector selector = new SelectorBuilder()
   
.fields("AttributeFieldMappings")
   
.equals("FeedId", feedId.toString())
   
.equals("Status", FeedMappingStatus.ENABLED.getValue())
   
.equals("PlaceholderType", placeholderType.toString())
   
.build();

As you can see, the selector in our guide requests for AttributeFieldMappings as well.
The AdWords API selector mostly returns the fields that are requested explicitly only, so if you don't include this in your selector, of course, you will find that AttributeFieldMappings are null. :-)
Please try adding this field to the selector. I believe this will work.

Hope this helps.

Best,
Thanet, AdWords API Team

Justin

unread,
Nov 27, 2016, 5:59:49 PM11/27/16
to AdWords API Forum
Perfect! That did it :) it's working now :)

So .. I'm nearly there.

Now, Every night we will be running some code that will upload any new items and of course we need to remove any items that have now expired/need-to-be-removed.

Is there a simple way to say: GetAllId's from the feed?

So if we have 100,000 rows in the feed, then we get a list of 100,000 ID's ... and I can now determine what's new and what's to be removed and create/delete that small 'difference' set.

Peter Oliquino

unread,
Nov 28, 2016, 12:42:46 AM11/28/16
to AdWords API Forum
Hi Justin,

You could use the FeedItemService.get to return all the FeedItemIds and corresponding FeedIds you require. Considering the large number of rows that you mentioned, you may need to implement Paging to approximately 10,000 rows per call to avoid any range limit errors. Let me know if this works for you.

Thanks and regards,
Peter
AdWords API Team

Justin

unread,
Nov 28, 2016, 1:12:51 AM11/28/16
to AdWords API Forum
Cheers Peter! i'll see if that works for me tomorrow.

I'm guessing :

1. Index == the index in the page. If i want records 1->100, that's index 0 with page size 100. for records 101->200, that's index 100, page size 100.
2. I can loop through this paging, increasing the index number with each loop until I don't get any more results (or I max the loop, just to be safe).
   eg indexes => 0, 10,000, 20,000, 30,000, 40,000 ... etc. 

-me-

Peter Oliquino

unread,
Nov 28, 2016, 1:29:44 AM11/28/16
to AdWords API Forum
Hi Justin,

Yes this is correct. Let me know if you encounter any issues.

Cheers,
Peter
AdWords API Team

Justin

unread,
Nov 29, 2016, 12:31:47 AM11/29/16
to AdWords API Forum
Hi again Peter,

The  FeedItemService.get to return all the FeedItemIds works great. Paging too!

Is there a way I can also return a specific piece of data, per row/feed item? Basically, can i return the attribute "foo" which is key/text . This way, I can use that value to correlate against my db keys to find intersections, etc.

e.g.
Type: Dynamic display ad feed (Real estate) 
Attributes: Listing ID (key, text), Listing name (text), Final URL (URL list)

/\___ return the Listing ID values at the same time.

-J-

Peter Oliquino

unread,
Nov 29, 2016, 1:40:59 AM11/29/16
to AdWords API Forum
Hi Justin,

You could include in the selector fields of the FeedItemService.get the FeedItemAttributeValue field and iterate through its results to get the feedAttributeId and the stringValue fields. Your SOAP request and response should look something like the one below :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <ns1:RequestHeader xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201609" soapenv:mustUnderstand="0">
            <ns1:clientCustomerId>YOUR_CUSTOMER_ID</ns1:clientCustomerId>
            <ns1:developerToken>YOUR_DEVELOPER_TOKEN</ns1:developerToken>
            <ns1:userAgent>YOUR_USER_AGENT</ns1:userAgent>
            <ns1:validateOnly>false</ns1:validateOnly>
            <ns1:partialFailure>false</ns1:partialFailure>
        </ns1:RequestHeader>
    </soapenv:Header>
    <soapenv:Body>
        <get xmlns="https://adwords.google.com/api/adwords/cm/v201609">
            <selector>
                <fields>FeedId</fields>
                <fields>FeedItemId</fields>
                <fields>AttributeValues</fields>
                <predicates>
                    <field>FeedId</field>
                    <operator>EQUALS</operator>
                    <values>THE_FEED_ID</values>
                </predicates>
                <ordering>
                    <field>FeedId</field>
                    <sortOrder>ASCENDING</sortOrder>
                </ordering>
                <paging>
                    <startIndex>0</startIndex>
                    <numberResults>100</numberResults>
                </paging>
            </selector>
        </get>
    </soapenv:Body>
</soapenv:Envelope>
[main] INFO com.google.api.ads.adwords.lib.client.AdWordsServiceClient.soapXmlLogger - SOAP Response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ResponseHeader xmlns="https://adwords.google.com/api/adwords/cm/v201609">
            <requestId>REQUEST_ID</requestId>
            <serviceName>FeedItemService</serviceName>
            <methodName>get</methodName>
            <operations>1</operations>
            <responseTime>142</responseTime>
        </ResponseHeader>
    </soap:Header>
    <soap:Body>
        <getResponse xmlns="https://adwords.google.com/api/adwords/cm/v201609">
            <rval>
                <totalNumEntries>1</totalNumEntries>
                <Page.Type>FeedItemPage</Page.Type>
                <entries>
                    <feedId>THE_FEED_ID</feedId>
                    <feedItemId>THE_FEED_ITEM_ID</feedItemId>
                    <attributeValues>
                        <feedAttributeId>1</feedAttributeId>
                        <stringValue>Services</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>2</feedAttributeId>
                        <stringValue>From</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>3</feedAttributeId>
                        <stringValue>http://tracker.example.com/?u={lpurl}</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>4</feedAttributeId>
                        <stringValue>en</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>5</feedAttributeId>
                        <stringValue>Scrubs</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>6</feedAttributeId>
                        <stringValue>Body Scrub, Salt Scrub</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>7</feedAttributeId>
                        <moneyWithCurrencyValue>
                            <ComparableValue.Type>MoneyWithCurrency</ComparableValue.Type>
                            <money>
                                <ComparableValue.Type>Money</ComparableValue.Type>
                                <microAmount>60000000</microAmount>
                            </money>
                            <currencyCode>USD</currencyCode>
                        </moneyWithCurrencyValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>8</feedAttributeId>
                        <stringValue>Per hour</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>9</feedAttributeId>
                        <stringValues>http://www.example.com/scrubs</stringValues>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>10</feedAttributeId>
                        <stringValue>Hair Cuts</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>11</feedAttributeId>
                        <stringValue>Once a month</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>12</feedAttributeId>
                        <moneyWithCurrencyValue>
                            <ComparableValue.Type>MoneyWithCurrency</ComparableValue.Type>
                            <money>
                                <ComparableValue.Type>Money</ComparableValue.Type>
                                <microAmount>75000000</microAmount>
                            </money>
                            <currencyCode>USD</currencyCode>
                        </moneyWithCurrencyValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>13</feedAttributeId>
                        <stringValue>Per month</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>14</feedAttributeId>
                        <stringValues>http://www.example.com/haircuts</stringValues>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>15</feedAttributeId>
                        <stringValue>Skin Care Package</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>16</feedAttributeId>
                        <stringValue>Four times a month</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>17</feedAttributeId>
                        <moneyWithCurrencyValue>
                            <ComparableValue.Type>MoneyWithCurrency</ComparableValue.Type>
                            <money>
                                <ComparableValue.Type>Money</ComparableValue.Type>
                                <microAmount>250000000</microAmount>
                            </money>
                            <currencyCode>USD</currencyCode>
                        </moneyWithCurrencyValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>18</feedAttributeId>
                        <stringValue>Per month</stringValue>
                    </attributeValues>
                    <attributeValues>
                        <feedAttributeId>19</feedAttributeId>
                        <stringValues>http://www.example.com/skincarepackage</stringValues>
                    </attributeValues>
                </entries>
            </rval>
        </getResponse>
    </soap:Body>
</soap:Envelope>

Please note that the values returned are all taken from my test account. Let me know if this helps.

Best regards,
Peter
AdWords API Team

Justin

unread,
Nov 29, 2016, 5:41:46 AM11/29/16
to AdWords API Forum
Ah! ok .. 

brb ..

yep - got it!

for those still following this thread ... here's the c#

var selector = new Selector
{
    fields = new[] { "FeedId", "Status", "AttributeValues"},
    predicates = new[]
        {
        Predicate.Equals("FeedId", feedId),
        Predicate.Equals("Status", FeedMappingStatus.ENABLED.ToString())
    },
    paging = new Paging
    {
        numberResults = 10000, // This max was suggested by the AdWords API Team.
        numberResultsSpecified = true,
        startIndex = 0,
        startIndexSpecified = true
    }
};

kewl! i'm nearly there now :)

Justin

unread,
Nov 29, 2016, 7:29:40 PM11/29/16
to AdWords API Forum
Hi again Peter :)

question about Adding/Deleting FeedItems 

I have the following code that Add's an FeedItem:

var service = (FeedItemService)user.GetService(AdWordsService.v201609.FeedItemService);
var itemsUpdateReturnValue = service.mutate(newFeedItemOperations.ToArray());

QUESTION: Is there a max number of FeedItemOperations -per mutate- call?
Eg. each array should be a max of 10,000 FeedItemOperations? Or it doesn't matter how large that array is?

-J-

Justin

unread,
Nov 30, 2016, 1:49:12 AM11/30/16
to AdWords API Forum
Oh :) _one_ more question :blush:

If i wish to add a _custom_ field to the Feed .. a DateTime 'LastUpdatedOn' field .. is this possible?

When i retrieve all the feedItems from the feed, I need to see if each item is 'older' than our current data-set. If so, I need to delete it and the push it back up. (i.e. an update).

-J-

Sylvain Beauregard

unread,
Nov 30, 2016, 8:04:45 AM11/30/16
to AdWords API Forum
Hi Justin!

As mentioned by many other responders, no, it's not possible through the API... but let me share the solution I have in place, which is way more easier than an API solution in my own opinion.

1. You can define manually within AdWords the fetch of a CSV file, and AdWords will fetch it up to twice a day.  That file can be anywhere.  In our case, the files sit in a password-protected directory of our Web site, because that's the easiest to update for us.  You have to define that refresh task once, that's it.

2. Then once or twice a day, depending of the account, we have a script running on our database to generate the CSV file and store it on our own server.

3. Next time Adwords comes to pick up the file, it automatically detects the additions and removals... and leaves the rest intact.  That is so better than having to filter it yourself through an API solution.

You can place your file on many locations, a Google Drive for example, or it can be on a HTTP/HTTPS or even FTP location.  All you have to do is to give the login information when you configure the feed manually (once!) in AdWords.

Justin

unread,
Nov 30, 2016, 8:54:50 AM11/30/16
to AdWords API Forum
Hi Sylvain!

oh wow - really? after all this, there's another way to do this without using the API?

Where can you define in AdWords this AUTO-FETCHING? 

I can easily create a csv or excel file, once a night and put it up, somewhere. But where in the UI/AdWords website can you say:

1. grab file abcd.csv from this URL
2. username/password (if this data is protected ... say via https or ftp server).

-J-

Shwetha Vastrad (AdWords API Team)

unread,
Nov 30, 2016, 11:30:55 AM11/30/16
to AdWords API Forum
Hi Justin,

Please find my response below:

Question 1: Is there a max number of FeedItemOperations per mutate call?
Answer: If you're using FeedItemService, then there can be a maximum of 5,000 mutate operations per request. You could use BatchJobService instead, since it supports FeedItemOperation. Using Batch Jobs you can submit a large number of mutate operations in batches. This guide provides more details on using BatchJobService.

Question 2: Is it possible to add a custom field to the Feed?
Answer: Yes, you can use FeedService SET operation to update the attributes of your Feed and provide the name and the type of the attribute to add a custom field. Please note that you cannot filter FeedItems based on attribute values using FeedItemService.

Question 3: Is it possible to schedule automatic uploads for your Feeds using API? 
Answer: I'm afraid scheduling Feed uploads is not possible using the API. This can be done in the UI as suggested by Sylvain. This option is available in the Shared library section in the UI. This guide provides more details on scheduling automatic updates.

Regards,
Shwetha, AdWords API Team.

Justin

unread,
Nov 30, 2016, 5:08:26 PM11/30/16
to AdWords API Forum
Awesome answers folks - thanks heaps. I'm _really_ grateful for all this help :)

Another question *blush*.

With the Scheduled Automatic Updates, is the system smart enough to handle:
- When a new item exists in the file but _not_ in adwords (i.e. an ADD operation)
- When an item exists in AdWords feed but _not_ in the latest file (i.e. an DELETE operation)
- When an item exists in the file _and_ it already exists in the adwords feed but some of the data has changed (except the KEY obviously) (i.e. an UPDATE operation)
- When an item exists in the file _and_ it arready exists in the adwords feed but nothing has changed (i.e. a no-op or an UPDATE op but nothing has changed). 

-J-

Shwetha Vastrad (AdWords API Team)

unread,
Nov 30, 2016, 6:25:19 PM11/30/16
to AdWords API Forum
Hi Justin,

When using scheduled automatic updates, if your file includes items that are identical to existing ones, AdWords preserves any performance stats for those items and will update items only when necessary. 

Justin

unread,
Nov 30, 2016, 6:43:39 PM11/30/16
to AdWords API Forum
So Shwetha, the scheduled automatic updates are smart enough to figure out insert/delete/updates, then?

-J-

Shwetha Vastrad (AdWords API Team)

unread,
Dec 1, 2016, 10:29:30 AM12/1/16
to AdWords API Forum
Hi Justin, 

Yes, scheduled automatic updates are smart enough to figure out insert/delete/updates based on the source specified. 

Justin

unread,
Dec 4, 2016, 6:44:19 PM12/4/16
to AdWords API Forum
Hi All,

just to put some results out there...

- A few weeks to get the API code to work (including getting all the account stuff working/storted/etc).
- A day or so to strip that code out, add CSV format and FTP that up to our FTP server ... then turn on Scheduled Updates.

CSV is about 100mb and it looks like it's working great!

Thanks everyone for all the constant help - I really really appreciated it.

Keep smiling!

-J-
Reply all
Reply to author
Forward
0 new messages