Stripe webhook setup - Step-by-step

No, you definitely need a webhook for that, and the customer.subscription.updated event is precisely the one you need…

The Subscription Status will remain Active until the subscription has actually ended (i.e. the period that’s been paid for has come to an end) - only then will the Status change to Cancelled…

So it’s no good looking at the Subscription Status to determine whether or not it’s been cancelled…

As I said previously, to know whether a Subscription has been cancelled by the User you just need to look for the cancel_at_period_end attribute being ‘true’ (that’s what it’s for, as explained in the Stripe Docs) Stripe API Reference - The subscription object

So the best way to do it (this is how we do it in our Subscription apps)… is to set up a Webhook in Stripe with the customer.subscription.updated event and point it to your endpoint (API Workflow) in Bubble.

Then, in that API workflow, use a conditional action to trigger another workflow, based on the request data’s object (specifically: when request data's object cancel_at_period_end is 'yes' AND request data's object status is 'active' (you’ll probably also want to compare it to something in your own database to prevent the same workflow from running again if the user makes some additional change to their subscription, such as comparing your own database’s subscription status, or cancel fields)

Then use the second workflow to make the necessary changes to your User in your database.