Selling Digital Products on Shopify

I’m on my third digital delivery app for Stitch People, and I think I’ve finally found something that’ll work for me: SkyPilot. Here’s a review of what it does, why I like it, and why the other things I’ve tried have failed.



This is my current app. I made the switch final today (May 15, 2016) and things are now running smoothly. Here’s what I love about it:

  • While the actual files are hosted and served through, this is all done behind the scenes and masked through your own domain. When people click on the link to download their file, the link is your domain. The SkyPilot app then intercepts that request and serves the necessary file.
  • The entire experience is on my domain. SkyPilot gives you templates to manage, so you have full control over how the experience looks for your customers. It integrates into your existing theme and layout, so there’s no break in the visual experience for your customers.
  • It integrates into the order status page. When someone completes their order and it contains digital products, they’ll see a button on the order status page that takes them to another page (on my domain) that lets the customer download the file. I still send a follow-up email (see the next point), but that’s now a backup. People can immediately download their files after their purchase without having to go back to their inbox and wait for a link.
  • I can manage the email notifications entirely. I’ve turned off email notifications through SkyPilot, and instead I send the download links through my email marketing service, Drip. When someone orders something through Shopify, Drip is notified and stores the customer ID. I then use that customer ID to generate their unique download link and send it to them. All emails go through my domain and have the highest deliverability rates possible. No more lost notification emails.

I’m hoping that I’ll stick with this one for a while. So far, it has everything I want, lets me see how many times someone has downloaded a file, logs the IP address of each download, and gives me the flexibility I want to craft the entire experience.



This was the second app I used, after Digital Downloads (below). It worked well for about 6 months, but eventually three things made me start looking for a third option.

  • The email notification sent to customers through SendOwl is sent from They don’t have support for sending emails through your own domain, so even though I was able to set the ‘From’ name on the email, a lot of the download notification emails were going to customers’ spam folders. Not good.
  • Files were all hosted and downloaded directly on While they do offer some branding options, customers are ultimately leaving your site to go download their products elsewhere. This never really sat right with me.
  • Sometimes, customers would receive the email with the link, click on the link, and get a 404 error from SendOwl. Usually this resolved itself if the customer tried again in a few minutes, but this was completely unacceptable for me. A huge selling point to offering digital products it the immediate satisfaction a customer gets when they purchase and then download the file. A service that can’t reliably deliver a seamless experience isn’t worth my time.

Digital Downloads by Shopify


This was the first app I used and it’s been probably 8 months since I’ve used it, but based on my experience, I have no desire to try it again. For me, the biggest issue was the inconsistencies with the download limit feature (which limits the number of times a customer can download a file). The default had it set to 3, and I kept getting emails from frustrated customers saying that the first time they clicked the link, they were told that they had exceeded the number of allowed downloads. I was going in at least once a day to reset someone’s download limit.

Another thing that drove me crazy: all downloads logged the IP address that download came from. Problem was, all downloads were being attributed to an IP address associated with Shopify. I emailed the Shopify team about this, and they confirmed that this was happening with every store that had the app installed. Several months after alerting them to the issue, it still hadn’t been fixed. Between this and the download limit weirdness, I decided that this app wasn’t worth the headache.

Shipping a physical product

I never thought I’d be in the business of shipping a physical product. As a freelance developer, I always thought I would only ever offer services, or at most, a digital product like an e-book. So when my wife self-published the DIY Stitch People book, we had to figure out how to get those books from point A to point B.
When we first started selling the book, we didn’t have any sort of system set up. When we needed to ship a book, we’d go to a local place that handles everything from packaging to shipping. We’d buy a padded envelope, stick the book in, seal it, and then head to the front counter and read back the name and address of the customer while the person on the other side of the counter typed it in and generated a label. Then that person stuck the label to the envelope, threw it in a pile with other outgoing mail, and we paid for the envelope and postage.

This process sucked, especially when we had to ship out over 50 pre-orders at once. We were at the store for about 2 hours, and the receipt we got at the end was super long. Here’s a picture of the nice employee holding our receipt:

Stitch People Receipt

On that receipt were the tracking numbers for each package, too. So we went home and typed in each tracking number for each order and sent the customer their shipping confirmation email.

Lizzy and I quickly realized that this process wasn’t going to work. It was time-consuming, expensive, and error-prone. First, we found padded envelopes online at ULINE. Buying in bulk online was definitely cheaper than buying individual envelopes in the store. Problem solved (or so we thought–more on this later).

Next, we looked for a way to generate labels at home. That way, we wouldn’t have to spend so much time at the store reading off the names and addresses of each customer. We love podcasts, so we’d heard a lot about We signed up and started generating labels at home.

With our new envelopes and the ability to generate our own shipping labels, the next iteration of our shipping process was set. When an order came in, we’d throw a book into a ULINE envelope, go to, copy and paste all the customer information, generate the label, print it out, and tape it to the front of the envelope. Then we’d copy the tracking number and paste it into Shopify, which would send the customer their shipping confirmation email. And because we were using USPS (Media Mail, because we’re shipping books), we could leave the envelopes for our mailman to pick up, so we didn’t have to leave the house to ship. Not a bad improvement.

But this process got cumbersome after a while, too. The copying and pasting from Shopify to wasn’t very slick, and we were still making a few mistakes every now and then when generating labels. We figured that since the customer information was already in Shopify, there had to be a way to easily generate the label and update the order with tracking info without copying and pasting. So I went in search of another solution and landed on ShipStation.

I’ve written about ShipStation (and some of this other stuff) already in another post. It’s a really great solution and is what we currently use. When an order comes in, we go to ShipStation, where I’ve created presets for all the different options for shipping that we use and offer customers (international, media mail, priority, etc). It pulls the order data in from Shopify, we apply a preset, and then generate and print the label. As soon as the label is generated in ShipStation, it sends the tracking number back to Shopify, and the customer is sent their shipping confirmation email. Another big improvement.

When we first started using ShipStation, we were still printing labels on regular paper with our ink printer. It worked, but it was a hassle. The labels we generated were 4×6, not 8.5×11, so we were wasting a lot of paper. And taping labels to the front of the envelope sucked. Lizzy’s mom (who helps with fulfillment) suggested we look at a thermal label printer that worked with ShipStation. We found the Dymo LabelWriter 4XL on Amazon.

DYMO LabelWriter 4XL

With this thing and some cheap generic labels, things got really easy. Now we could process a batch of labels in ShipStation, the tracking numbers would get sent back to Shopify, and we could print on sticky labels without needing ink. The thermal-printed labels (the exact size of the generated label) just peel off and stick right to the package. This was a HUGE improvement for us.

The most recent thing we changed was the envelopes. We were getting complaints from customers that the packages were being mutilated in transit, arriving bent and creased. First we tried contacting USPS about it and learned that there’s nothing they can do. With Media Mail especially, our packages were being tossed around with much bigger and heavier packages. If we wanted to keep using USPS (they’re the cheapest option for us), we’d need to look at new packaging.

I checked out the ULINE catalog and found their Easy Folder Mailer boxes which work perfectly. It’s a tight fit because our book is spiral bound, but it protects the book so much better than the envelopes. It’s a bit more work to put the book into one of these things, but since we started using the boxes, we haven’t had a single complaint about the condition of the book when it arrives. For us, it’s definitely worth it.

And that’s where we are today. When an order comes in, we grab a box, fold it around the book, tape it shut, go to ShipStation, print out the label, slap it on the front, and leave it for the mailman. ShipStation talks to Shopify and sends over the tracking number, which is automatically sent to the customer. It’s not a perfect system, but we’ve found a nice rhythm to our shipping process. And I’m sure we’ll find other ways to improve as the need arises.

Do you ship a physical product? What would you suggest we do differently?

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.

Shopify, ShipStation, and

When we launched the DIY Stitch People Book back in October, we didn’t realize how quickly it would gain traction. Thanks to an active Pinterest crowd, some Facebook ads, and a natural rise in organic search traffic, we’re selling more books than we expected. And as you might expect from two people who have never run a business that consistently ships physical products (sporadic portrait orders don’t count), we found ourselves in need of a better way to manage the shipping/fulfillment aspect of Stitch People.
A typical day at our house

We’re avid podcast listeners, so we’ve heard a lot about recently. We signed up for an account and started printing postage at home. It was a pretty slick process and a major improvement over going down to the post office to ship books, but it still didn’t tie in directly with our Shopify store. I kept searching.

I thought I had a solution when I found the Shopify app. I went down that rabbit hole and eventually learned that unless you’re running the Windows client of, there’s no way to integrate it into Shopify. As a Mac user, I was out of luck.

Next I called support and asked if there was anything else I could try. The guy referred me to ShipStation, a company recently acquired. They had a way to integrate Shopify and without using the Windows client, he said. And it turns out he was right.

Ship Station

ShipStation is perfect for us. We can log in to ShipStation, see the latest orders, print labels according to a preset we configured (Media Mail, 13 ounces, etc.), and the tracking numbers are immediately populated into Shopify, the order is fulfilled, and the customer gets the regular Shopify email with the tracking number. And we never had to login to Shopify.

Check out ShipStation here.

Stitch People

Back in the fall of 2011, my wife Lizzy was browsing through a Martha Stewart magazine and came across a neat idea to make a cross-stitch family portrait. She decided to do it for her parents and sister that year for Christmas, and they turned out great. I suggested she sell them online and call them Stitch People. The domain name was available so we went to work.
Stitch People

She created an Etsy store and sold some pre-made holiday portraits. It never really took off. We decided to pursue the crowd that wanted custom portraits instead of pre-made items. Lizzy started reaching out to online stores to see if they wanted to list her stitch portraits.

She cold-emailed Uncommon Goods, an online retailer that specializes in, well, uncommon goods. My mother-in-law has purchased Christmas gifts there in the past, and this seemed like the kind of thing they would like. She heard back within a week saying they were interested, and the ball started rolling.

Within a few months, Stitch People went live on Uncommon Goods. At first there were only a few orders. We were worried that Uncommon Goods had priced them too high and that no one would buy. Once Uncommon Goods highlighted us in the Spring catalog, however, that all changed and Lizzy was swamped with orders. She used every spare second to stitch, and even recruited her sister and mom to help.

Stitch People Portrait

After several months of a steady stream of orders through Uncommon Goods, we decided to beef up our own online presence and sell directly from Now we had a proven price point for the portraits and just needed to focus on advertising and building a great site.

I toyed around with the idea of building the site myself and hosting it on something like Digital Ocean. As I explored what this would take in Ruby on Rails and some ecommerce gems, I quickly realized how much work would be involved. I asked a coworker what he thought I should do, and he recommended I go with Shopify. So we signed up, used a basic theme, and officially launched our site in the summer of 2013.

Sales were very slow at first. I’m not sure we even made a sale in the first two months. I experimented with some Facebook and Google ads, which brought a decent amount of traffic to the site, but no one actually bought. I started putting time into the Facebook page and Instagram account. I grew the Instagram account to over 1,000 followers in just a few months, but that didn’t bring much converting traffic either.

As we continue to experiment with ads, we’re starting to really learn a lot about our customers. It’s a pretty high price point, which definitely puts it in the premium/luxury good status. We’ve found that most of our buyers are on the east coast, and a majority of orders are placed by women. These things have all helped us narrow the target market we’re using for our Facebook ads.

Stitch People Portrait

We’ve started getting pinned quite a bit on Pinterest, which still has a low conversion rate for us. But we haven’t done much to help guide the conversation on Pinterest, so we’re looking to spend more time there.

A good amount of traffic is starting to come from organic search results, which is really nice to see. We haven’t been running Google ads lately, but I’d like to do another round and really solidify the keywords and strategy there, too.

It’s been a really fun experience so far, and we’ve learned a lot. The orders from Uncommon Goods continue to come in, which gives us money to put into for maintenance and advertising. We’re hoping that sales on our website will pick up and that Lizzy will need to start hiring out the stitching consistently.

If you’re interested, head over to and order a portrait for yourself or your family. All of our customers so far have been extremely happy and have loved their portraits!

Stitch People portrait