# SaaS Pricing Strategies
**Meta-Description:** SaaS Pricing Modelle implementieren. Freemium, Tiered Pricing, Usage-Based und Value-Based Pricing mit Stripe Integration.
**Keywords:** SaaS Pricing, Freemium, Tiered Pricing, Usage-Based, Value Pricing, Stripe, Subscription, Revenue Model
---
## Einführung
**Pricing** ist einer der wichtigsten Hebel für SaaS-Wachstum. Das richtige **Pricing-Modell** kann Revenue verdoppeln ohne zusätzliche Kunden. Dieser Guide zeigt verschiedene Strategien und deren technische Implementation.
---
## Pricing Models Overview
```
┌─────────────────────────────────────────────────────────────┐
│ SAAS PRICING MODELS │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. FLAT-RATE PRICING: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ $49/month - All features included │ │
│ │ ✓ Simple to understand │ │
│ │ ✗ Limited upsell potential │ │
│ │ Example: Basecamp │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 2. TIERED PRICING: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Starter Pro Enterprise │ │
│ │ $19/mo $49/mo $199/mo │ │
│ │ 5 users 25 users Unlimited │ │
│ │ ✓ Clear upgrade path │ │
│ │ ✓ Captures different segments │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 3. USAGE-BASED (Pay-as-you-go): │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ $0.01 per API call / $0.10 per GB │ │
│ │ ✓ Low barrier to entry │ │
│ │ ✓ Revenue scales with customer success │ │
│ │ ✗ Unpredictable revenue │ │
│ │ Example: AWS, Twilio │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 4. FREEMIUM: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Free tier + Premium tiers │ │
│ │ ✓ Viral growth potential │ │
│ │ ✓ Low friction acquisition │ │
│ │ ✗ High support costs │ │
│ │ Example: Slack, Dropbox │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 5. PER-SEAT PRICING: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ $10/user/month │ │
│ │ ✓ Predictable, easy to understand │ │
│ │ ✓ Grows with customer's team │ │
│ │ Example: Notion, Linear │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## Pricing Configuration
```typescript
// lib/pricing/config.ts
export interface PricingTier {
id: string;
name: string;
description: string;
monthlyPrice: number;
yearlyPrice: number;
features: Feature[];
limits: TierLimits;
highlighted?: boolean;
ctaText: string;
stripeMonthlyPriceId: string;
stripeYearlyPriceId: string;
}
export interface Feature {
name: string;
included: boolean;
limit?: string;
tooltip?: string;
}
export interface TierLimits {
users: number;
projects: number;
storage: number; // in GB
apiCalls: number;
customDomains: number;
support: 'community' | 'email' | 'priority' | 'dedicated';
}
export const pricingTiers: PricingTier[] = [
{
id: 'free',
name: 'Free',
description: 'For individuals getting started',
monthlyPrice: 0,
yearlyPrice: 0,
features: [
{ name: 'Up to 3 projects', included: true },
{ name: 'Basic analytics', included: true },
{ name: 'Community support', included: true },
{ name: 'API access', included: false },
{ name: 'Custom domains', included: false },
{ name: 'Team collaboration', included: false }
],
limits: {
users: 1,
projects: 3,
storage: 1,
apiCalls: 1000,
customDomains: 0,
support: 'community'
},
ctaText: 'Get Started Free',
stripeMonthlyPriceId: '',
stripeYearlyPriceId: ''
},
{
id: 'pro',
name: 'Pro',
description: 'For professionals and small teams',
monthlyPrice: 29,
yearlyPrice: 290, // 2 months free
features: [
{ name: 'Unlimited projects', included: true },
{ name: 'Advanced analytics', included: true },
{ name: 'Email support', included: true },
{ name: 'API access', included: true, limit: '10k calls/mo' },
{ name: 'Custom domains', included: true, limit: '3 domains' },
{ name: 'Team collaboration', included: true, limit: '5 members' }
],
limits: {
users: 5,
projects: -1, // unlimited
storage: 50,
apiCalls: 10000,
customDomains: 3,
support: 'email'
},
highlighted: true,
ctaText: 'Start Free Trial',
stripeMonthlyPriceId: 'price_pro_monthly',
stripeYearlyPriceId: 'price_pro_yearly'
},
{
id: 'enterprise',
name: 'Enterprise',
description: 'For large teams with advanced needs',
monthlyPrice: 99,
yearlyPrice: 990,
features: [
{ name: 'Unlimited everything', included: true },
{ name: 'Custom analytics', included: true },
{ name: 'Dedicated support', included: true },
{ name: 'API access', included: true, limit: 'Unlimited' },
{ name: 'Custom domains', included: true, limit: 'Unlimited' },
{ name: 'Team collaboration', included: true, limit: 'Unlimited' },
{ name: 'SSO/SAML', included: true },
{ name: 'SLA guarantee', included: true }
],
limits: {
users: -1,
projects: -1,
storage: -1,
apiCalls: -1,
customDomains: -1,
support: 'dedicated'
},
ctaText: 'Contact Sales',
stripeMonthlyPriceId: 'price_enterprise_monthly',
stripeYearlyPriceId: 'price_enterprise_yearly'
}
];
// Check if feature is available
export function hasFeature(
tierId: string,
featureName: string
): boolean {
const tier = pricingTiers.find(t => t.id === tierId);
if (!tier) return false;
const feature = tier.features.find(f => f.name === featureName);
return feature?.included ?? false;
}
// Check limits
export function checkLimit(
tierId: string,
limitKey: keyof TierLimits,
currentUsage: number
): { allowed: boolean; limit: number; usage: number } {
const tier = pricingTiers.find(t => t.id === tierId);
if (!tier) return { allowed: false, limit: 0, usage: currentUsage };
const limit = tier.limits[limitKey];
return {
allowed: limit === -1 || currentUsage < limit,
limit,
usage: currentUsage
};
}
```
---
## Pricing Component
```tsx
// components/pricing/PricingTable.tsx
'use client';
import { useState } from 'react';
import { pricingTiers, PricingTier } from '@/lib/pricing/config';
import { CheckIcon, XIcon } from 'lucide-react';
import { track } from '@/lib/analytics';
export function PricingTable() {
const [billingPeriod, setBillingPeriod] = useState<'monthly' | 'yearly'>('monthly');
const handleToggle = () => {
const newPeriod = billingPeriod === 'monthly' ? 'yearly' : 'monthly';
setBillingPeriod(newPeriod);
track('pricing_period_changed', { period: newPeriod });
};
return (
No hidden fees. Cancel anytime.
Have questions?{' '}
Check our FAQ
{' '}
or{' '}
contact us
Simple, transparent pricing
{tier.description}
{/* Price */}Billed ${price} annually
)}