Stripe Integration
Track customer churn by connecting your Stripe account to SeggWat.
Overview
The Stripe integration allows you to automatically track customer cancellations from your Stripe subscriptions. When a customer cancels their subscription, SeggWat captures the event along with the cancellation reason and any comments they provide.
This integration connects your Stripe account to SeggWat. It tracks cancellations from your customers' subscriptions, helping you understand why customers churn.
Features
- Automatic churn tracking - Cancellation events are captured in real-time via webhooks
- Cancellation reasons - See why customers are leaving (too expensive, missing features, etc.)
- Customer comments - Capture verbatim feedback from departing customers
- Churn analytics - View trends, statistics, and breakdowns in the Insights dashboard
- Owner notifications - Get notified when customers leave feedback with their cancellation
Setup Instructions
Step 1: Open the Stripe Integration
- Navigate to your project in SeggWat
- Go to Integrations in the sidebar
- Click on the Stripe integration card
Step 2: Copy the Webhook URL
In the Stripe integration modal, you'll see a unique webhook URL for your project:
https://seggwat.com/hooks/stripe/{your-project-key}Click the Copy button to copy this URL to your clipboard.
Step 3: Configure Stripe Webhook
- Open your Stripe Dashboard
- Go to Developers → Webhooks
- Click Add endpoint
- Paste the webhook URL from SeggWat
- Under Select events, click Select events
- Search for and enable:
customer.subscription.deleted
- Click Add endpoint
Step 4: Copy the Signing Secret
After creating the webhook in Stripe:
- Click on the webhook you just created
- Under Signing secret, click Reveal
- Copy the secret (starts with
whsec_) - Return to SeggWat and paste it in the Signing Secret field
- Click Save Secret
Make sure to copy the complete signing secret. It should start with whsec_ followed by a long string of characters.
Viewing Churn Data
Once configured, churn data appears in two places:
Insights → Churn Tab
Navigate to Insights and click the Churn tab to see:
- Total cancellations - All-time count
- Monthly trends - This month vs. last month with percentage change
- Cancellation reasons - Visual breakdown of why customers churn
- Recent cancellations - List of recent events with customer details and comments
Notifications
Project owners receive notifications when customers include comments with their cancellations. This helps you quickly respond to actionable feedback.
Cancellation Reasons
Stripe captures cancellation feedback through the cancellation_details.feedback field. SeggWat maps these to the following categories:
| Reason | Description |
|---|---|
| Too Expensive | Customer finds the price too high |
| Missing Features | Product lacks features the customer needs |
| Switched Service | Customer moved to a competitor |
| Low Quality | Customer is unhappy with product quality |
| Too Complex | Product is too difficult to use |
| Unused | Customer no longer needs the product |
| Customer Service | Issues with support experience |
| Other | Custom reason provided by customer |
To collect cancellation reasons in Stripe, you need to enable cancellation feedback in your billing settings. Go to Settings → Billing → Customer portal and enable "Collect cancellation feedback".
Testing the Integration
You can test the webhook using Stripe CLI:
# Install Stripe CLI if needed
brew install stripe/stripe-cli/stripe
# Login to your Stripe account
stripe login
# Trigger a test event
stripe trigger customer.subscription.deletedThis will send a test webhook to your endpoint and help verify the integration is working.
Troubleshooting
Webhook Not Receiving Events
- Verify the webhook URL is correct in Stripe
- Ensure the signing secret matches (starts with
whsec_) - Check that
customer.subscription.deletedevent is enabled - Verify your webhook endpoint is showing in the Stripe dashboard
Integration Shows "Pending"
The status changes to "Active" after the first successful webhook is received. You can:
- Wait for a real cancellation
- Use Stripe CLI to trigger a test event (see Testing section above)
- Check the Stripe dashboard for webhook delivery attempts
Invalid Secret Error
If you see a secret validation error:
- Re-copy the secret from Stripe (click "Reveal" to see the full secret)
- Ensure no extra spaces before or after the secret
- The secret should start with
whsec_
Signature Verification Failed
If webhook signature verification fails:
- Ensure you're using the correct signing secret for this specific webhook endpoint
- Check that the webhook is pointing to the correct URL
- Verify no proxy or middleware is modifying the request body
Data Privacy
SeggWat only stores:
- Subscription ID (for deduplication)
- Customer ID (if provided by Stripe)
- Cancellation reason and comment
- Timestamp
We do not store payment information, card details, or access your Stripe billing data.
Reward Discounts
Create Stripe coupons and promo codes directly from your SeggWat feedback dashboard to reward subscribers who take the time to submit valuable feedback.
How It Works
- A subscriber submits feedback or suggests a feature idea and opts in to receive a discount
- Their Stripe subscription ID is stored with the feedback or idea
- From the feedback or idea detail page your team can create a coupon and optionally auto-apply it to that subscription in one click
Setup: Add a Stripe Restricted API Key
You need a Stripe restricted key so SeggWat can create coupons and apply them to subscriptions:
- In your Stripe Dashboard, go to Developers → API keys
- Click Create restricted key
- Set the following permissions:
- Coupons → Write
- Promotion codes → Write
- Subscriptions → Write (required for auto-applying discounts)
- Click Create key and copy the generated key
- In SeggWat, open the Stripe integration modal
- Scroll down to the Discount API Key section and paste the key
- Click Save API Key — SeggWat will validate it against the Stripe API immediately
Always use a restricted key, not your full secret key. Restricted keys limit SeggWat's access to only the three operations listed above.
Collecting the Subscription ID
There are two ways to pass the subscription ID, depending on where the subscriber interacts with your product:
Feedback Widget
The widget shows a "Get a discount on future bills" consent checkbox only when it knows the user's Stripe subscription ID. Pass it after the user logs in:
<script src="https://seggwat.com/static/widgets/v1/seggwat-feedback.js"
data-project-key="your-project-key"></script>
<script>
// Call after authentication — pass the user's Stripe subscription ID
SeggwatFeedback.setSubscriptionId('sub_1abc...');
</script>When the user checks the consent box and submits, SeggWat stores the subscription ID alongside the feedback so your team can act on it. See the widget installation guide for details.
Feature Portal (Ideas)
For feature suggestions on the public portal, include subscription_id in the authentication token payload:
const token = generateSeggwatToken(
user.id,
user.email,
process.env.SEGGWAT_PROJECT_KEY,
process.env.SEGGWAT_SIGNING_SECRET,
user.stripeSubscriptionId // Stripe subscription ID (sub_...)
);When present in the token, consent is implied — the subscriber's ID is automatically stored with any ideas they suggest through the portal.
If you use SeggWat on your own dashboard and bill via Stripe, the subscription ID is set automatically from your SeggWat billing subscription — no extra code needed.
Creating a Discount from Feedback or Ideas
- Open any feedback item or feature idea in the dashboard
- Scroll to the Reward with Stripe Discount section (only visible when a Stripe API key is configured)
- Configure the discount:
- Name — Internal label for the coupon (not customer-facing)
- Percentage Off — Discount amount between 1% and 100%
- Duration — Once, Forever, or Repeating (specify number of months)
- Custom Code — Optional promo code string; auto-generated if left empty
- Max Redemptions — Limit how many times the code can be redeemed
- Click the create button:
- Create & Apply Discount — when a subscription ID is present, applies the coupon directly to the subscription (takes effect on the next billing cycle)
- Create Discount — generates a redeemable promo code you can share manually with the customer
Multiple Payment Providers
You can connect both Stripe and Polar to the same project. SeggWat will aggregate churn data from all connected payment providers, and the provider source is shown for each cancellation event.
