---
title: How to import and personalise emails with Subscriber Properties
description: Subscriber Properties let you store additional information against existing subscribers and use it to personalise your email campaigns.
---

[Skip to content](https://resources.symphonycommerce.io/knowledge-base/how-to-import-and-personalise-emails-with-subscriber-properties#main-content)

[File a Ticket](https://resources.symphonycommerce.io/knowledge-base/kb-tickets/new?hsLang=en) [Go to Customer Portal](https://clienthub.symphonycommerce.io/tickets-view?hsLang=en)

[![symphony-commerce-logo-mark-white-rgb-1500px-w-350ppi](https://resources.symphonycommerce.io/hs-fs/hubfs/Design/Logo/symphony-commerce-logo-mark-white-rgb-1500px-w-350ppi.png?width=40&height=40&name=symphony-commerce-logo-mark-white-rgb-1500px-w-350ppi.png)](https://resources.symphonycommerce.io/knowledge-base?hsLang=en)

- [WHY SYMPHONY?](https://www.symphonycommerce.io/pages/why-shopblocks)
  
  Show submenu for WHY SYMPHONY?

    - [EXCLUSIVELY B2B ECOMMERCE](https://www.symphonycommerce.io/pages/why-shopblocks#exclusivelyB2B)
    - [LIMITLESS INTEGRATION](https://www.symphonycommerce.io/pages/why-shopblocks#ftv)
    - [FASTEST TIME TO VALUE](https://www.symphonycommerce.io/pages/why-shopblocks#limitlessIntegration)
    - [SEAMLESS MIGRATION](https://www.symphonycommerce.io/pages/why-shopblocks#seamlessMigration)
- [CUSTOMER SUCCESS](https://www.symphonycommerce.io/pages/customer-success)
  
  Show submenu for CUSTOMER SUCCESS

    - [CASE STUDIES](https://www.symphonycommerce.io/pages/case-studies)
- [FEATURES](https://www.symphonycommerce.io/pages/features-in-focus)
  
  Show submenu for FEATURES

    - [NEXUS – WHITE LABEL STOREFRONT PLATFORM](https://www.symphonycommerce.io/pages/nexus)
    - [INTEGRATIONS](https://www.symphonycommerce.io/pages/api-integrations-to-power-up-your-ecommerce)
    - [FORTIS – SMARTER DISCOUNTS FOR BIGGER B2B DEALS](https://www.symphonycommerce.io/pages/fortis)
    - [SYMPHONY PAY – TRUSTED PAYMENT OPTIONS FOR MODERN B2B COMMERCE](https://www.symphonycommerce.io/pages/symphony-pay)
- [PRICING](https://www.symphonycommerce.io/pages/pricing)
- [PARTNERSHIPS](https://www.symphonycommerce.io/pages/ensemble)
- [INSIGHTS HUB](https://resources.symphonycommerce.io/blog)

Open main navigation

Close main navigation

- [WHY SYMPHONY?](https://www.symphonycommerce.io/pages/why-shopblocks)
  
  Show submenu for WHY SYMPHONY?

    - [EXCLUSIVELY B2B ECOMMERCE](https://www.symphonycommerce.io/pages/why-shopblocks#exclusivelyB2B)
    - [LIMITLESS INTEGRATION](https://www.symphonycommerce.io/pages/why-shopblocks#ftv)
    - [FASTEST TIME TO VALUE](https://www.symphonycommerce.io/pages/why-shopblocks#limitlessIntegration)
    - [SEAMLESS MIGRATION](https://www.symphonycommerce.io/pages/why-shopblocks#seamlessMigration)
- [CUSTOMER SUCCESS](https://www.symphonycommerce.io/pages/customer-success)
  
  Show submenu for CUSTOMER SUCCESS

    - [CASE STUDIES](https://www.symphonycommerce.io/pages/case-studies)
- [FEATURES](https://www.symphonycommerce.io/pages/features-in-focus)
  
  Show submenu for FEATURES

    - [NEXUS – WHITE LABEL STOREFRONT PLATFORM](https://www.symphonycommerce.io/pages/nexus)
    - [INTEGRATIONS](https://www.symphonycommerce.io/pages/api-integrations-to-power-up-your-ecommerce)
    - [FORTIS – SMARTER DISCOUNTS FOR BIGGER B2B DEALS](https://www.symphonycommerce.io/pages/fortis)
    - [SYMPHONY PAY – TRUSTED PAYMENT OPTIONS FOR MODERN B2B COMMERCE](https://www.symphonycommerce.io/pages/symphony-pay)
- [PRICING](https://www.symphonycommerce.io/pages/pricing)
- [PARTNERSHIPS](https://www.symphonycommerce.io/pages/ensemble)
- [INSIGHTS HUB](https://resources.symphonycommerce.io/blog)
- [File a Ticket](https://resources.symphonycommerce.io/knowledge-base/kb-tickets/new)
- [Go to Customer Portal](https://clienthub.symphonycommerce.io/tickets-view)
- [VISIT OUR WEBSITE](https://www.symphonycommerce.io/)

[VISIT OUR WEBSITE](https://www.symphonycommerce.io/)

 How can we help you?

- There are no suggestions because the search field is empty.

1. [Symphony Knowledge Base](https://resources.symphonycommerce.io/knowledge-base?hsLang=en)
2. [Marketing](https://resources.symphonycommerce.io/knowledge-base/marketing?hsLang=en)
3. [Email](https://resources.symphonycommerce.io/knowledge-base/marketing?hsLang=en#email)

# How to import and personalise emails with Subscriber Properties

## Subscriber Properties let you store additional information against existing subscribers and use it to personalise your email campaigns.

**Important Information:**

Importing a CSV replaces all properties currently stored for all subscribers. Always export the existing properties first, edit the exported file, and then re-import it.

A Twig rendering error can prevent both test and campaign emails from sending. Resolve the error before sending the campaign.

### What you can do

With Subscriber Properties, you can:

- Upload subscriber properties from a CSV file.
- Store simple values, lists, and nested objects.
- Display property values dynamically in emails using Twig. **You can find a full explanation in the [use properties in an email](https://resources.symphonycommerce.io/knowledge-base/how-to-import-and-personalise-emails-with-subscriber-properties#use-properties-in-an-email) section below.**
- Export properties as CSV or JSON.
- Preview and test a campaign as a specific subscriber.

![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-05-12-5256-AM.png?width=546&height=66&name=image-png-Oct-01-2026-10-05-12-5256-AM.png)

### Before you begin

Keep these rules in mind:

1. Your CSV must contain an `email` column.
2. Properties are only attached to subscribers who already exist.
3. Importing properties does **not** create new subscribers.
4. **An import replaces the subscriber’s existing properties, it does not merge with them.**
5. To update or add properties safely, export the current data, edit that file, and re-import it.
6. If you need to add subscribers, import or add them first. You can also place them directly into an appropriate list to keep them organised from the start.
7. The email address is normalised during matching, so differences such as letter casing will not prevent an existing subscriber from being identified.

### Prepare your CSV file

Your CSV requires one row per subscriber and one column per property.

The first row contains the column headings. Each heading becomes the property’s name.

##### Simple properties

| email | favourite\_category | preferred\_product\_line | content\_interest |
| --- | --- | --- | --- |
| buyer@example.com | Office Supplies | Workplace Furniture | Procurement Guides |
| manager@example.com | IT Equipment | Business Laptops | Product Comparisons |

This creates the following properties:

- `favorite_category`
- `preferred_product_line`
- `content_interest`

In Twig, they are available under `customer.properties`:

```
{{ customer.properties.favorite_category }}
```

##### Import lists and arrays

Use square brackets in your column headings to create a list:

| email | interested\_categories\[0\] | interested\_categories\[1\] |
| --- | --- | --- |
| buyer@example.com | Office Supplies | Workplace Furniture |
| manager@example.com | Business Laptops | Networking Equipment |

You can loop through this property in your email:

```
{% for category in customer.properties.interested_categories %}   <p>{{ category }}</p> {% endfor %}
```

##### Missing list indexes are corrected automatically

Your indexes do not need to be consecutive:

| email | interested\_categories\[0\] | interested\_categories\[3\] |
| --- | --- | --- |
| buyer@example.com | Office Supplies | Workplace Furniture |

During import, the list is automatically reindexed as:

| Original column | Stored index |
| --- | --- |
| `interested_categories[0]` | `interested_categories[0]` |
| `interested_categories[3]` | `interested_categories[1]` |

##### Lists containing one item remain lists

A CSV containing only one indexed item still creates a list:

| email | recommended\_products\[0\].name |
| --- | --- |
| buyer@example.com | Ergonomic Office Chair |

The `recommended_products` property remains a list, even though it contains only one product. This means it can be used reliably in a Twig loop.

##### Import objects

Use a full stop in a column heading to create a nested object:

| email | preferences.favourite\_category | preferences.preferred\_brand |
| --- | --- | --- |
| buyer@example.com | Office Supplies | Acme |
| manager@example.com | IT Equipment | ExampleTech |

The values can then be accessed using:

```
{{ customer.properties.preferences.favorite_category }} 
```

For example:

```
{{ customer.properties.preferences.preferred_brand }}
```

##### Import lists of objects

You can combine array indexes and object fields to create structured data:

| email | recommended\_products\[0\].sku | recommended\_products\[0\].name | recommended\_products\[1\].sku | recommended\_products\[1\].name |
| --- | --- | --- | --- | --- |
| buyer@example.com | CHAIR-01 | Ergonomic Office Chair | DESK-02 | Adjustable Standing Desk |
| manager@example.com | LAPTOP-03 | Business Laptop | DOCK-04 | Universal Docking Station |

This produces a `recommended_products` list containing objects with `sku` and `name` values.

You can display it with Twig:

```
{% for product in customer.properties.recommended_products %}<p>{{ product.name }} — {{ product.sku }}</p>{% endfor %}
```

 

### Upload subscriber properties

1. Open the **Subscribers** page.
2. Click: **Manage Properties \> Import CSV
   
   ![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-28-52-6471-AM.png?width=301&height=164&name=image-png-Oct-01-2026-10-28-52-6471-AM.png)**
3. Choose your CSV file.
   
   ![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-31-32-5244-AM.png?width=506&height=496&name=image-png-Oct-01-2026-10-31-32-5244-AM.png)
4. Import Properties

Only rows matching existing subscribers will be stored. Rows containing email addresses that do not belong to existing subscribers will not create new subscriber records.

**Warning:** The import replaces all existing properties for all subscribers. Properties omitted from the new file will be removed.

### Use properties in an email

Every property belonging to the recipient is loaded into the Twig context under:

```
customer.properties
```

A simple value can be displayed like this:

```
{{ customer.properties.favorite_category }}
```

Nested values can be accessed using dot notation:

```
{{ customer.properties.preferences.preferred_brand }}
```

Lists can be displayed with a loop:

```
{% for category in customer.properties.interested_categories %}<p>{{ category }}</p> {% endfor %}
```

Lists of objects can also be looped over:

```
{% for product in customer.properties.recommended_products %}<p>{{ product.name }}<br>Product code: {{ product.sku }}</p> {% endfor %}
```

The merge-tags area provides a starting point for using your properties. You may need to enter the appropriate property path or adapt the Twig code for your data.

![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-36-43-2095-AM.png?width=366&height=475&name=image-png-Oct-01-2026-10-36-43-2095-AM.png)

![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-37-36-7116-AM.png?width=368&height=308&name=image-png-Oct-01-2026-10-37-36-7116-AM.png)

The email designer’s merge-tags section displays a unique list of the subscriber properties available across your data.

Use this list to:

- Find the correct property names.
- Insert simple property values.
- Identify lists or objects that can be used in custom Twig.

The list shows all available property paths, but an individual subscriber may not have a value for every property.

### Test an email as a subscriber

Before sending your campaign, test how the email renders for a real subscriber:

1. Open the campaign’s **"Send Test"** option.
   
   ![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-40-13-6637-AM.png?width=315&height=62&name=image-png-Oct-01-2026-10-40-13-6637-AM.png)
2. Enter the address that should receive the test.
3. Use the **Preview as** selector to choose a subscriber.
   
   ![](https://resources.symphonycommerce.io/hs-fs/hubfs/image-png-Oct-01-2026-10-41-07-6461-AM.png?width=670&height=305&name=image-png-Oct-01-2026-10-41-07-6461-AM.png)
4. Send the test email.

The email will be rendered using the selected subscriber’s properties. The test itself is sent to the test-email address you entered.

This is especially useful for checking:

- Personalised content.
- Conditional content.
- Lists and loops.
- Nested object values.
- Subscribers with missing or different property values.

### Export subscriber properties as CSV

From the **Subscribers** page, select the option to export subscriber properties.

The export contains:

- The subscriber’s email address.
- Their property columns.
- No unrelated subscriber fields.

The exported CSV is designed to be edited and re-imported. This is the safest way to update existing properties or add new ones without accidentally omitting stored data.

#### Recommended update process

1. Export the current subscriber properties as CSV.
2. Keep the `email` column unchanged.
3. Edit existing property columns or add new ones.
4. Include every property you want each subscriber to retain.
5. Save the file as CSV.
6. Upload it through the subscriber-properties import.

### Export properties as JSON

You can also export subscriber properties as JSON.

A JSON export is useful when:

- You want to inspect the complete data structure.
- You are working with nested objects or lists.
- You need help producing Twig for complex data.
- You want to process the data with another application or an AI assistant to help you write dynamic content.

Subscriber data may contain personal or commercially sensitive information. Review and minimise the data before sharing it with any external service, and make sure its use complies with your privacy obligations.

### Examples

##### Display recommended products

Your CSV could contain:

| email | favourite\_category | recommended\_products\[0\].sku | recommended\_products\[0\].name | recommended\_products\[1\].sku | recommended\_products\[1\].name |
| --- | --- | --- | --- | --- | --- |
| buyer@example.com | Office Furniture | CHAIR-01 | Ergonomic Office Chair | DESK-02 | Adjustable Standing Desk |
| manager@example.com | IT Equipment | LAPTOP-03 | Business Laptop | DOCK-04 | Universal Docking Station |

You could then display the recommended products with:

```
{% if customer.properties.recommended_products %}<h2>Recommended {{ customer.properties.favourite_category }} products</h2>{% for product in customer.properties.recommended_products %}<p>{{ product.name }}<br>Product code: {{ product.sku }}</p>{% endfor %}{% endif %}
```

This checks that the list exists before attempting to display it.

##### Display categories of interest

Your CSV could contain:

| email | interested\_categories\[0\] | interested\_categories\[1\] | interested\_categories\[2\] |
| --- | --- | --- | --- |
| buyer@example.com | Office Supplies | Workplace Furniture | Print Equipment |
| manager@example.com | Business Laptops | Networking Equipment | Cybersecurity |

You could display the categories with:

```
{% if customer.properties.interested_categories %}<h2>Categories you may be interested in</h2>{% for category in customer.properties.interested_categories %}<p>{{ category }}</p>{% endfor %}{% endif %}
```

### Troubleshooting

##### A subscriber’s properties were not imported

Confirm that:

- The subscriber already exists.
- The CSV contains an `email` column.
- The email address matches the subscriber after normalization.
- The property headings are unique.

##### Existing properties disappeared

An import replaces existing properties. Export the current properties before making changes, then ensure the updated CSV contains every property that should be retained.

##### A list has unexpected indexes

List indexes are normalized during import. For example, indexes `0` and `3` become `0` and `1`.

##### A list with one item is not behaving like an object

This is expected. A heading such as `recommended_products[0].name` deliberately creates a list, even when there is only one item. Use a Twig loop to access it.

##### The test email does not show the expected data

Check that:

- You selected the intended subscriber in **Preview as**.
- The selected subscriber has the required properties.

##### The test email did not send

If the test email does not send, there may be an error in your Twig. This could be invalid Twig syntax, an incorrect property name, or an attempt to display a list or object as a single value.

Check for:

- Invalid or incomplete Twig syntax.
- Missing closing tags, such as `{% endif %}` or `{% endfor %}`.
- Misspelled property names or incorrect property paths.
- Unmatched brackets, braces, or quotation marks.
- An object being displayed directly:

```
{{ customer.properties.preferences }} 
```

Instead, display a specific value from the object:

```
{{ customer.properties.preferences.favorite_category }}
```

- A list being displayed directly:

```
{{ customer.properties.interested_categories }}
```

Instead, loop through the list:

```
{% for category in customer.properties.interested_categories %}<p>{{ category }}</p>{% endfor %}
```

Try removing or simplifying the most recently added Twig, then send the test email again. If it sends successfully, reintroduce the Twig in smaller sections to identify the error.

A Twig rendering error can prevent both test and campaign emails from sending. Resolve the error before sending the campaign.

- [Getting started](https://resources.symphonycommerce.io/knowledge-base/getting-started?hsLang=en)
- [Settings](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#main-content)

    - [Payment Methods](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#payment-methods)
    - [Redirects](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#redirects)
    - [Deliveries](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#deliveries)
    - [Notifications And Emails](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#notifications-and-emails)
    - [Users](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#users)
    - [Site Settings](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#site-settings)
    - [Varnish Cache](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#varnish-cache)
    - [Tracking, SEO And Javascript](https://resources.symphonycommerce.io/knowledge-base/settings?hsLang=en#tracking-seo-and-javascript)
- [Reports](https://resources.symphonycommerce.io/knowledge-base/reports?hsLang=en)
- [BlockLab](https://resources.symphonycommerce.io/knowledge-base/blocklab?hsLang=en)
- [Content](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#main-content)

    - [Pages](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#pages)
    - [Menus](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#menus)
    - [Strings](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#strings)
    - [Blogs / News](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#blogs-news)
    - [Snippets](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#snippets)
    - [Forms](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#forms)
    - [Downloads](https://resources.symphonycommerce.io/knowledge-base/content?hsLang=en#downloads)
- [Products](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#main-content)

    - [Groups](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#groups)
    - [Categories](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#categories)
    - [Brands](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#brands)
    - [Reviews](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#reviews)
    - [Products](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#products)
    - [Stock](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#stock)
    - [Catalogues](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#catalogues)
    - [Customisations](https://resources.symphonycommerce.io/knowledge-base/products?hsLang=en#customisations)
- [Discounts](https://resources.symphonycommerce.io/knowledge-base/discounts?hsLang=en#main-content)

    - [Discounts Fortis](https://resources.symphonycommerce.io/knowledge-base/discounts?hsLang=en#discounts-fortis)
- [Plugins](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#main-content)

    - [Google Shopping Feed](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#google-shopping-feed)
    - [One-Time Passcode](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#one-time-passcode)
    - [Out Of Stock Notify](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#out-of-stock-notify)
    - [Auto Tags](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#auto-tags)
    - [Compare Products](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#compare-products)
    - [Business Customers](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#business-customers)
    - [Stickers](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#stickers)
    - [Custom Fields](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#custom-fields)
    - [B2B Sales](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#b2b-sales)
    - [Auto Checkout](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#auto-checkout)
    - [Tempus](https://resources.symphonycommerce.io/knowledge-base/plugins?hsLang=en#tempus)
- [Orders](https://resources.symphonycommerce.io/knowledge-base/orders?hsLang=en#main-content)

    - [Returns](https://resources.symphonycommerce.io/knowledge-base/orders?hsLang=en#returns)
- [Customers](https://resources.symphonycommerce.io/knowledge-base/customers?hsLang=en)
- [My Account](https://resources.symphonycommerce.io/knowledge-base/my-account?hsLang=en)
- [Marketing](https://resources.symphonycommerce.io/knowledge-base/marketing?hsLang=en#main-content)

    - [Merchandising](https://resources.symphonycommerce.io/knowledge-base/marketing?hsLang=en#merchandising)
    - [Email](https://resources.symphonycommerce.io/knowledge-base/marketing?hsLang=en#email)

[![symphony-commerce\_logo-mark](https://resources.symphonycommerce.io/hubfs/logo-mark-symphony-commerce-black-ergb.svg "symphony-commerce_logo-mark")](http://www.symphonycommerce.io)

1 St Peter's Square  
 Stockport, SK1 1NZ

[support@symphonycommerce.io](mailto:support@symphonycommerce.io)

[(+44)161 399 7467](tel:01613997467)

<https://www.linkedin.com/company/symphonycommerce> <https://www.youtube.com/@symphonycommerce>

Copyright © 2026, Symphony Commerce