Copy Lab: An AARRR-Driven Copy Inspiration Generator
Why I Built Copy Lab
This idea came to me as a side project while I was studying marketing theory in a systematic way. I have always felt that AI cannot really finish a piece of marketing copy for you. Tone, restraint, and a real feel for the audience are still things people understand better.
But I was curious about a narrower question: can AI help at the intersection of inspiration and consumer psychology? By mixing theories from persuasion psychology and consumer behavior with a real product scenario, it could offer an angle that has real theoretical grounding, one that still needs a person to shape it further.
Building it did two things at once. It forced me to actually use the theory I was learning and to explain clearly why each messaging angle holds up. It also let me test the limits of AI: whether it could reliably tell an external trend apart from an internal execution tactic, and whether it could stay consistent about following the writing rules.
1. Positioning
Copy Lab is an AI copy inspiration tool for growth marketers. Based on a product's lifecycle stage and a specific scenario, it draws on consumer psychology to generate three inspiration packages at once, each built around a different angle. The goal is to help marketers find direction fast, not to produce finished copy.
2. User Inputs
2.1 Basic Inputs
| Input | Type | Description |
|---|---|---|
| Product name | Free text | Must be a real product, for example Notion or BeautyPlus. A made-up name gives the AI nothing to work with: it cannot judge category, positioning, or target users |
| Product type | Single select | B2B SaaS / Consumer App |
| Lifecycle stage | Single select | 5 AARRR stages |
| User scenario (Moment) | Single select | The specific touchpoint under each stage, see 2.2 |
| Channels | Multi-select | Shown dynamically based on stage and product type |
Product Flow
Figure 1. The six-step input flow. At step 4, choosing a Moment, Activation, Retention, and Revenue each split into two groups: Momentum and Recall.
2.2 Moment
Most Moments under each stage capture a point where the user just did something right (Momentum). Activation, Retention, and Revenue each add two Moments that capture a point where the user is starting to drift (Recall). Acquisition users have not touched the product yet, and a Referral share is a one-off event, so neither stage has an ongoing drift state to observe, and neither one gets a Recall group.
A small amber dot marks Recall. Everything else is Momentum.
B2B SaaS
Acquisition
Activation
Retention
Referral
Revenue
Consumer App
Acquisition
Activation
Retention
Referral
Revenue
See 3.2 for how Moment type shapes the writing.
2.3 Channel Matrix
There are four channel configurations, set by stage and product type together. A Recall Moment uses the same channel configuration as its stage, so it needs no extra logic.
| Configuration | SMS | In-App | Push | TikTok | Meta | ||
|---|---|---|---|---|---|---|---|
| Acquisition, B2B | ✓ | ✓ | • | • | ✓ | • | • |
| Acquisition, Consumer | ✓ | ✓ | • | • | • | ✓ | ✓ |
| Other stages, B2B | ✓ | ✓ | ✓ | ✓ | • | • | • |
| Other stages, Consumer | ✓ | ✓ | ✓ | ✓ | • | • | • |
| Branch | Applies to | Rule |
|---|---|---|
| Branch A | Acquisition | The user has not installed the app yet, so In-App and Push cannot reach them. Social channels split by product type: B2B gets LinkedIn, Consumer gets TikTok and Meta |
| Branch B | The other 4 stages | Email, SMS, In-App, and Push are all available. B2B and Consumer use the same channels, and the tone difference shows up in the copy instead. Social channels are only open at Acquisition; extending LinkedIn or TikTok to Referral is not planned yet |
3. AI Generation Logic
Each API call generates three Trend Packages. The front end lets people flip through them with a Shuffle button, without calling the API again. A single question rarely produces the best possible idea on the first try, so Copy Lab generates three different angles at once and lets the marketer compare and choose, rather than betting that one generation is already the best answer.
3.1 Output Overview
| Part | What question it answers | Example (BeautyPlus, Acquisition) |
|---|---|---|
| trend_text | Why does this angle work right now? | "Gen Z beauty users are embracing 'skin minimalism'..." |
| Channel copy | How does this angle actually get written? | TikTok Hook: "Your face shape deserves a contour that actually fits." |
| ab_plan | How can this call be tested cheaply? | Highlight: "This time we are betting the personalization angle beats the everyone-is-using-it angle" |
| callout | What else is worth trying that the copy does not say? | "Try a duet format that contrasts a generic tutorial with the personalized recommendation" |
See 3.2 through 3.6 for the details and constraints.
3.2 trend_text: The Decision and How to Write It
The JSON field is always named trend_text. The rules and examples below go straight into the system prompt, so they work as both an explanation for you and the actual rules that constrain what the AI writes. Its meaning is set by a two-step decision:
Figure 2. The decision logic for trend_text. First check whether the stage is Acquisition. If yes, it is a Trend Pulse. If not, check the Moment type next, which splits into Momentum Idea or Recall Idea.
1. Acquisition to Trend Pulse
The AI should describe an external, observable trend. It can come from a shift in consumer behavior, content culture, or platform preference, and it should explain why this trend makes the current angle work. It must not use specific numbers unless they are public, verifiable industry figures, and it must not dress up internal data or an execution tactic as an external trend.
Here is an example that works: "Vertical short-form video is becoming the top acquisition channel for beauty apps. Creators are sharing unedited 'first try' content, and it gets noticeably higher engagement than polished before-and-after content. This tells us that users right now respond more to authenticity, so ad creative should lead with real, everyday use cases instead of professional-grade results." This passage follows the rule. It describes the outside world, what creators are choosing to post, not internal product data, and the closing line ties the trend back to the angle.
By contrast, this does not follow the rule: "Users who apply a filter within 24 hours of finishing the tutorial retain much better, so we should push a notification immediately after tutorial completion." That is internal data plus an execution tactic, not an external trend.
2. Not Acquisition, Momentum, to Momentum Idea
The AI should anchor on the psychological state of a user who is currently carrying momentum forward, and explain why this messaging angle will resonate. It should not generalize into something like "users typically feel...". Keep it to two or three sentences, with the last one landing on the copy strategy.
3. Not Acquisition, Recall, to Recall Idea
The AI should acknowledge that some time has passed, but stay neutral in tone and avoid asking why. It should land on how easy it is to pick back up, not on what the user has already invested. Guilt, blame, or overly emotional language is not allowed. Do not write things like "we miss you" or "why did you stop".
For example, take Retention, Streak Broken, and the Curiosity or contrast angle: "Once a streak breaks, people tend to slip into thinking the streak is already gone, so what is the point. The copy here should not remind them that they failed. It should offer a fresh, specific reason that shifts their attention away from the broken streak and toward something new worth checking out, lowering the barrier to opening the app again."
By contrast, this does not follow the rule: "The user has not opened the app in 14 days, retention risk is high, send a discount code immediately." That is an execution tactic, not a diagnosis of the user's state of mind right now.
Moment type also shapes the angle recommendations in 3.3 and the Recall-only tone rule in 3.6.
3.3 The Messaging Mashup
This is the Messaging Angle. Each of the 3 Packages generated must use a different angle. All seven angles are backed by psychology or consumer behavior research; the full write-up is in the appendix at the end.
| Angle | Core logic | Theoretical basis |
|---|---|---|
| Social proof | Others use it or like it, so I should too | Cialdini (1984), the social proof principle |
| Urgency / FOMO | If I do not act now, I will miss out | Cialdini (1984) scarcity principle; Przybylski et al. (2013) |
| Identity / aspiration | Using this product makes me a certain kind of person | Sirgy (1982), self-congruity theory |
| How-to / task | Tell me how, help me get this done | Bandura (1977), self-efficacy theory |
| Curiosity / contrast | This is unexpected, I want to know more | Loewenstein (1994), information gap theory |
| Peer anxiety | My peers already use this, I will fall behind | Festinger (1954), social comparison theory |
| ROI / time cost | This is worth my time, money, or effort | A common-sense cost-benefit judgment, no dedicated theory |
What the stage-to-angle guidance means: the table below is not a hard rule, it is the AI's default preference. At Acquisition, for instance, the AI normally picks from Social proof, Curiosity or contrast, and Identity or aspiration first, but it can choose a different angle if that fits the product better this time. The only hard requirement is that the 3 Packages cannot repeat an angle. This keeps the angle choice grounded and matched to the stage's psychology most of the time, while still leaving room for the AI to use its own judgment instead of being locked into a fixed set.
| Stage / Moment type | Recommended angles | Avoid |
|---|---|---|
| Acquisition | Social proof, Curiosity/contrast, Identity/aspiration | None |
| Activation, Momentum | Identity/aspiration, How-to/task, Curiosity/contrast | Peer anxiety (the user just joined, comparison would feel like pressure) |
| Retention, Momentum | Peer anxiety, Urgency/FOMO, Identity/aspiration | None |
| Referral | Social proof, Identity/aspiration, ROI/time-cost | How-to/task |
| Revenue, Momentum | ROI/time-cost, Urgency/FOMO | How-to/task |
| Activation / Retention / Revenue, Recall (shared) | Curiosity/contrast, How-to/task, ROI/time-cost | Peer anxiety (can read as blame, which pushes people further away) |
The three Recall rows are combined into one because the psychological state driving them is really the same thing in each case: attention has drifted, and the person needs an easy, low-pressure reason to start again. That does not change by stage.
3.4 A/B Test
Why is it designed this way? Copy Lab already generates 3 Packages with different angles on every run. Instead of inventing a comparison group that the user can never see, it makes more sense to let these 3 Packages serve as each other's reference point. The comparison is real, and the user can flip over and look at it directly instead of taking a claim on faith.
What is it? Each of the 3 Packages carries its own ab_plan. This is not about pulling 2 of the 3 out to run a separate comparison; every Package comes with its own suggestion for which of the other two would make a good reference point if you wanted to test this angle. One generation produces 3 separate ab_plans, and each one points at one of the other two Packages.
How does it work? The model generates all 3 Packages in the same call, so when it writes the ab_plan for Package N, it already knows what angle the other two are using. It picks whichever of the other two is the most interesting comparison right now and writes that into the comparison field. This is not a fixed pairing like Package 1 against Package 2 and Package 2 against Package 3; each Package makes its own judgment about which comparison is most worth making.
Is this a strict A/B test? A rigorous A/B test usually needs to satisfy three things: it changes only one variable while holding everything else constant, it locks in the metric to watch and what happens after a win or a loss before the test starts, and it has random assignment and enough sample size to separate a real difference from noise. Here is an honest comparison against how Copy Lab is designed:
| What a strict A/B test requires | How Copy Lab is designed |
|---|---|
| 1. Changes only one variable | This one does not hold. The comparison is between two complete creative directions, since the angle shapes the opening logic of trend_text and runs through the copy on every channel, not a single isolated variable with everything else held equal. This is a deliberate tradeoff: Copy Lab is testing whether an entire angle is worth pursuing, not whether one word in a CTA performs better. Anyone who wants a strict single-variable test needs to align the other elements, such as the CTA and visuals, between the two Packages themselves before launching |
| 2. Locks in the metric and decision rule first | This one holds. The highlight, comparison, signal, and decision are all fixed the moment the Package is generated, before any result comes in to reason backward from |
| 3. Random assignment, sample size, significance | This is outside what Copy Lab is responsible for. It belongs to the actual platform running the test, such as an ad account or an ESP. Copy Lab's job stops at the hypothesis and the test plan; execution is not its job |
| Field | Description |
|---|---|
| highlight | A one-line, plain-language summary that gives the user the fastest possible read |
| comparison | Points to another package from this same generation, by number and angle name |
| signal | The single metric best suited to judging the outcome at this stage. It does not have to happen earlier than the final conversion; when the two are already close together, using the final metric directly is fine |
| decision | Split into two separate fields, if_win and if_flat, instead of one merged block of text |
Example. Using BeautyPlus and Acquisition again, if the 3 Packages generated each use a different angle, their comparison fields might point at each other like this:
| Package | Angle | ab_plan.comparison points to |
|---|---|---|
| Package 1 | Identity/aspiration | Package 2, Social proof |
| Package 2 | Social proof | Package 3, Curiosity/contrast |
| Package 3 | Curiosity/contrast | Package 1, Identity/aspiration |
This is just one possible pattern, not a fixed loop of 1 to 2 to 3 to 1. The actual choice is up to the model's judgment about which comparison is more interesting.
JSON structure:
A full ab_plan example for Package 1:
3.5 Callout
Why does this field exist? Copy Lab is positioned as a starting point for ideas, not as finished copy. The point of Callout is to hand over one more execution idea, beyond the copy itself, that the user probably would not have thought of on their own.
The rule: The AI picks whichever of the four directions below fits the current package best and writes just that one; it does not need to cover all four. It must not touch send timing, audience segmentation, or channel sequencing, and it must not suggest product features either. Those are areas marketers already know better than this tool does, and it should not overstep into them.
| Direction | Description |
|---|---|
| 1. A visual or format technique | A concrete shooting, editing, or layout technique, such as a duet contrast, a split screen, or caption pacing |
| 2. A bolder variant | What happens if this idea is pushed further, toward something more extreme |
| 3. An overlooked audience angle | A niche group that might respond to this especially well |
| 4. A cross-channel move | How this angle could also work on a channel that was not selected |
The payoff: For the user, this is the single most memorable part of the output, and it raises the odds they come back or share it. For the product, it cheaply separates an AI copy tool from an AI inspiration tool, which reinforces what Copy Lab is meant to be.
3.6 AI Writing Constraints
The sections above cover what to do. This one covers the hard limits on what not to do, plus the format limits for each channel.
- Never invent specific numbers, such as user counts, percentages, or days, unless they come directly from the selected Moment (for example, "Came Back Day 7" can mention "7 days")
- Once an angle is set for a Package, it cannot switch midway or introduce a new framing
- Never name the selected Moment directly in the copy (do not write "you just finished the tutorial")
- Never generate fields for a channel that was not selected
- A Recall Moment must never use a guilty, blaming, or overly emotional tone
- If the AI cannot recognize the product name because it looks made up, it must not invent a category or positioning and force a generation. It should show "This product could not be recognized, please check the name" and stop
Format limits by channel
| Channel | Field | Limit |
|---|---|---|
| Subject | 60 characters or fewer | |
| Preview | 90 characters or fewer | |
| Body | an opening line, a value line, and [CTA text] | |
| SMS | Text | 160 characters or fewer, conversational, with a clear action or [link] |
| In-App | Headline | 8 words or fewer |
| Body | 20 words or fewer | |
| CTA | 4 words or fewer, plus an arrow | |
| Push | Title | 40 characters or fewer |
| Body | 90 characters or fewer | |
| Headline | 70 characters or fewer | |
| Intro | 150 characters or fewer, professional tone | |
| CTA | 4 words or fewer | |
| TikTok | Hook | 15 words or fewer, needs to grab attention in the first 3 seconds |
| Script | 80 words or fewer, voiceover or caption script for a 15 to 30 second video | |
| CTA | 10 words or fewer, the call to action at the end of the video | |
| Meta | Primary Text | 125 characters or fewer, benefit-driven |
| Headline | 40 characters or fewer, short and punchy | |
| CTA | button text, such as Learn More or Download Now |
4. Frontend Interaction
4.1 Form Flow
4.2 Result Layout
| Area | Content |
|---|---|
| Trend Pulse / Momentum Idea / Recall Idea | The current Package's trend_text, labeled based on Stage and Moment type; an "N/3" counter and a Shuffle button sit on the right |
| Copy by Channel | Only the channels the user selected are shown, each with its own set of fields |
| A/B Test Plan | The highlight line sits at the top; comparison is a clickable reference that jumps to the package it points to; decision is shown in two columns, if_win and if_flat |
| One Callout | The single tip chosen from the four directions; the front end does not show which direction was picked, only the final content |
| Brief Ready Bar | A green status bar at the bottom with a Copy All button |
Shuffle logic. It switches between the 3 already-generated Packages without calling the API again. Copy All logic. It copies the entire content of the currently shown Trend Package to the clipboard.
Appendix: Theory
AARRR: A Practical Framework, Not an Academic Theory
AARRR (Acquisition, Activation, Retention, Referral, Revenue) was first shared publicly by Dave McClure in 2007, in a talk called Startup Metrics for Pirates. He kept refining and re-presenting the framework over the following decade. The original material can be found on his SlideShare account (slideshare.net/dmc500hats) and his blog, Master of 500 Hats (500hats.com). McClure is a founding partner of the venture capital firm 500 Startups.
To be honest about it: AARRR is a practical metrics framework built for startups, not a peer-reviewed academic paper, and there is no original research paper for "AARRR itself" to cite. It is better understood as a simplified, easy-to-remember, practical version of the larger idea of customer lifecycle management.
Related Academic Framework: Lemon & Verhoef (2016)
Overall framework: customer journey management
Lemon, K. N., & Verhoef, P. C. (2016). Understanding Customer Experience Throughout the Customer Journey. Journal of Marketing, 80(6), 69-96. Read the paper
Published in the Journal of Marketing, this paper traces how the ideas of customer experience and customer journey developed in the marketing field. It argues that a customer should not be understood as a single conversion event, but as an ongoing process that spans many touchpoints and channels and evolves over time. In the context of Copy Lab, this paper is the academic version of the core intuition behind managing a customer relationship stage by stage, and AARRR can be seen as a simplified, practical version of that same idea.
The Theory Behind the 7 Messaging Angles
Tap a card to open it.
Cialdini, R. B. (1984). Influence: The Psychology of Persuasion.
Cialdini laid out six principles of persuasion: reciprocity, commitment and consistency, social proof, authority, liking, and scarcity. In 2016, in Pre-Suasion, he added a seventh: unity. He is professor emeritus of psychology and marketing at Arizona State University, and these principles distill a large body of his own empirical research. Social proof maps directly onto his social proof principle: when a situation is uncertain, watching what other people choose is the easiest judgment to make.
This is an internal product logic document for Copy Lab. Every theory cited here comes from published academic literature, and the links in the appendix point to publicly accessible publisher or university pages. Implementation details will change as development continues, so the latest version is always the source of truth.