Selling software means managing licenses. And managing licenses manually — spreadsheets, email chains, manual key generation — stops being viable the moment you have more than a handful of customers. Bravura Admin Pro exists to replace that entire workflow with a self-hosted dashboard that handles license creation, validation, customer management, and Stripe billing from a single interface.
This guide walks you through the complete setup process: from first login to your first license key.
What Bravura Admin Pro Handles
Before diving into setup, here's what the system manages once it's running:
- License key generation and validation — Create unique, tamper-resistant license keys tied to specific products and tiers
- Customer management — Track customers, their subscriptions, activation status, and usage history
- Stripe integration — Automatic license provisioning when a customer purchases, with subscription lifecycle handling (upgrades, downgrades, cancellations)
- Customer portal — A branded self-service page where customers can view their licenses, download products, and manage billing
- Admin dashboard — Real-time overview of active licenses, revenue, customer activity, and system health
- API endpoints — For programmatic license validation from your desktop or web application
Self-Hosted = Full Control
Unlike SaaS licensing platforms that hold your data on their servers, Bravura Admin Pro runs on your own infrastructure. Your customer data, license keys, and billing relationships stay under your control. No vendor lock-in, no per-seat pricing from a third party, and no risk of a platform shutting down and taking your licensing system with it.
Initial Setup: Step by Step
1 Deploy to Your Server
Bravura Admin Pro ships as a FastAPI application. Deploy it to any VPS or dedicated server running Python 3.11+. The included systemd service file and nginx configuration template handle production setup. A single deploy.py script automates the process: it creates the virtual environment, installs dependencies, sets up the database schema, and configures the systemd service.
2 Configure Your Environment
The .env file controls all runtime configuration: database credentials, JWT secret, Stripe API keys, SMTP settings for email notifications, and admin credentials. A documented .env.example file ships with every installation. Copy it, fill in your values, and the server is ready to start.
3 Connect Stripe
Add your Stripe secret key and webhook secret to the environment file. Then create a webhook endpoint in your Stripe dashboard pointing to https://your-domain.com/api/webhooks/stripe. Admin Pro listens for checkout.session.completed, invoice.paid, customer.subscription.updated, and customer.subscription.deleted events to automatically provision, renew, and revoke licenses based on payment status.
4 Create Your Products and Tiers
From the admin dashboard, define your software products and their license tiers. Each tier maps to a Stripe price ID, so when a customer purchases through your checkout flow, the system knows which license type to generate. Common tier structures include Standard/Professional/Enterprise or Monthly/Annual/Perpetual.
5 Generate Your First License
With products configured, you can generate licenses manually from the dashboard (useful for beta testers, team members, or one-off grants) or let the Stripe webhook handle automatic generation. Each license includes a unique key, expiration date (if applicable), activation limit, and the associated product/tier metadata.
License Key Architecture
Bravura Admin Pro generates cryptographically signed license keys. Each key contains embedded metadata (product, tier, expiration, customer ID) that your application can verify without an internet connection if needed. The signing key stays on your server; the validation logic ships with your application.
This means:
- Online validation checks the key against your server's database for real-time status (active, expired, revoked)
- Offline validation verifies the cryptographic signature to confirm the key is genuine, even without network access
- Activation limits prevent a single key from being shared across unlimited machines
Security Note
The license signing key is the most sensitive piece of your licensing infrastructure. It should never be committed to version control, shared in documentation, or embedded in client-side code. Store it exclusively in your server's .env file and treat it with the same care as your Stripe secret key.
Stripe Integration Deep Dive
The Stripe integration handles the full subscription lifecycle without manual intervention:
| Event | What Happens | License Effect |
|---|---|---|
| Checkout completed | Customer pays for the first time | New license key generated, activation email sent |
| Invoice paid | Recurring subscription renews | License expiration extended |
| Subscription updated | Customer upgrades or downgrades | License tier updated to match new plan |
| Subscription deleted | Customer cancels | License marked as expired at period end |
Every webhook event is processed idempotently, meaning duplicate events (which Stripe occasionally sends) won't create duplicate licenses or trigger duplicate emails.
The Customer Portal
Every Admin Pro installation includes a customer-facing portal. Customers can:
- View their active license keys and activation status
- Download the latest version of their purchased software
- Access Stripe's billing portal to update payment methods or cancel
- See their purchase history and invoice records
The portal is styled to match your brand — colors, logo, and domain are all configurable. Customers never see the Bravura Admin Pro branding unless you choose to keep it.
The Admin Dashboard
The admin side gives you a real-time view of your licensing business:
- Overview: Active licenses, revenue this month, new customers, churn rate
- Customers: Searchable list with subscription status, license keys, and activity history
- Licenses: Generate, revoke, extend, or transfer licenses manually
- Products: Manage products, tiers, pricing, and feature descriptions
- Analytics: Revenue trends, tier distribution, activation rates
Pricing: Choosing the Right Tier
| Tier | Monthly | Annual | Perpetual |
|---|---|---|---|
| Starter | $49.99/mo | $499.99/yr | $1,999.99 |
| Professional | $99.99/mo | $999.99/yr | $4,999.99 |
| Enterprise | $299.99/mo | $2,999.99/yr | $14,999.99 |
Starter covers most indie developers and small teams. Professional adds multi-product support, advanced analytics, and priority support. Enterprise includes custom integration support, SLA guarantees, and white-label options.
Common Setup Questions
Can I migrate from an existing licensing system?
Yes. Admin Pro can import existing customer and license data via CSV or through the API. If you're migrating from a manual system (spreadsheets or email-based keys), the import process typically takes less than an hour. Migrating from another platform like Keygen.sh involves mapping your existing data schema to Admin Pro's format.
What if I don't use Stripe?
Stripe is the supported payment processor. However, the license generation and validation systems are decoupled from billing — you can generate licenses manually or through the API without any Stripe integration. Some developers use Admin Pro purely for license management while handling payments through a separate system.
How many licenses can it handle?
The system is built on FastAPI with MySQL, the same stack that powers production systems handling thousands of concurrent users. For most software businesses, the bottleneck will be Stripe's rate limits (which are generous) before the license server itself becomes a constraint.
Ready to Manage Your Licenses?
Stop managing licenses manually. Get your Admin Pro instance running in under an hour.
Explore Bravura Admin Pro