Ludovic Frank - Freelance developer

Create invoices and collect invoice payments automatically for your B2B SaaS (in France)

ionicons-v5-k Ludovic Frank Apr 17, 2024
95 reads Level: Confirmed beginner

Hello there 🙂,

Thank you for clicking on this article, I hope you like it 😁.

Today, we're going to talk tech, but for many of you it's going to be a little less fun than usual, to be able to sell your SaaS in the hexagon, you have to go through the "invoicing" box, the problem is that it can be time-consuming and waste time...

I'd like to take this opportunity to tell you what "B2B" means. I'm sure some of you already know, but just so everyone is clear: "B2B" stands for "Business to Business", meaning that you sell to other companies, not to individuals. B2C" stands for "Business to Consumer".

So, are you ready? Let's get started!

How did I end up with this problem?

ViteUneTable is here, and yes, that's the official name of the reservation application that uses Symfony-UX Turbo.

Anyway, before this application was just a test, another side project that was used by a single restaurant in Nancy, seeing that the restaurant had made it its default way of booking, I started to think about how I was going to modify it to offer it to other restaurants.

You've been able to follow the technical adventures over the last few posts on this blog, but I was also working on various tests to find the best solution for billing and, above all, collecting payments.

A few tests (with Stripe in particular)

Like every developer on the planet, I'm familiar with Stripe, so I naturally took a look at what they had to offer. So I looked at their invoice generation system, the well-known payment system... etc. By the way, on my LinkedIn there's a little video of Stripe Checkout's integration with ViteUneTable. At the time, I was enthusiastic.

But, in the end I don't think it's what I need, I need something flexible. Stripe invoices are "Apart" from my more traditional invoicing. Which in itself isn't a problem, it's totally possible to have multpule prefixed invoicing for a business, but I want all my invoicing to be in the same place, the automatically generated invoices and the others (for feelanciing stuff ... etc.).

Also, I need a lot of flexibility: in B2B, invoicing isn't "one fixed price for all", it depends on the customer's needs, there may be commercial offers ... and so on.

Lastly, you don't do "B2B" like you do "B2C", companies need someone to talk to. In fact, when you look at all the "B2B" offers on the Internet, you rarely have direct access to the price, you have to contact the company to find out more.

Well, that's not quite true, in fact when you're doing B2B, but you're targeting tech companies, it's possible to have a model that's closer to B2C.
However, in my case, my customers aren't techies at all, they're used to the more traditional system.

Axonaut: the French CRM that really works

Axonaut (that's my referral link 😁 ) is a tool I didn't know about and which was recommended to me by a friend 🙂. At first I didn't look into it too much, as I didn't have any "big needs" in terms of invoicing, although as time went by, it became complicated to use "basic software", it made me waste more and more time...

Anyway, back to Axonaut, if I'd had to design an invoicing system for VSEs and SMEs, I wouldn't have done better, there's a lot of functionality, for the moment I'm not using everything, but over time I think I'll use more and more functionality.

When I started looking at Axonaut, I said to myself "I'm sure it's Symfony", why? Because I recognize this method of development, where you focus more on the "product" than on the tech that runs it.
So I did some research and came across this post on LinkedIn, and yes, it is Symfony 😁.

Here are some of Axionaut's features (not exhaustive):

  • Management and creation of quotes and invoices
  • Creation of recurring invoices for subscriptions 😍.
  • Connection with third-party applications to ... collect funds, for example 😍
  • CRM, allowing you to create customer files and track where you are with this or that customer...

There are many more features, which you can see on their home page. We'll come back to them later in this article.

Home of Axonaut Axonaut home page

GoCardless: SEPA direct debits made easy

A few years ago, I mentioned GoCardless, a service that specializes in SEPA direct debits. It's all they do, but they make sure they do it right...

What do you mean, that's all they do?
In fact, they do direct debits, but they think about all the issues surrounding SEPA direct debits, for example if for some reason the direct debit doesn't go through (this has already happened to me once).

If the direct debit doesn't go through, they try again a few days later, based on the data they have. On the other hand, when you use Stripe for SEPA direct debits, if it doesn't go through, you have to pay 3.5 euros, which is a real problem, because the charges are totally unpredictable, and GoCardless doesn't charge you if the direct debit fails.

I've been testing GoCardless for a few years now, using it with certain customers... and I have nothing to say, it works and does what it was created to do.

By default, GoCardless offers a "plan" system that you can use, but in my case, we're just going to use their API... we're not going to create a direct debit from their interfaces, and that's what this article is all about.

Home of GoCardless GoCardless home page

Axonaut and GoCardless connected for a complete system

Now that our two stats of the day are presented, let's see how we can make them work together. I already told you above that we won't be using the GoCardless plan system, so Axonaut will be taking care of our recurring subscriptions... let's get started.

The Axonaut marketplace

Marketplace of Axonaut Axonaut Marketplace

As you can see from the screenshot above, Axonaut offers a Marketplace that can connect to many things. In my case, I connected: GoCardless, Stripe and PayPal.

Connecting GoCardless

To connect GoCardless, you'll need a GoCardless account. Once you've got your account and verified your company, simply go to your Axonaut billing settings and search for "payment by direct debit", there you'll find the little "settings" button.

Direct debit settings in Axonaut Direct debit settings in Axonaut

Follow the simple steps to authenticate Axonaut on your GoCardless account.

Create a subscription

Now that you've got the connection between Axonaut and GoCardless up and running, go to a customer file and (commercial -> directory) and "add an order" in the "in progress" section.

Adding a order in Axonaut Add an order in Axonaut

Once you've created an order, you'll need to create a forecast. In this case, you'll need to choose the automatic debit, the recurrence, when it starts and when it stops.a starts and when it stops (if you want it to stop forever, don't set an end date, as you won't be able to stop it manually yourself when necessary).

Add a forecast in Axonaut Adding a forecast in Axonaut

Here's where it gets interesting: you'll be able to use Axonaut's powerful tool to create a "basic" invoice, which will be regenerated and sent to the customer automatically according to the recurrence you choose.

Automatic billing in Axonaut Automatic invoicing in Axonaut

As you can see here, the first invoice has been generated and the second is awaiting automatic generation. You can modify your invoice template as you go.

In your basic invoice, remember to propose direct debit, so that when the customer receives his first invoice by e-mail, he'll be invited to set up direct debit.

Automatic invoice reconciliation

Once direct debit has been set up, Axonaut automatically detects that the invoice has been paid, and marks it as "paid".

Axonaut bill paid Paid invoice in Axonaut

I didn't have to do a thing - it detected the GoCardless direct debit all by itself.

Quick tip: Import your existing mandates into Axonaut

If, like me, you used GoCardless before using Axonaut, you probably already have mandates signed by your customers in GoCardless.

To import them, simply go to the Axonaut marketplace, then GoCardless, and there you'll find "import GoCardless mandates".

Import GoCardless mandates into Axonaut Import GoCardless mandates into Axonaut

That's it, your existing customers are imported. Be careful, though, to go back into your Axonaut customer files, as the import may import some odd challenges, such as reversed first and last names.

However, if you already had these customers in Axonaut, it will be able to make the link between your existing Axonaut customers and your GoCardless mandates.


This week, we're getting away from "pure" tech, and staying in tech, but more in business management than in "pure tech".
Because yes, in the life of a freelancer / solopreneur, tech alone isn't everything.

Have a great day and see you next time 😁.