5 Things We Learned Creating Our First Shopify App

When we started Sauce, we cared about two things: building awesome technology that retailers would use, and making it really, really simple to install.

We looked at a number of different ecommerce platforms and for us, choosing Shopify was a no brainer. There are over 325,000 merchants on Shopify, with an average of 3.7 apps installed per store. The admin interface is also clean and consistent across stores, so we were confident we’d easily know what to fix when a client needed a bit of help!

Shopify is quite a bit different than most platforms out there, and we learned a lot along the way. There’s a bit of a learning curve, but once you get through it, you’ll find it’s one of the best platforms you’ve ever had the pleasure of developing for.

1. Shopify isn’t Wordpress

Most of us web developer types have dabbled in Wordpress Plugins at some point. Anything you’ve learned about hooks, actions or filters – forget it when it comes to Shopify apps.

Unlike Wordpress, with Shopify your app code will never run on a client’s server. Shopify is a central platform that provides an interface for apps via an HTTP-based API. For example, if you wanted to get the full shop details of a store that had installed your app, you could run the following request:

GET https://sauce-demo.myshopify.com/admin/shop.json

Or maybe you want to create a new customer?

POST https://sauce-demo.myshopify.com/admin/shop.json

Using an HTTP API may sound like a limitation, but it’s good. You never have to care about what version of Wordpress the store has running, or any weird internal server bugs. Any communication between your app and the client’s store can be kept to an absolute minimum.

As Shopify’s API is HTTP based, you can use any language. To make things simpler, there are libraries available in a number of languages including PHP, Ruby, and Node.

Shopify offers 34 different endpoints. Here are some other things you can do in a few simple requests:

Upload an image to the theme files

Read order data to provide transaction analytics

Load a script on every page of a store

Listen for key events (via webhook) such as a customer being created or an order being cancelled

2. Liquid

If you haven’t heard of Liquid before, it’s a templating language that Shopify invented in 2006. Since then it’s been adopted by many companies and open-source projects including Jekyll, Locomotive, Desk.com, and Google.

The syntax is crazy simple. It can be used to read a huge amount of data on any given page and is made available for your apps.

It’s ok to ask customers to copy & paste code. (Just not too much!) Shopify store owners are completely used to this, but expect that you might need to help them a little on the way. At Sauce we ask stores to install a bit of code, such as our core theme snippet:

3. Use the Embedded App SDK

It may be a long name that’s hard to say quickly, but the Embedded App SDK (EASDK) is really, really good. Introduced at the start of 2014, the EASDK allows you to run your app within the Shopify admin. The code is still running on your server, but it’s loaded inside an iframe in the admin of each store. To the storeowner, it feels like your app is part of Shopify!

That’s not all though. Shopify also provides you with standardized JavaScript UI elements such as:

Loading messages

Modals

Navigation buttons

Alerts

Not only does this make your app design more consistent with the main Shopify admin, it also makes things simpler for you as you don’t have to create the UI elements yourself.

At Sauce we took things a step further by directly copying a lot of the standard Shopify styling on elements like buttons and input fields, making Sauce feel as at home in the Shopify admin as possible.

Should you use it? If you’re building a Shopify-only app, then yes, 100%.

4. Reviews are everything

We first went live in the Shopify app store on May 21st and we were super, super excited. However a few days later, we’d only had a few people install our app. A little disheartened, we carried on, hoping things would pick up, and they did. By far the biggest driver of this was reviews.

Reviews are great for three reasons:

1) Shopify will rank your app higher in the store. The ranking algorithm is based on the number of stores installing the app and most importantly, the number of positive reviews the app has received recently. In the course of one month, we went from being at the bottom of the social media category to being consistently in the top 10.

2) Storeowners will trust you. Reviews are customer testimonials, and the more positive reviews you have, the more people who will install your app. Unlike regular customer testimonials on websites, reviews on Shopify have a lot more credibility because… well, they can’t be faked.

3) Shopify will feature you. If your app is new and innovative with a few positive reviews, the Shopify team are great at helping to promote you. We were featured for 10 days, and in that time, the number of stores running our app increased by 300%.

Don’t be afraid to ask a storeowner for a review, just don’t incentivize them (that’s against the Shopify Partner T&C’s).

5. Offer world-class support

If your app does anything more than the simplest of tasks, chances are some Shopify storeowners will have some questions sooner or later. And this is where you really get the chance to shine.

Here’s a couple of comments we’ve had recently:

“Thanks for the awesome support, we'll let you know if we have any more questions.”

“So far thanks again for your help! This support is really amazing.”

Not only will support help storeowners get set up on your app, solving a customer’s problem is a great time to ask for a review.

Live chat can be a great tool (we use Olark). If you’re using the EASDK as discussed above, it’s even better. The storeowner can experience your world-class support without even having to leave their Shopify admin.

Share your experiences

Are you an app developer who’s built a Shopify app? Are there any other lessons you’ve learned? Let us know in the comments.