> For the complete documentation index, see [llms.txt](https://docs.hackle.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hackle.io/en/crm-marketing/message-personalization.md).

# Message Personalization

Message personalization is a feature that displays different text and links for each recipient. By using personalized messages, you can deliver content that matches each user's interests and context, even within the same campaign. As a result, you can improve open rates, click-through rates, and conversion rates while reducing unnecessary message sends, thereby improving both CRM operational efficiency and customer experience.

Hackle provides two methods.

1. **Property-based personalization** Inserts user properties into messages using Liquid syntax.
2. **Connected Content** Calls an external API right before sending to fill the message with real-time values.

<figure><img src="/files/uGTK23j6ZNUnJnpDmZJD" alt=""><figcaption></figcaption></figure>

#### Which method should I use?

* For values that are already stored, such as name, tier, or preferred category, use **property-based personalization**.
* For values that change at send time, such as coupons, inventory, prices, or recommendation results, use **Connected Content**.
* The two methods can be used together.

***

## Property-Based Personalization

Property-based personalization is suitable when you want to insert different text into the message body and links for each user.

```liquid
{{ user_properties["name"] | default: "Customer" }}, a coupon you can use today only has arrived.
```

You can insert values into links in the same way.

```liquid
https://example.com/coupon?user_id={{ user_properties["user_id"] }}
```

If a value may be empty, set a fallback text with `default`.

{% hint style="info" %}
For detailed usage, see [Property-Based Personalization](/en/crm-marketing/message-personalization/properties.md).
{% endhint %}

#### Use case

**1. Tier-based benefit guidance**

You can display different benefit messages depending on the membership tier.

```liquid
Check out the exclusive benefits for {{ user_properties["membership_level"] | default: "members" }}.
```

**2. Re-engagement based on preferred category**

You can increase message relevance by inserting the user's preferred category.

```liquid
Check out {{ user_properties["favorite_category"] | default: "popular" }} products now.
```

**3. Recently viewed product reminder**

You can drive clicks and purchase conversions by inserting the name of a recently viewed product.

```liquid
{{ user_properties["last_viewed_product_name"] | default: "A recommended product" }} is still waiting for you.
```

## Connected Content

Connected Content is a Liquid tag that calls an external API right before sending a message and dynamically inserts the response into the message body.

You can reflect real-time data such as inventory, price, order status, and personalized recommendation results at send time directly into the message.

You can pull content regardless of the source, whether it is your own server or a publicly available external API.

It can also be used in conjunction with various technology partners.

> **If you are new to Liquid syntax,** we recommend lightly reviewing Shopify's official Liquid guide first.
>
> It covers the basic syntax used in this document, including variable output, tags, filters, and conditionals.
>
> 👉 <https://shopify.github.io/liquid/basics/introduction/>

#### Using it together in message content and links

You can compose both the message body and links from the same API response.

```liquid
{% connected_content https://api.example.com/coupons/{{user_properties["id"]}} :save coupon %}
{{ user_properties["name"] | default: "Customer" }}, your coupon code today is {{coupon.code}}.
https://example.com/coupons/{{coupon.code}}
```

This method is useful when creating links that differ for each user, such as coupons, recommended products, and order lookup links.

{% hint style="info" %}
For more detailed syntax, see [Writing Connected Content](/en/crm-marketing/message-personalization/connected-content.md).
{% endhint %}

#### Use Case

**1. Real-time product information sync**

* Even if you create a campaign in advance, it pulls the current price, inventory, and discount rate from your product API right before sending and reflects them in the message. You can prevent incidents where price changes or sold-out products are incorrectly announced, and even if you run the same campaign for a long time, the latest information is always displayed.

```liquid
"The [Air Max 95] you saved is now on sale for 78,000 won. Only 3 left in stock."
```

**2. Real-time point / reward lookup**

* It looks up the customer's points, reward balance, and coupon balance via API at send time and displays them directly in the message. You can always show an accurate balance.

```liquid
"The review you wrote has been registered. You earned 500 points, and you can now use 12,300 points."
```

**3. Personalized recommendation content display**

* By calling your in-house ML recommendation system or curation API, you fill the message body with different products, content, and events for each user. Even when you send the same campaign, the items displayed differ for each recipient.

```liquid
"Today's recommendations for you: White Daily Shirt, Cotton Cargo Pants, Canvas Sneakers. Discover them all at member prices now."
```

#### Be sure to check when writing

* Set a `default` in case the value is empty.
* Verify the actual displayed values with preview and test sends.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hackle.io/en/crm-marketing/message-personalization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
