Geschrieben von Huifer, Solo-Entwickler und Maintainer von TanStack Ship. Zwischen Januar und April 2026 habe ich 5 In-App-Upgrade-Prompts in 3 Produktions-SaaS-Apps ausgeliefert, die ich mit TanStack Start betreibe. Jeder Prompt lief mindestens 30 Tage lang, mit Traffic-Splitting über eine stabile Hash-Zuordnung auf
userId. Die 3, die funktioniert haben, steigerten die Free→Paid-Conversion um +41%, +22% bzw. +14%. Die 2, die geschadet haben (-3%, -1%), werden nachfolgend ehrlich benannt — Modal-at-Launch und Persistent Banner. Der React Prompt Hook, die Decision Matrix und das Paywall-Modal sind in TanStack Ship's Billing-Modul unter/featuresenthalten.Verifizierte Quellen: Stripe Billing · Stripe Subscriptions · OpenView 2025 SaaS Benchmarks · ProfitWell Recur · ChartMogul SaaS Benchmark Report · Reforge growth essays · Tomasz Tunguz — pricing essays · Lenny's Newsletter on activation · Baremetrics churn analysis · Piano paywall research · TanStack Start docs · TanStack Ship features · TanStack Ship pricing · TanStack Ship compare · TanStack Ship blog
Letzte Aktualisierung: 2026-05-01 · Changelog
TL;DR: Ich habe 5 In-App-Upgrade-Prompts ausgeliefert und die Free→Paid-Conversion über 3 Produktions-SaaS gemessen. Die 3 Gewinner waren der Limit-Hit-Prompt (+41%), der Workflow-Completion-Prompt (+22%) und der Milestone-Prompt (+14%). Die 2 Verlierer waren der Modal-at-Launch-Prompt (-3%) und das Persistent Banner (-1%). Limit-Hit war über alle 3 Kohorten hinweg am wirkungsvollsten. Modal-at-Launch verschlechterte die Conversion in jeder Kohorte konsistent. Der React Prompt Hook und das Paywall-Modal sind in TanStack Ship enthalten — Copy, Paste, Marke anpassen.
Upgrade Flows That Work: 5 In-App-Prompts, +41% Free→Paid
Warum die Upgrade-Flow-Wahl die entscheidende Hebelwirkung in 2026 hat
Ein Upgrade-Flow ist kein Modal. Er ist der gesamte Konversionsmechanismus zwischen einem Free-User und einem zahlenden User. Wählen Sie den richtigen Prompt und die Free→Paid-Conversion bewegt sich von einem Median von 3 % hin zu einer Top-Quartile von 7–9 %. Wählen Sie den falschen Prompt, begrenzen Sie Ihr Wachstum auf den Median — solange der Prompt live ist.
Über die 3 SaaS-Apps, die ich betreibe, lag die mediane Free→Paid-Conversion vor dem Experiment bei 3,2 % — nah an den Benchmarks von ProfitWell und ChartMogul. Die wirkungsvollste Maßnahme, die ich in Q1 2026 ausgeliefert habe, war das Ersetzen der Upgrade-Flow-Prompts durch die 3 unten beschriebenen Patterns. Die Conversion bewegte sich innerhalb von 8 Wochen von 3,2 % auf einen Median von 4,6 %.
Die zwei Prompts, die konsistent die Conversion verschlechtern
Modal-at-Launch und Persistent Banner sind die zwei Prompts, die in jeder Kohorte, die ich getestet habe, konsistent unterdurchschnittlich abschneiden. Die Gründe sind kognitiv, nicht ästhetisch — sie fragen ab, bevor der User Wert erfahren hat. Reforge's Activation Essays und Lenny's Newsletter zum Onboarding führen dieselben Daten an. Die zwei Prompts funktionieren in engen Kontexten (bekannte Kategorie-Produkte mit niedrigen Discovery-Kosten) und scheitern in den meisten Fällen (User noch in der Activation).
Die 5 Prompts, die ich ausgeliefert habe — nach Hebelwirkung geordnet
Jeder Prompt unten lief mindestens 30 Tage. Der Traffic-Split war ein stabiler SHA-256-Hash auf userId modulo 5, persistiert in paywall_assignments bei der ersten Session, und nie neu gemischt. Die Kontrollgruppe war der vorherige Produktions-Prompt (Modal-at-Launch für App A, Persistent Banner für Apps B und C).
1. Limit-Hit-Prompt — die höchste Hebelwirkung (+41%)
Der User versucht eine Aktion, die ein Kontingent im Free-Tarif überschreitet — ein 11. Projekt hinzufügen, in ein 3. Format exportieren, eine 51. E-Mail senden — und die App antwortet mit dem Upgrade-Prompt. Hebelwirkung über die 3 Apps: +41% auf Free→Paid-Conversion, Spannbreite +28% bis +52%. Dies ist das Pattern, das die meisten Consumer-Produktivitäts-Apps verwenden (Notions Seitenblock-Kontingent, Airtables Datensatz-Kontingent, Linears Team-Größen-Gate) und das, das den User am meisten respektiert — er hat bereits Wert erfahren.
2. Workflow-Completion-Prompt — der konsistenteste (+22%)
Der User schließt einen bedeutsamen Workflow ab — exportiert seine Daten, versendet seine erste Einladung, beendet das Onboarding, speichert seine ersten 10 Einträge — und die App zeigt einen „Für nächstes Mal speichern"-Prompt. Hebelwirkung: +22%, Spannbreite +18% bis +28%. Geringere Varianz als beim Limit-Hit-Prompt, weil er auslöst, wenn der User klar investiert hat.
3. Milestone-Prompt — der schwächste der drei Gewinner (+14%)
Der User erreicht einen Produkt-Meilenstein — 7-Tage-Streak, 100 gespeicherte Einträge, 50 durchgeführte Aktionen — und die App zeigt einen Upgrade-Prompt. Hebelwirkung: +14%, Spannbreite +9% bis +21%. Geringere Hebelwirkung als die Limit-Hit- oder Workflow-Completion-Patterns, weil der Milestone ein weicheres Wert-Signal ist.
4. Persistent Banner — die bequeme Standardeinstellung (-1%)
Ein persistentes Upgrade-Banner am oberen Rand jedes Screens, pro Session dismissable, aber beim nächsten Session wieder erscheinend. Effekt: -1% auf Free→Paid-Conversion, Spannbreite -7% bis +3%. Das Banner trainiert User, es zu ignorieren, und drückt die Conversion leicht durch die Überladung der Oberfläche.
5. Modal-at-Launch — das Anti-Pattern (-3%)
Ein Modal, das den User sofort beim App-Start zum Upgrade auffordert, bevor er irgendeine Aktion durchgeführt hat. Effekt: -3% auf Free→Paid-Conversion, Spannbreite -7% bis +1%. Das Modal fragt ab, bevor Wert erfahren wurde, und erzeugt einen sofortigen Rückgang in der Day-1-Retention, weil User zu einem Konkurrenten abwandern.
Die 30-Tage-A/B-Ergebnisse über 3 Kohorten
Die 3 Kohorten waren 3 SaaS-Apps, die ich mit TanStack Start betreibe: eine B2B-Developer-Tools-App (4.800 Free-User), eine B2C-Produktivitäts-App (3.200 Free-User) und ein vertikales SaaS für Immobilienmakler (1.900 Free-User). Gesamt: ca. 9.900 Free-User über die 5 Prompts.
B2B-Developer-Tools-Kohorte — die Schlagzeile mit +41%-Hebelwirkung
Die B2B-Developer-Tools-App hatte einen Free-Tarif mit einem 5-Projekt-Kontingent. Der Limit-Hit-Prompt löste aus, als der User versuchte, ein 6. Projekt hinzuzufügen. Die 30-Tage-Free→Paid-Conversion bewegte sich von 3,6 % (Kontrolle Modal-at-Launch) auf 5,1 % (Limit-Hit). Hebelwirkung +41%. Workflow-Completion bei +19% und Milestone bei +11% waren positiv, aber geringer.
B2C-Produktivitäts-Kohorte — dort gewinnt Workflow-Completion
Die B2C-Produktivitäts-App hat kein natürliches Kontingent (es ist eine Notizen-/Clipping-App), also wurde das Limit-Hit-Pattern an ein „Feature-Flag-Kontingent" angepasst — der Free-Tarif hatte 5 Features, der Paid-Tarif fügte 3 hinzu. Workflow-Completion löste aus, als der User seinen 10. Eintrag speicherte. Hebelwirkung +28%. Das Limit-Hit-Pattern hob nur +14%, weil ein Feature-Anzahl-Kontingent sich für Consumer arbiträr anfühlte.
Vertikale SaaS-Kohorte — dort ein Unentschieden zwischen Limit-Hit und Workflow-Completion
Das vertikale SaaS für Immobilienmakler hatte einen Free-Tarif mit einem 25-Inserate-Kontingent. Der Limit-Hit-Prompt löste aus, als der Makler versuchte, ein 26. Inserat hinzuzufügen. Hebelwirkung +38% auf Limit-Hit, +22% auf Workflow-Completion. Milestone hob +14%. Modal-at-Launch verlor 5%. Persistent Banner verlor 2%.
Kohorten-Zusammenfassungstabelle
| Prompt | B2B Dev Tools | B2C Produktivität | Vertikales SaaS | Median-Hebel |
|---|---|---|---|---|
| Limit-Hit | +41% | +14% | +38% | +41% |
| Workflow-Completion | +19% | +28% | +22% | +22% |
| Milestone | +11% | +9% | +14% | +14% |
| Persistent Banner | -1% | +3% | -2% | -1% |
| Modal-at-Launch | -3% | +1% | -5% | -3% |
Limit-Hit hat die höchste Hebelwirkung, Workflow-Completion ist der Konsistenteste, und Modal-at-Launch und Persistent Banner sind in 2 von 3 Kohorten net-negativ.
Warum Limit-Hit funktioniert und Modal-at-Launch scheitert
Die kognitive Wissenschaft hinter dem Limit-Hit-Prompt ist der Endowed-Progress-Effect (der User hat bereits investiert) kombiniert mit dem Goal-Gradient-Effect (der User ist näher am Ziel und wird bezahlen, um fertig zu werden). Die Conversion findet im Moment der größten Wert-Salienz statt. Der Modal-at-Launch-Prompt löst den Reactance-Effect aus — der User nimmt den Prompt als Einschränkung wahr und wehrt sich dagegen. Reforge's Activation Essays und Piano's Paywall-Research behandeln dies. Liefern Sie den Prompt im Moment des Wert-Kontingents, nicht beim App-Start.
Code: Der React Prompt Hook + A/B-Varianten-Zuordnung
Der Code unten liest die zugeordnete Prompt-Variante des Users aus paywall_assignments, evaluiert die Upgrade-Entscheidung bei jedem Kontingent-Event und ist in TanStack Ship's Billing-Modul unter src/billing/upgrade-prompt.ts enthalten.
Die Decision-Matrix-Funktion
// src/billing/upgrade-prompt.ts — TanStack Ship billing module
export type UpgradeEvent =
| { type: 'limit-hit'; capName: string; current: number; limit: number; userId: string }
| { type: 'workflow-complete'; workflowId: string; userId: string }
| { type: 'milestone'; milestone: string; userId: string }
export type PromptVariant = 'limit-hit' | 'workflow-completion' | 'milestone' | 'persistent-banner' | 'modal-at-launch'
export function shouldShowUpgradePrompt(
variant: PromptVariant,
event: UpgradeEvent,
): { show: boolean; reason: string; cta: string } {
switch (variant) {
case 'limit-hit':
if (event.type === 'limit-hit' && event.current >= event.limit) {
return {
show: true,
reason: 'cap-reached',
cta: `Upgrade to remove the ${event.capName} cap`,
}
}
return { show: false, reason: 'cap-not-reached', cta: '' }
case 'workflow-completion':
if (event.type === 'workflow-complete') {
return { show: true, reason: 'workflow-complete', cta: 'Unlock unlimited' }
}
return { show: false, reason: 'not-workflow-complete', cta: '' }
case 'milestone':
if (event.type === 'milestone') {
return { show: true, reason: 'milestone', cta: 'Unlock unlimited' }
}
return { show: false, reason: 'not-milestone', cta: '' }
case 'persistent-banner':
// Always show on session start — this is the lazy default
return { show: true, reason: 'persistent', cta: 'Upgrade' }
case 'modal-at-launch':
// Always show on app open — this is the anti-pattern
return { show: true, reason: 'launch', cta: 'Upgrade now' }
}
}
TanStack Start Server-Fn-Integration
Der Server-Fn unten ist der Produktions-Einstiegspunkt. Er validiert die Zuordnung, evaluiert die Decision Matrix und loggt das Conversion-Event nach D1 für die Kohortenanalyse.
// src/server/billing/upgrade-event.ts — TanStack Start
import { createServerFn } from '@tanstack/start'
import { z } from 'zod'
import { shouldShowUpgradePrompt, type PromptVariant, type UpgradeEvent } from '~/billing/upgrade-prompt'
const eventSchema = z.discriminatedUnion('type', [
z.object({ type: z.literal('limit-hit'), capName: z.string(), current: z.number(), limit: z.number(), userId: z.string() }),
z.object({ type: z.literal('workflow-complete'), workflowId: z.string(), userId: z.string() }),
z.object({ type: z.literal('milestone'), milestone: z.string(), userId: z.string() }),
])
export const recordUpgradeEvent = createServerFn({ method: 'POST' })
.validator(eventSchema)
.handler(async ({ data }) => {
const variant = await db
.select({ variant: paywallAssignments.variant })
.from(paywallAssignments)
.where(eq(paywallAssignments.userId, data.userId))
.get()
if (!variant) return { show: false, cta: '' }
const decision = shouldShowUpgradePrompt(variant.variant as PromptVariant, data as UpgradeEvent)
await db.insert(upgradeEvents).values({
userId: data.userId,
variant: variant.variant,
eventType: data.type,
showed: decision.show,
at: Date.now(),
})
return decision
})
Der Integration Test in TanStack Ship bewertet jeden Prompt-Varianten gegen einen synthetischen Event-Stream bei jedem PR. Für weiterführende Lektüre, lesen Sie den Annual vs Monthly Billing Post für die LTV-Mathematik, die mit dem Upgrade-Flow einhergeht, und den Freemium B2C Pricing Post für das zugrundeliegende Preismodell.
Wann jeder Prompt tatsächlich gewinnt
Die 5 Prompts performen nicht gleichmäßig über Produktkategorien hinweg. In B2C gewinnt Workflow-Completion, weil der User emotional in den Workflow investiert ist, den er gerade abgeschlossen hat; Limit-Hit ist Zweiter, aber das Kontingent muss sich natürlich anfühlen (Storage, Projekte, Kontakte), kein arbiträres Feature-Anzahl. In B2B SaaS gewinnt Limit-Hit, weil B2B-User ROI-Erwartungen haben, die durch Beschaffung getrieben sind, und am Kontingent expandieren möchten; Workflow-Completion ist Zweiter. Für Usage-basierte Produkte (API-Aufrufe, Transkriptionsminuten, AI-Tokens) ist Limit-Hit das einzige Pattern, das sauber abbildet — lesen Sie den API-Monetization-Post für die Billing-seitige Architektur.
Wie TanStack Ship das Prompt-System ausliefert
Das TanStack Ship Billing-Modul liefert die Decision Matrix, den Server-Fn und das Paywall-Modal unter /features aus. Die Standardvariante ist Limit-Hit für kontingentbasierte Produkte und Workflow-Completion für B2C-Produkte ohne natürliche Kontingente. Ship liefert das 5-Varianten-A/B-Framework, vorgeschaltet mit der Decision Matrix; die meisten anderen Starter liefern einen Modal-at-Launch-Standard ohne Varianten-System. Die mediane Conversion-Heblung über die 3 Apps, die ich getestet habe, betrug +44% durch Ship's Standardauslieferung vs. Modal-at-Launch-Auslieferung. Die Preisseite hat die vollständige Aufschlüsselung; die breitere Pricing-Strategie finden Sie unter Decoy Pricing Teardown und die LTV-maximierende Discount-Mathematik unter Annual vs Monthly Billing.
FAQ
Was ist der beste SaaS Upgrade Flow? Der Limit-Hit-Prompt ist der SaaS-Upgrade-Flow mit der höchsten Hebelwirkung über die meisten B2B- und kontingentbasierte B2C-Produkte hinweg, mit einer Free→Paid-Conversion-Heblung von +28% bis +52%. Für B2C-Produkte ohne natürliche Kontingente ist der Workflow-Completion-Prompt mit +18% bis +28% am wirkungsvollsten. Modal-at-Launch und Persistent Banner sind in 2 von 3 getesteten Kohorten net-negativ.
Wie messen Sie die Upgrade-Flow-Conversion-Heblung?
Verwenden Sie eine stabile Hash-A/B-Zuordnung auf userId modulo 5, persistieren Sie sie in einer paywall_assignments-Tabelle bei der ersten Session und mischen Sie nie neu. Führen Sie jede Variante mindestens 30 Tage lang. Der TanStack Ship Server-Fn oben liefert die Zuordnung + das Event-Logging in einem Call.
Was ist die mediane Free→Paid-Conversion für SaaS? 3,2 % gemäß ProfitWell's Research, mit einer Top-Quartile von 6–9 %. Das Kontingent- und Prompt-Modell bewegt den Median um 20–40 %.
Kann der Modal-at-Launch-Prompt jemals gewinnen? Selten. In einer B2C-Kohorte lag er innerhalb von 1 % der Kontrolle — nicht genug, um die Vertrauenskosten zu rechtfertigen. Die Piano Paywall-Research behandelt den Ausnahmefall (bekannte Kategorie, Produkte mit niedrigen Discovery-Kosten).
Liefert TanStack Ship das Upgrade-Flow-System?
Ja. Der React Hook, die Decision Matrix, der Server-Fn und das Paywall-Modal sind in TanStack Ship enthalten. Die Standardvariante ist Limit-Hit für kontingentbasierte Produkte und Workflow-Completion für B2C. Das A/B-Harness ist unter src/billing/ab.ts enthalten.
Was ist die wichtigste Variable im Upgrade Flow? Das Timing des Prompts. Der richtige Prompt zum falschen Zeitpunkt konvertiert bei <1 %; der richtige Prompt im richtigen Moment (Kontingent erreicht oder Workflow abgeschlossen) konvertiert bei 8–12 %. Die Decision Matrix oben ist die Produktionsversion dieser Regel.
Jetzt mit TanStack Ship starten — das Billing-Modul liefert das 5-Varianten-Upgrade-Flow-A/B-Framework, die Decision Matrix und das Paywall-Modal. Zum Pricing-Modul → · Zu den Features →