Updated · 9 min read
Personalisation that doesn't feel creepy
The first time a user says your email felt creepy, you've usually done two things right and one thing wrong. The two right things are the data work that made the personalisation possible. The one wrong thing is the decision to surface it. Most lifecycle programs that cross the creepy line do so not because they have too much data, but because they use it without thinking about how it reads from the other side of the inbox.
By Justin Williames
Founder, Orbit · 10+ years in lifecycle marketing
What actually triggers the creepy response
The creepy line isn't about what you know — it's about how you signal what you know. A team using the same data silently to improve relevance is usually fine. A team narrating the data is not.
Specificity that implies surveillance. A user who browsed a product page once and then opened their email to "We noticed you were looking at the navy jacket" gets an instant discomfort reaction — not because the data is wrong, but because the phrasing makes the observation explicit. The same data point delivered as a product recommendation in a digest feels fine. One reads as being watched. The other reads as being served. Identical data. Completely different experience.
The rule most teams miss: the creepy line isn't about what you know, it's about how you signal what you know. A marketing team showing off their data infrastructure in the copy is the fastest way to trip the reaction. A team using the same data silently to improve relevance is usually fine.
This is a voice and copy discipline more than a data one. You can have every user's complete behavioural history and never trigger the reaction, provided your copy treats the data as invisible context rather than a headline.
Four patterns that always work
Relevance without reference. "Here are jackets we think you'll like" works; "Based on the jacket you viewed on Tuesday" doesn't. The recommendation is personalised, but the copy doesn't narrate the personalisation. Users register the relevance without being reminded they're being tracked. Silent relevance is the default mode for nearly every message you send.
Recent product activity as context, not subject. A cart-abandonment email referencing "your cart" feels fine because the cart is a user-initiated state the user created. A browse-abandonment email referencing "that item you looked at" feels less fine because browsing isn't an action the user chose to take. Commitment the user made — fair game. Passive behaviour the user didn't commit to — danger zone. Is browse-abandonment creepy? Often yes. Cart-abandonment often no. Test both; cart-abandonment conversion is typically higher anyway, so you're rarely sacrificing performance to err on the right side.
Aggregate patterns framed as trends. "Customers who bought X often also buy Y" works as social proof. "We noticed you bought X" reads as surveillance even though the underlying data point is identical. Framing personalisation as belonging to a group instead of an individual feels safer because it is — the individual isn't singled out by name.
Transparent, user-controlled settings. A preference centre that lets the user say "show me more running gear" turns personalisation into collaboration. The user knows why they're seeing what they're seeing and can change it. Counterintuitively, programs with strong preference centres often have higher tolerance for data-driven content — the user has signed on to the system and knows where the dials are. The Liquid reference covers the syntax for implementing preference-aware personalisation in Braze specifically.
Three patterns that break trust
Cross-device narration. "We saw you looked at this on your phone yesterday and thought you might want it on your laptop too" — even if true, this reads as proof the system tracks users across devices. Users mostly accept that tracking happens; very few accept being told about it by name. Should you reference products the user looked at across devices? Only silently. Show the recommendation. Don't narrate where it came from. Use the data; don't announce the data.
Re-surfacing abandoned data. A user deletes an item from their cart. Un-favourites a product. Navigates away deliberately. An email the next day referencing that item reads as ignoring the signal the user sent. The rule: honour negative actions at least as much as positive ones. If the user said "no" through behaviour, the lifecycle program has to hear it. Otherwise the message reads as "we weren't listening", which is worse than not personalising at all.
Implied life events. "We noticed you've been browsing wedding dresses — here are more" assumes a life context the user hasn't volunteered. If they were shopping for someone else, or the engagement ended, or the browse was idle curiosity, the email becomes memorable for the wrong reasons entirely. Any personalisation based on inferred life events needs explicit user consent and an escape hatch. Most programs should just not do it.
Data minimisation is a feature, not a constraint
The teams that ship the best personalisation often use less data, not more. A clean, explicit user-preference dataset produces better targeting than a sprawling behavioural profile — because the signals are reliable, the user can be shown them without embarrassment, and the compliance surface stays manageable.
Most lifecycle programs over-collect and under-use their data. The CRM Data Model skill covers the discipline of picking the smallest dataset that supports your personalisation strategy. You can always collect more. Removing data already in the system is much harder, and the compliance surface of unused data keeps expanding as regulations tighten. Should you collect less? Usually, yes. Clean explicit preferences outperform sprawling behavioural datasets on almost every dimension that matters.
A useful internal test: for every piece of personalisation in your program, can you show the user exactly which data produced the message, and would they be comfortable with that view? If the answer to either is no, reconsider. The test catches most of the decisions that create creepy moments, usually before they ship.
When personalisation should be switched off
Sensitive contexts. Grief, medical situations, legal processes, financial distress — all contexts where personalisation reads as insensitive even when technically appropriate. A user who stops placing orders because they're going through something serious does not need a reactivation email asking what happened. The right behaviour is to pause marketing sends entirely — possible via quieted segments or explicit user flags — and resume only when the user signals readiness. The discipline is knowing when to fall back to unpersonalised content, or no content at all.
New users. The first few messages to a newly-acquired subscriber should lean on explicit preferences (what they opted into) rather than inferred behaviour (what they've done in the product). Behavioural personalisation assumes you've earned the right to reference the user's actions. The first few messages are where that right is still being negotiated, and referencing behaviour too early makes the negotiation go sideways.
Cross-audience sends. When a single message goes to multiple audience tiers simultaneously, personalisation that's fine for some users is awkward for others. A message referencing "your last purchase" lands well for a recent customer and strangely for a dormant one who forgot they ever bought anything. When audiences split, split the message. A slightly different subject line and a slightly different opener is usually enough to make the send work for both cohorts; a single message optimised for neither ends up awkward for both.
Frequently asked questions
- What's the line between good personalisation and creepy?
- The line is proximity to data the user knowingly shared. First name, past purchases, explicitly-declared preferences, and behaviour on your site are safe personalisation territory. Things users didn't knowingly share — third-party browsing data, demographic inference, location beyond city-level — trigger creepy reactions. Rule of thumb: if the user can easily remember giving you the data, personalisation feels natural. If the personalisation forces them to wonder how you got it, you've crossed the line.
- Should I use first name in every email?
- No. Over-using first name dilutes the personalisation signal and can feel robotic. Use it when personal address adds meaning: welcome emails ("Welcome, Sarah"), account-related transactional ("Your order, Sarah, has shipped"), and moments of direct appeal. Skip it when the context is generic broadcast or when the email voice is brand-first rather than personal-first. A good test: does removing first name make the email feel worse? If no, skip it.
- How granular should personalised product recommendations be?
- Category-level based on verified purchases > individual-item based on browsing signal > individual-item based on inferred demographics. Recommending "more of what you bought" is safe and effective. Recommending "we noticed you looked at X" can work if timed right (within hours) but becomes creepy at days-old latency. Recommending based on demographic inference ("we think you'd like Y because you're 30-40 female") is the fastest way to trigger unsubscribes.
- Is location-based personalisation creepy?
- City-level: usually fine (weather references, local store availability). Neighbourhood-level: borderline, use sparingly. IP-derived exact coordinates: creepy and often inaccurate anyway. The safe test: would a reasonable user be surprised you know this? City-level is obvious from any online signup flow. Neighbourhood-level feels like surveillance even when technically opt-in through account information.
- What personalisation works best for CRM?
- Behavioural recency over demographic inference, every time. "You last purchased X 45 days ago — it's time for Y" beats "Women 30-40 usually buy Z next." Behavioural signals are observable (the user did the thing), recent, and relevant. Demographic inferences are stale, assumption-laden, and often wrong. Good CRM programs rely 80%+ on behavioural personalisation and use demographic layers as a last-resort fallback for zero-behaviour users.
This guide is backed by an Orbit skill
Related guides
Browse allSubject line anatomy: the four parts every line that performs shares
Most subject-line advice is decoration tips — emoji, length, numbers. The lines that actually get opened share a structural pattern. Four parts in a specific order, the three distortions that ruin it, and the four rules that keep A/B tests honest.
Push notification copy that actually gets tapped
Push is the highest-interrupt channel in the stack. A bad push burns goodwill in under a second; a good one feels like a useful nudge from a friend. This is the copy discipline — specific words, specific structures, specific anti-patterns that reliably get a user to turn your notifications off for good.
The SMS playbook from the operator's seat
SMS is the highest-engagement and highest-risk channel in the lifecycle stack. Here's the compliance architecture, the copy discipline, and the frequency rules that keep SMS from destroying the goodwill it's uniquely positioned to create.
Transactional emails: the highest-engagement messages you ignore
Order confirmations, password resets, receipts, shipping updates. Transactional emails post open rates two to three times higher than marketing sends — and most lifecycle teams have never touched them. Effort is going to the wrong place.
Liquid for lifecycle marketers — the complete Braze reference
Every personalised field in every Braze message runs through Liquid. Get it right and personalisation quietly improves every send. Get it wrong and 50,000 people see 'Hi {{${first_name}}}'. This reference covers the syntax and the production habits that stop that happening.
Preheader text: the second subject line most programs ignore
The preheader is the snippet shown next to the subject line in the inbox preview. Treat it like a second subject line and you double your hook. Treat it like an afterthought and it says 'View this email in your browser'. Here's how to write preheaders that actually earn the open.
Found this useful? Share it with your team.
Use this in Claude
Run this methodology inside your Claude sessions.
Orbit turns every guide on this site into an executable Claude skill — 54 lifecycle methodologies, 55 MCP tools, native Braze integration. Pay what it's worth.