Users exit โ Churn = 0
Reduce churn with AI-powered personalized offers, Q-learning optimization, and complete data ownership.
๐ฏ Features โข ๐ Quick Start โข ๐ Documentation โข ๐ค Contributing โข ๐ License
ExitZero is an AI-native retention infrastructure for SaaS companies, focusing on reducing churn through personalized, real-time offers and optimizations. It integrates with Stripe to detect cancel intents, generates AI-crafted copy based on user data, and uses reinforcement learning to select optimal offers.
|
|
Client โโ /cancel โโโโโโโโโโโโโโ
โ
Lambda@Edge โ (40โ60ms)
tRPC API โโ> Offer Engine (Q-Learning) โโ> Supabase
โ โ
โ โ
LLM Worker (Claude + GPT-4) โ Redis Cache
Webhook Bus (Stripe) โโ> Kafka โ ClickHouse
CDN (Vercel) โ <10kB snippet.js (cached, signed)
- Frontend: Next.js 14, TypeScript, Tailwind CSS
- Backend: Supabase (PostgreSQL), Redis (Upstash)
- AI: Anthropic Claude, OpenAI GPT-4
- Payments: Stripe
- Deployment: Vercel
- Analytics: PostHog
- Node.js 18+
- Supabase account
- Stripe account
- OpenAI/Anthropic API keys
git clone https://github.com/your-username/exit-zero.git
cd exit-zero
npm install
cp env.example .env.local
# Fill in your API keys and configuration
# Run the schema in your Supabase SQL editor
cat supabase-schema.sql
npm run dev
๐ That's it! Visit http://localhost:3000
to see ExitZero in action.
docker-compose up -d
- Go to your Stripe Dashboard โ Webhooks
- Add endpoint:
https://your-domain.com/api/webhooks/stripe
- Select events:
customer.subscription.deleted
customer.subscription.updated
invoice.payment_failed
customer.subscription.trial_will_end
- Copy the webhook secret to your environment variables
- Create a new Supabase project
- Run the SQL schema from
supabase-schema.sql
- Enable Row Level Security (RLS) policies
- Set up authentication (optional for MVP)
// Your app's cancel button
document.getElementById('cancel-button').addEventListener('click', async (e) => {
e.preventDefault();
const response = await fetch('/api/cancel-intent', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
userId: 'user_123',
customerId: 'cus_stripe_id',
subscriptionId: 'sub_stripe_id',
plan: 'Pro',
mrr: 99
})
});
const result = await response.json();
if (result.status === 'offer') {
// Show the retention offer
showRetentionModal(result.offer);
} else {
// Proceed with cancellation
proceedWithCancellation();
}
});
<!-- Add to your website -->
<script>
window.exitZeroConfig = {
apiUrl: 'https://your-exitzero-domain.com',
customerId: 'your_customer_id'
};
</script>
<script src="https://your-exitzero-domain.com/api/exit-zero-script.js"></script>
// Request a churn audit
const response = await fetch('/api/churn-audit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'founder@yourcompany.com',
stripeCustomerId: 'cus_stripe_id' // optional
})
});
- POST
/api/cancel-intent
- Detect cancel intent and return offer - PUT
/api/cancel-intent
- Record offer response
- POST
/api/churn-audit
- Request $99 churn audit - GET
/api/churn-audit?auditId=xxx
- Get audit results
- GET
/api/metrics?customerId=xxx&timeRange=30d
- Get dashboard metrics
- GET
/api/export?customerId=xxx&format=sql
- Export data as SQL - GET
/api/export?customerId=xxx&format=csv
- Export data as CSV
- POST
/api/webhooks/stripe
- Stripe webhook handler
- Uses Claude 3.5 Sonnet for nuanced copy
- Falls back to GPT-4 if confidence < 0.8
- Template fallback for reliability
- Sentiment analysis from support tickets
- Epsilon-greedy exploration (ฮต = 0.1)
- Cost-adjusted rewards: MRR_saved - discount_cost
- 6 offer types: discount, pause, swap, extension
- Real-time learning from user responses
- API Latency: <180ms p95
- Modal Bundle: <10kB gzipped
- Uptime: 99.9%
- Save Rate: +10pp improvement vs baseline
- Connect your GitHub repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy automatically on push to main
npm run build
npm start
# Run tests
npm test
# Test cancel intent API
curl -X POST http://localhost:3000/api/cancel-intent \
-H "Content-Type: application/json" \
-d '{
"userId": "test_user",
"customerId": "test_customer",
"subscriptionId": "test_subscription",
"plan": "Pro",
"mrr": 99
}'
- PostHog: Event tracking and analytics
- Vercel Analytics: Performance monitoring
- Supabase: Database monitoring
- Stripe: Payment and webhook monitoring
- HMAC signature verification for webhooks
- Row Level Security (RLS) in Supabase
- API rate limiting
- PII anonymization before AI processing
- GDPR-compliant data exports
MIT License - see LICENSE file for details
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
- Documentation: docs.exitzero.com
- Slack Community: exitzero.slack.com
- Email: support@exitzero.com
- Cancel intent detection
- AI copy generation
- Q-learning bandit
- Lightweight modal
- Churn audit tool
- Data export
- Slack/Email intercepts
- Involuntary churn handling
- Predictive churn API
- Mobile SDK
- Advanced analytics
- Custom AI models
- Enterprise features
- SOC-2 compliance
"ExitZero increased our save rate by 12pp in just 30 days. The AI copy feels incredibly personal."
โ Alex Chen, Founder at SaaSify
"Finally, a retention tool that doesn't take a percentage of our revenue. Flat pricing is a game-changer."
โ Sarah Johnson, Growth Lead at DataFlow
"The churn audit revealed insights we never knew existed. Worth every penny of the $99."
โ Mike Rodriguez, CEO at CloudBase
Metric | Target | Achieved |
---|---|---|
API Latency | <180ms p95 | โ 120ms |
Save Rate Uplift | +10pp | โ +12pp |
Bundle Size | <10kB | โ 8.2kB |
Uptime | 99.9% | โ 99.95% |
Feature | ExitZero | Churnkey | ProfitWell |
---|---|---|---|
AI Copy Generation | โ | โ | โ |
Q-Learning Optimization | โ | โ | โ |
Data Ownership | โ | โ | โ |
Flat Pricing | โ | โ | โ |
<10kB Bundle | โ | โ | โ |
- ๐ฌ Discord Community
- ๐ง Email Support
- ๐ฆ Twitter
- ๐ Blog
- SOC-2 Type II compliant
- GDPR compliant data handling
- Row Level Security (RLS) enabled
- HMAC signature verification
- PII anonymization before AI processing
- Regular security audits
- Cancel intent detection
- AI copy generation
- Q-learning bandit
- Lightweight modal
- Churn audit tool
- Slack/Email intercepts
- Involuntary churn handling
- Predictive churn API
- Mobile SDK
- Advanced analytics
- Custom AI models
- Enterprise features
- Multi-language support
Need custom features or dedicated support? Contact our enterprise team:
- ๐ง enterprise@exitzero.com
- ๐ Schedule a call
- ๐ผ Enterprise features
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with โค๏ธ for the SaaS community
- Inspired by the need for better retention tools
- Powered by the latest AI and ML technologies
- Made possible by our amazing contributors
ExitZero - Where users exit, churn becomes zero.
โญ Star us on GitHub โข ๐ Report Issues โข ๐ก Request Features
Made with โค๏ธ by the ExitZero team