The syntax side by side
Copy these from the table, but check the field names in your own account. Custom field keys are whatever you or an import created, and every platform here is strict about spelling. [1] [2] [4] [6]
| Platform | First name | Custom field | Fallback | Conditional content |
|---|---|---|---|---|
| MailerLite | {$name} [1] | {$tag}, using the tag shown in the Fields tab [1] | {$name|default('Friend')} [1] | Not documented in the variables article [1] |
| Kit | {{ subscriber.first_name }} [2] | {{ subscriber.last_name }} style: Latin letters, numbers, hyphens and underscores; spaces become underscores [2] | {{ subscriber.first_name | strip | default: "there" }}; not in subject lines [2] | {% if subscriber.tags contains "Tag" %} ... {% elsif %} ... {% else %} ... {% endif %} [3] |
| beehiiv | {{first name | Reader}} where "first name" is your field's exact name [4] | {{ custom field name | fallback value }} [4] | The text after the pipe, e.g. {{first name | friend}} [4] | Block-level dynamic content via Visibility settings; Pro and Enterprise [5] |
| Moosend | #recipient:name# [6] | #recipient:Country# style [6] | #recipient:name|fallback# [7] | Not documented as text syntax; dynamic blocks cover cart and product content [8] |
How a blank "Hi ," happens
Kit describes the failure exactly. Without a fallback, Hello {{ subscriber.first_name }}, renders as "Hello ," with stray whitespace before the comma when the field is empty. MailerLite says an empty field "will appear blank unless you add a default value", and beehiiv says a tag without a fallback "will render as empty". [1] [2] [4]
The documentation points to four causes, listed below.
- No fallback on the tag. Add one everywhere a name appears. [1] [2] [4] [7]
- Field name mismatch. MailerLite variables are case-sensitive, beehiiv treats {{First Name}} and {{first name}} as different fields, and Kit wants spaces in field names replaced with underscores. [1] [2] [4]
- Filters in a Kit subject line. Kit says filters such as default are not supported in subject lines, so the fallback is silently unavailable there. [2]
- Whitespace-only names from imports. Kit's strip filter removes extra whitespace before default runs, which is why Kit's own example chains both. [2]
Platform notes that change how you write
MailerLite: {$email} and {$name} are the built-in variables, and each custom field has its own tag in the Subscribers page Fields tab. Test emails do not test full functionality, although {$email}, {$name} and {$last_name} do work in them. For anything else, MailerLite suggests duplicating the campaign and sending it to yourself as a regular subscriber. [1]
Kit: beyond default, Kit warns that filters you add after default also apply to the fallback, so capitalize turns "friend" into "Friend". Name filters can also change valid names: "Mary Anne" becomes "Mary" and "McKayla" becomes "Mckayla". For tag conditions, the first match in an if/elsif chain wins, so put the most specific tag first. Use single quotes around tag names that contain double quotes. [3]
beehiiv: type {{ in the editor, or use / and pick Merge tags under Data. Tags work in body text, headings, buttons, subject lines, automation emails and welcome emails. Web visitors and logged-out readers always see the fallback, and a custom field must exist before you can use it. Reserved fields such as {{publication_name}} and {{rp_refer_url}} need no setup. [4]
Moosend: insert tags from the Personalization Tags menu in a Text item. The same menu covers account tags such as #account:company# and date tags such as #dddd# for the full day name. Moosend notes that recipient tags will not work on test campaigns, because tests do not go to your actual lists. [6] [7]
Conditional content: what each platform actually offers
Conditional content is where the four diverge most. Kit is the only one of the four whose personalization docs show if/else text logic, and its examples are built on subscriber tags. A typical pattern shows buyers a thank-you line and everyone else a pitch. [3]
beehiiv takes a visual approach. You open a block's menu, choose Visibility, then Dynamic content conditions, and build conditions on fields such as Email, Tier, Signup date, Free trial, Custom Field or Subscriber tag. It is available on Pro and Enterprise plans and the free trial. A reader who matches no condition sees nothing, so the post must make sense without the block. Clickmaps also do not support conditional blocks. [5]
Moosend's dynamic content blocks are e-commerce blocks: cart abandonment, product recommendation, RSS and browse abandonment. They are not conditional text. The MailerLite variables article does not cover conditional syntax either. On those two, send separate campaigns to segments when the copy must differ. [1] [8]
| Need | MailerLite | Kit | beehiiv | Moosend |
|---|---|---|---|---|
| Greeting with a name or a fallback | Yes [1] | Yes, body only [2] | Yes [4] | Yes [7] |
| Show a paragraph only to buyers | Use segments [1] | Liquid tag condition [3] | Dynamic content, Pro+ [5] | Use segments |
| Personal referral link | Not in the variables article | Not in the reviewed articles | {{rp_refer_url}} [4] | Not in the reviewed articles |
Pre-send checklist
Run this list before any personalized send. It covers each failure described above.
- Every name tag has a fallback that reads naturally, such as "there" or "friend", in the greeting position.
- Subject lines in Kit contain no filters, so they read correctly with an empty name. [2]
- Field keys were copied from the platform's own field list, not typed from memory. [1] [4]
- Preview as a real subscriber: Kit's Preview as subscriber, beehiiv's simulated subscriber, or a MailerLite duplicate sent to yourself as a subscriber. [1] [2] [4]
- Check one subscriber with every field filled and one with the fields empty.
- For Kit tag conditions, the most specific tag comes first. [3]
- For beehiiv dynamic blocks, the post still reads well for a subscriber who sees none of them. [5]
Questions before you decide
Why did my Kit subject line show a blank name even with a default?
Kit's basic personalization article says filters, including default and strip, are not currently supported in subject lines. A first-name tag in a Kit subject line therefore has no fallback, so keep names in the body or write subjects that read fine without one.
Are merge tags case-sensitive?
MailerLite says its variables are case-sensitive, and beehiiv says {{First Name}} and {{first name}} are different fields. Kit says to replace spaces in custom field names with underscores. Copy the exact field key from each platform's field list.
Why does my test email show placeholders instead of names?
Kit's preview shows [FIRST NAME GOES HERE], and Moosend says recipient tags do not work on test campaigns. MailerLite says test emails do not fully test functionality. Use Kit's Preview as subscriber, beehiiv's simulated subscriber, or send a duplicate to yourself as a real subscriber.
Which of these platforms supports if/else conditional text?
Kit documents Liquid if, elsif, else and unless blocks based on subscriber tags. beehiiv offers block-level dynamic content through Visibility settings on Pro and Enterprise plans. The MailerLite and Moosend articles we reviewed do not document conditional text syntax.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- MailerLite Help: How to use variables in MailerLite Accessed 30 Oct 2026
- Kit Help: Basic email personalization with Liquid + FAQs Accessed 30 Oct 2026
- Kit Help: Advanced email personalization with Liquid Accessed 30 Oct 2026
- beehiiv Support: How to personalize a post using merge tags Accessed 30 Oct 2026
- beehiiv Support: Using dynamic content in your newsletter Accessed 30 Oct 2026
- Moosend Docs: Personalization tags Accessed 30 Oct 2026
- Moosend Docs: Add a personalization tag Accessed 30 Oct 2026
- Moosend Docs: Create dynamic content blocks Accessed 30 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.
