White-Label SaaS Opportunity
White-label platforms let you reach customers through resellers. Your technology, their brand. Revenue scales without proportional customer support overhead.
Architecture Considerations
White-label platforms must support:
Customizable branding:
- Custom domain per reseller (app.reseller.com)
- Logo, colors, fonts per reseller
- Custom email templates and sender names
- Whitelabeled invoices and reports
Tenant isolation:
- Each reseller's data completely isolated
- Separate databases or schema-per-tenant approach
- Independent feature flags per reseller
Revenue sharing:
- Transparent usage tracking
- Automated commission calculations
- Settlement workflows
- Custom pricing per reseller
Database Schema Design
For white-label, schema-per-tenant works well:
-- Each reseller gets schema
CREATE SCHEMA reseller_acme;
-- Reseller configuration
CREATE TABLE reseller_acme.config (
id UUID PRIMARY KEY,
name VARCHAR NOT NULL,
domain VARCHAR UNIQUE NOT NULL,
logo_url VARCHAR,
primary_color VARCHAR,
email_sender_name VARCHAR,
created_at TIMESTAMP
);
-- Reseller's customers
CREATE TABLE reseller_acme.customers (
id UUID PRIMARY KEY,
email VARCHAR NOT NULL,
created_at TIMESTAMP
);
Branding System
Implement dynamic branding:
type ResellerConfig = {
name: string;
logoUrl: string;
colors: {
primary: string;
secondary: string;
};
domain: string;
};
// Middleware extracts reseller from domain
export function extractResellerFromDomain(domain: string) {
const [subdomain] = domain.split('.');
return getResellerConfig(subdomain);
}
// Component uses reseller config
export function Header({ config }: { config: ResellerConfig }) {
return (
<header style={{ backgroundColor: config.colors.primary }}>
<img src={config.logoUrl} alt={config.name} />
</header>
);
}
Revenue Sharing and Tracking
Implement usage-based tracking:
type UsageMetric = {
resellerId: string;
apiCalls: number;
storageGb: number;
month: string;
};
async function recordUsage(metric: UsageMetric) {
await db.insert('usage_metrics', {
reseller_id: metric.resellerId,
api_calls: metric.apiCalls,
storage_gb: metric.storageGb,
month: metric.month,
recorded_at: new Date()
});
}
async function calculateCommission(resellerId: string, month: string) {
const usage = await db.query(
'SELECT * FROM usage_metrics WHERE reseller_id = ? AND month = ?',
[resellerId, month]
);
const platformCost = usage.apiCalls * 0.0001 + usage.storageGb * 0.10;
const resellerPrice = // depends on reseller's pricing
const commission = (resellerPrice - platformCost) * commissionRate;
return commission;
}
Onboarding and Deployment
Automate reseller onboarding:
- Create database schema for reseller
- Create DNS record for custom domain
- Deploy SSL certificate via Let's Encrypt
- Send dashboard access credentials
- Configure initial branding
Terraform or CloudFormation automates this:
resource "aws_db_schema" "reseller" {
schema_name = "reseller_${var.reseller_id}"
database = aws_db_instance.main.id
}
resource "aws_acm_certificate" "reseller_domain" {
domain_name = "app.${var.reseller_domain}"
validation_method = "DNS"
}
Support and Operations
White-label increases support complexity:
- Resellers contact you for technical issues
- You support resellers supporting their customers
- Issues become "they said you said" chains
Implement:
- Clear support SLAs for different reseller tiers
- Knowledge base for common issues
- API for resellers to fetch usage and manage customers
- Audit logs so resellers understand their usage
Pricing Strategy
Revenue model options:
Platform fee + usage: $500/month + $0.001 per API call. Predictable revenue, but doesn't scale with reseller success.
Revenue share: Reseller charges customers $100/month. You take 30%, reseller keeps 70%. Scales together.
Hybrid: $200/month base + 20% revenue share. Balances stability and growth.
Commission rates typically 20-40% depending on reseller tier and support level.
Frequently asked questions
How do we prevent resellers from competing with us?
Contractual terms restrict resellers from building competing products. Monitor reseller margins and customer satisfaction. Consider exclusive territories or verticals. Ultimately, add so much value that building competing services isn't economical.
What if a reseller customer wants direct access to us?
Establish clear policies: resellers handle support. Provide resellers with escalation paths for hard problems. In contracts, prevent customer direct contact except through reseller. Make reseller relationship profitable enough they handle issues before escalating.
How do we handle refunds and chargebacks from resellers?
Resellers are responsible for customer billing. You bill resellers for usage. Resellers handle customer refunds from their pool. Separate financial responsibility prevents complex reconciliation. Clearly document this in reseller agreements.