How to create discount coupons for your Bubble app customers using Stripe

Offer discounts to incentivise customers to move from your free plan to your paid plan.

The Problem

You may have created a great new app with a free plan, and want to offer a more feature rich plan, which you charge money for. This is a common model and the one I have for my cleaning schedule automation app RosterBuddy.app. I want to incentivise the current and future FREE plan customers to upgrade to the PAID plan, and I think vouchers would help.

The Approach

I now have about 100 customers on my Free plan and I’ve recently deployed the new ‘Team’ plan, and I’d like to do the following:

• Publicise to all my free plan customers that the new plan exists

• Offer each of these customers a 100% discount voucher for 2 months of the Paid plan so they can try out it out

I think this has several benefits

• The current customers are rewarded for their early adoption of the free plan

• Customers on the free plan get to experience the additional features of the Paid plan

• Knowing about the new features may incentivise these customers to pay to remain on the Paid plan

• Building this system effectively implements a ‘Free Trial’ mechanism

• Setting this system up allows me to expand the offer to other contacts as part of fresh marketing activities

Assumptions

Stripe docs

Reading through the Stripe docs, it seems that ‘coupons’ will provide a method to discount a subscription:

Coupons in Stripe provide discounts on recurring charges. Like subscriptions, coupons allow for great flexibility in how you define and use them. They can:

  • Apply to every invoice, just one invoice, or for a certain length of time

  • Reduce invoices by a percentage or a flat amount

ref : https://stripe.com/docs/billing/subscriptions/discounts

I’ll set up a 100% discount coupon which lasts for two months. I commonly see 1 month free, but I like the sound of offering ‘extreme value’, so I doubled it.

The Logic

A discount implies a reduction in cost, and cost is only relevant to a paid plan.. meaning, for a customer to redeem this coupon, they’ll first sign up to the paid plan as part of applying the discount coupon code, which reduces their cost for 2 months to $0, but importantly, they are still signed up to the paid plan. They’ll need to input their credit card to go through this process which is a potential point of friction, but I’ll stick with this set for a few months then assess.

This is a recurring plan, which will automatically want to renew itself, with real $, so we’ll include a method to remind the customer that the free period is coming to an end, which may result in a percentage of them signing up beyond the 2 month free period.

If the customer has used my app for 2 months, and if it truly provides value to them, then it ‘should’ be an easier decision to make to allow payments to start.

Bubble

In my Bubble app, I have an existing Action which does the subscription activity. (This is all detailed in my free article on how to set up Stripe with a Bubble app )

So, all I need to do on the Bubble end is enable one checkbox, labelled:

 ‘Allow promotion codes’

Seriously.. that’s all you need to do in Bubble. Amazing!

Stripe

In Stripe, browse to the Coupons section

Note: In Bubble, set this up first in Development mode, so initially in Stripe make sure you have enabled the Toggle to select test stripe data. We’ll replicate this config in 'production mode’ later on.

Click the ‘Create a test coupon’ button

In the Create a Coupon screen, we configure the discount how we’d like it. My setup will be as per:

Name: 2 Months Free of the Team Plan

Type: Percentage discount

Percentage Off: 100%

Apply to Specific Products: Yes

Product: Team

Duration: Multiple Months

Number of months: 2

The remaining fields I’m leaving as their defaults.

Click Create Coupon

Promotion Codes

It seems that in Stripe, the Coupon is the configuration that contains the discount, and a separate ‘promotion code’ is the text you share with customers to access the discount.

Click ‘Add a promotion code’.

I’ve configured mine like this:

Click ‘Add a promotion code

How it looks

Back in my Bubble app, new users are by default on the FREE plan, which is called the Roommate plan. For any customer wanting to remove some of the constraints of this plan, they can click ‘Upgrade to Team Plan

They get directed to Stripe, where they see the cost of this plan, and we now see the ‘Add a promotion code’ item, where customers can type in the code:


Want access to more articles like this?

Did you know that some of my posts are published for paid members only? Access all past and future exclusive content by subscribing:


Typing in the Promotion code and Clicking Apply makes the billable amount $0.00

Also, the credit card fields are required, which is somewhat of a hurdle, but also useful later on if customers decide to remain on the plan.

Once the credit card details are completed, the Subscribe button works:

The Result

The customer is redirected back to Bubble, the plan is updated to Team, and the Payment Status is displayed.

Note: the plan will ‘renew’ 1 month later, but that invoice will be a $0.00 invoice.

You can locate the upcoming invoice for this customer in the Stripe portal to confirm.

That’s it.

That’s all we need to do in order to set up coupons within Stripe, and then promote access to this discount by telling customers about the Promotion code

Note: IF a customer had previously signed up to this specific paid plan, and they try to use this voucher code, they’ll get an error. This is by design, as we are rewarding new customers specifically. The setting we enabled earlier is the controller of this behaviour, so you can choose that to suit your design.

Final steps

Don’t forget to replicate this configuration in your production Bubble and Stripe environments.

The Bubble part may be a simple as doing a deploy. In my case, I have two separate actions depending on whether the app mode is in live or not live. So I’ll just enable the checkbox on both, then deploy.

The Stripe part will involve changing the ‘View test data’ toggle, then going through the exact same setup.

Thanks

Thanks for following along, please share this doc with anyone you think would find it useful.

For other tips and tricks for Bubble / SaaS / NoCode you can find me on Twitter @MartyLindsay_NZ