Multi-subscription app (SaaS)

Hey guys,
I wanted to show you something pretty cool we just built for a client at https://lowcode.agency
We built an app where clients can buy different subscriptions, and we handle the upgrade/downgrade pretty gracefully. It’s an objectives and key results tracking app, in a SaaS model, where small business owners can buy a membership based on how many employees they have.

Users see the different subscription plans, each with a link to payhere:


As soon as they buy a membership, they can add their employees, who receive an email welcoming them to the app:

Not only that, but we’re also allowing the business owners to configure a weekly email reminder for their employees, (each business owner can choose their preferred day of the week) reminding employees to complete the weekly questionnaire:

The admin can see all questionnaires from all team members, but we also want to analyze trends on certain questions, so we have a couple of screens with charts for trends:


Probably the coolest thing about this app is that when a team grows, the admin/owner can’t add more users, and show the following tab:

They can manage their team members, or upgrade their membership.
They are redirected to a screen that has information about their current membership, and a button to upgrade:


We have a pretty complex integromat scenario, that not only updates the user’s membership to acommodate more employees, but also does a partial refund of the “old” subscription and starts the “new” subscription:

It has been pretty exciting to be able to build a SaaS product in Glide, leveraging tools like Integromat and PayHere to build a very robust, custom solution, using both Glide Tables and Google Sheets.

Check out some other apps we’ve built at Low Code Agency - your app faster and cheaper with no/low code

12 Likes

Looks great @eltintero ! Great job!

2 Likes

Oh wow! What a complex flow :hushed: @ThinhDinh what does this HTTP action do?

1 Like

The HTTP action is the one we’re using to refund the “old” subscription. Complex as hell.
We’ll make @ThinhDinh a certified expert in integromat as well pretty soon, I’m sure.

3 Likes

It goes like this Lucas.

Firstly the webhook takes the info about the payment, then lookup the email in the Sheet to check if the email has already had a subscription in the Sheet (one can only have one subscription at a time).

Then we divide it into 4 branches.

1st branch top-down: If the search founds a row (row number exists) and status is success and plan name of webhook is the same as plan name of the search, then we classify that as a new payment cycle and upgrade the row with the latest payment timestamp and amount paid, then mark the status as “Active”. (in case it’s a deactivated one now being activated again)

2nd branch top-down is if the search founds a row, but the payment is unsuccessful/status of subscription is cancelled, and the name of webhook is the same as plan name of the search, then we classify that as a deactivation/cancellation and update the status in the Sheet to “Inactive”.

3rd branch top-down is if the search doesn’t found a row, then we add a completely new row with the user’s email, payment timestamp, plan name, subscription ID, payment ID, amount paid and status being “Active”.

4th branch with the HTTPS is where things got interesting. This is when the search founds a row, the payment is successful, but the plan name of the webhook does not match with the plan name found through the Sheet search.

Then the steps are: 1st HTTP - cancel the old subscription by sending a DELETE request like this, then 2nd step is issuing a refund through a POST request like this, finally updating the row in the Sheet with the new subscription information (plan name, last payment, subscription ID, payment ID, amount paid).

Subscription ID is needed for the cancellation HTTP module, payment ID and amount paid is needed for the refunding HTTP module.

7 Likes

We have a 2nd Chuck Norris aka @ThinhDinh :hushed:

Battle side by side with another Chuck Norris aka @Darren_Murphy

4 Likes

Haha when I was young I want to be like Jeff and Darren when I grow up!

5 Likes

but, but, but… I wanted to be like Thinh and Jeff, and Lucas! :joy:

4 Likes

I mean it’s rocket scientist level to be named for a method mentioned a lot around here. Pires - Petitto trebuchet method cough cough

4 Likes

This is awesome. I am building pretty much similar SaaS app for client having various subscription plans but could not figure out how to automate subscriptions using integromat.

This will be useful for me to understand the flow. Thank you

2 Likes