Onboarding: How To Prevent Your Customers Leaving Before They Arrive

David Underwood

What’s the most important element of an API integration?

If your answer to that question isn’t ‘onboarding’, we need to talk.

In the context of a Shopify app, onboarding is the process of setting up a Shopify Merchant with a third-party service. But why is it more important than, say, functionality or number of integration points? I asked Jamie (@jamie3d) from Hello Bar to share his thoughts on this:

The onboarding had a very heavy influence on the initial design process as it feels like “Step 1” of any app creation. If the intro to the app is friction-less then there’s a much better chance of the user sticking around. The onboarding was pretty much 60-70% of the initial design and development discussion as we knew it was something that Shopify looked at during app approval.

Unfortunately for developers, end-users have the annoying habit of being incredibly lazy. I myself have been known to abandon logging into my online banking because my debit card is in my wallet across the room. Every hurdle you put between a potential user and your app is another point at which they can say ‘forget it’ and give up.

That’s why onboarding is so important. It doesn’t matter how useful or revolutionary your app is if no-one ever sees it.

There are two main things that you can do through the Shopify API to help your onboarding:

  1. Create user accounts using info from the Shop API
  2. Charge your users through the Billing API

Account Creation

The first point is a no-brainer, especially if your service is free. As soon as a shop owner grants you access to their shop, simply pull their name, e-mail address, and any other relevant info from the API and feed it into your account creation process. This can be as simple or as complicated as you like: I’ve seen systems that create an account for you automatically and email a one-time password to you, all the way down to dropping the info into the existing signup form and letting the user do the rest.

Of course, there are several use-cases that have to be handled here. What if the user is already a customer of yours, and all they want to do is connect their existing accounts together? Here’s Hello Bar’s take on the problem:

[We] pre-fill the user’s Shopify email address & show both login and create account on the same page. If they already have an account, hopefully the familiar looking email/password field along with their email already sitting in the login field will remind them, “oh I already have an account, that’s right!”

Alternatively, if they see the create an account field with their Shopify email already sitting in it they can just click to sign up. We do an Ajax check to see that the email isn’t already in use so if they try to sign up when they already have an account, error messaging implies that they need to shift focus to the other side of the screen and log in.

We felt like it was a nice mix of hand holding and giving the user control. It also avoids the completely automatic onboarding pitfall of: “Oh crap, why did they use this email address! My Hello Bar account uses my personal email, now I have two accounts!”


The second important onboarding element is billing. Everyone who installs a Shopify app has by definition already given us their payment details. Through our Billing API apps can have one-off or monthly charges added to a customer's Shopify invoice automatically.

This applies directly to onboarding. Merchants are loath to give out their payment details, so why make them? Using the Billing API effectively will be the subject of a future post, but if you're working on a Shopify integration for your service put some serious thought into adding the Billing API to your TODO list.

All our API docs can be found on the docs site, and if HelloBar sounds interesting their app is now available on the App Store.

If you want to chat about onboarding (or anything else API-related) with a group of like-minded individuals please join our developer mailing list. They're very friendly, I promise!