Dynamic Pricing
How to vary price by segment, usage, or market condition without alienating customers who compare notes.
Why
Dynamic pricing — charging different customers different prices based on their segment, usage, or geography — captures more revenue by matching price to willingness-to-pay. Airlines and hotels do this aggressively; SaaS does it more subtly. The legitimate forms are: geo-pricing (lower price in Brazil than in the US because purchasing power differs), usage-based pricing (charge per API call so light users pay less and heavy users pay more), and segment pricing (student/non-profit discounts at 50% off). The illegitimate form is charging different prices to identical customers who happen to see different prices on different days — this is what gets companies in trouble on Twitter and Hacker News. The rule is: dynamic pricing must be defensible — if a customer asks 'why did I pay $99 and my colleague paid $49', you must have a clear, published reason (student discount, geo pricing, usage tier). If the reason is 'the algorithm said so', you have a PR crisis.
When
When you have clear segments with different willingness-to-pay (geo, student vs professional, light vs heavy usage) AND a published pricing policy that explains the differences.
How
1. Identify the legitimate segmentation dimensions: geography (purchasing power parity), segment (student/non-profit/startup), usage (light/heavy API consumer) 2. For geo-pricing, use the World Bank PPP conversion factors — price in each country at US_price × PPP_factor × 0.7 (the 0.7 gives emerging markets a slight discount) 3. For segment pricing, require verification: .edu email for students, registered non-profit for non-profit, accelerator portfolio for startups — never offer a discount on the honor system 4. For usage-based pricing, offer a hybrid: a base subscription ($29/mo includes 10k API calls) + overage ($0.01/call) — pure usage-based scares users who cannot predict their bill 5. Publish the pricing policy: a /pricing-policy page that explains every discount and who qualifies — this is your defense against 'unfair pricing' accusations 6. Never A/B test prices on the same segment — showing different prices to randomly selected US visitors is the kind of dynamic pricing that creates PR disasters 7. Apply discounts via Stripe coupons, not by changing the base price — this keeps the list price consistent and makes the discount visible on the invoice 8. Review geo-pricing annually — PPP factors change, and a price that was right for Brazil in 2024 may be too high in 2026 after currency moves
Example
# Geo-pricing using PPP (Purchasing Power Parity)
const PPP_FACTORS = { US: 1.0, BR: 0.65, IN: 0.30, DE: 0.95, JP: 0.90 };
function geoPrice(basePrice: number, countryCode: string) {
const factor = PPP_FACTORS[countryCode] ?? 1.0;
return Math.round(basePrice * factor * 0.7); // 0.7 = emerging market discount
}
// US: $29 × 1.0 × 0.7 = $20 → too low, so use max(factor, 0.5) for developed markets
// BR: $29 × 0.65 × 0.7 = $13
// IN: $29 × 0.30 × 0.7 = $6
# Segment pricing with verification
async function applyStudentDiscount(userId: string) {
const email = await getEmail(userId);
if (!email.endsWith(".edu")) throw new Error("Student discount requires .edu email");
await stripe.coupons.create({ percent_off: 50, duration: "forever", max_redemptions: 1 });
}
# Usage-based (hybrid)
const base = 29; // includes 10k API calls
const overage = 0.01; // per call above 10k
const bill = base + Math.max(0, apiCalls - 10000) * overage;Common Problems
- ⚠A/B testing prices on the same segment — showing $29 to half of US visitors and $39 to the other half is the kind of dynamic pricing that, when discovered, creates a PR crisis. Never do this.
- ⚠Offering segment discounts without verification — a 'student discount' on the honor system is abused by 60-80% of non-students, eroding your revenue. Require .edu email or a SheerID verification.
- ⚠Geo-pricing without a published policy — a user in Brazil pays $13 and tells a user in the US who pays $29, and without a /pricing-policy page explaining PPP, it looks like arbitrary discrimination.
Best Practices
- ✓Publish a /pricing-policy page that explains every discount and its qualification criteria — this is your defense against unfair-pricing accusations and builds trust.
- ✓Use Stripe coupons for all discounts, never change the base price — the list price stays consistent across segments, and the discount is transparent on every invoice.
- ✓Review geo-prices annually against PPP factors and currency moves — a price that was fair last year may now be too high or too low, and stale geo-pricing creates support tickets.