Syncing Shopify customers to Facebook Custom Audiences

A little background on my current automation setup for my Stitch People Shopify store–I’ve written a custom Shopify app in Ruby on Rails to handle a lot of small tasks for me after someone makes a purchase. Unfortunately, this app is totally custom and wouldn’t work for anyone else, but eventually I’ll generalize it and throw it up on Github somewhere. The app currently helps connect Shopify to Drip, Facebook Custom Audiences, Zendesk, and more.


I’ve been waiting for a Shopify app to come along that will handle automatic syncing of customer data to Facebook Custom Audiences with advanced rules. There are a few out there that do this on a really basic level (like this one) but nothing yet that gives me the granular controls I’m looking for. So I built a service into my custom Shopify app that connects with SyncSumo.

SyncSumo is a service that lets you sync your custom audiences with outside data. They have a lot of different ways for accepting the data that needs to be synced to your audiences, and those integrations are focused mainly around email marketing and webinar software. I’m hoping they’ll eventually integrate with Shopify, but for now, they have a Webhook integration that lets you post some JSON data to an endpoint. This is what I’m using.

My custom Rails app receives webhook notifications from Shopify for new purchase events. When that happens, I just pull the email address out of the data Shopify sends me, repackage it into a JSON POST request, and then fire it off to the SyncSumo webhook endpoint. Within an hour, this email then gets synced to my Facebook Custom Audience.

I need more granular controls than other apps can give me because I’ve created custom audiences for each individual product purchased. Right now we have 4 pattern books, and I want to create audiences for each of them. There is definitely a lot of overlap in those audiences, but what I’m more interested in are the people who are in one audience but not in another. Those are perfect cross-sell potentials.

Our main product is our DIY book. It was the first book we released, and that’s the first book most people buy. We now have 3 other books that complement the DIY book in various ways with animals, military, and occupations and hobbies. When I have a custom audience for each of these products, I can create Facebook ads that target people who have purchased the DIY book, but NOT the Occupations and Hobbies book, or one of the other books.

Why does your website need maintenance?

Imagine a single-room log cabin. Like the kind that Abraham Lincoln was born in, with four walls and a roof. There was no plumbing, or temperature control, or electrical wiring. If a log was damaged by dry rot, you disassembled the entire house, replaced the log, and put it all back together again. If the roof leaked, you patched it. Pretty low maintenance.
Now imagine a new house with a tankless water heater, a Nest thermostat, a smart fridge, solar panels, etc. There are a lot of individual pieces, each doing a specific job, and each requiring a different level of maintenance. I spend way more time replacing individual sprinkler heads than I do replacing the flame sensor in my furnace. If I don’t replace a broken sprinkler head, it won’t affect me too much. But if that flame sensor stops working in the middle of winter, I’m going to feel it.

But let’s say you’re part of an HOA and maintenance is taken care of for you. You’re going to pay for that convenience, but at least you don’t have to worry about maintenance anymore. You get the benefits of home ownership without the need to constantly monitor and track all those moving parts that can (and will) break.

Websites are much the same way. Back when websites were just a collection of HTML pages with inline styling and static content, there wasn’t much maintenance required. If the HTML standard changed and browsers started interpreting certain elements differently, you’d have to account for that. But otherwise, you built it once and left it alone.

Today, we’re building websites with a bunch of different moving parts and complex dependencies, each requiring a different level of maintenance. If Facebook changes the way their app authentication works, your Like button stops working. If your WordPress theme relies on a deprecated function, updating WordPress core may cause issues. Or if UPS changes their API, your real-time shipping quotes stop working. Some of these things won’t affect you too much, while others can have a serious impact on your site and business.

And just like there are HOAs for homeowners, you can find website hosting solutions that manage the maintenance for you. Don’t want to deal with WordPress updates? Host your site on a service like WPEngine. It’ll cost more than hosting it on Bluehost or Digital Ocean, but you won’t need to manage and worry about updates yourself.

If a website is part of your business, you can’t expect it to be a “build-it-once-and-leave-it-alone” thing. Chances are, the value you’re providing to your customers relies on a lot of those complex moving parts and integrations with other third-party services that can (and will) break. And generally speaking, the more you pay, the less you have to deal with these kinds of issues. But if you’re trying to run a site on the cheap, you’re going to get your hands dirty and replace a few sprinkler heads every once in a while.

One Year Later

A year ago, I quit my job as a product manager at MoneyDesktop (now MX) to pursue a freelancing career, focusing on WordPress and Ruby development. Through a friend of a friend, I inherited a few spectacular clients that helped jumpstart my new business. Through word of mouth, the occasional Facebook post, and the professional network I had cultivated, I never wanted for new clients–in fact, I was lucky enough to start turning clients down when I realized I didn’t have the capacity to take them all on.
A year later, I’m still independent. About 25% of my time is spent working with some of those same clients. Most of them are at a point where they just need some minor tweaking rather than completely new functionality. I still have great relationships with all my current clients, and I even have a list of some other freelancers that I can pass potential clients on to. It’s perfect.

The other 75% of my time is spent working on Stitch People. If you’ve never heard me talk about Stitch People before, I wrote a post about it back in 2013. In the fall of last year, my wife self-published the first DIY Stitch People Book for people who want to learn to make these kinds of cross stitch portraits themselves. We realized that the business of actually making the custom portraits wasn’t nearly as scalable as producing a book on how to do it, so we focused our attention on the education aspect of Stitch People.

So far, we’ve sold over 1,000 physical copies of the book, and more than 500 digital copies. We’ve shipped books to over 20 countries around the world. Of the 103 reviews on the website, all of them are 5 stars. Needless to say, we’re happy with the success of this first book and are making plans for more books down the road.

My involvement in Stitch People is on the technical and marketing side of things. First and foremost, I make sure the website is working. We’re still with Shopify and probably will be for a while. Recently I looked at moving the store over to WordPress, but it just didn’t make sense. We like the Shopify experience, the mobile apps, and the peace of mind knowing that if our traffic spikes, we’re taken care of.

In addition to just keeping an eye on the site, I’m always running some sort of A/B test through Optimizely. Currently I’m running a test on whether or not calling out ‘Free Shipping in the US’ makes a difference on the book product page. So far, the results are pretty inconclusive, but it’s only been running for a day or so.

I also spend time every day looking at Google Analytics to see if there are areas or aspects of the site that need to be shored up. I look at bounce rates by platform and by referral source. If we’re seeing unusually high bounce rates from a specific source, I’ll dig into what might be causing it and see what I can do to fix it, like setting better expectations upfront through that source.

We’re running ads on several different networks. Facebook is our primary source of conversions, with Twitter and Pinterest contributing a handful every week as well. Twitter and Pinterest aren’t as cost effective as Facebook for us right now, so I’m experimenting with creative to see if there’s a better way to connect specifically to the Twitter and Pinterest crowds.

We’re also running some retargeting ads through AdRoll. Retargeting is a new area for me and I’ve been enjoying the learning process. Again, the biggest thing I’m focusing on here is experimenting with different creative to try to appeal to the retarget audience, both on Facebook and on the web at large. I think this is one area where we’ll eventually see some serious ROI once we get the formula right.

The last big thing we’re focusing on is the community around Stitch People. We have over 4,500 newsletter subscribers and great open and click rates for the industry we’re in. It’s an active and interested community, and we’re coming up with strategies for how to better communicate with them, allow them to communicate with each other, and really start a movement.

So between looking at and tweaking ad performance, coming up with new ad creative, checking analytics, doing research for some of our future plans, and trying to connect with our community, I manage to stay pretty busy. As for Lizzy, she’s the one fielding all the support emails, all the cross stitching, all the designing, and all the one-on-one connecting with community members.

It’s been a good year.

Optimizing your site for Facebook sharing

You’ve probably shared a link on Facebook and seen the magic of how it grabs the site title, image, and description automatically. Did you know you can control what Facebook decides to use for that information?
Here’s an example from one of my recent blog posts showing the blog post title, the first few lines of text from the post, and an image.

Open Graph Example

Facebook uses what it calls the Open Graph (OG) to help determine what information should be used when sharing a link to Facebook. By using OG tags in your HTML, you can tell Facebook specifically what information you want displayed when someone shares a link to your website.

Here are a few examples of the kind of information you can specify with OG tags, taken from the Open Graph Best Practices page on Facebook:

  • og:title – The title of your article, excluding any branding.
  • og:site_name – The name of your website. Not the URL, but the name. (i.e. “IMDb” not “imdb.com”.)
  • og:url – This URL serves as the unique identifier for your post. It should match your canonical URL used for SEO, and it should not include any session variables, user identifying parameters, or counters. If you use this improperly, likes and shares will not be aggregated for this URL and will be spread across all of the variations of the URL.
  • og:description – A detailed description of the piece of content, usually between 2 and 4 sentences. This tag is technically optional, but can improve the rate at which links are read and shared.
  • og:image – This is an image associated with your media. Facebook suggests that you use an image of at least 1200×630 pixels.

Here’s what these tags look like in practice:

Good Example

<meta property="og:title" content="Workday Sets Price Range for I.P.O."/>

Notice that this doesn’t have any branding and it doesn’t mention the domain at all. It simply contains the title of the page/post.

Bad Example

<meta property="og:title" content="MyFavNews.com – Business Section- Workday Sets Price Range for I.P.O."/>

This is a bad example because it contains branding and the domain information. When optimizing OG tags for a blog post, the og:title tag should only have the title of the page/post and nothing else.

Again, go check out the Best Practices for these and more examples of proper use of OG tags. You can also look at Facebook’s documentation for Using Objects within Open Graph for a few more details on the different types of content you can include.

Debug Tool

Just like Google has the tool to help you debug your microdata, Facebook has a tool to help debug your Open Graph tags. It’ll show you what your shared post will look like:

Facebook Open Graph Debug Tool

For those of you on WordPress, there are several plugins out there that will help you specify things like og:title, og:image, and other tag information for your pages and posts. One of the most popular plugins that helps you manage these tags is one you probably already have installed.

WordPress SEO by Yoast

WordPress SEO by Yoast

This popular plugin is most commonly used for SEO purposes like making sure your title tags are consistent and correct, letting you specify meta descriptions for each post, etc. It also helps you manage Facebook Open Graph tags. On your dashboard, go take a look at the Social settings section under SEO, where you’ll see a checkbox to include Open Graph meta data, an option to link your Facebook account (either personal or business), and options for the OG tags you want included on the front page.

SEO Settings

When you’re working on a post, you’ll notice a few extra fields below the text editor where you can enter a description and the image you’d like used:

Open Graph Post Settings

If you leave the description field empty, as I’ve done in this example, it’ll just pull the default meta description for the post. If you haven’t specified a general meta description, Facebook will use the first few lines of the post itself.

Once you’ve configured everything, you’ll see the results in the source code of the page you’re looking at. These will show up as meta tags in the head tag of your site, so you won’t need to scroll very far in the source to see it:

Open Graph HTML Example

In this example, the SEO plugin is even including things like tags and categories.

If you’re on WordPress and don’t have WordPress SEO by Yoast installed, go get it right now and turn it on. I’ll write a future blog post that goes into more detail on what exactly the plugin does for SEO, but it’ll at least be helpful for using Facebook Open Graph tags.

If you’re not on WordPress, try searching for an extension/plugin/gem for whatever platform/framework you’re using. And if you need to insert all this manually, be sure to check out the Best Practices.

How Amazon Needs to Get Social


The news came out yesterday that Google search will soon be including results from its Google Plus network. This is pretty huge if you think about it. It means that when I search for a book, for example, I’ll be presented with something a friend of mine said about that book 3 months ago, or maybe even yesterday. Google has already done a great job making the search results relevant to me, but this is another huge step in the right direction towards really relevant searches.

It got me thinking, though, about how Amazon needs to incorporate a social element to the online shopping experience. Consider Amazon reviews–they’re the best thing in the world, right? More often than not, a decision on whether to buy one product over another comes down to the reviews.

But not all the reviews are accurate. The sheer volume of reviews helps to mitigate this problem, but the problem is still there. Like the guy who gives a product 1 star because he had a bad shipping experience–something that has absolutely nothing to do with the product itself.

Imagine if you could build trust circles, or trust groups within Amazon–a group of people whose opinion you trust around a certain topic. Like a group of people whose opinion you trust about books, or technology, or art. Maybe this list of friends gets pulled from Facebook, or maybe it comes from Google+. Or maybe Amazon builds their own social network, allowing people to connect with other friends on Amazon (and easily share books via the Kindle).

Now imagine you’re looking at a product page, and see that the product has an average rating of 3.5 stars from all users. Not bad. But then you can tweak the 5-star rating to only include those reviews by people in one of your trusted circles or groups. Now the average goes up to 4 stars, and the reviews you are reading are by people you trust. Assuming you’ve chosen your circles or groups wisely, you can be confident that the reviews are more relevant to your tastes, likes and dislikes.

The Amazon rating system could be so much more if they could bring a social element to it. Right now, shopping on Amazon feels like I’m in my own little world, but I think the future of online shopping will be a very social experience.