The problem
Every signup, payment and cancellation on Burn’s web checkout went through a chain of Zapier zaps into Airtable, and from there into email marketing and reporting. Since March, the Zapier queue had been frozen. More than 700 tasks were sitting unprocessed, which meant the marketing funnel was blind and nobody had been told.
The original sprint plan was to replace it with a third database and webhooks hosted on the WordPress site.
This case study is about replacing that broken pipeline. The subscription data repair came later and is a separate problem: duplicate rows inside the new subscription table, caused by a backfill, and repaired in production.
What I did
Reworked the plan before writing code. We already ran a Postgres database and an API server with monitoring, tests and a deploy pipeline. Adding a second database and putting revenue-critical webhooks on WordPress would have meant two more things to secure and keep alive. I moved the work into the API.
Built signed, tested endpoints. A signup webhook, plus a Stripe webhook covering five subscription lifecycle events. Stripe signature verification needs the raw request body, so the route bypasses the JSON parser. I also adapted the code to field changes in the latest Stripe SDK.
Connected the rest of the stack. Billing events from RevenueCat now forward to Klaviyo for lifecycle email. I added a proper Subscription model and UTM attribution fields so marketing could see which campaigns produced paying users. Secrets moved into Doppler, and the production cutover was staged and verified.
Fixed the metric that was hiding underneath. Two months later I retired a paid flag on the user record that was set once and never reset. It had been inflating conversion metrics by about 40 percentage points. Billing webhooks became the single source of truth on every platform.
The outcome
The frozen pipeline was replaced end to end, with 20 tests on the cutover and 43 more on the follow-up. Funnel data flowed again, attribution became possible, and the team’s conversion numbers stopped counting people who had only ever started a trial.
What I’d tell another team
No-code glue is great until it carries revenue data. When it does, it needs the same monitoring as your API, or it should move into your API.