One campaign, a version for every audience
Segment any block right in the editor, preview the whole email as any subscriber, and export conditional logic your ESP runs natively: AMPscript, Jinja, Liquid, and more.
No code. No guesswork. No "send a test to myself five times."
Segment a block in seconds
Segmentation happens where the content is. Select any block, add a variant, and describe who should see it: a field, an operator, a value. Watch it happen, then try it yourself:
Step 1: this offer block goes to everybody.
Let’s give VIP customers their own version. Hit "Add variant" in the panel.
Spring picks for you
Fresh arrivals, picked weekly
Shop new inSelected block
This block shows the same content to every recipient.
Variants live on the block
No separate campaign logic to manage. Select a block, add a variant, done. The targeting travels with the content it belongs to.
A fallback, always
Every segmented block keeps an "Everybody else" version, so no recipient ever gets an empty module, even when they match no segment.
Mix fields and saved segments
Build conditions from recipient fields, or drop in an organization-wide saved segment like "VIP customers" as a single chip.
Rules your whole team can read
Conditions are plain building blocks: a recipient field, an operator, a value. Group them with ALL or ANY, flip AND to OR, negate with NOT. Powerful enough for real targeting, readable enough for review. The audience and exported code update as you click.
Group · match conditions below
Would match 2 of 8 example recipients
gold · 24 orders
gold · 3 orders
silver · 11 orders
free · 0 orders
gold · 15 orders
silver · 2 orders
free · 1 orders
gold · 8 orders
{% if plan == 'gold' and orders > 10 %}
<!-- VIP offer block -->
{% endif %}The eight recipients above are illustrations. Better Email never sees your subscriber list: rules export as this code and your ESP evaluates them against the real list at send time.
Need more? Save any rule as a reusable segment for the whole organization, or drop to raw ESP code for the edge cases.
One segment. Every ESP's native syntax.
Most tools handle personalization with proprietary tags that only work inside their own sending platform. Better Email is different: you build segments and variants visually, and the export contains real conditional code in the language your ESP already speaks. It runs natively: no translation layer, nothing to fix by hand.
%%[ IF @loyalty_tier == "Gold" THEN ]%% <!-- VIP hero module --> %%[ ELSE ]%% <!-- Default hero module --> %%[ ENDIF ]%%
{% if custom_attribute.${loyalty_tier} == 'Gold' %}
<!-- VIP hero module -->
{% else %}
<!-- Default hero module -->
{% endif %}{% if person|lookup:'loyalty_tier' == 'Gold' %}
<!-- VIP hero module -->
{% else %}
<!-- Default hero module -->
{% endif %}What your export contains, per ESP
Better Email generates each email service provider's native conditional syntax on export. The same visual segment becomes the right code for wherever you send.
Why native matters
Because the logic is evaluated by your ESP at send time, personalization works with your real subscriber data, your existing sending setup, and your ESP's testing tools. Switch ESPs or send from several? The same campaign exports correctly to each one.
Preview the whole email as anyone
Preview profiles are reusable, made-up sample recipients, invented for testing and never imported from your list. Pick one and the entire email re-renders: merge tags fill in, every block resolves to the variant that profile matches, and blocks they shouldn't see disappear. What you see is exactly what Anna, Noah, or everybody else will get.
Hi Anna 👋
Here's what's new this week.
Gold early access
30% off everything, 48 hours before anyone else
Shop nowOpen the app for member pricing
Preview profile
Resolves to
Reusable, shareable profiles
Save a profile for one campaign or for the whole workspace. "Anna, Gold member" means the same thing in every campaign your team previews.
Coverage for every path
Better Email can generate profiles from the email itself, so every variant path has a profile that reaches it. No branch ships unseen.
"Everybody else" built in
One click shows the email with zero segments matched: the pure-fallback version that recipients outside every audience will get.
Saved segments
Define an audience once, reuse it everywhere. Saved segments are named, organization-wide audience definitions with rules per integration, so "VIP customers" means the same thing in every campaign your team creates.
Organization-wide and reusable
Segments are shared across your organization. Define "New subscribers" once and every editor targets the exact same audience. No copy-paste logic, no drift.
Simple rules, no code required
Build rules from attribute, operator, and value: equals, not equals, greater than, less than, exists. Anyone on the team can define an audience.
Custom rules for power users
Need something more advanced? Write raw ESP code as a custom rule: full AMPscript, Liquid, or Jinja expressions, exactly as your ESP will evaluate them.
Per-integration rules
One segment can carry different rules per ESP integration, so the same audience definition exports correctly to Salesforce Marketing Cloud, Klaviyo, Braze, and beyond.
{% if last_order_days > 90 and total_orders > 0 %}Your data's structure, not your data
Better Email syncs recipient field definitions from your ESP: names, types, structure. The actual subscriber values (emails, names, attributes) never leave it. Segments export as code your ESP evaluates at send time, and previews run on made-up profiles. Powerful segmentation, no personal data handled.
Recipient fields
A catalog of field definitions powering segmentation and personalization. Sync fields automatically from your ESP integration, add them manually, or manage them through the Better Email API.
Merge tags
Admins decide which recipient fields can be inserted as merge tags. Editors drop first name, loyalty tier, or points balance anywhere in the email, and on export it becomes the right merge-tag syntax for your ESP, automatically.
No personal data, by design
Better Email stores field names and types, never subscriber values. Rules ship as native code and run inside your ESP, so emails, names, and attributes stay where they already live.
Dynamic content from your product data
Import product or content data to drive dynamic, repeatable content, like product grids that fill themselves from your catalog instead of being assembled by hand.
- XML and JSON feedsPoint Better Email at your existing product or content feed and use its fields directly in your modules.
- Automatic image cropping and feed logicLiquid and Cloudflare Workers do the heavy lifting: feed images are cropped to fit your modules on the fly, and you can write logic on feed fields, like a sale badge that appears when a price drops.
- AI-assisted field mappingBetty helps map feed fields (title, price, image, URL) to your modules, so setup takes minutes instead of an afternoon of manual matching.
{ "title": "Trail Jacket", "price": "89.00", "image": "…", "url": "…" }Trail Jacket
Ridge Boots
Summit Pack
Explore more of Better Email
Dynamic content is one piece of a complete email creation platform.
ESP integrations
The ESPs behind the syntax: Salesforce Marketing Cloud, Klaviyo, Braze, Customer.io, Adobe Campaign, HubSpot, and more.
Learn moreVisual Editor
Where segments and variants come to life: drag modules, edit inline, preview in real time.
Learn moreAll features
The full platform: Email Design System, Betty AI, collaboration, quality checks, and more.
Learn morePersonalization that ships in your ESP's language
See how your team can segment blocks visually, preview the email as any audience, and export native AMPscript, Jinja, or Liquid. No hand-coding required.
Request a demo