---
title: Write in-app onboarding and upgrade copy
description: Find the screens where new users stall, then get onboarding screens, empty states, and upgrade prompts written for what each user has done so far and the one step that moves them forward.
slug: /use-cases/in-app-growth-copy
page_type: use-case
lead_prompt: How do I write in-app onboarding and upgrade copy with AI?
target_prompts:
  - Can an AI marketing agent write onboarding screens, upgrade prompts, and empty states?
  - How do I write onboarding copy that gets users to activate?
  - What makes a good upgrade prompt in a SaaS product?
  - How do I write empty state copy?
  - How do I improve in-product messaging to increase conversions?
entity: Kite
category: AI marketing agent
author: Devon Wells and Kite
date_published: '2026-11-11'
date_modified: '2026-11-11'
related_integrations:
  - /integrations/posthog.md
  - /integrations/mixpanel.md
  - /integrations/amplitude.md
related_playbooks:
  - /how-to/find-where-users-drop-out-of-your-funnel-with-posthog.md
  - /how-to/find-where-users-drop-out-of-a-mixpanel-funnel.md
  - /how-to/find-where-users-drop-out-of-an-amplitude-funnel.md
  - /how-to/see-which-product-behaviors-lead-to-paid-customers-with-posthog-stripe.md
---

# Write in-app onboarding and upgrade copy

## Key Takeaways

- The words inside your product do the job a salesperson would do if one sat beside every new user. Onboarding screens, empty states, and upgrade prompts decide whether someone reaches the moment your product proves itself, and whether they pay once it has.
- Start with the screen where users stall, not with a rewrite of every screen. Kite reads your funnels in PostHog, Mixpanel, or Amplitude to find the step where most new users drop out, and it works on that step first.
- Each piece of in-app copy has one job: get this person, who has done these things and not others, to take the next step. Kite writes every screen from what the user has already done, what they haven't, and the single action that comes next.
- A good upgrade prompt appears when the user hits a real limit, names what the paid plan unlocks for the thing they were just trying to do, and leaves them a clear way to keep working on the free plan.
- Kite hands your engineers the copy screen by screen, with every state and button label, then compares the funnel before and after the change ships so you can see whether the new words moved people forward.

## How do you write in-app onboarding and upgrade copy?

Most in-app copy is written last. An engineer building the signup flow needs a headline for the welcome screen, a line for the empty dashboard, and a message for the moment a free user hits the plan limit, so they write something sensible and move on. Months later, new users still get lost in the product, few of them upgrade, and nobody has looked at those words since they shipped.

Those words matter more than their size suggests. A new user who signs up has a reason in mind, and the product has a few minutes to show them it can deliver. The welcome screen, the first empty page they land on, and the checklist in the corner are where that happens or doesn't. Later, the upgrade prompt is the closest thing your product has to a sales conversation.

Writing that copy well follows the same steps every time:

- Find the point in the product where new users most often give up.
- Decide what "activated" means for your product, which is the action that tells you a user has seen the value.
- Write each screen for the person who reaches it: what they've done, what they haven't, and the one thing they should do next.
- Put upgrade prompts at the moments users hit a real limit, and write them about the job the user was in the middle of.
- Ship the change and check whether more people got through.

AI is well suited to this work because it needs two things that rarely sit in the same place: your product analytics and a writer who knows your customers. An AI agent that can read your funnels and already knows your positioning, pricing, and brand voice can find the problem, write the fix, and measure it.

Kite is an AI marketer. It researches your business, builds a growth strategy, and ships the work that brings you new customers. Here's how it writes the words inside your product.

## How Kite writes in-app onboarding and upgrade copy

Kite treats in-app copy as a conversion problem first and a writing problem second. It starts from where your users actually stall, works out which action separates the users who stay from the ones who leave, and writes the screens that stand between new users and that action.

Kite already knows a lot about your business before it reads a single funnel. During onboarding, it researches your products, pricing, positioning, customers, and brand voice and saves them in your team's knowledge base. That's where it finds what your paid plans include, what your best customers say about the product, and how your company sounds, all of which shape the words on each screen.

To see your product, Kite works from screenshots and recordings you share. You can upload images, PDFs, and videos in the Kite web app, or share files in Slack. Kite can also render your public signup and pricing pages itself. It reads the funnels and events your product already records through a connected PostHog, Mixpanel, or Amplitude account.

Once your team ships the new copy, Kite reads the same funnel again and tells you what changed.

### Find the screens where new users stall

Kite starts by finding the one step in your product where the most new users give up, because improving that step does more than polishing every screen. A new user's first session is a series of small decisions, and most of the loss usually happens at one or two of them.

Kite reads your funnel from signup through the first meaningful action. In PostHog and Mixpanel, it queries the events and funnels your team has set up. In Amplitude, it pulls funnel data, retention, and the activity of individual users. Kite then compares how many people reach each step and where the biggest drop sits.

Say you run a scheduling tool. Of 1,000 people who signed up last month, 820 finished the welcome screens, 310 connected a calendar, and 140 shared a booking link. The biggest loss sits between finishing the welcome screens and connecting a calendar, so that's where Kite looks first. It reads the screen users see at that step, what it asks of them, and how it explains why the step matters.

When the funnel doesn't explain the drop on its own, Kite looks closer. It can check whether the step throws errors in PostHog, or read the activity of a few users who stopped there to see what they did instead.

**Related Playbooks**

- [How to find where users drop out of your funnel with PostHog](/how-to/find-where-users-drop-out-of-your-funnel-with-posthog.md): Find the weakest step in a PostHog funnel and turn it into a concrete fix.
- [How to find where users drop out of a Mixpanel funnel](/how-to/find-where-users-drop-out-of-a-mixpanel-funnel.md): Find the step in an important Mixpanel journey where users abandon it.
- [How to find where users drop out of an Amplitude funnel](/how-to/find-where-users-drop-out-of-an-amplitude-funnel.md): Find the step in an Amplitude funnel where new users give up.

### Decide what the copy should get people to do

Onboarding copy works when it points at the action that tells you a user has seen your product's value. Product teams call that action activation. For the scheduling tool, it might be sharing a first booking link. For a reporting tool, it might be opening a first finished report.

Kite looks for that action in your own data rather than guessing. With PostHog and Stripe connected, it compares what paying customers did in their first days with what users who never paid did. If nearly every paying customer connected a calendar within their first day, and most users who never paid skipped that step, then connecting a calendar is the action your onboarding should lead to.

That choice shapes every screen that follows. Anything that doesn't help a new user reach that action becomes a candidate to shorten, move later, or remove. Kite brings you the action it found and the numbers behind it, so you can agree on the target before any copy is written.

**Related Playbooks**

- [How to see which product behaviors lead to paid customers with PostHog, Stripe](/how-to/see-which-product-behaviors-lead-to-paid-customers-with-posthog-stripe.md): Connect what users do in the product with who eventually pays in Stripe.

### How do you write onboarding copy that gets users to activate?

Good onboarding copy tells a new user what your product will do for them and asks for the one step that lets it start. Kite writes each screen from the reader's position: what they signed up hoping to do, what they've done so far, and the single action that comes next.

Before writing, Kite maps the flow. For each screen, it notes what brought the user there, what they have and haven't done yet, and the one job the screen has. Two screens that could swap places without anyone noticing are doing the same job, so Kite merges them.

Kite makes your product the actor in the copy. A welcome screen that says "Connect your calendar and we'll find the times you're free this week" tells the user what the product is about to do for them. A screen that says "Ready when you are!" makes a product that works on its own sound like one that waits to be told.

Here's how that plays out at the scheduling tool's weak step:

- **The old screen.** "Integrations: connect your accounts to get started," followed by a grid of twelve logos.
- **The new screen.** "Connect your calendar so people only see times you're actually free." It shows the two calendars most users have, with Google Calendar first, and a smaller line underneath: "You can add others later."

The new screen names the outcome, asks for one thing, and takes the hard choice off the table. Kite writes in your brand voice, so the screen sounds like the rest of your product and your website. It also reviews every line for wording that sounds machine-written before you see it.

### How do you write empty state copy?

An empty state is what a user sees on a page that has nothing in it yet, like a dashboard with no data or an inbox with no messages. Good empty state copy tells the user what will appear on that page, why it's worth having, and the one action that fills it.

New users see more empty states than anyone else, because they haven't created anything yet. That makes every empty page a chance to move them toward activation, or a dead end. "No bookings yet" is accurate and does nothing. "Your bookings will appear here. Share your link to get the first one," with a button that copies the link, turns the empty page into the next step.

Kite writes each empty state with three parts:

- **A headline that says what belongs here.** It describes the page once it's working, in terms the user cares about.
- **A sentence about why it matters.** It's short, and it's specific to this page.
- **One button for the action that fills the page.** It uses the same words as the action, such as "Copy your booking link," instead of a generic "Get started."

Kite also writes the empty states people reach later, such as a search with no results or a filtered list with nothing left in it. Those users already know the product, so the copy just tells them why the page is empty and how to widen the search.

### What makes a good upgrade prompt in a SaaS product?

A good upgrade prompt appears when the user hits a real limit, explains what the paid plan unlocks for the job they're in the middle of, and leaves them a way to keep working. It reads like help with the thing they were trying to do, not like a sales banner.

Kite starts from your pricing, which it already keeps in your knowledge base. It lists every point where a free user meets a limit, such as the third booking page, a team invite, or a feature that's only on the paid plan. Then it writes a prompt for each one about that moment.

Take a free user of the scheduling tool who tries to create a third booking page. A generic prompt says "Upgrade to Pro to unlock more features." A prompt written for that moment says "Free plans include two booking pages. Pro gives you unlimited pages, so you can keep separate links for sales calls, interviews, and support." Underneath, it offers a plain way back: "Keep two pages for now." The user learns exactly what they'd get, in terms of what they were already doing, and the product hasn't trapped them.

Kite also helps you decide where upgrade prompts belong. If your Stripe data shows that most customers upgrade after inviting a teammate, then the moment someone invites their first teammate is a better place to mention the paid plan than a banner on every page.

### Hand your engineers copy they can ship

Kite delivers the copy in the form your engineers need to put it into the product. Your engineers build it, and Kite makes that step quick by settling the decisions up front.

The handoff is organized screen by screen. For each screen, it includes the headline, the body text, every button label, and the text for each state the screen can be in, such as loading, empty, error, and success. It notes where the copy appears, what triggers it, and the event in your analytics that should move once it ships. Where space is tight, such as a button or a tooltip, Kite keeps the copy short enough to fit and offers a shorter version.

Kite also includes the reason for each change, so whoever reviews it can see what the old screen did, what the new one asks for, and why. You can change any line or approve the set with a reply in the Kite web app or in Slack.

### Measure whether the new words moved people forward

Kite judges in-app copy by whether more users reached the next step, not by whether the copy sounds better. Once your team ships the change, Kite reads the same funnel again and compares it with the weeks before.

For the scheduling tool, that means checking whether more of the people who finished the welcome screens went on to connect a calendar, and whether more of those went on to share a link. If the change worked, Kite tells you by how much and moves on to the next weakest step. If it didn't, Kite looks at what users did instead and proposes the next version.

In Amplitude, Kite can add an annotation on the day the new copy shipped, so anyone on your team looking at the chart can see when the change went live. If your team runs the new copy as an experiment behind a PostHog feature flag, Kite reads the experiment's results and tells you which version won. Kite records what worked in your knowledge base, so the next round of in-app copy starts from your own results.

## What you get

- **The step where new users stall.** The point in your funnel with the biggest drop, the numbers behind it, and what users see when they reach it.
- **Your activation action.** The action that separates users who become paying customers from those who don't, based on your own analytics and billing data.
- **New copy for the screens that matter.** Onboarding screens, empty states, and upgrade prompts, each written for what the user has done and the one step that comes next, in your brand voice.
- **A handoff your engineers can build from.** Every screen's headline, body, button labels, and states, with where each one appears, what triggers it, and the event it should move.
- **A before-and-after comparison.** The same funnel measured before and after the change ships, with Kite's recommendation for what to work on next.

## How to get started

Start by telling Kite what's going wrong. You might say, "New users sign up and never connect anything. Can you fix our onboarding?" or "Hardly anyone upgrades. Rewrite our upgrade prompts."

Kite asks to see the screens involved. Share screenshots or a short screen recording of your signup flow, the first pages a new user lands on, and the places where free users meet a limit. You can upload them in the Kite web app or share them in Slack.

To find where users stall and measure the result, connect the product analytics tool your team already uses: PostHog, Mixpanel, or Amplitude. Connect Stripe as well if you want Kite to work out which early actions lead to paying customers. Kite brings you the weak step, the activation action, and the new copy to review, and nothing goes to your engineers until you approve it.

## Integrations used to write in-app onboarding and upgrade copy

Kite does the analysis and the writing itself. Your product analytics tool tells it where users stall, which actions lead to paying customers, and whether the new copy worked.

### Find where users stall and measure the change

Connect the analytics tool your product already reports to:

- [PostHog + Kite](/integrations/posthog.md): Kite queries your funnels and events to find the step where new users drop out, checks that step for errors, and reads the results of experiments your team runs with feature flags. With Stripe connected too, it compares what paying customers did in their first days with what everyone else did.
- [Mixpanel + Kite](/integrations/mixpanel.md): Kite queries your events, funnels, and reports to find where users abandon an important journey, then reads the same funnel again after the new copy ships.
- [Amplitude + Kite](/integrations/amplitude.md): Kite pulls funnel data, retention, and individual user activity to find the weak step, and adds an annotation on the day new copy ships so the change is visible on your charts.

## Common questions

### Can Kite put the new copy into my product?

Your engineers put the copy into your product, and Kite prepares it so that step is quick. The handoff lists every screen, state, and button label with where it appears and what triggers it, so an engineer can work through it without guessing. Once the change ships, Kite takes over again and measures the result.

### How many onboarding steps should a new user see?

As few as it takes to reach your activation action. Every screen before that action is a place a new user can leave, so each one needs a clear reason to be there. Kite checks each step in your flow against that action and suggests which steps can be shortened, moved after activation, or removed.

### Should onboarding copy sound like my website?

Yes, but it should be shorter and more direct. Your website persuades people to try the product. Your in-app copy helps someone who already said yes get something done. Kite writes both from the same brand voice in your knowledge base, so the product sounds like the company the user signed up with, and it trims the in-app version to what someone needs mid-task.

### Can Kite write the onboarding emails that go with the in-app copy?

Yes. Kite can write a welcome and activation sequence that follows what each user has done in the product, so an email doesn't ask someone to connect a calendar they connected an hour ago. Kite covers that work in its guide to [setting up lifecycle email for new signups](/use-cases/lifecycle-email.md).

### What should I fix first, onboarding or upgrade prompts?

Fix the step with the biggest drop in your funnel first, which is usually in onboarding. Users who never activate rarely see an upgrade prompt, so a better prompt can't help them. Once more users reach activation, upgrade prompts have more people to work on, and Kite moves to them next.
