You are not inventing a number. Your market has already trained your customer what this costs. Your job is choosing a defensible position on an existing scale, and then making the annual plan the obvious choice.
The concept
Pricing paralyses founders because it feels permanent and unknowable. It's neither:
- Price is among the easiest things to change. A field in a dashboard and some copy.
- Your model is hard to change (Chapter 25). That's where the real thinking belongs.
- You're picking a position, not a number. Competitors have spent years establishing what your category costs.
Almost every first-time founder underprices, usually from a fear of rejection that gets rationalised as strategy. Underpricing costs you margin, attracts your worst customers, and signals low value.
Three approaches
| Approach | Method | When |
|---|---|---|
| Cost-plus | Costs + margin | Almost never for software, your marginal cost is near zero |
| Competitive | Position against comparables | Good default; the market did your research |
| Value-based | A fraction of value delivered | Highest ceiling; needs quantifiable value |
Value-based is strongest where you can quantify the outcome. If your tool saves a customer 10 hours a month at $50/hour, that's $500 of value, and $99/month is an easy conversation. Consumer products rarely have quantifiable value, so consumer pricing is mostly competitive positioning.
Finding your anchor
- List 3-5 comparable products with monthly and annual pricing.
- Find your closest structural comp, same customer, same shape, not just the same topic.
- Note the range, the median, and the outliers.
- Position deliberately: below your closest comp, at or above the category median, is a comfortable and defensible place to sit.
Users tell you the anchor for free. Complaints like "they charge $50/year for a glorified quote app" contain the number your market already accepts.
⭐ The annual plan is the product
The most under-thought decision in subscription pricing.
| Monthly at $10 | Annual at $50 | |
|---|---|---|
| Cash at signup | $10 | $50 |
| Churn decisions per year | 12 | 1 |
| Realistic LTV | ~$30 (3-month median) | $50+ |
| Cash for acquisition | drip | upfront |
Three implementation details do the work:
- Annual is default-selected. They must actively choose monthly.
- Show the per-month equivalent, "$4.17/mo" makes annual look cheaper, not more expensive.
- Show the saving as a percentage, computed from the two real prices.
Compute the savings badge; never hard-code it. A hard-coded "58% off" becomes a lie the day you change a price.
Typical annual discounts run 20-60%. Below 20% doesn't motivate; above 60% suggests your monthly price is wrong.
Psychological pricing that actually works
- Charm pricing ($9.99 vs $10) still measurably outperforms in consumer. In B2B, round numbers read as more confident.
- Anchoring. A visible expensive tier makes the middle one feel reasonable. Three tiers exist for this.
- Decoy pricing. A deliberately poor-value option makes its neighbour obvious.
- Framing. "$4.17/month, billed annually" beats "$50/year."
- Avoid too many options. More than four tiers reduces conversion.
Regional pricing
$50/year is trivial in San Francisco and prohibitive in Jakarta, Lagos or Buenos Aires. Options:
- Purchasing-power parity pricing, meaningfully expands your addressable market; needs abuse controls (VPNs).
- Platform-managed tiers, app stores handle this reasonably by default.
- Restrict availability, simplest, and forfeits those markets.
⚠️ Never display a hard-coded currency. Platforms charge users in their local currency; showing "$9.99" to someone billed in rupees is wrong, confusing, and a store-rejection risk.
Raising prices
Easier than lowering, and always underdone:
- Grandfather existing customers. It's fair, it buys goodwill, and platforms often require consent for increases anyway.
- Raise for new cohorts and watch conversion.
- Announce with added value, not apology.
- Test in a smaller market first if you can.
Launching high and cutting signals desperation. Launching low and raising is normal. When in doubt, start higher.
B2B specifics
- The value metric matters more than the number. Per seat, per project, per API call, per outcome, each changes customer behaviour. Pick one that grows with the value they receive.
- Publish prices below roughly $25k ACV. "Contact sales" costs you more in lost self-serve than it gains in negotiation.
- Expect discounting on annual prepay and multi-year. Build a floor you won't cross.
- Procurement features (invoicing, POs, SSO, security review) unlock deals independently of price.
📐 Best practice
Find the anchor from 3-5 real comparables before choosing anything.
Price against your closest structural comp.
Make annual the default, with a per-month equivalent and a computed saving.
Render prices from your store or billing system, never hard-coded.
Charge more than feels comfortable. Your first instinct is too low.
Show your prices.
Start higher; you can discount.
Grandfather on increases.
Instrument the pricing funnel before optimising anything.
Test with real users, not with reasoning, once you have volume.
💀 Common mistakes
Underpricing from fear. The default mistake, rationalised as "getting traction."
Cost-plus pricing software. Your marginal cost is near zero; it tells you nothing.
Inventing a number without checking comparables.
Monthly as default. Costs you cash and adds eleven churn decisions.
Hard-coded prices and savings badges. Wrong in every other currency; false the day you reprice.
Too many tiers. Choice paralysis.
Hiding prices below enterprise ACV.
Discounting reflexively. Teaches customers to wait for a sale.
Never raising prices. Your product improves; your price should.
Changing prices without measuring. You have no idea whether it helped.
Ignoring regional affordability, then wondering why conversion outside the US is near zero.
The professional workflow
1. COLLECT COMPARABLES — 3-5, monthly and annual
2. IDENTIFY YOUR CLOSEST STRUCTURAL COMP
3. CHOOSE A POSITION and write down why
(below closest comp, at/above category median is defensible)
4. DESIGN THE PACKAGE
~3 tiers · annual default · per-month equivalent · computed saving
5. CHECK REGIONAL AFFORDABILITY — PPP pricing or restrict availability
6. IMPLEMENT PRICES FROM THE BILLING SYSTEM — never hard-coded
7. INSTRUMENT
paywall views · plan selected · conversion · trial→paid · churn by plan
8. LAUNCH, then leave it alone long enough to get signal
9. TEST ONE VARIABLE AT A TIME once you have volume
10. RAISE PRICES for new cohorts as the product improves
Tools, websites & costs
| Need | Tool | Cost |
|---|---|---|
| Mobile pricing + experiments | RevenueCat, Adapty, Superwall | Free tiers |
| Web billing | Stripe Billing, Paddle, Lemon Squeezy | 2.9%+30¢ / ~5% |
| Benchmarks | RevenueCat State of Subscription Apps, OpenView | Free |
| Competitor paywalls | Adapty Paywall Library | Free |
| PPP pricing | ParityDeals, platform tiers | $0-29/mo |
| Price research (B2B) | Van Westendorp survey, Wynter | $0-$$$ |
| Funnel analytics | PostHog, Amplitude | Free tiers |
| Reading | Monetizing Innovation (Ramanujam & Tacke) | ~$25 |
Alternatives & trade-offs
Simple vs sophisticated. One price is easy to explain and leaves money on the table. Tiers capture more and add complexity. Start simple; add tiers when you can name who each is for.
Per-seat vs flat vs usage. Per-seat is predictable and penalises adoption (teams share logins). Flat is simplest and mismatched at extremes. Usage aligns with value and makes bills unpredictable. Hybrid, base plus overage, is the current default in developer tools.
Freemium vs paid-only. Covered in Chapter 25; the pricing consequence is that freemium requires a much clearer felt gap.
Discount vs added value. Discounting trains customers to wait. Adding value at the same price protects your position.
Introductory pricing. A genuine, time-boxed launch discount is honest and effective. A permanent "sale" is neither, and platforms treat fake urgency as a violation.
Checklist
- I have 3-5 comparables with monthly and annual prices
- I priced against my closest structural comp
- My position is written down with a reason
- Annual is default, with per-month equivalent and computed saving
- Prices render from the billing system, never hard-coded
- No hard-coded currency
- Regional affordability considered
- Four tiers or fewer
- Prices are visible (below enterprise ACV)
- The pricing funnel is instrumented
- I charged more than felt comfortable
- I have a plan to raise prices as the product improves
📓 Case Study: positioning on an existing scale
Project: SOLIS, a consumer subscription app.
The research came before the number. Three independent sources:
| Source | Monthly | Annual |
|---|---|---|
| Closest structural comp (same audience, same shape) | $19.99 | $59.99-79.99 |
| A philosophy-first competitor | $9.99 | $89.99 |
| A habit app in the adjacent space | , | $39.99 |
| Category norm (platform-wide data) | ~$9.99 | $29.99-39.99 |
| Health & Fitness median annual | , | ~$39.94 |
| The complaint quote's implied anchor | , | "charge $50/year" |
That last row is the interesting one. The universal complaint found during market research (Chapter 03) contained the number the market had already trained users to accept. You don't have to educate anyone about a price they already expect.
The decision: $9.99/month, $49.99/year, 3-day trial.
The position is defensible and can be explained in a sentence: $9.99 is exactly the category norm (no education required), $49.99 is above the median but well below the closest comp's $59.99-79.99, premium without being the most expensive option, which is a comfortable place to sit. And it matches the anchor users already carry.
The framing followed from the product: a full 90-day course for less than a month of coaching, roughly 11¢ per item.
Annual was made the product, correctly:
- Default-selected; monthly requires an active choice
- Per-month equivalent shown ($4.17/mo), so annual reads as cheaper
- Saving displayed as a percentage, and computed from the two real prices, hidden automatically if annual isn't actually cheaper
That last detail is worth stealing. A hard-coded "58% off" becomes false the moment you change a price in a dashboard, and nobody notices until a user does.
⚠️ Deviation 1: prices were hard-coded in the interface.
The paywall shipped with $9.99 and $49.99 written into the markup. Platforms charge every user in their own storefront's currency, so those numbers were wrong everywhere outside the US, and a displayed price that doesn't match the charged one is a rejection risk.
The trial had the mirror-image problem: the copy promised "3 days free" unconditionally, even though the offer only exists once configured, and a user who had already used their trial would be shown it again.
The fix rendered everything from the store: localised price strings, a per-month equivalent computed in the currency the user is actually charged in, a savings badge derived from the two real prices, and trial copy taken from the actual offer, dropping every mention of a trial when there isn't one.
Verified against fixtures for the US, India (different currency and price tiers), a one-week trial, a paid intro offer, an annual that isn't a saving, and a monthly-only configuration. That's the right test matrix, the interesting cases are the ones your home storefront never shows you.
⚠️ Deviation 2: a statistic nearly drove the trial length.
Early research collected: "longer trials convert ~2× better (17-32 days ≈46% vs 3-7 days ≈27%)." A large claim, pointing at a much longer trial.
Adversarial verification later refuted it, it couldn't be traced to a reliable source. It had already influenced planning.
The decision fell back to product logic instead: the free tier already opened the first seven days fully, so the free tier was effectively the long trial, and a 3-day paid trial on top wasn't the user's only chance to evaluate.
That's defensible reasoning, but it also exposes a design smell nobody resolved: the free tier and the trial were doing overlapping jobs. The honest answer is that this is an A/B test, not an argument, and it was never testable, because nothing was instrumented.
📐 Never change a pricing decision on the strength of a statistic you haven't verified. Decide on product logic; test with users.
🚩 Unvalidated. No users, no conversion data. The position is well-reasoned and entirely untested.
Lessons
- You're picking a position on an existing scale, not inventing a number.
- Price against your closest structural comp, not the category median.
- Users tell you the anchor for free, it's in their complaints.
- Annual is the product. Default-selected, per-month equivalent, computed saving.
- Compute the savings badge. Hard-coded percentages become lies.
- Never hard-code prices or currency. Render from the billing system.
- Test the storefronts you'll never see, other currencies, no-trial, no-saving configurations.
- Verify statistics before designing around them.
- Charge more than feels comfortable. The first instinct is too low.
- Price is easy to change; the model isn't. Spend your thinking on the model.