Updated · 9 min read
Braze naming conventions that survive a Friday afternoon
It's 4:47 on a Friday. You have an email going out in fifteen minutes and a campaign to name. The naming doc says twelve dimensions, eight dropdowns, and a ninety-character output. So you type welcome_v3_FINAL_USE_THIS_ONE and ship. Six months later the analyst hunting last quarter's churn-bleed fix can't find it. This is the failure mode every Braze workspace eventually hits — Braze being the customer engagement platform most lifecycle-heavy teams run on. The convention I have watched hold up across a decade of consumer-scale programs uses four dimensions, fits on a sticky note, and wins by being faster to follow than to ignore.

By Justin Williames
Founder, Orbit · 10+ years in lifecycle marketing
Why your beautifully-written naming guide is not working
The only enforcement that actually works is workflow-based. A Notion page explaining the rules never moved the needle on anything.
Picture the lifecycle manager — the person responsible for the welcome emails, retention nudges, and win-back sends a brand fires off automatically — at the end of a long week. One campaign left to set up before they log off. Naming doc says twelve dimensions, dropdown-heavy, ninety characters out the other side. Structured way takes forty seconds and three context switches to a Notion tab. Free-text takes four. Guess which one ships.
That is the usual cause of death. Not bad rules — slow rules. The convention was thorough, defensible, exhaustively documented. Nobody used it, because using it cost more than ignoring it. Six months on, nobody can locate the asset that fixed the churn bleed last Q3. (Asset is the catch-all term Braze uses for any nameable object — a campaign, a journey, a saved audience, an email template, a reusable content block.)
Conventions that survive share three traits: they fit on a sticky note, compress to a readable 40–60 characters, and their dimensions map one-to-one to the filters you actually use in reports. If a dimension exists in the convention but does not exist as a filter in reports, drop it. You are carrying weight you will never use.
Second failure mode: enforcement by documentation. A beautifully written Notion page never moved compliance. Slack reminders do not either. The only thing that works in practice is making the structured way faster than the free-text way — a naming tool open next to the Braze tab, keyboard-accessible, one-click-to-copy.
The four dimensions that do the work of ten
Before the rules: the filters. Almost every report you will ever build in Braze starts the same way — pick what kind of thing you are looking at, then which channel, then which program, then which audience. Four cuts. Match those four in the name and report-side filtering comes for free. Anything past the four is decoration unless it earns its place.
Asset Type — campaign, canvas, segment, template, content block. Anchors the name to what the object is inside Braze. Quick gloss because these terms are not universal: a campaign is a single send (one email, one push); a canvas is Braze's name for a multi-step automated journey (welcome series, dunning sequence — dunning being the polite word for chasing failed payments); a segment is a saved audience definition; a content block is a reusable snippet of HTML or copy. Without the asset type prefix, campaigns and canvases blur together in any search list longer than a screen.
Channel — email, push, SMS, in-app, content card, webhook. Most lifecycle reporting splits by channel first, and it is the filter most team members reach for before anything else.
Program — onboarding, activation, retention, dunning, win-back, feature adoption, upsell, re-engagement, transactional, promotional. These are lifecycle stages — phases of the customer relationship the message is trying to move — not campaign names. Program is the family; the specific campaign is a suffix.
Audience — all, free, paid, trial, churned, at-risk, new, dormant, VIP. Segment targeting shows up in every reporting query, and pulling it into the name means you never need an ad-hoc segment join to slice results.
The canonical form that works: [asset]_[channel]_[program]_[audience]. Example: campaign_email_onboarding_newuser. Forty characters, every component matches a real report filter, no decoration. Audience names come from your segmentation model — the segmentation guide covers how to derive them so the vocabulary is shared across every program.
One small formatting rule worth committing to. Underscores between dimensions, hyphens within a dimension, so campaign_email_onboarding_welcome-series_newuser is parseable both by eye and by script. Which separator matters less than consistency — pick one and never mix.
When to bring in the other six dimensions (and when to leave them out)
The Orbit Namer — a small web tool that produces canonical Braze names from dropdowns — exposes six dimensions past the core four: Country, Language, Version, Step, Variant, and Deployment Date. These are not always wrong. The failure mode is using all ten always rather than using them selectively.
Country and Language earn their place when the program runs in parallel per market with separate sends. Drop them when it is one global send. Version earns its place when a v2 redesign is running alongside v1 and both need to be measurable. Step earns its place on sequenced journeys (day-1, day-3, day-7) where each send is independently tracked in reporting.
Variant belongs in the name for structured A/B tests — splitting your audience to compare two or more versions — where the variant letter (A/B/C) is the analysis key. Deployment Date is the trickier one. For recurring programs, dates belong in tags, not names — putting them in the name breaks historical reporting every time the program refreshes. For one-off promotional sends (black-friday-2025, summer-sale-2026), the date is part of the asset's identity and belongs in the name itself.
Names answer what it is — tags answer how you want to group it
The split most teams get tangled on. The name answers: what IS this asset? Tags — Braze's freeform labels you can attach to any asset for filtering inside the Braze UI — answer: how do you want to group it? Identity in the name. Grouping in tags. That is where most naming-convention failure happens in practice.
Date-sensitive promotions (black-friday-2025), experiment variants (test-hero-v2), team ownership (growth-team, lifecycle-team), and campaign cohorts (q1-launch-batch) all belong in tags rather than names. Tags filter inside the Braze UI; names are what reports match on. A tag is metadata a campaign CAN have. The name is what the campaign IS.
A concrete test that always works. If you renamed the asset, would the report still make sense? Yes — filterable value is stable metadata, so it is a name. No — it changes across instances of the program, so it is a tag. The Orbit Namer skill surfaces recommended tags for every asset it names, so the split is done for you rather than relitigated in Slack every week.
Make the wrong way slower than the right way — that is the whole game
Documentation-based enforcement fails. Slack reminders fail. Quarterly naming-compliance reviews fail too — offenders are long gone by the time the audit lands. The one approach that works in practice is making the structured path faster than the free-text one.
Concretely: a naming tool open next to the Braze tab, pre-populated with the dropdowns your team filled in on day one, producing the canonical name plus recommended tags in a single click. The Orbit Namer is built for exactly this — six seconds from intent to copied name.
For larger programs, add a gate: a pre-launch QA checklist that verifies the asset name matches the convention regex — a short pattern-matching expression — before the campaign is approved. Braze does not ship this natively. The name field is free-text, no built-in validation, no programmatic enforcement. The Braze Instance Audit skillscans the workspace for off-convention assets and produces a prioritised cleanup list on demand. If you want to rename the worst offenders in bulk, Braze's REST API — the HTTP interface for programmatic changes — supports it, and renames are retroactive: historical data stays linked to the new name automatically.
One adoption rule for messy existing workspaces: do not rename everything at once. Enforce on new assets first. Audit once a quarter. Bulk-rename the top 50 most-reporting-critical assets only after you have a full quarter of clean new-asset data — that is when the baseline for good is clear enough to project backwards. Rush it and you will rename things twice.
The one thing to do Monday: open Orbit Namer in a tab next to Braze and use it for every new asset for a fortnight. Do not announce a policy. Do not write a doc. Make the structured path the path of least resistance and watch what your team does without being asked.
Read to the end
Scroll to the bottom of the guide — we'll tick it on your reading path automatically.
Frequently asked questions
- What's a good Braze naming convention?
- Four core dimensions do the work of ten: Asset Type (campaign, canvas, segment, template, content block), Channel (email, push, SMS, in-app), Program (onboarding, retention, win-back, etc.), and Audience. Canonical form: [asset]_[channel]_[program]_[audience] — for example, campaign_email_onboarding_newuser. Forty characters, every component matches a real report filter, no decoration. Six optional dimensions (country, language, version, step, variant, deployment date) get added only when they change how you filter in reports.
- Should dates go in the Braze campaign name or in tags?
- Depends on the campaign type. For recurring programs (weekly newsletter, monthly winback), dates belong in tags — putting them in the name breaks historical reporting every refresh. For one-off promotional sends (black-friday-2025, summer-sale-2026), the date is part of the asset's identity and belongs in the name itself.
- Hyphens or underscores in Braze asset names?
- Underscores between dimensions, hyphens within a dimension. So campaign_email_onboarding_welcome-series_newuser is parseable both by eye and by script. Which separator you pick matters less than consistency — pick one and never mix.
- How do I enforce a naming convention across a marketing team?
- Workflow-based enforcement beats documentation-based enforcement every time. Pair a naming tool (like the Orbit Namer at /apps/namer) that's faster to use than free-text with a pre-launch checklist that verifies the name matches the expected pattern before approval. A beautifully-written Notion page explaining the rules never moved compliance. The structured path has to be faster than the free-text path.
- Can I rename existing Braze campaigns without breaking reports?
- Yes — Braze's rename is retroactive, so historical data stays linked to the new name automatically. For bulk renames, Braze's REST API supports programmatic updates. Don't rename everything at once, though — enforce on new assets first, audit once a quarter, and bulk-rename the top 50 most reporting-critical assets only after you have a full quarter of clean new-asset data.
- Does Braze enforce naming conventions natively?
- No. Braze's name field is free-text with no validation or programmatic enforcement. Conventions have to live outside Braze — in a naming tool (like Orbit Namer), in documentation, or in a pre-approval validation step. This is one of the more common requests in Braze's feature backlog.
This guide is backed by an Orbit skill
Related guides
Browse allLiquid 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.
Personalisation that doesn't feel creepy
There's a line between personalisation that earns trust and personalisation that breaks it. It's not where most people think it is — it's about how you signal what you know, not what you know. Here's the line, how programs cross it without noticing, and the patterns that keep you on the right side.
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.
Subject 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.
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 — 63 lifecycle methodologies, 91 MCP tools, native Braze integration. Free for everyone.