AiSalonHub licenses its salon discovery platform as a white-label product for salon chains and franchise groups, turning each partner into a reseller and creating a distributed, low-CAC sales channel for software distribution. By giving salon chains their own branded version of the platform — with custom domains, tenant-isolated databases, and revenue-sharing economics — AiSalonHub replaces expensive outbound sales with a partner-driven model where the people who already know salon owners do the selling for you.
The Problem
Selling SaaS to salon owners is expensive. The traditional playbook — Facebook ads, cold email, trade-show booths — runs into three structural problems:
**High CAC.** Typical SaaS CAC for small-business salon software runs $200–$800 per customer. At $29–$99/month ARPU, that's 7–28 months to break even. Most startups can't sustain that burn.
**Low trust in direct sales.** Salon owners are bombarded with software pitches. The channel that works is peer recommendation. Cold outreach is ignored.
**Fragmented market.** ~80,000 salons in the US, but no single channel reaches more than 2–3% efficiently. A direct sales team can't scale.
White-label partnerships solve all three: existing salon networks — chains, franchise groups, distributors — get a financial incentive to distribute the platform to people who already trust them.
The Solution
Salon chains already have what AiSalonHub needs: trust, distribution, and a reason to resell. A chain with 50 locations selling a white-labeled AiSalonHub gets a recurring revenue stream from existing customers, deeper franchisee engagement, and a competitive differentiator.
The partner does the selling. AiSalonHub provides the platform, infrastructure, and support. Result: near-zero marginal CAC.
Architecture
The white-label system is built on multi-tenant D1 databases with per-tenant configuration isolation inside Cloudflare Workers.
**Tenant schema.** Each partner gets a row in `white_label_tenants` with all configuration — branding, pricing, domain, feature flags — stored at the row level.
```sql
CREATE TABLE white_label_tenants (
id INTEGER PRIMARY KEY AUTOINCREMENT,
partner_name TEXT NOT NULL,
subdomain TEXT UNIQUE NOT NULL,
custom_domain TEXT,
branding JSON NOT NULL DEFAULT '{}',
revenue_share_pct REAL NOT NULL DEFAULT 30.0,
base_price_cents INTEGER NOT NULL DEFAULT 2990,
commission_model TEXT NOT NULL DEFAULT 'recurring',
feature_flags JSON NOT NULL DEFAULT '{}',
status TEXT NOT NULL DEFAULT 'active',
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE white_label_customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tenant_id INTEGER NOT NULL REFERENCES white_label_tenants(id),
salon_name TEXT NOT NULL,
owner_email TEXT NOT NULL,
stripe_subscription_id TEXT,
status TEXT NOT NULL DEFAULT 'active',
enrolled_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(tenant_id, owner_email)
);
```
**Tenant isolation at the Worker level.** Every request passes through a middleware that extracts the tenant from the subdomain or custom domain, loads the config, and attaches it to the request context.
```typescript
export async function tenantMiddleware(request: Request, env: Env) {
const url = new URL(request.url);
const host = url.hostname;
const tenant = await getTenantByDomain(host, env);
if (!tenant) return handleRequest(request, env);
if (tenant.status !== 'active')
return new Response('Partner account inactive', { status: 403 });
request.tenant = tenant;
request.tenant.db = getTenantDB(tenant.id, env);
return handleRequest(request, env);
}
```
**Per-tenant D1 binding.** Rather than row-level filtering in a shared database (which risks data leaks), each tenant gets a dedicated D1 binding. The Worker routes queries to the correct database based on the resolved tenant.
```typescript
const TENANT_DBS: Record<number, D1Database> = {
1: env.TENANT_1_DB,
2: env.TENANT_2_DB,
3: env.TENANT_3_DB,
};
function getTenantDB(tenantId: number, env: Env): D1Database {
const db = TENANT_DBS[tenantId];
if (!db) throw new Error(`No binding for tenant ${tenantId}`);
return db;
}
```
Implementation
The onboarding flow follows five steps:
1. **Partner qualification.** Evaluate the chain's reach (min 20 locations or 200+ salon relationships), distribution channels, and willingness to promote. Sign a partner agreement covering revenue split and branding.
2. **Tenant provisioning.** Create the tenant record, provision a new D1 database with base schema, configure Cloudflare custom domain routing, and set up the partner's subdomain.
3. **White-label customization.** Partners configure branding (logo, colors, fonts), custom domain, commission rates, feature toggles, and email templates via an admin dashboard.
4. **Partner launch.** AiSalonHub provides a launch kit: email templates, co-branded landing pages, and a referral tracking dashboard. The partner promotes through existing channels.
5. **Ongoing management.** Each partner sees active subscriptions, MRR generated, commission accrued, and churn metrics in their dashboard.
Revenue split is straightforward: the partner receives a configured percentage (default 30%) of every subscription payment they refer. AiSalonHub handles billing, support, and infrastructure. Commission is paid monthly via Stripe Connect.
```typescript
function calculatePartnerPayout(tenant: Tenant): {
grossMRR: number;
partnerShare: number;
platformFee: number;
} {
const grossMRR = tenant.activeSubscriptions
.reduce((sum, sub) => sum + sub.amountCents, 0);
const partnerShare = Math.round(grossMRR * (tenant.revenueSharePct / 100));
const processingFee = Math.round(grossMRR * 0.029);
const platformFee = grossMRR - partnerShare - processingFee;
return { grossMRR, partnerShare, platformFee };
}
```
Results
While still scaling, early indicators based on comparable white-label SaaS programs are promising:
| Metric | Direct Sales | White-Label Partnerships |
|--------|-------------|--------------------------|
| CAC per customer | $200–$800 | $15–$60 |
| Partner onboarding rate | N/A | 2–4 partners / quarter |
| MRR attribution | 100% direct | 30–50% from partners |
| Time to first sale (new mkt) | 3–6 months | 2–4 weeks |
**Channel CAC of $15–$60** comes from the partner's existing relationship. Even at 30% revenue share, blended unit economics beat direct sales because acquisition cost is amortized across thousands of customers the partner already influences.
**MRR from partnerships.** At 10 partners with 20 subscriptions each at $29/mo, that's $5,800/mo in partner-attributed MRR. AiSalonHub keeps 70% ($4,060/mo). The partner keeps $1,740/mo — a meaningful side revenue stream that incentivizes continued promotion.
Key Takeaways
1. **White-label partnerships are a sales channel, not a distribution channel.** The partner actively sells to their network — they put their own brand on the line, which drives higher conversion than a passive distributor relationship.
2. **Tenant isolation must be baked in from day one.** Per-tenant D1 bindings with Worker-level routing provide genuine data isolation and simplify SOC 2 compliance. Row-level filtering in a shared database creates unacceptable risk.
3. **Revenue share should be simple and transparent.** A flat percentage of recurring revenue (20–35%) is easy for partners to track. Stripe Connect automates the payout.
4. **The partner's brand becomes your brand in their network.** Invest in custom domains, full theming, and co-branded emails. The more it looks like their own product, the more enthusiastically they'll promote it.
5. **Start with 2–3 high-quality partners.** A single well-aligned partner with 100+ locations outperforms 10 small ones who rarely mention your platform.
6. **The numbers work at low price points.** At $29/mo, 30 referred customers per partner generates $609/mo in platform revenue. With 20 partners, that's $12,180/mo — all acquired at near-zero CAC.