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.
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:
Create a small Shopify app and get some customers to get a feel for the market
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
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?
Was Oberlo ( app for sourcing products / delivery of my orders )
Was some custom javascript I wrote that was offering small upsells before checkout. Jackpot! 🎰
So, that’s how Upsell X was born:
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:
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
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
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
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
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!
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:
Virality - Merchants copying each other and merchants recommending us
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.
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.
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
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”.
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.
⚠️
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.
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:
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.
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:
Breaking the ToS meant our merchants can be banned ( and lose their business ) because they’re using our service.
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 😈