Vincent Ritter

Sublime Ads - Billing galore

Not going to lie, when I first thought of integrating billing, I thought it should be relatively straight forward given that my chosen payment provider would do everything for me.

Unfortunately that was not the case. I won't go into more detail here as I already wrote about it. Long story short, I went and integrated Stripe.

Tax nightmare

When you're a EU based business, things get complicated. Invoices have to be correct, they need to show the correct data and on top you need to make sure VAT is paid correctly for customers based in Europe. And if you want to make sure to charge customers the VAT rate for their country, things get even more complicated.

As I had to integrate payments myself, see above, I had to make sure I have all the data needed so I can keep the accountant and relevant tax authorities happy. As a one person business it's an absolute nightmare... but it has to be done. There is no choice. There of course was an easier option, but that would lead to a bad customer experience - so I decided not to do that. Instead I built a system that I can work with to file my proper returns, without doing too much manual labour.

So... let's get started with the lowdown.


Sublime Ads is a subscription based business, which means it won't be free. I want to build something that I can sustain long-term, whilst at the same time sustain my own business models.

I decided that I will keep things super simple and there will be only one price to pay. There won't be upgrades or "team" account upgrades etc... Just one small monthly price.

At the start, I will keep it at a lower price point - gradually increasing the price as I go and add features. For anyone signing up early will always benefit from the price when they signed up (if you haven't cancelled). So no upgrades, no taking away features because you're on an early plan. Too many times have I seen that bullshit. That's not going to happen here!

Whilst I want to announce this next bit in a dedicated post, I'll give a hint here:

If for some reason you sign up but find yourself in a circumstance where even a small monthly payment is too much, it's my promise that I will waive fees for you - either by a discount or just a couple of free months. I know what it's like, I was there... and perhaps even will be there - nothing is a given. We are all human. We all have problems. And we all sometimes have money problems.

Taking a payment

I didn't want to take shortcuts with the billing section, even though it's something you touch once and then never look at again!

When you first start, you'll have a 30 day trial - no questions asked and no limits - no upfront credit card information needed. You don't have to pre-authorise your card when you walk into a shop, so you shouldn't have to do it on a web app - those things are only in place for people that forget at the end to cancel! Nothing like that here I'm afraid.

When you're ready, you can go over to the billing section. Depending when you do fully convert to a paid subscription, it will apply any trial days remaining and charge you at the end, or if there are less than 2 days remaining, or it has expired, it will go ahead and charge you straight away - for one month.

Filling out the form is straight forward, just your name and your billing address. I'll need this, because of my EU business presence. Plus it makes it more secure for me.

If you're based in the EU, I'll work out the correct VAT rate on the fly. This will get applied to the base price (to be decided).

Here is an image of what shows up as you enter your country and it's within the EU. In this case 23% on top the base price. I also give you precise information of the breakdown. I don't want to cheat you.

I do have the facility to add a VAT number to your account. This is an automatic process and will verify accordingly if it's valid or not. I'll mention more about that below, however here is what that would look like:

(Note that I changed my own VAT number to something random)

If you're in the EU, you know what that means.

Next, we want to subscribe. Payments are taken via the Stripe Checkout, as I quite like it. Stripe then talks to the web server via signed Webhooks. All quite cool in my eyes and it's been awesome working with the API.

Here is the subscribe button:

There is a little bit of information below the button. That's there just to confirm when payments will start (when on a trial) and also some more info about payments and EU VAT.

We then land on the checkout page:

I love the UI here and it's very clear what you're paying for. Stripe will also make sure to collect payments if a European card ever has to re-authorise later on. It's called Strong Customer Authentication, also know as SCA, if you're wondering. Not something I wanted to integrate as well. Stripe will take care of it and do the necessary things and talk to my web app at the same time. This probably saves me a good few days.

There were a few payment gems available that I could use for this, but I built it myself - because that's how I learn. Not to mention I need a few extra fields for reporting purpose.

You're subscribed!

Success! You're in! Now the fun starts.

The billing page is updated accordingly and gives you a few more things to do. First up is a confirmation of where your account is standing:

Simple enough. The wording changes depending if you're still within the trial period or not. Just a subtle change.

From there you'll be able to update your card details. I'll need to add the ability to change your address also... now that I think about it!

As you've subscribed, invoices will now become available. I left this quite simple but informative enough:

Depending on the status, the colour changes. If I ever refund one, that will also be reflected here. Pressing on "View" will go to a special link on Stripe where you can grab what you need. Stripe will also handle emailing these to you.

Oh, and everything of course is encrypted... here is my local data for invoices:


If you have a VAT number, you can get in touch so I can add it to the account. Once active, and verified, on your account, you'll get an email from Sublime Ads saying it's all there:

Again this is just specific to EU based customers. Every individual comes in different sizes and shapes and thought it would be useful.

There will be an extra section in your account too, just to confirm it's there:

I want to CANCEL

I got you covered here too, nothing too exciting here and the screenshot will do what it needs:

Again I want to concentrate on the wording more. Pressing cancel will in effect stop the subscription from renewing at the end of the current billing cycle.

If you decide to resubscribe, you can do so too:

Again the wording changes accordingly on the current account status. Resubscribing is as easy as pressing the button and will give you a bit more info before you commit.

If you do cancel, the app will tell you when it expires in the header too:

I won't email you to bug you about it. I get it!

Closing thoughts

I spent 1.5 weeks more on billing than I wanted to, but I'm super happy with the results and the flexibility. Sure, there will be edge cases, but I'm not too worried as the web app is manageable and I can fix things, where needed, quickly.

The design is still simple and I'm happy with the wording throughout the billing section. Again I'll tweak as I go.

Billing is a feature, so it was important to get it right. Without billing, there will be no web app... no business. I'm happy I tackled it now rather than later on.

For the next week I'm going to be finally working on categories and ads themselves. Pretty excited.