Handling subscription for multiple modules with multiple plans

I joined multiple related products in to one SaaS product with multiple modules. Each module has multiple plans. At least free and paid. You could (ideally) activate or upgrade / downgrade each module at any time. Each module has first 30 days of being active on any of the paid plans free.

What would a good system for handling this? I came up with a system that can handle this but it’s quite complex, and by experience, when something is overly complex it means I am missing something.

Does anyone know for any good practice already out there or has suggestion for some simplification that I could do?

(as an additional note small businesses here don’t use CC-s normally, but we all use wire transfers for b2b transaction. WT that comes after the invoice that has to be official etc. (in paper or in e-invoice standard). meaning I can’t charge the customers efficiently for small differences on the spot when they upgrade or change their plans on modules, but would ideally send 1 invoice per month to one user. That’s why I also have options of 3 interval for payments, 1,3 and 6 months.)

Have a look at the product below. They also have multiple modules and kept things simple by allowing the first two users in for free and charging after that:


1 Like

Thanks a lot. It’s good to see at least one example with modules to check for basic directions they went in. Using number of users for determining free/paid usage is a good idea as is simplifies it all (for the user also). My app isn’t yet multi-user, but it’s in plans to add that. I will think if I can make some other similar parameter.

Otherwise my module selection looks like this. (It’s in slovene language). On the left are names of modules, select box is for selecting the plan “disabled/free/paid”, below I have two lines for discount per number of paid plans and selection for payment interval which brings additional discount if it’s 3 or 6 months. At the bottom is the summary “Payment of 32,41 every 3 months”:

I intend to handle changing of plans by canceling their current “period” and returning the unused amount relative to days remaining to their account. And creating a new period with new modules and price. Then we bill them for difference of their bill - sum(returns) at the start of each period.

One simplification that I needed to be made (it doesn’t make sense otherwise) was the feature where each plus module has it’s separate free trial period. It clashes with the choice of payment interval (which can be 1,3,6 months). In case user has more than 1 month set for payment interval you can’t really not charge them anything first month and start charging them the second one.

So now you are if “trial” period for first month after signup and in that period you can use any module free of charge. After that all are billed immediately.