---
title: "Discussion on \"Why isn’t my Stripe webhook updating Supabase?\" | Hashnode"
description: "Discussion on \"Why isn’t my Stripe webhook updating Supabase?\". Paid in Stripe but your app still shows the free plan? The usual causes and the fix for Stripe webhooks with Supabase."
url: "https://hashnode.com/posts/why-isn-t-my-stripe-webhook-updating-supabase/6ae9d43fde20b4f15aa70ce8"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [Why isn’t my Stripe webhook updating Supabase?](https://badii-studio.hashnode.dev/why-isn-t-my-stripe-webhook-updating-supabase?utm_source=hashnode&utm_medium=feed)

Paid in Stripe but your app still shows the free plan? The usual causes and the fix for Stripe webhooks with Supabase.

6d ago · 3 min read · badii-studio.hashnode.dev  
Read the article

-   [#supabase](https://hashnode.com/tag/supabase)
-   [#webhooks](https://hashnode.com/tag/webhooks)
-   [#webdev](https://hashnode.com/tag/webdev)
-   [#stripe](https://hashnode.com/tag/stripe)

## Written by

[Badii Boutar](https://hashnode.com/@badii-studio)

@badii-studio · Tunis, Tunisia

  
[View profile](https://hashnode.com/@badii-studio)

I fix and launch AI-built apps (Lovable, Supabase, Stripe) · badii.studio

Badii Boutar, senior full-stack engineer. I review, fix and launch apps built with Lovable, Bolt, Replit and other AI tools, on Supabase and Stripe. Fixed, published prices: badii.studio

## Responses 2

Markdown supported · ⌘↵ to post

[Hayrullah Kar](https://hashnode.com/@magesheet)

[2d ago](https://hashnode.com/posts/why-isn-t-my-stripe-webhook-updating-supabase/6ae9d43fde20b4f15aa70ce8/comment/6aeec84651134f1647c84073)

The status code legend under Event deliveries is a handy shortcut for anyone staring at a failed endpoint. One cause I would add: Stripe does not guarantee that events arrive in the order they were created, and retries make the mix worse. A handler that writes the subscription status straight from each payload can apply an older customer.subscription.updated after a newer one and leave Supabase in the wrong state, even though every delivery shows 200 and every event ID is stored once. Two simple fixes: re-fetch the subscription from the Stripe API inside the handler and write what it returns, or store the created timestamp of the last applied event on the row and skip anything older.

[Paul Hartness](https://hashnode.com/@retryfix)

[5d ago](https://hashnode.com/posts/why-isn-t-my-stripe-webhook-updating-supabase/6ae9d43fde20b4f15aa70ce8/comment/6aeaf8440eabac1451004c02)

Good list. The 30 October grants change is going to catch a lot of people with a 42501 they can't explain. One I'd add next to the invoice.paid point is the failure side of a renewal. If the handler only listens for paid events, a failed renewal never reaches Supabase, so the user stays active in your table while Stripe has the subscription past\_due. Handling customer.subscription.updated and reading the current status covers both directions.
