Teardowns and before/after case studies·

Your Upgrade Button Sends People to the Wrong Page: A Trial-to-Paid Case Study

Your Upgrade Button Sends People to the Wrong Page: A Trial-to-Paid Case Study

The team had rewritten their pricing page twice. New feature bullets, a testimonial row, a "most popular" badge on the middle plan. Trial-to-paid didn't move.

Then they watched the session recordings of people who clicked Upgrade inside the app. Almost every one of them landed on the public pricing page — three columns, a marketing nav, a cookie banner — scrolled, clicked "Compare features," and left.

The copy was fine. The destination was wrong.

This is the teardown of the one change that fixed it. No fabricated benchmark at the end — you'll get the screens, the copy, the shipping order, and the measurement plan that tells you whether it worked on your traffic.

The leak you aren't instrumenting: what happens after the upgrade click

Your analytics almost certainly logs a pricing_page_view and files it under marketing. But when that view came from a logged-in user who clicked Upgrade, it isn't a marketing page view. It's the highest-intent event in your funnel: someone who has already used the product and is now trying to give you money.

And you hand them a page built for strangers.

What the public pricing page does that's wrong at this exact moment:

  • It re-asks who they are. No usage, no seats, no days left in trial. The user has to reconstruct their own context from memory.
  • It turns a decision into a comparison. Three plans, a feature table, a monthly/annual toggle. They arrived with one question and got handed a research task.
  • It offers nine exits. Marketing nav, docs, blog, changelog. Every one of them is a way to postpone the decision indefinitely.
  • It prices in the abstract. "Up to 50 invoices" means nothing until the screen also says they've sent 41 this month.
  • It doesn't answer "what happens Friday." The single most common unspoken question at trial end is never addressed.

This isn't a clarity failure. The page is clear. It's a hierarchy and guidance failure: the right content in the wrong order, for a user who is mid-decision rather than mid-shopping.

The before state: three plans, no memory, no context

Here's the flow as it shipped, and the friction at each step.

Before

  1. Trial banner: Trial: 3 days left — Upgrade in red.
  2. Click → public pricing page.
  3. Three-column plan grid, annual toggle, feature comparison below the fold.
  4. Click a plan → checkout, sometimes with a fresh form.
  5. Confirmation email, no on-screen confirmation of the new limit.

Friction points, in order of cost:

  • Re-orientation: the user leaves the app and loses the task they were in.
  • Re-entry: any card or company detail already on file gets typed again.
  • Re-decision: they now have to compare plans they never intended to compare.
  • Silence: nothing on the page acknowledges the trial, the date, or the data they've accumulated.

After

  1. Trial banner: Trial ends Friday · 3 days left · See my plan in neutral grey.
  2. Click → in-app upgrade screen. No navigation change.
  3. One plan card, populated with their own numbers.
  4. One confirm step, card on file reused.
  5. Confirmation screen shows the new limit already applied.

The routing change is the whole change. Everything else is copy.

The change: one in-app screen that answers three questions

The screen only has to answer three things, in this order:

  • What have I built here? Their invoices, their teammates, their projects. Live numbers, pulled from their account.
  • What do I lose on Friday? The one specific limit they'll hit, named, not the full feature matrix.
  • What does it cost, and when does it start? One price. One date. In the button, not in a footnote.

Then: one button. The comparison table goes behind a link below it, not above it. That's progressive disclosure doing real work — the full matrix is available, but it isn't the first thing a decided user has to wade through.

Trust here comes from using their data instead of your claims. "You've sent 41 invoices" is credible in a way "powerful invoicing tools" never will be, because they can check it.

If you're not sure which of your screens is leaking before you start rebuilding, run a free audit on your upgrade flow — it flags the routing problem before it flags the copy.

Before/after: the three lines that did the work

The layout change mattered. The words did the converting.

Header

  • Before: Choose the plan that's right for you
  • After: Your trial ends Friday. Here's what you'd lose.

Subhead

  • Before: Upgrade to unlock more features and remove limits.
  • After: You've sent 41 invoices and added 2 teammates this month. Pro keeps both and lifts your invoice limit to unlimited.

Primary button

  • Before: Upgrade now
  • After: Keep my account — $29/mo from Friday

Secondary action

  • Before: Compare plans
  • After: Not ready? Your data stays read-only for 30 days. Remind me.

Why each one earns its place:

  • The header names the date, which converts an open-ended nag into a deadline the user can plan around.
  • The subhead is a mirror, not a pitch — it repeats their usage back to them, which is the cheapest trust you will ever buy.
  • The button carries the price and the first billing date, so "when am I charged?" is answered before it's asked. The em dash beats a footnote every time.
  • The secondary link turns a hard no into a deferral instead of an exit. That's feedback, not pressure — and it keeps the account alive for one more week.

One rule: never use the word "Upgrade" as the button label. It describes your revenue event, not their outcome.

Ship it this week: a P0/P1/P2 playbook

P0 — the routing and the screen

  • Any upgrade click while authenticated lands on an in-app upgrade screen, never the public pricing page.
  • That screen shows three live values: usage this period, seats, days left in trial.
  • One recommended plan. Comparison table behind a link, below the fold.

P1 — the copy

  • Header names the trial end date.
  • Button names the price and the first billing date.
  • Secondary action offers a deferral, not a dead end.
  • One plain sentence about what happens to their data if they don't convert.

P2 — the edges

  • Card on file: skip the form, single confirm step.
  • Confirmation screen shows the new limit already active — that's feedback closing the loop.
  • Annual toggle defaults to monthly, with the annual saving shown as a line of text, not a tab war.

Keep the public pricing page. It's a comparison page for strangers, and it should stay that way. Just stop routing insiders to it.

What to measure, and the mistake that erases the lift

  • Instrument the click, not the page. upgrade_clicked → upgrade_screen_viewed → plan_confirmed → payment_started → paid. If you only track page views, the routing change is invisible in your own data.
  • Cohort by trial start date, not by calendar week. Trials straddle your ship date and will smear the result if you slice by week.
  • Watch the deferral rate. If "Remind me" spikes after the change, your price or your timing is wrong — not your copy.
  • One change per release. If you ship the new screen and a discount in the same week, you learn nothing and you'll be rewriting the pricing page for a third time.

The mistake that erases the lift is bundling. The routing fix and the copy rewrite belong in the same release because they're the same screen. Everything else — annual toggle, testimonials, a new plan tier — waits.

Trial-to-paid doesn't usually move because of a better argument. It moves because you stopped interrupting a decision with a comparison. More teardowns of this shape live on the blog if you want the pattern across other flows.

If your trial-to-paid number has stayed flat through two copy rewrites, the leak is probably upstream of the words. Start a free FlowAudit at /signup and you'll get a prioritized P0/P1/P2 fix list for your own trial-to-paid flow in minutes — routing first, screen second, copy third.