Feed management for Google Search

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

How to generate Google Search campaigns from a datawarehouse, you ask? Well, read this article and you will know!

Why use a dwh?

Ah, you have always such good questions! Here are some reasons:

Saves a lot of work

Let me entertain you with an example, based on a webshop with 1,000 products:

  • Naturally, we use SKAG, so we would have 1,000 AdGroups
  • We'll use three out of the four available Keyword Modifiers: exact match, phrase match and BMM. To keep it not too complicated, we will use BMM with "+"-signs in front of all words. Since we're serious about SKAG, we have different AdGroups for each of these modifiers, which brings us to 3,000 AdGroups in total
  • We have 3,000 keywords, one for each Adgroup
  • For each AdGroup, we'll have three ads: Two ETAs (Enhanced Text Ads) and one RSA (Responsive Search Ad). That's 9,000 ads in total
  • Each ad contains a link to a product. That's 9,000 links that have to be inserted
  • RSAs can have up to 15 headlines, 4 descriptions and 2 path fields. That's 22 fields per RSA, or 132,000 fields for the RSAs
  • The ETAs only have 3 headlines, 2 description fields and 2 path fields. That's 14,000 fields.

In total:

* 3.000 AdGroups
* 3.000 Keywords
* 9,000 ads with 
* 146,000 fields
  -----------------
* 161.000 entities and fields

And although I usually don't mind doing a repetetive and precise task, I can already feel the RSI coming up, when thinking about such a task.

And when it's e.g., about a shop with 10.000 products, or 100.000 products, the number of entities and fields, scale linearly.

Easy to automate

Most parts of a campaign, are easy to automate. Especially the new responsive search ads are just made for marketing automation: Just generate the 15 headlines and 4 descriptions per ad, and Google Ads can use them in about 31.384.184.832.000 different combinations (=15!*4!) Now you're playing with power!.

Competetive edge

And maybe the most important reason: Although it will take a bit of time, and quite some specific knowledge to build your campaign generating machine, once you have it, it can generate campaigns with such ease, that ordinary humans cannot compete with you. They simply won't have the resources to match your campaigns.

Starting points

Ready to rock 'n roll?

  • This is about advertising on Google Search for products that are for sale in a WordPress/WooCommerce-site
  • We want to set up a regular Search-campaign for all products in this WordPress-database, with different keyword modifiers and different advertisements
  • The campaign is generated through another MySQL-database, called the dwh, which stands for datawarehouse
  • This WordPress site naturally has a MySQL-database. We have a copy of that database at the same MySQL-server as the dwh - The dwh can access it
  • The output of the dwh, are a bunch of tsv-files (tab separated values). Maybe eventually a whole campaign will be exported as one tsv-file - This would safe quite some uploading.

Template formats

The output of the dwh, should be filled templates, that can be uploaded through the Google Ads-interface. You can easily figure out how the templates look like, by downloading current campaigns, of parts from it, from an existing Google Ads campaign.

As an example, here's part of the template for campaigns:

Account	     Campaign	        Campaign status   Budget name   Currency code	Budget	Budget type	Currency   Bid strategy type
LH12	     BB Lokaal	        Enabled	          --	        EUR	        10.00	Daily	        EUR	   CPC (enhanced)
KBZ & KBZZ   Marjon	        Paused	          Überbudget    EUR	        150	Daily	        EUR	   Maximise clicks
KBZ & KBZZ   My Ads	        Paused	          --	        EUR	        7.50	Daily	        EUR	   Manual CPC
KBZ & KBZZ   Starters	        Paused	          --	        EUR	        1.66	Daily	        EUR	   Maximise clicks
KBZ & KBZZ   Display - Topics   Paused	          --	        EUR	        1.00	Daily	        EUR	   CPC (enhanced)
LH12	     BB Zakelijk	Enabled	          -- 	        EUR	        10.00	Daily	        EUR	   CPC (enhanced)
KBZ & KBZZ   Staart	        Removed	          --	        EUR	        1.00	Daily	        EUR	   Manual CPC
  • Not all fields are included, for many are feedback-fields (like how your campaign has been doing), and those are not relevant when uploading a template
  • Note that it includes the field Account. It's handy to include it, as it safes some dialogues when uploading
  • One field that it missing, is the general field Status - It reflects the status that Google Ads gives it to the entity. This field seems present in all templates.

It would be tempting to include all templates here for discussion and download, but that would be overkill: Just go to your Google Ads account to download the most recent version of the templates - At least, that's what I would do.

Tables & structure

A long time ago, I learned that the ER-diagrams of datawarehouses, typically consist of a bunch of star topologies: Clusters with one table in the middle, and a bunch of other tables around it. The same seems to be the case here, with these stars:

  • Campaign-table
  • Root-table

The campaign-table isn't too exciting. So far, they always consists of just two rows: A header and a row with a campaign definition. But it is quite an entity of its own, as it determines everything else.

The root-table is more exciting: Because of SKAG, the name of the AdWord-table is the same as the keyword. And since I need to generate a bunch of alternative names for each Adgroup-name (because of the different modifiers), I put them here together. Originally, I used the AdGroup-table for this, but since the data isn't limited to only AdGroups, it felt better to call this table root.

All tables:

  • adgroup
  • campaign
  • eta
  • keyword
  • root
  • rsa.