How to Accept Credit Card Payments as a SaaS company in Singapore
July 29, 2014
One Sentence Summary: use Worldpay as your payment gateway and Chargebee to manage recurring billing. Read on for more details.
I think there should be more SaaS startups in Singapore. In Asia in general, actually.
My business is a SaaS social media software called Beatrix. It earned revenue from day 1 and is now profitable and growing. The business never took a cent of outside funding and I'm free to run the company as I wish, with no external stakeholders.
Charging customers a monthly subscription for a software service that they value is one of the fastest ways to create a sustainable business that I can think of.
However, in Asia while there's plenty of consumer-focused startups with either no clear business model or a model that requires massive scale to become sustainable, there's not a lot of folks simply making software and charging money for it. For the sake of the ecosystem, I think this must change. The ecosystem needs sustainable tech businesses, not a continuous cycle of consumer apps raising funding, launching and fizzling out due to unsustainable business models.
I hypothesise that one reason there aren't many Singapore SaaS startups is because anything involving online payments in Asia is a pain the ass - and recurring payments an even bigger pain in the ass.
The purpose of this post is to tell you how I set up SaaS-style recurring billing for my company, in the hope that it encourages more Singaporean entrepreneurs to consider SaaS as their business model, and also to show you that it's not too difficult. This post is not an explanation of all the different options out there, it's just a play-by-play of exactly how I set things up for my company.
When you're a brand new startup, PayPal is a perfectly acceptable solution. PayPal has a subscription feature that is easy to set up and is a great way to validate your first set of customers. Eventually though, you'll want to switch to a proper recurring billing system where you capture credit cards. The main reasons for this:
- ability to control the checkout flow
- remove the requirement for PayPal (some customers are just averse to it)
- greatly increase flexibility
That last one is a bit vague but in involves a few different things such as the ability to easily upgrade / downgrade customers or add one-time payments to a customer's subscription (e.g. buying an add-on to your software) without them having to re-enter their credit card details or go through a PayPal checkout flow again.
Which Payment Gateway?
We use Worldpay as our payment gateway. It comes with an internet merchant account and remits automatically to your corporate bank account at regular intervals. Other payment gateways might require you to have your own merchant account, which would involve additional discussions with your bank - a most likely lengthy process that I just wanted to avoid.
Worldpay charges various fees for their service. There is a set up fee, an annual fee, transaction fees and remittance fees.
Why so many fees? Having been a Worldpay customer for a few months now, I have to say that their customer service is very good. Unlike PayPal, with Worldpay it's pretty easy to talk to a real human being for customer support and my emails generally get replied to quite quickly. And where payments are concerned, that is a peace of mind I'm willing to pay for.
Which Recurring Billing Software?
We use Chargebee as our recurring billing software. They charge a monthly fee and provide all the logic for capturing credit cards, handling the recurring billing, and more complicated stuff like upgrading / downgrading customers to higher or lower price plans, or adding one-off payments to an existing subscription.
I've found Chargebee to have excellent customer service. Krish the CEO and co-founder in particular was extremely helpful in getting me set up not just with Chargebee, but also helping me navigate some of the Worldpay setup process too.
Things You Will Need
The Worldpay setup process may vary for you, but at the least you will need:
- About 3 months of patience :)
- A registered company in Singapore
- Your company bizfile PDF from the ACRA website
- Company bank statement (not online version) showing company address and account number etc, no more than 3 months old
- Personal bank statement (not online version) showing personal address, no more than 3 months old, signed "Certified True Copy" by your bank (they should be used to doing this)
- Copy of passport or NRIC, signed "Certified True Copy" by a recognized authority (more info below)
- About $600 USD for set up fees etc
Worldpay Account Setup
You can apply for a Worldpay account online. You'll have to pay the setup fee and annual fee up front, then the due diligence process begins which is a manual process of emailing back and forth. Some points to note when you set up your account:
- You do not need Worldpay's subscription billing service, since Chargebee handles the logic for this
- You do need Worldpay's XML Direct feature, since this is how Chargebee integrates with Worldpay
- You may need to explain to Worldpay that you will be using Chargebee (Worldpay wants to know why you need XML Direct). Chargebee will help you provide proof of purchase for this purpose, more info here.
At some point Worldpay will give you access to your control panel. In your control panel you'll find the XML Direct password needed for integration with Chargebee.
Worldpay Due Diligence
This process took a few months for me, which I hear is not unusual. Worldpay will ask you for the documents outlined above and depending on how satisfactory they are, you may need more documents or alternative documents.
In my case the process was held up by my certified true copy of my ID. This can be done by a lawyer or government officer or other person of recognized authority. I got my accounting firm to certify it for me (this was on the list of accepted entities), but it was rejected by Worldpay. In the end after some back and forth, I physically went to the Worldpay Singapore office in Raffles Place, with my ID for them to copy and certify in person.
Chargebee Account Setup
Chargebee is a SaaS company and getting set up with them is a simple case of signing up online. You get a test environment and a production environment to work with, so even if your Worldpay application is not yet approved, you can get your startup integrated with the Chargebee test environment.
My integration with Chargebee is pretty basic, but it works well. Here's the user flow:
- Customer chooses the price plan they want on beatrixapp.com
- Customer is redirected to a hosted credit card capture form at Chargebee, which I can tweak the design of
- Card is captured securely by Chargebee
- Customer is redirected back to beatrixapp.com with their new subscription ID as a query string parameter. Beatrix then captures this subscription ID and stores it in the user table for reference.
We can then use the subscription ID at a later point with the Chargebee API, to run various operations such as upgrade / downgrade / cancel etc.
In the final stages of this process, Worldpay will run some compliance checks on your payment page. To speed up the process you can have this already stuff prepared:
- Your payment page should display or link to your refund policy
- Your payment page should display what currency your prices are in
- Your payment page should display the logos of the credit cards you accept
- Your payment page should display or link to your company contact details including email, phone and address
Worldpay Test Transaction
Worldpay will want to perform a test transaction before activating your live account.
However, you can't really do this with Chargebee since the integration only works with live Worldpay accounts. Explain this to your compliance officer and he will:
- Temporarily switch your account live
- Allow you to perform a live "test" transaction (using real money) via Chargebee
- Verify that the transaction was captured by Worldpay
And after that, your Worldpay account will be officially LIVE!
Enjoy running your SaaS business :)