Bootstrapping to €600k MRR and getting killed by Shopify. The story of Checkout X.

Do not index
Do not index
Historically, Shopify has always had a checkout problem.
You were always able to customize your storefront UX until the checkout, but after you click checkout, you were locked into an old-school multi-step checkout with no flexibility whatsoever.
Shopify finally introduced a one-page checkout
Shopify finally introduced a one-page checkout
5 years after Checkout X first launched, Shopify is finally stepping up its checkout game and offers:
  • One-page checkout with a minimal number of fields (soon-ish*)
  • Address autofill
  • Customizable sections
  • Post-purchase capabilities
Sure, their one-page checkout is only available for Shopify Plus merchants, and their post-purchase upsells only work with credit cards and PayPal (when they work; their API is buggy AF), but let's say they've almost managed to catch up.
5 years ago, I bootstrapped Checkout X, which did all of the following:
  • One-page Shopify checkout with post-purchase upsells.
  • It grew to 6,000 active merchants.
  • It generated €600k in monthly recurring revenue.
  • It processed millions of transactions every year.
However, Shopify killed it - just because merchants were choosing our solution over theirs.
As I move on to new adventures and Shopify seems to be taking their checkout seriously now, it's a good time to share the full story of Checkout X.

Backstory

It all started in 2017 when I quit my UI/UX Designer job in order to create & pursue “my own business”.
By the time I had started and operated a couple of Shopify dropshipping stores, which did fairly well and gave me the confidence that I can actually create a company myself.
The problem was, dropshipping is super competitive and many of my competitors were just better than me. So I thought to myself:
When Everybody Is Digging for Gold, It’s Good To Be in the Pick and Shovel Business
I had experience with designing and building different web apps so I know exactly what I wanted to do full time - make Shopify apps. ✨
✍️ I drew the following plan:
  1. Create a small Shopify app and get some customers to get a feel for the market
  1. Create a bigger Shopify app that’s successful and generates enough money so I don’t have to be worried about working for a living
  1. Create a business that changes the game
( Future me is so proud to see points 1 and 2 completed ✅ 🙏 )
So I got thinking. What app should I build?
What apps/add-ons bring the most value ( revenue ) to my dropshipping stores?
  1. Was Oberlo ( app for sourcing products / delivery of my orders )
  1. Was some custom javascript I wrote that was offering small upsells before checkout. Jackpot! 🎰
So, that’s how Upsell X was born:
Video preview
 
It took me a while to build it - it was the first software I coded myself, but in the Fall of 2017 - Upsell X was launched. And it worked!
Over the next couple of months I got a couple of hundred of merchants and I was making $1k-$2k a month from it. Major win for me! 🤘

How Checkout X was born

Around that time I decided to move back to my hometown of Sofia, BG 🇧🇬 ( was living in 🇫🇷 France before ) and long-story short:
  • Met with a friend
  • Decided to open an online pharmacy together ( dumb idea 🤦‍♂️ )
  • Decided the pharmacy will be running on Shopify
  • Had to find a payment provider that works with
    • Shopify
    • Bulgarian entities
    • Companies that sell “legit drugs” on the internet
Needles to say - our business plan had a couple of flaws. But the payment aspect was absurd - there was absolutely no way to accept credit card payments.
Back in the time Stripe didn’t operate in Bulgaria. The couple of other companies that were allowed on Shopify ran as far as they could when they heard we’re some Bulgarians looking to sell drugs.
I was stuck…
  • There were Bulgarian payment providers that would onboard us but they wouldn’t be allowed on Shopify
  • There were Shopify-approved payment providers but they didn’t want to work with us.
So I got thinking - can’t I just bypass their checkout and integrate whatever I want? 🤔
  • Yeah I could!
That’s how the first version of Checkout X was born:
Video preview
 
Needless to say, our pharmacy idea didn’t go far. But I had solved another problem - I could connect any Payment Provider to Shopify 🤯

First business plan: Checkout X for payment providers

My first business plan was simple:
  • Find Payment Providers that are not allowed on Shopify
  • Integrate them with Checkout X
  • Make them promote Checkout X as an integration solution to their customers
 
Actual slide from my presentation to BlueSnap
Actual slide from my presentation to BlueSnap
I spent a couple of months talking to dozen of different payment providers. Most were “interested” but we never really went anywhere. The only company that we made an agreement with was Bluesnap, which brought some customers, but not as many as I was hoping for.

Second try: One page checkout with post-purchase upsells

One day, while I was working on Checkout X - I got a support ticket from one of the Upsell X customers - Super-prix.fr
 
Super Prix was one of the pioneers of french dropshipping at the time. While I was dropshipping, I was constantly “copying” what they were doing. They were 🤩 DS Rockstars in my mind.
Super Prix was one of the pioneers of french dropshipping at the time. While I was dropshipping, I was constantly “copying” what they were doing. They were 🤩 DS Rockstars in my mind.
I don’t really remember what the support ticket was about, but one thing went to another and they asked me - “Can you integrate post-purchase upsells?”
I paused for a moment… I thought about it… and I told them that I’m making a checkout product and that it should be possible to add post-purchase upsells. They replied:
  • “We need a one-page checkout page with post-purchase upsells. How much will it cost us?”
With a little bit back & forth I estimated they would be spending ~€5k/month per month if I managed to get all of their shops on Checkout X. I asked them to prepay €5k, so I’m sure they won’t change their mind later on.
  • They agreed and sent me the €5k via PayPal.
  • I WENT NUTS 🤯🤯🤯
€5k / month was huge for me:
  • It meant I can work full-time on the project without worrying about paying the bills.
  • It meant that Checkout X will be making 3X more than Upsell X from a single customer.
  • I honestly thought - “I made it”.

Launching the app

One of the first iteration for one of the stores of the Super-prix.fr guys - they wanted a custom design for their store. I know it looked ugly - but it converted well. Those guys are pioneers in making sites convert.
One of the first iteration for one of the stores of the Super-prix.fr guys - they wanted a custom design for their store. I know it looked ugly - but it converted well. Those guys are pioneers in making sites convert.
When we first talked, I promised the Super Prix guys that their custom one-page checkout with post-purchase upsells will be ready in 2 months and I sticked to it.
2 months later I visited them in 🇧🇪 Belgium and prepared to do a test-launch on one of their stores.
We launched it together… 🚀
It was a shit show… 💩
They disabled the checkout after 2 hours… 🤦‍♂️
The checkout was working great - I had tested it from end to end. What didn’t work was all of the services that relied on the checkout. Here’s a list of some of the things that didn’t work:
  • Metrics
  • Any pixel tracking ( Facebook Ads / Google Ads / etc )
  • Abandoned checkout emails
  • SMS abandoned cart
  • FB Messenger abandoned cart ( it was a thing back then )
  • Refunds
 
There was no way that they could use the checkout until all of their services worked - I had no idea how I missed all those things. Worse, I had no idea how to fix those problems. I promised to find a solution somehow and had a long trip home.
 
It took me the whole summer to solve most of the issues.
Some things I managed to integrate, some things I had to rebuild myself, but in September of 2018 we finally launched on one of their stores. Then we added more.
Finally, the app was live. 🚀

The first 100 customers

One of the first designs for the mainstream Checkout X product
One of the first designs for the mainstream Checkout X product
Once the SuperPrix guys onboarded all of their shops and things were stable ( relatively 🙄 ) I started working towards getting more customers.
At the time, every customer had to be onboarded manually. I had to explain to them all the weird stuff that the app brought with it ( custom metrics ; integrations; etc ) and I had to add custom code to their shop.
Slowly but surely I got to my first 100 customers using the following channels:
Bluesnap partnership
At the time Bluesnap got kicked out of Shopify ( not sure why ) so they referred us to prospects that were on Shopify.
We had a lot of issues in our partnership, merchants were signing up for a payment provider and they were forced to use a custom checkout with all it’s quirks ( and benefits ).
The thing was, Bluesnap was selling their benefits, not ours - so the merchants were confused on why they had to use an alternative checkout.
It was tough but I got some of my first customer from them - I guess it was worth it.
Negative virality
For most products - being viral means that your existing users would recommend it to their friends. With Checkout X it was the opposite:
  • Competitors of our customers were copying what our customers were doing.
  • When they saw a custom one-page checkout on their stores - they went nuts.
  • They needed to know how is this possible on Shopify? 🤔 How can they have it on their shop?
  • We left breadcrumbs to Checkout X
SuperPrix didn’t allow us to put our logo on their checkout ( which we did later on other stores ) - but they didn’t say anything about the code.
So we spammed our page source and console with marketing messages. And it people found it!
notion image
When you opened the page source or the console you would see that Checkout X is powering a certain checkout
When you opened the page source or the console you would see that Checkout X is powering a certain checkout
Merchants copying the stores of our customers was the main acquisition channel for Checkout X until the end.

Scaling to 6000 customers

Over the years we eventually reached 6000 customers. Which isn’t a ton, but with €100 average revenue per store, we reached a record of €600k monthly revenue 🤯
We never ran paid ads.
We were never listed on the Shopify App Store.
All of our customers came from two channels:
  1. Virality - Merchants copying each other and merchants recommending us
  1. Affiliates - We were paying commissions to whoever brought customers
The key to a good affiliate program
Our affiliate program was simple. You bring a customer and we pay you 15-25% of the revenue we make from that customer. Forever.
Some Youtube videos advertising Checkout X
Some Youtube videos advertising Checkout X
That’s pretty standard. The reason why our affiliate program worked so well ( brought around 40% of our customers ) was because affiliates actually used our product and liked it.
All of the affiliates we onboarded approached us first.
Later on with Vanga AI, we tried replicating the same strategy and it was much harder, mainly because the influencers that we targeted never used Vanga AI before.
✌️
I’ve worked with hundreds of SaaS influencers over the years and I’ve found success with them on multiple apps. If you need help with employing influencer marketing for your SaaS feel free to reach out.
If you want influencers to want to work with you - make sure they use your product and they find it useful. Otherwise it’s an uphill battle.

Scaling the team

I started Checkout X alone. I tried attracting a co-founder on a couple of occasions but things just didn’t work out.
I had to do design, programming, marketing, sales, administration, etc by myself.
It was a lot of work and there were a lot of challenges, but there was no one else to do it and I didn’t want to worry about paying someone’s salary without being sure I can afford it.
I wanted to wait until the right moment.

First hire

Around a year after launching, I’d gotten to around 100 customers and onboarding/supporting merchants was starting to become a hassle.
I decided it’s finally time to make my first hire - a CS rep 👩‍💻.
I hired Karolina. She had the following responsibilities:
  • Onboarding customers ( adding javascript to their code, debugging it, helping them set up their payment methods & design )
  • Supporting existing customers
The moment I hired her we both realised that:
  • She has no JS knowledge so she can’t onboard merchants
  • There is no admin panel to support the customers - everything was done through the Rails Console ( programmer tool )
We had to do a lot of work before we can do the work.
For the first month all she did was learning basic coding skills while I dropped everything else and started implementing an admin panel.
Our first ever team retreat in Batumi, Georgia 🇬🇪
Our first ever team retreat in Batumi, Georgia 🇬🇪

Hiring developers

As the project kept growing I found myself being overwhelmed with all the 🔥 fires I had to put out while trying to integrate more and more services with the checkout ( every customer has a slightly different stack for payments, marketing tools, etc ).
The checkout is a crucial piece of technology - it’s where the actual purchase happen. In order to make everything work flawlessly, we had to build a mini shadow-Shopify that runs on the background. Checkout X handles products, customers, discounts, taxes, payments, analytics, themes, emails, integrations and so on. It’s a huge product.
I desperately needed help and I finally had some good cashflow so I decided it’s time to hire some devs. As I wanted flexibility and wanted to hire fast I just went on Upwork and started looking for Rails Devs that had experience with Shopify.
Almost instantly I managed to hire Niko & Vlad who were just finishing another Shopify project - it was an instant match. So I just fully booked their calendar.

Hiring a CDO, CTO, more devs, support, partnerships

Snapshot of some of the team members - our WooCommerce launch party in Sofia, BG 🇧🇬
Snapshot of some of the team members - our WooCommerce launch party in Sofia, BG 🇧🇬
We were always very conservative with hiring - we never wanted to be a big company. My thinking was - wherever there is a repeatable batch of work that can be allocated to someone - we’d look for such person.
  • Someone needed to do constant iteration over our UX/UI - We hired Stoyan as our CDO
  • Tech complexity increased and we needed someone to scale our technology & dev process - We hired Ventsi as our CTO
  • We needed more dev power - We hired Alexey, Gokhan, Hristo, Valyo, G1, G2, Krum, Svetlin,
  • We needed more support & onboarding agents - we hired Ksenia, Lucian, Daya
  • We needed help with partnerships & marketing - we hired Jindra, Misho, Tina
The highest headcount we had a at a particular time was 16 people - all remote 🇧🇬🇬🇪🇷🇺🇵🇱🇬🇧🇺🇦🇷🇴🇨🇿
All those guys & gals were awesome every day and working with them was super enjoyable. I always had the idea I’m goofing around with friends, never felt like boring work.
Thank you for all the awesome moments - Checkout X team. You guys were awesome 🙌

How Shopify killed our business

Now, let’s be clear on something - Checkout X was born out of wedlock.
Control over the checkout is the centerstone of Shopify’s business.
It allows them to:
  • Push their payment solution - Shopify Payments
  • Push their fulfillment solution - Shopify Fulfillments
  • Push their “marketplace” app - Shop Pay
  • Collect commissions from other payment providers
  • Collect 0.5%-2% revenue commission on stores that don’t use Shopify Payments
I was never so naive to believe that they’ll just let me go around forever, piggyback on their platform and reap most of the benefits. Even though what we were doing was not forbidden - it was clear that Shopify would disapprove of it.
My main logic was always - as long as we’re not breaking Shopify’s Terms of Service, we’re not doing any harm to the merchants.
Were there ways in which we could co-exist in a non-parasitic relation with Shopify achieving all of their checkout objectives and collecting all their revenue? - yes!
We’ve made such proposals to them, but they decided it’s easier for them to get rid of us.

Checkout was a grey area in the beginning

When I started building Checkout X there were no rules against such solutions and there were already similar products built by other companies - most notably Bold Checkout, so I decided to give it a go.
At the same time - as I mentioned, I expected they won’t be happy with the solution so I never bothered applying for the Shopify App store.
One crucial mistake I made - I didn’t create a separate partner account so the Checkout X unlisted app was on the same partner account as Upsell X.

Spring of 2019 - Shopify changed their rules

In the spring of 2019 there was a ToS update that said building public checkout apps is forbidden unless you get a written permission from Shopify.
We contacted Shopify ASAP and they connected us to a rep who replied in an email - “you’re allowed to do that for now”.
notion image
Thank god we fucking did that! 🙏
A week later another Shopify rep sends us an email telling us we have 3 days to tell our customers we’re stopping the service because of breaking the ToS.
We had to react lightning fast and show screenshots of our other email communication and thankfully this agent didn’t delete our app - close call.
notion image
⚠️
 Remember: A Shopify app is always a single-click away from being deleted from someone that works there. Even if you got a permission written permission from somebody else.
After this communication - came silence. Nobody told us anything. 😴
So in the summer we decided to go to Toronto, Canada 🇨🇦 and meet the Shopify team in person.
Me and Karolina @ Shopify Unite 2019
Me and Karolina @ Shopify Unite 2019
Shopify Unite was a great event.
We managed to meet Jason in person and he was pretty cool - he told us not to worry, that they’re thinking of ways to make what we do possible within the checkout and that they’d be communicating with us what’s happening.
They also announced they’re working on native Post-purchase upsell APIs while we were there.
But in the end - we achieved nothing. There was no communication on what we’re supposed to do or what to expect.
We just kept operating in the dark waiting for something bad to happen to us.

January 2020 - We get locked out of our app

One day I get this email:
notion image
I had mixed feelings. I was starstruck ( Harley is an idol for me ) and scared at the same time.
I had a call with Harley and he was pretty nice:
  • He told me in plain words they don’t want us to continue operating and that they’re locking our API key for new installs as we speak.
  • He told me to wait for “the new checkout APIs” that will be coming in the future and that if we cooperate we’re going to get early access.
And just like that, we could no longer onboard new customers…
There was just one thing though…
The new Shopify ToS said the following:
"not use an alternative to Shopify Checkout for web checkout or payment processing, or register any transactions through the Shopify API, without Shopify’s express written authorization. This Section 2.3.18 only applies to Public Applications.”
So… theoretically we could always make private apps? 😅
ℹ️
Private apps means that each merchant can create their “own APP” just for their shop and send us their API keys. It’s pretty much the same, but it’s designed for shops that need to make something custom just for themselves. In simple words: it’s a loophole.
We had a choice:
  • Option A - Stop what we’re doing, downscale the business and wait for the new APIs. ( They eventually launched 1-2 years later )
  • Option B - Make Checkout X work with Private Apps. Keep onboarding new merchants. Anger Shopify & disappoint Harley 😢
I chose option B.
The ToS allowed it and that was the only realistic option to continue operating as a business.
We kept onboarding new stores and Checkout X kept growing.

April 2020 - Shopify hijacks Upsell X

A while later, Shopify saw what we were doing with the private apps and decided to block our partner account - which held Upsell X.
Initially they quoted violation of the Partner Program Agreement and Terms of Service, but when pressed further they admitted we’re not breaking their ToS.
notion image
 
As Checkout X was using private apps at this point, the only result was that they locked us out of Upsell X and we couldn’t support it anymore. Even further - they kept charging merchants for Upsell X - but we never received those payouts.

January 2021 - They finally changed their ToS

At the end of 2020 they finally changed their Terms of Service. No more alternative checkouts, not on Public apps, not on Private apps.
It was time to stop:
  1. Breaking the ToS meant our merchants can be banned ( and lose their business ) because they’re using our service.
  1. We were tired of being treated like parasites 🐛. We invested millions in bringing a top-notch checkout experience to Shopify, which our customers loved (and Shopify copied in some cases ) - at the end all we got was a constant hostility.
We talked to Shopify once again - they weren’t interested in any collaboration. So we agreed to stop onboarding new customers, they agreed to let us support current merchants.
We announced the news, gave people 14 days heads up and closed installations.
For good.

Aftermath

There were so many people asking us to onboard them after the change, it was heartbreaking. We had to say NO to new customers literally thousands of times. 💔
Some merchants even created multiple Shopify stores, installed Checkout X before the close-off and started selling Checkout X enabled stores after the change. 🤯
Shopify also dedicated some of their employees to pretend to be desperate Checkout X customers and beg our support to let them in. Not sure if I should be proud or annoyed by such pitiful actions.
Checkout X is still operating today. We still support Shopify merchants that installed the app before the closing of the installations, but we haven’t onboarded new ones for the past two years.

Porting Checkout X to WooCommerce

The obvious move to survive the Shopify ban was to open Checkout X for other platforms. We tried. We spent way too much time porting Checkout X to WooCommerce and supporting both Shopify and WooCommerce simultaneously.
The project was a disaster. 🤦‍♂️ It took us much more dev resources than we planned initially and at the end we couldn’t really market it well.
WooCommerce is a very different platform from Shopify, so Checkout X wasn’t the right product for it. The platform has different needs ( it has one-page checkout & upsells ) and plugins there are expected to work differently.
We have some customers on WooCommerce but it’s nothing like Shopify.
We were so cocky because of our success on Shopify that we never stopped to think if anyone on Woo needs our product.
We haven’t tried other platforms.

What could have we done differently?

Pain + reflection = progress. Right?
Checkout X was ( and still is ) a wild journey 🎢. I know that some choices I made were good, some weren’t. Looking back there were a couple of ♟️ key moves we could’ve played differently.

Fundraising

We had multiple opportunities to fundraise. I had the chance to speak to some world-class VCs and I had tremendous support from the Bulgarian startup ecosystem. ( Thanks to everyone for the opportunities. 🙏 )
I always saw Checkout X as a limited-time-window opportunity and honestly I couldn’t see a future different to what happened to us. ( Maybe that’s why things turned out this way )
The reasons I didn’t want to take funding were:
  • I didn’t want the investors to lose their money on me
  • I didn’t see how funding would solve any of our problems
  • I didn’t want to be stuck building Checkout X beyond Shopify, just because we have money in the bank
  • I wanted to be able to cash out and leave at any moment
Looking back, maybe if we managed to get the right investors, they could’ve helped us lobby our way out of the situation with Shopify. Maybe not.
I believe VC funding is an amazing instrument that enables innovation, but I never saw fundraising as an objective to be chased at any cost.

Acquisition

For some reason everyone asks me if Shopify offered to buy us - no they didn’t.
They didn’t want to have anything to do with us.
We had one acquisition offer ( from another company ) - I declined it because it was too low.
We didn’t talk further.

Suing Shopify

One advice we got was to file an antitrust case against Shopify in a European Court.
Theoretically, we could’ve argued that Shopify uses anti-competitive practices to get rid of their checkout competition. Similar to what Spotify & Epic Games did against Apple.
While that might’ve been a viable option, honestly, I don’t have the balls to pick a legal fight with a multi-billion corporation.
On top of that, I believe that crying to the regulator is a bitch move. After everything, I still believe that Shopify built their platform and they should be able to do whatever they want with it.

Ignoring the Shopify ToS update

One thing that I probably would’ve done differently is not complying with Shopify’s updates.
If they want to harass and ban their own customers for using an alternative checkout - that’s their decision - they should’ve dealt with the consequences.
Instead, we helped them by becoming our own gatekeeper and refusing to onboard new merchants.
But again, I was this 25 year old, just made some money for the first time founder and I was afraid. Shopify has made numerous legal threats against me along the way and I decided to fold, get my profits and move on.

Conclusion

It’s been a wild ride. I believe that I’m leaving this adventure as a winner, as I find myself with more experience, contacts, recognition and finances than when I first started.
At the same time, it’s sad to see my best work so far slowly dying away and I still can’t get rid of the extreme anxiety I felt with Shopify looming over my head for the past years.
If I sound bitter - I’m not. I like Shopify. I own Shopify stock. I believe they’re completely dominating the e-commerce platform space and none of their current competitors stand a chance of catching up. I know they did what’s best for their business and this is the end I expected.
Still, I also believe it’s important to share stories that aren’t all 🌈 rainbows and sunshines.
At the end - I’m happy.
I had some wins, I had some fails - it’s time to move on.
It’s time for step 3 of the masterplan 😈

I hope this story brought something to you. I plan to share my startup experiences on a monthly basis. If you want to be updated when I post new stuff, subscribe to my newsletter or follow me on Twitter / LinkedIn.