Google Shopping Actions with Shopify

At Google Marketing Live on May 14th, Google announced a radical revamp of their Google Express shopping service. Even before this announcement, I was working with Google to get Threddies approved and setup using Google Shopping Actions. Google Shopping Actions (GSA) is a mechanism for exposing your products for purchase to the Google Assistant via Google Merchant Center. I had some very specific needs in doing this that required some additional work beyond the basic setup. In this article, I’ll walk through what I did and my reasons for doing so.

Hey Google, Buy some Threddies Scrunchies

Threddies has used Google Shopping Ads to promote many of our products across Google’s ecosystem since we started selling online. We currently use the Google Shopping Marketing campaign capability that is built into Shopify to do this. This setup exposes a product feed to Google Merchant Center using Google’s Content API. This allows us to keep our advertised products data (price, image, description, shipping, etc.) in sync with our website. The Content API is great! It gives prospective customers the best experience by providing up to date information. This eliminates any surprises when they ultimately click through to our website to make a purchase. A simple way to setup GSA would be to just expose this feed directly and call it a day.

Unfortunately, doing this isn’t what I would consider the best case scenario for a few reasons:

  • What if I want to sell products that I don’t advertise or only a subset of those that I do?
  • What if the new Google Shopping imposes constraints on data that Google Shopping Ads does not? (spoiler: it does, and I don’t like the idea of modifying my website content in order to meet these restrictions)
  • Ideally, I’d like to keep promoting our website products completely separated from selling the products on our new ‘Google channel’.

In addition, selling on Google’s platform was going to be more costly than selling directly to our customers via our website. Google charges a ‘commission’ for each product sold. Google Shopping also prefers a straight forward shipping policy to make its ‘universal cart’ more appealing to consumers. Participating in the new Google Shopping also requires us to support a more liberal return policy than we currently allow. Based on this, the ‘feed’ used to drive GSA would need to allow us to provide a different pricing model. One that directly matched our website would not work.

Feeding the Beast

Google Merchant Center does support ‘supplementing’ feeds and I initially planned to implement GSA using a supplemental feed. Ultimately, I decided to setup a completely separate feed for GSA. I did this mainly out of my desire to have no impact or dependency on the Content API feed used for Ads.

I setup a brand new GSA specific feed using Google Sheets. In this feed, I added all of the products that I initially wanted to sell in the new Google Shopping experience. My initial product list pretty closely matches the products that we are selling via Amazon. We did this in order to provide an alternative to dropshippers of our products who were already on Google Express. This is a problem that we are familiar with from our other sales channels. People dropshipping our products from Amazon tend to provide a less than ideal customer experience for many reasons. We try to discourage this practice wherever possible.

Taming the Beast

The first attempt at getting this to work was a mess. Initially I had multiple versions of the same products showing up (at different price points) in both Google Shopping and Ads. This would cause us to pay to advertise products that would be sold via Google Shopping (not desirable!). It also surfaced products that I was advertising from my website in my Google Shopping store (at a deep discount because they were using the website pricing!). I fixed both issues by creating a supplemental feed for Google Ads. In this feed, I use the ‘excluded_destination’ attribute to prevent products from ever showing up in Google Shopping.

Things were starting to look better, but I noticed an issue with products that were in both the Google Shopping Actions and the Google Ads feed. Both Google Shopping and Ads would prefer the data that was in the Google Shopping Actions feed. This resulted in some of my highest converting products being advertised with the Google Shopping data. These ads also brought users to my Google Shopping store rather than my website. I made two tweaks to my Google Shopping Actions feed to correct this. First, I created distinct ‘ids’ for every product in the feed to prevent overlap with the ids that were provided via the Content API feed. Second, I used the ‘included_destination’ attribute to specify that the products in this feed should only be surfaced in Google Shopping Actions.

Getting things in Ship(ping) Shape

One final note if you’re using a similar setup (Shopify with the Google Campaign Marketing app). I noticed that my Google Shopping Shipping policies (setup in Google Merchant Center) appeared to get blown away every few hours

This was maddening and it took me a bit to figure out what was going on. It turns out that Shopify’s Google Shopping marketing integration was doing it! This was easy to fix after I understood what was happening. You need to navigate in your Shopify admin to Apps > Google Shopping > Merchant Center Account and in the Shipping settings section select to manually manage them in the Import method drop down. To be extra safe, modify the ones that are imported from Shopify to never be used by Google Shopping Actions in Google Merchant Center first and then create new Google Shopping Actions only shipping policies after saving your import method settings in Shopify.

Unless you want to be an early adopter, I would recommend waiting a bit… a better Shopify Integration is coming. If you have been accepted into the Google Shopping Actions program and have a similar setup, hopefully this helps! Try it out and let me know what you think! If you want to use the Google Assistant to buy your next hair accessories: “Hey Google, I’d like to buy some Threddies Scrunchies.” or check out all of our products in Google Express.

Indoor Gardening Setup

I’ve always been a fan of gardening… it probably has something to do with spending all that time out in the sun with my great grandmother digging in the dirt as a kid and enjoying the great things that came from it when it was ultimately time for harvest. I lost touch with this joy for a bit in my 20’s but there was nothing like the mind-numbing contrast of the cubicled office to make me want to get back outside and get my hands dirty. After buying my first home with some property, doing some real gardening was high on my list.

One problem living in the part of Pennsylvania that I do is that the outdoor growing season doesn’t last all year long 😢 I started doing a bunch of container gardening just so I could bring things like peppers and herbs inside over the winter. This was mainly in order to get a jump on the next season… assuming they got enough sunlight, I didn’t forget to water them or it didn’t get too cold where I was keeping them. Some of my failures here made having a dedicated indoor space for gardening a high priority when looking for my current home.

Seed Starting

My indoor “gardening space” started out as just a small shelf in a closet in my laundry room. The early intention was to set it up as a staging area for starting seeds and growing transplants indoors so that they could be planted outside as soon as conditions allowed. My laundry room was perfect for this since it was by far the most humid room in the house and also the warmest due to it’s placement right next to my furnace. Both conditions being ideal for starting most seeds.

I started with a pretty simple germination station and a supplemental heating mat since many of the things I wanted to get a head start on require warm germination temperatures. I also use peat pellets as my growing medium. There are cheaper ways to do this, but these are very effective in my experience, not all that messy and they help with adding some much needed organic material on a regular basis to my shale and clay rich soil. They also help with transplanting the plants which I’ll get to later. You put the peat pellets in a few days before adding seeds and mist them down every day until they expand a bit. At this point, you can add your seeds and continue to mist them as needed, making sure that you don’t make conditions so wet that mold starts growing on the pellets. In a few days, you should have some sprouts which you can then transplant.

Most seeds don’t require light to germinate, so this basic setup works great as long as you are on the ball about getting germinated seeds out of the station before the sprouts start to require light. Since this requires transplanting, which can take some time, I eventually added a small LED setup. This helps in three distinct ways. It buys me more time before I NEED to transplant. It gives me the ability to work with seeds that do require light to germinate and it also allows the sprouts to become much hardier before transplanting since they can use the light to continue growing. I don’t have the best finesse when transplanting sprouts, so any help I can get in having seedlings that can take some abuse during transplanting is always helpful.

My current seed germination setup towards the end of germination round with only the ‘stragglers’ remaining.

Switches and Outlets

Some of you might be wondering about the tech involved at this point. There’s already one light and a heating pad involved, neither of which you’d really want to run 24/7. Suffice it to say that like everything, I started out small just using power strips and manually turning things on and off. Eventually, I moved to using timers and then automated, programmable outlets/switches since the manual management became annoying and unreliable. It’s really amazing how much you can do with these COTS products and things like IFTTT and the Google Assistant. I still use much of this basic hardware, but have supplemented with some custom hardware based on the raspberry pi and software that I wrote using Android Things and Actions on Google. If people are interested, I can document this in another post. It’s another thing that I hope to make available to others at some point after working out most of the kinks and documenting it more thoroughly, so let me know if you’re interested!


No matter how you start your seeds, eventually you’re going to need to transplant them. You could attempt to take them right from the seed starting area to the outdoors, but if you’re not doing this under the utmost growing conditions, you’re likely not going to have the best of luck. This means you need some capability to handle this phase indoors as well. Assuming your intention is to ultimately put these plants outside in a garden, this phase differs from the germination stage in a few notable areas:

  • You will need a space for growing plants.
  • You will need light; ideally adjustable to accommodate your growing plants.
  • You will need an effective strategy for watering around all of these electrical systems that prevents over/under watering.
  • You will need actual soil for the plants to put down a root system.
  • You need ways of strengthening your plants so that they don’t become too weak to survive outside.
Some recent transplants on an elevated platform getting them closer to the light

Space is the Place

Even when I carved out that initial shelf in my laundry room closet to start my seeds, I knew that eventually I wanted to take over the entire closet. The first shelf started about 4 feet above the ground which gave me some serious growing space underneath. This height was also perfect for installing an adjustable fluorescent grow light system. In order to maximize the effect of the lights, I first covered all of the surfaces below this shelf with aluminum foil to reflect all light back at the plants. I chose a fluorescent system since I wanted it to be reasonably economical and didn’t need the added heat from the more energy consuming lights. At the time that I installed this, LEDs weren’t really viable due to their cost and questions regarding their effectiveness for growing plants. This latter concern has been addressed with newer models and I’ve since supplemented the base install with programmable LED arrays that allow me to tune the light wavelengths in order to optimize it for my plants and goals. Blue wavelengths encourage growth while reds encourage flowering/fruit production. You can see in many of the photos that the light is either skewed to red or blue or a mix depending on what I’m trying to accomplish.

Electricity and Water don’t mix

Obviously, after adding a few lights, heating elements and other controls, thinking about how to route power to everything becomes a concern… Especially when you factor in the need to water everything on a regular basis and deal with the inevitable situation where the water spills or goes someplace unintentional. It didn’t take me long to build catch basins beneath every spot where I place my plants in containers. There are a lot of benefits to this and I just found the largest plastic containers with lids available and use the lids. This depth is effective enough at keeping any over watering inside the lids. This has the added benefit of allowing you to water your plants ‘from the roots’ if you use containers that have holes in the bottom (which I would definitely recommend to prevent both under and over watering). These lids also allow you to route the power along the outskirts. No matter what, you definitely want to use GFCI outlets EVERYWHERE. I still do most of my watering by hand, mostly because I spend a bunch of time inspecting anything I’m growing on a regular basis anyway, but I’ve been experimenting with automating the watering in various ways.

Put roots down

The main goal of the ‘indoor transplant’ stage is to create plants that are hardy enough to put outside. One of the most fundamental things at this point is to provide everything the transplants need to create a healthy root system. This starts with using the peat pots mentioned earlier. They allow you to easily move the sprouts into a secondary container without disturbing any of the roots that have started at this point. Choice of container is the next step. I already mentioned that having a container with holes in the bottom and watering from the bottom of the container encourages healthy root growth but forcing roots to grow deeper in order to find water, but the size of the container also matters. Think about your timeline for moving the plants outdoors and the growth rate of your plants and adjust accordingly. If you’re moving them outdoors within a few days or a week, you can get by with a small container, but if it’s a plant that’s destined to stay in a container, or spend weeks inside first, you’ll want something much bigger. You can do multiple rounds of transplanting, but I like to think ahead about this and reduce the number of times I need to move the plants. No matter what container you decide on, you’ll need to fill it with good soil. Fill the container about 3/4 of the way and then take your sprout in its peat pod and tear the webbing on one side to make it easier for the roots to push through and place it in the center of the container. Add more soil around the plant and then water it deeply. Transplant complete!

Strong Plants

At this point, you’ve almost replicated a safe environment to reasonably approximate the conditions for preparing your plants for the outdoors. One thing you’re missing is stressors on the plant caused by weather conditions and inquisitive insects and animals. You can prep your plants for this by adding an adjustable, oscillating fan to the mix. I like to avoid directly blowing air on my plants and opt to have the fan face a wall and have the breeze ricochet back onto the plants.

Get Outside

What I’ve described here is a pretty effective way to get the jump on your growing season. Before putting your plants outside permanently, you’ll want to put them out during the day for a few days to ‘harden’ them. This is another area where having a system of trays makes things easier! I’ve been able to harvest weeks ahead of my neighbors when I get cooperative weather using this method for seed starting and I’ve been able to make that even better using techniques to create micro-climates outdoors (definitely another post).

Grow Inside

Pruned multi year pepper plants that are fruiting/flowering indoors!

If you have enough space, it’s also very easy to tweak this setup to create an all year round indoor growing environment. I do this mainly with peppers, greens and herbs. I’ll plant in permanent containers, move outside when the weather is right for the plants and then when it starts to get cold, prune the plants back and bring them indoors. I can then tweak the environment to either make the plants mostly dormant until the next growing season and put them back outside again, or to continue flowering and fruiting while inside. I have some pepper plants that are several years old at this point!

Interested in indoor gardening? Have you built something similar? What’s holding you back? I’d like to hear more from you!

Hey Google, talk to the Beer Judge Exam Trainer!

It’s finally here… my first app for the Google Assistant has been approved.  You can get all of the details here,  but the basic gist is that it’s a straightforward helper for studying for the BJCP exam.  It’s available on Google HomeAndroid 6.0+ phones (soon to be 5.0+)TVs and iOS 9.0+ phones.  I basically used this as an example app to become familiar with the process in order to build a more sophisticated app, but if people find this useful I will enhance it.  Just say, “Ok Google, Talk to Beer Judge Exam Trainer” on your Google Assistant equipped device.  As always, drop me a line with any feedback.

Who’s the Phoneme?

Ever since attending Google I/O (one of the best conferences I’ve ever attended… seriously Google, please have me back next year!) earlier this year, I felt I needed to build a dedicated app for the Google Assistant.  I kicked around a ton of ideas and at first felt daunted by all of the things that I didn’t know that were fundamentals for even making something simple in the space:  My programming language(s) of choice were not in the ecosystem.  I knew nothing about Conversational UI.  TensorFlow, DialogFlow and all of the Machine Learning (ML) terminology were new to me and the SDKs were changing rapidly.  So I did the same thing I did in the early days of Android and just jumped in and started learning.

I had a job (which seems like eons ago) in which I worked on many things that became the precursors to modern day AI and ML concepts.  So a lot of that was learning the new names for concepts with which I was already familiar.  Libraries to facilitate AI had come a long way as well, and there were off the shelf pieces for things that entire companies had arisen around back in the day.

Even after getting a pretty good grasp on the basics, I held off for a bit on actually building something; secretly hoping that Google would roll out Kotlin support to all of their server side infrastructure. 😉 That never happened, but I’d also done a fair amount of Node.js and general JavaScript development over the years and finally just decided to dive in there.  This is pretty much required to use the backend components of their FireBase infrastructure for Android as well, so it’s not lost time in continuing to be familiar.  I was pleasantly surprised to see that Speech Synthesis Markup Language (SSML) was pervasive in the voice assistant space.  I had followed the early W3C recommendation pretty closely as part of a (way before its time) Augmented Reality Gaming Engine that I had worked on as a side project.  This is where the title of the post comes in…

I dabbled in a lot of odd things in college… so many things that, over the years since I’ve learned them, seemed so far afoot of my current chosen career as to be laughable.  One of my big obsessions (that still is) was language and its origins.  Why is it that ancient Sanskrit is so similar in some ways to Classic Mayan?  I could discuss this stuff forever, but for the purposes of this digression, my point is that I’ve taken a bunch of linguistics and language courses.  One course in particular was immensely useful in creating a primarily voice centric assistant app.  In this course, I learned about phonemes.  Phonemes are a convenient way of representing the way words should be pronounced.  It’s probably pretty obvious how this would be valuable when dealing with a highly technical subject matter using just voice, but just think about the wide range of pronouncing words in English that have very similar spellings and you’ll get the idea.  Phonemes are often represented using symbols from the International Phonetic Alphabet.  I chuckled to myself about the irony that I was building a beer related voice assistant using the IPA, but this was the secret sauce to making my app sound like it was a beer judging expert and not some rube reading unfamiliar words out of a homebrewing manual.

I ended up building something for the Assistant that I’m proud of and learning a bunch along the way.  The app is currently under review with Google, otherwise I’d be telling you all to go out and try it.  I’ll leave that for a future post. UPDATE: The app is now available, read more about it here.