Your Pricing CTA Says 'Start Free Trial' to People Who Already Started One
Your Pricing CTA Says 'Start Free Trial' to People Who Already Started One
Most pricing pages are written for a stranger. Then you look at who's actually reading them, and the stranger turns out to be the minority.
Here's the setup. A self-serve SaaS, 14-day trial, three plans, no sales team. Trial-to-paid had been flat for two quarters. They'd already tried an annual discount, a "your trial ends tomorrow" email sequence, and moving the most popular plan to the middle column. Nothing moved the number.
The leak wasn't in the pricing table. It was in one button.
The trial-to-paid leak that wasn't in the pricing table
When they finally segmented pricing-page sessions by login state, the picture got boring fast:
- A large share of pricing views came from people already logged in, mid-trial.
- Those people saw the exact same button as a first-time visitor: Start Free Trial.
- Which is, for them, factually wrong. They already started one.
That's a clarity failure, not a design failure. The page looked fine. The copy was answering a question nobody in that segment was asking.
A day-9 trial user isn't wondering what Pro costs. They've read the price. Their actual question is: "If I pay now, what happens to the six projects and three teammates I just set up?"
And the page's answer was Start Free Trial, which reads as start over.
That's friction and a trust problem firing at the same moment — the two heuristics people usually treat as separate.
Three people land on your pricing page. Your CTA speaks to one.
- Anonymous evaluator. Never signed up. Question: "Is this worth ten minutes of my afternoon?" → Start free trial is correct.
- Logged-in trial user, day 2–14. Question: "What changes when I pay, and do I lose my setup?" → Start free trial is wrong on both counts.
- Lapsed or churned account. Question: "Do I get my data back?" → Start free trial reads like a factory reset.
If you don't know which of those three segments is eating your conversion, run a free audit on your upgrade flow before you rewrite a word. The drop-off point tells you which state is broken; guessing at copy just moves the problem.
Most teams fix the button color first. Fix the label first — hierarchy only helps after the words are true.
The one change: a state-aware CTA
What they shipped was not a redesign. Same layout, same prices, same plan grid. Three conditional strings and one line of subcopy.
- The CTA label changes based on session state.
- One line under the button answers the data question directly.
- No new plan, no discount, no urgency timer.
Before — everyone sees this
Pro — $49/mo
Unlimited projects · SSO · Priority support
[ Start Free Trial ]
No credit card required.
After — anonymous visitor
Pro — $49/mo
Unlimited projects · SSO · Priority support
[ Start free trial ]
14 days, no card. If it's not for you, there's nothing to cancel.
After — logged-in trial user, day 9 of 14
Pro — $49/mo
Unlimited projects · SSO · Priority support
You're on day 9 of 14. Upgrade and your 6 projects, 3 teammates,
and full history stay exactly as they are.
[ Upgrade to Pro — keep my workspace ]
$49/mo after today. Cancel yourself, any time, from Billing.
After — lapsed account
[ Reactivate Pro — restore my workspace ]
Your projects are still here. Reactivating puts everything back.
Why each line earns its place:
- "keep my workspace" names the exact thing the user is afraid of losing. Generic "Upgrade" makes them go find out.
- "You're on day 9 of 14" is feedback. It proves you know who they are — cheap personalization that isn't creepy.
- "$49/mo after today" is a billing fact, not reassurance. Reassurance sounds like sales; facts sound like a receipt.
- "Cancel yourself, any time, from Billing" kills the "will I have to email someone to get out" friction before it forms.
- "No credit card required" is gone for trial users. They already handed over a card or already answered that question. Irrelevant copy dilutes the one line that matters.
Why this moved trial-to-paid — and what it can't do
Trial-to-paid improved and held across the next two cohorts. I'm not going to hand you a percentage, because your price point, trial length, and baseline make mine meaningless. The mechanism is the transferable part:
- It answered the only question standing between the user and the charge.
- It removed an implied threat — that paying meant starting over.
- It turned a generic action into a specific, owned outcome (guidance, not decoration).
- It acknowledged session state, which is feedback most pricing pages never give.
- It quietly killed a support-ticket class: "if I upgrade, do I lose everything?"
What it can't do: rescue a trial too short to reach value, fix a product people don't want, or make a plan grid nobody can parse suddenly legible.
P0/P1/P2: fix your pricing CTA in this order
P0 — Stop lying to logged-in users. If you know session state, never render "Start free trial" to someone in a trial. This is the entire post.
P0 — Put the data answer on the page. One line: what happens to their work when they pay. If nothing is deleted, say nothing is deleted.
P1 — Name the plan in the button. "Upgrade to Pro" beats "Upgrade" — it confirms the choice and prevents a back-click to re-check.
P1 — Swap "No credit card required" for a billing fact on any logged-in pricing page. Amount, cadence, cancel path.
P2 — Add trial-day context ("day 9 of 14") only if you can render it reliably. Broken personalization is worse than none.
P2 — Test deadline framing against plain framing. Never fake scarcity. A countdown that resets on refresh is a trust bug, not a tactic.
The 30-minute playbook
- Open your pricing page in three browser states: logged out, logged in on trial, logged in on a paid plan.
- Screenshot all three side by side.
- For each, write the