Creating an email campaign

To create a new Ortto email campaign:

  1. On the Campaigns page.

  2. On this page, click New campaign.

  3. On the New campaign page, click Email to begin creating your email campaign, followed by Next.

Email campaign wizard pages

This section describes each successive page of the email campaign creation process.


On the Template page, select a template based on a particular use case or data source integration as the basis to build your email. Alternatively, choose Start from scratch if none of the existing templates are suitable. You can also select My saved templates or choose from templates shared with you from another Ortto account under Shared with me.

If you have an Autopilot account integrated with your Ortto account, you can find your templates under Autopilot emails.

Alternatively, select HTML upload to upload a custom HTML file containing your email message content, including any Liquid syntax you wish to use. If your HTML file is valid, you will continue to Review.

  • If you selected to A/B content test the campaign during Setup, you will need to upload 2 separate HTML files. Only one HTML file can be uploaded at a time.

  • Once your HTML file is uploaded and you have been taken to the Review tab to view a preview of your email, you are currently unable to edit the email message content. Should you wish to edit the content, you will need to edit your HTML file and return to the Template tab to re-upload it.

Learn more about the HTML email upload, including prerequisites and troubleshooting under Custom HTML email template upload.

When you choose a template, you can apply you brand book settings by selecting the Use brand book settings checkbox, then click Use template to get started. Once selected, you can also rename the campaign if needed. If the template you selected uses data from a connected data source, you’ll need to choose the relevant accounts.


On the Recipients page, select either an audience, subscribers with a certain tag, or a segment of people from a filter. You can only select a single audience, tag or filter segment.


On the Setup page:

  • Write a subject line for the email. After you finish writing your subject line the Ortto AI will estimate the open rate and can automatically suggest improved subject lines. If you like a suggestion just click on it to change your existing subject line. You can also click the AI button to switch off subject line suggestions.

    email ai

    You can also insert fields or activity’s attributes (merge tags) into the subject line:

    1. Click the people merge tag icon — anywhere you see this icon you can add merge tags.

    2. Select either a recent merge tag, a field or activity attribute to add.

      merge tag 1
    3. When you select a field or attribute you will be shown example of possible values and given the option to add a default value in case the value is empty.

      merge tag 2
  • Set the preview text. This step is optional but recommended. This is the preview text a recipient will see in their email client and can entice them to open the email along with the subject line.

  • A/B test campaign. You can test different subject lines, preview text, from names and content.

    A/B test campaign can be combined with Translate campaign (you can select both). If both features are selected, you will need to create translated subject lines or content designs, depending on your A/B test configuration.
  • Translate campaign. This appears only if you have a language chosen under Settings  General  Language  Translations. If selected, you’ll translate the email message subject and content into the selected languages for recipients who have chosen them as their preferred languages. Email message translation is performed using display conditions (Liquid syntax) in the Content step. Learn more about translating email message content.

    Translate campaign can be combined with Open rate optimization (you can select both). If both features are selected, you will need to create a second subject line in the selected languages.
  • Enter a From name. The is the name of the person sending the campaign. We recommend using a real persons name from your business to make the email more personal. You can use Merge tags like "Owner name" to personalize the From name for each individual recipient.

  • Enter a From email address. This is the email address the email is sent from and by default the email address that will receive replies. You can also set a specific reply-to address. Merge tags can also be used in this field e.g. "Owner email address" to personalize the email for each individual recipient.

  • Transactional email. Select this option and provide a purpose if the email is transactional in nature. Learn more about transactional email at Making campaign messages transactional.

  • Optional CC/BCC. We support the addition of CC and BCC. You can add multiple people to CC or BCC with comma separation.

  • Add reply to email. The reply to email gives you the opportunity to specify a reply address that is different from the from email address. This is helpful if you want replies to go to another inbox.

  • Show advanced options:

    • Delivery load distribution. You can rate limit the email delivery and extend your send time by up to 48 hours. Rate limiting the email send to a large recipient base can help you manage expected recipient responses, such as a high website or call center demand following an event announcement. Learn more about rate limiting under Delivery load distribution.

      Delivery load distribution can be combined with Open rate optimization (you can select both). If both features are selected, the email resend will commence 24 hours after all rate-limited emails have been sent.
    • Open rate optimization. Select the checkbox if you wish to send the email again later (after 24 hours, 2 days, 3 days or 7 days) with a different subject line if unopened. If you choose not to select this feature, you can resend the email manually after 24 hours (within 30 days of the original send date). Learn more about resending an email under Viewing an email.

      email resend
      Your chances of unsubscribes and complaints will increase if you resend a campaign, so use this function wisely. Lean more about complaints, sender reputation and email deliverability, under Improving email deliverability.
    • Tracking. Select to track email opens, link clicks, and/or automatically add Urchin tracking module (UTM) parameters and hashed email address to links in the email.

      UTM parameters help you track traffic to your website by appending information about the campaign to each URL. If this option is on we will automatically add UTM to all links in the email campaign. Learn more about how our default UTM tracking works.

      Adding a hashed email address to links in the email appends a hash (SHA-256) of the recipient’s email address to any links in the email message they click. So when a recipient clicks on a link, the URL will include the user_email parameter with a code representing the recipient’s email address (hash): user_email=8b1a9315f94318b994b7b9262295ae43fe089424c0c86a0ebe5e5bb76c00f127. This allows you to use your own analytics tools to associate clicks with users, based on the URL.

      You must have Track link clicks selected to enable adding UTM and email hash parameters.
    • Reactions. Reactions are ON by default. They show 5 emoji in the footer of your email campaign allow people to react and comment on your campaign. This can provide not only valuable feedback and overall sentiment of a message but can dramatically reduce unsubscribe rates. Learn more about reactions.

    • Dynamic content. This feature allows you to dynamically pull content from a JSON endpoint which you control. You can either pull static content to use for all emails, or specific content per contact in batches of 200. Learn more about Dynamic content.

    • Attribution. Each email campaign is set based on your default attribution settings. However sometimes it won’t make sense to track attribution towards orders if you’re emailing about registering for an event. In this case you can set a custom activity and its attributes as the attribution activity to track in reporting. Learn more about attribution.


On the Content page, the email editor helps you add content and allows you to drag and drop content and images directly into the template. If you have an e-commerce data source connected you will see additional content blocks you can add to your emails including products, recently browsed items and information about the last order.

email content 1

There are several other functions in the email editor you should become familiar with:

  • Preview - this displays a preview of the email on both desktop and mobile.

  • Send test - this sends a test email to your email or other emails you specify to check the email displays correctly in your email client.

  • Merge tags - this brings up a dialog that allows you to add variables and activity attributes to your email.

    Merge tags can be used to output person, organization and activity data, or be used with conditional formatting to show or hide content depending on the recipient. Learn more about using merge tags with Liquid syntax in Personalizing campaign content with Liquid.

    add merge tag

    If you are selecting an activity attribute as your merge tag, we will use the latest activity for that person (contact). However, if you are editing a journey or playbook email message, and the entry criteria is of type X activity occurs, then we will use the activity that caused the person to enter the journey/playbook instead (for playbooks this needs to be configured in the playbook details panel under More  Activity personalization), even if more activities have occurred since then.

    The activity must have occurred within the last 30 days to be available. If you require the value to be available beyond this, we recommend saving the value into a custom field and use this as your merge tag instead.

If you like the email design you’ve come up with and want to use the layout again when you create your next email you can save the email as a template when you exit the email creation wizard. Learn about saving templates in Templates.

Add attachments to the email message

There are two ways you can add attachments to an email message:

  • Within a text block — when inserting a link, click the Link type file options to select File manager. There you can access the file manager.

    add to link
  • As a button — when you add a button, you can insert a file as a link. To do so, in the button’s Content properties, at Action, click Link file to access the file manager.

add to button

In the file manager, you can click Upload to add files from your device, or Import to add from connected services. To select a file to add to a link or button, simply select the checkbox of the relevant file, then click Insert.

file insert
Example file selection in the file manager

Hover over a file in the file manager to see options to preview or delete the file.

On the right-hand side of the file manager you’ll see viewing options (icons or list), a search bar, and an option to create folders to manage your files.


The Review page steps helps you double check you have the correct audience, campaign settings and all of your links are working as expected. If there are links that aren’t working they will be shown as errors and clearly marked for review. You can go back to any step or switch between steps by using the menu in the footer.

email review 1

Send now

If you wish to send the campaign immediately you can use Send now. After a confirmation the email will send immediately. Send times will vary based on the audience size.

Schedule the campaign

The email campaign can be sent immediately or scheduled for a later time by selecting a date and time for the campaign to start sending. Learn more about how to schedule your email campaign.

If this is your first email campaign, in particular if you are new to Ortto and have recently created an/signed up with an account, your details and Ortto account itself may need to be verified (and therefore "trusted") by Ortto. Learn more about this process in Untrusted accounts.

Translate email message content

If you selected in the email Setup to translate your email content to other languages, you will need to use merge tags and Liquid syntax to ensure the message content is conditionally shown to recipients in those languages.

Ortto does not translate message content for you; you need to write any text content in the relevant language. For example, an email campaign that supports both English and Spanish languages will need to have subject lines and message text written in both English and Spanish. The relevant message text must be surrounded by conditions which determine that English readers see the English text, and Spanish readers see the Spanish text.

There are a number of ways you can set language conditions.

In the text boxes, create conditions to determine what content users see, depending on their preferred language. You can combine all language conditions and text content within a text box, such as if you want to write greetings in different languages.

english spanish syntax

You can frame content with Liquid syntax in text boxes to show different content depending on the language. In the below example, the campaign is setup to translate to Spanish, so using the syntax displayed, English readers will see the top image, but Spanish readers will see the bottom image.

syntax framing

You can also set conditions for an entire row. To do so, click on the row, then in the Rows settings on the right, click Add condition. Enter your name, description, and before and after conditions, then Confirm. The row is now set to display to recipients with the preferred language you specified.

lang row condition
lang row condition 2

Other handy operators for your conditions are or and contains, such as:

  • {% if people.language == 'en-us' or people.language == 'en-gb' %} Display content for all English (US and UK) readers {% elsif people.language == 'es' %} Display content for Spanish readers {% endif %}

  • {% if people.language contains 'en' %} Display content for all English (US and UK) readers {% elsif people.language == 'es' %} Display content for Spanish readers {% endif %}

Learn more about using merge tags and Liquid syntax, including the values for each supported language, under Translate campaign content with Liquid in Personalizing campaign content with Liquid.

Message content will only be shown to recipients in their preferred language if you use merge tags and Liquid syntax to conditionally show the content in the specified language. Otherwise, if the person has no preferred language set, or their language is not supported in the email, they will see content that is presented in the default language you set under Settings  General  Language  Default. Any text not contained within language conditions will be presented in the language it is written in to all recipients.

Footer links will be presented in the languages the campaign supports. That is, if the campaign is set up to support English (US) and Spanish languages, recipients whose preferred language is Spanish will see the footer links in Spanish, where other recipients will see it in English (US).

If a person’s preferred language is not currently supported for translation (such as Chinese (Singapore) zh-sg) and contains a value that is (the base value for Chinese zh), it will fall back to a supported value (Chinese (simplified) zh-cn or Chinese (traditional) zh-tw).

Delivery load distribution

When setting up delivery load distribution, Max recipients per batch is the maximum amount of people that will be in a batch. For example, if you have an audience of 750 people, a maximum of 500 will be in the first batch and the remainder in the second.

Due to the way Ortto handles message delivery, the minimum rate limit you can set is 500 recipients every 5 minutes. Should you wish to rate limit the send further than Ortto’s minimum limit, you could consider splitting your campaign audience into two, and rate limit the send to each audience, one after the other.

Automatic UTM parameters

By default we append sensible UTM attributes to each email URL to help you track the performance of your emails in solutions like Google Analytics. When this option is turned on (recommended) the URL will look like this:

Each parameter is set by default as follows:

  • campaign = campaign name

    The character limit for the utm_campaign parameter value is 25 unicode characters.

    Non-letter or digit characters like spaces, # and $ will be replaced by a single dash (-) (except if they appear at the start or end of the name, in which case they will be ignored). For example, a campaign name "Summer sale promotion for Australian customers" will become a utm_campaign value of summer-sale-promotion-for.

  • content = campaign name (same as utm_campaign), or the shape/message name if sent from a journey or playbook

  • medium = email or sms

  • source = ortto

This option should be turned off when using custom UTM parameters.

Email campaign reactions

In the past email metrics were relegated to opens and clicks. But just because someone opened and clicked on your campaign doesn’t mean they like it. Reactions give you an entirely new email metric that we call sentiment. Sentiment will tell you if subscribers are Positive, Neutral or Negative on your email campaign content.

There are several benefits to reactions and sentiment:

  • Get constant feedback on your email campaigns beyond open and click metrics;

  • Dramatically reduce unsubscribe rates - people often choose to react negatively as opposed to unsubscribe giving you a chance to improve your content; and

  • Stay motivated with positive feedback about your content.

Reactions are on by default when you create a new email campaign.

Reactions are shown in the email footer, like so:


When the subscriber clicks on a reaction they are taken to a hosted page:


This hosted page is controlled via your brand book settings. We record their initial reaction and then give them a window of time to change it and leave a comment before recording the result in the email campaign report.

You can see the reaction report when you view a sent campaign. The report looks like this:


How to turn reactions off

If you don’t want reactions to be included in the email campaign, you can deselect the checkbox in the email setup.

turn reactions off

Reactions can only be disabled (or enabled) at an individual campaign level and currently cannot be disabled globally for all email campaigns (account-wide).

Schedule the email campaign

When creating an email campaign, you need to configure an audience, tag, or filter, consisting of subscribers/members to deliver your campaign to.

If you choose to schedule your email campaign instead of delivering it immediately, then the subscribers/members of your email campaign’s recipients, tag, or filter may change, grow, or contract between the time your campaign is created and the time your campaign is scheduled to be sent.

Therefore, Ortto automatically updates the people who will receive your email campaign, based on the subscribers/members of your campaign’s recipients, tag or filter, at the time your campaign is due to be sent.

Every email provides the ability for a subscriber to opt-out, and the standard Ortto email footer offers different unsubscribe links.

There are two unsubscribe links the subscriber will see depending on who the email is sent to:

  • Unsubscribe from all emails

  • Unsubscribe from this list

When you send an email to a group of subscribers using a filter or a tag we include an option to Unsubscribe from all emails. When clicked the subscriber will be globally unsubscribed and you will not be able to send them email unless they opt back in.

When you send an email to an audience that is included in the email preference center the unsubscribe link changes to "Unsubscribe from this list". If they unsubscribe they will only be unsubscribed from that particular audience but can select to unsubscribe from all emails in the preference center.

Custom HTML email upload

The custom HTML upload feature is designed to make it easy for you to upload email message content if you have a lot of emails prepared in HTML format or you are transferring your email content from another platform to Ortto.

You can upload a single HTML file, or a ZIP file containing 1 HTML file and up to 100 images. When you upload a ZIP file containing images, the images are uploaded to Ortto’s content delivery network (CDN) to serve those images to recipients when they view your email message.

Email messages added to journeys and playbooks can also be created using an HTML or ZIP file.

The Liquid syntax for the special footer links (unsubscribe, preferences, view online, and forward) can be found under Liquid special links in the Liquid guide.

HTML email upload prerequisites

HTML email files and ZIP files must meet the following prerequisites:

  • You need to be on a paid Ortto plan with the custom footer feature. This is because the HTML upload creates an email without Ortto’s default footer.

  • An HTML email file cannot be bigger than 500KB.

  • Uncompressed image files contained within a ZIP file cannot be collectively larger than 6MB, with each uncompressed image no larger than 1MB.

  • If the HTML file contains Liquid tags it must contain a {{ urls.unsubscribe }} tag to include an unsubscribe link. Learn more about using Liquid syntax in your campaign content under Personalizing campaign content with Liquid.

  • The HTML file you upload must meet the multipurpose internet mail extension (MIME) standard, containing only plain text and/or HTML encoding.

HTML email upload troubleshooting

This table lists some common issues you may encounter when uploading an HTML file for your email message content, and tips for resolving the issues.

Issue Resolution

Uploaded file is too large

Each HTML email file must not exceed 500KB.

Uncompressed image files contained within a ZIP file cannot be collectively larger than 6MB, with each uncompressed image no larger than 1MB.

Uploaded file is NOT of a valid MIME type

The HTML email file you upload must meet the multipurpose internet mail extension (MIME) standard, containing only plain text and/or HTML encoding.

Invalid Liquid tag/tags

Should your HTML email file contain invalid Liquid syntax, an error message will display the invalid entries. Learn more about using Liquid syntax in your campaign content under Personalizing campaign content with Liquid.

No multimedia file upload for HTML content

At present, Ortto does not offer multimedia file upload for content such as images contained in your HTML email file. You need to upload a ZIP file containing images, or host the images/video, etc. external to Ortto and link to it within your HTML file.

Images referenced in the HTML file (ZIP upload) cannot be found

Firstly, ensure that you have the correct number of images included in your ZIP file as required in your HTML file. For example, if you reference 3 images in your HTML file but only 2 can be found within the ZIP file, you will receive an error.

You may need to check that you have referenced the images correctly in the HTML file according to their location in the ZIP file. For example, the path for the image will ideally be rooted in the top level of the directory (ZIP file), where you have:

  • email.html — your HTML email message file

  • images folder — the folder containing your email message images

The images would be referenced in your HTML file something like: <img src="images/your-image.png" />

You may also need to check the spelling of your file names, including differences in capitalization, to ensure the reference matches the image file name.

Dynamic content

The dynamic content feature allows you to pull content to put into your email from a JSON endpoint you control.

dynamic content
The dynamic content option available in the email Setup under Advanced options

Your endpoint can then return JSON like so:

    "myvariable": "Hello, world",
    "level1": {
        "level2": {
            "myvalue": 24

Once the data is fetched it can be used in your email messages like so:

{{ json.myvariable }}

{{ json.level1.level2.myvalue }}

{% if json.level1.level2.myvalue > 23 %}
    That's a big number
{% endif %}

This example is for the Once per campaign mode, read on for further examples of both per campaign and per contact.

Standard options

Field Description


The HTTPS address to your endpoint. Only https is supported for data security reasons.

HTTP Method

You can select which HTTP method will be used when accessing your endpoint.

Once per campaign mode

In this mode the system will fetch content once from your JSON endpoint at the time the email is sent. You might use this if you have a message in a journey you’d like send to all new users, which is updated with the latest info at the time it is sent.

Your endpoint will be sent a POST or PUT request, whichever you choose for the HTTP method. In this case you can ignore the body, since it is only called once for the whole campaign and does not pertain to specific contacts.

If you need to identify which campaign this applies to, the best way to do this is by changing the JSON URL to suit the campaign in question.

You then need to respond to the request with JSON. This should have the MIME type application/json and contain valid JSON in the body.

Example JSON response from your endpoint
  "word_of_the_day": "Taxonomy",
  "word_of_the_day_definition": "The branch of science concerned with classification, especially of organisms; systematics.",
  "meta": {
    "number_of_logins": 24628

Once the data is fetched it can be used in your email message like so:

Dear {{ person.first-name }},

Today's word of the day is {{ json.word_of_the_day }}!

The definition is: {{ json.word_of_the_day_definition }}

So far we've had {{ json.meta.number_of_logins }} to our system today,
{% if json.level1.level2.myvalue > 100 %}
    That's a a lot
{% elseif %}
    That's not enough, login please!
{% endif %}

Per contact mode

In this mode, you are able to fetch dynamic content for every person who receives the message. This could allow you to do things like show users their current points balance, their last shopping cart, their profile image, and other information which is specific to them.

The data is fetched in batches of 200 (maximum) by sending a POST or PUT to your endpoint with a payload like this:

    "id": "0063365f14281d1f8277f102",
    "email": ""
    "id": "0063365ceac484b9cb280c01",
    "email": ""

Each id is Ortto’s ID for that person and the email is there so you can look them up in your database. You can access a contact’s ID using the appropriate API call.

You then need to respond with JSON in this format:

  "0063365f14281d1f8277f102": {"points": 200, "last_login": "Jan 24th"},
  "0063365ceac484b9cb280c01": {"points": 450, "last_login": "Mar 20th"}

Note that the response payload needs to be a JSON hash, with an entry for each person you wish to send dynamic content for, usually this will be all of them for the batch. The key should be Ortto’s ID for that person, which you can reference from the original payload. The JSON for each person can contain whatever you like and is accessed in the same way as specified above, for example:

Dear {{ person.first-name }},

Your points balance is {{ json.points }},

{% if json.points > 1000 %}
    You are eligible for the 1000 points badge, login now to receive it.
{% elseif %}
    Only {{ 1000-json.points }} to reach 1000!
    You last logged in: {{ json.last_login }}. Login today for 10 extra points!
{% endif %}

The Points Company

Error modes for dynamic content

  • You must respond within 15 seconds or the request will timeout.

  • The request will be retried up to 12 times before failing.

  • If the request fails after 12 attempts, the sending of the current batch of emails (up to 200) will fail, even in per campaign mode, and those people will have Invalid email activities.

  • If your JSON is invalid, the campaign sending will fail and the campaign will need to be duplicated and re-sent (once you’ve fixed your JSON response).

Timing notes for dynamic content

  • If a campaign is scheduled, the JSON content will be fetched at the time of each batch sending, rather than when it is scheduled.

  • The system will fetch data per batch, even in per campaign mode.

  • For email campaigns which are sent across multiple user timezones, the JSON will be fetched as each batch is fetched for each timezone, i.e. at the time of actually sending.

  • The JSON will also be fetched when you preview the campaign, and when you send a test email, so if you notice an extra request or two in the logs, that’s it. This also lets you test it before you send.

Other dynamic content notes

  • If you reference a JSON value in your message which does not exist, the output will be blank e.g. {{ json.rubbish }}