Retention Science's Frequently Asked Questions page is a central hub where its customers can always go to with their most common questions. These are the 389 most popular questions Retention Science receives.
Before users are removed from your campaigns it's a good idea to reach those users with a last chance message, giving them one more opportunity to re-engage with your brand.
Define Your Segment
You will need to define a segment which is nearly identical to the dormant users filter, but falls just a few days short of the same threshold.
The Dormant Users filter in Cortex looks for users who have not purchased, engaged with email, or engaged with your site (signup, item view, shopping cart, search) within the last year. For our Sunset email we will reach users at 360 days of no activity, 5 days before the Dormant Users filter kicks in.
Example:
Don't forget to check "or is blank"!
Checking the "or is blank" box allows us to reach users who have never taken these actions. For example, most dormant users do not have a purchase, so their "last order date" is blank.
Define Your Messaging
You will want to include the following two sections in your email: context and a call to action. When building your template, this email will go in the Smart Blast stage.
ContextWe need to make sure the user understandswhy they're receiving this message: they've been disengaged and we want to keep them around.Your context starts with the subject line, and should introduce the idea that the user is going to be lost or let go. Popular options include "We hate to see you go!" and "Are you still interested?"
Following the subject line, you may want to use specific messaging to add detailed context. "We haven't seen you around! At [your brand] we try to only send emails to our biggest fans, and it looks like you haven't stopped by in almost a year."
Call to ActionMake it clear what the user needs to do next, so they can stay on your email list. While just opening the email is enough to remove the user from the dormant list, we want to generate as much activity as possible to re-engage the users with your brand.
"If you're still interested in [your brand] emails, please click here to visit our store and see the latest items in our catalog! This will help us learn about your preferences to send better emails in the future."
Set Up Your Campaign
Step 1
Build your email in Smart Blast
Step 2
Apply your filter to the Smart Blast
Step 3
Schedule your Smart Blast for 1 year
Since a Smart Blast can only send once to any user, we'll want to refresh this campaign every year so that users can re-qualify year over year.
View ArticleTable of Contents
Overview
BigCommerce Transactional Stage
Creating Your First BigCommerce Transactional Email
Supported Message Types
How to Dynamically Display All Order Items
Using "For Loops" to Use Order Product Merge Tags
Using the Merge Tags to Represent Each Item in An Order
Using the HTML Editor to Display All Order Product Names In An Order
Using the Drag and Drop Editor to Display All Order Product Names in An Order
Available Merge Tags
Merge Tags Relevant to Order Transactional Message Types
Merge Tags Relevant to Inserting Order Products Information
Merge Tags Relevant to Customer Transactional Message Types
Need to setup the BigCommerce Integration and Transactional Stage? See our Setup Guide.
Overview
The BigCommerce x ReSci integration includes native support for sending transactional messages out of Cortex, based on certain events that occur in BigCommerce. This allows you to consolidate all of your email messaging in one platform, and provides the flexibility of building these emails in Cortex to trigger messages like order confirmation, shipping confirmation, welcome, return confirmation and many more.
BigCommerce Transactional Stage
When the BigCommerce plugin is installed successfully (see Requirements for Setup ), this will install a new Cortex stage under the "Experiments" section called "BigCommerce Transactional". This should appear next to the "Custom Transactional" stage as shown below: [email protected]
This stage is where you will configure and build the transactional emails that will send based on BigCommerce events (using BigCommerce's supported webhooks ). Important Note: When a template is created and configured based on the transactional message type you'd like to send, your transactional emails will begin sending as soon as the email is activated. Do NOT activate emails in the BigCommerce Transactional stage that you are not yet ready to begin having sent to your users.
Creating Your First BigCommerce Transactional Email
Click on "Manage Emails" on the "BigCommerce Transactional" stage in Cortex. You will be taken to the page below.
Click "New Email" in the top right and select the "Create New" option to start the email creation process.
You will then see a pop-up form that you will use to select your "Transactional Message" Type (see Supported Message Types for more information) and enter your "Email Name". Click "Continue" when ready to move on.For this example, we'll select "Order Confirmation" and named our email "Order Confirmation Test 1".
You'll be taken to the normal email builder as seen in other stages (see below):Follow the builder guides and select the "email type" you'll be using to build the Transactional Message, then click "Continue to Editor".
Based on your selection, you'll build your email as needed using either the html or drag-and-drop editor.From here, you can dynamically insert information using the pre-defined Merge Tags from BigCommerce as shown below:Drag and Drop Builder Example:HTML Builder Example:
When your email is ready to send, you'll make sure to save the email and when you click "Continue to Summary", clicking "Activate Now" will allow this message to begin sending to all of your eligible recipients of the message. Nothing else is needed here!Important Note: If wanting to test multiple transactional message emails simultaneously, you can activate several emails for a single Transactional Message Type these emails will be randomized for sends to test performance of each template.Please reach out to [email protected] if you have any other questions on the setup process here.
Supported Message Types
Transactional Message Type
Trigger Description for the Message
Account Updated
Customer is updated. Does not currently track changes to the customer address.
Order Awaiting Fulfillment
Customer has completed the checkout process and payment has been confirmed.
Order Awaiting Payment
Customer has completed checkout process, but payment has yet to be confirmed.
Order Awaiting Pickup
Order has been pulled, and is awaiting customer pickup from a seller-specified location.
Order Awaiting Shipment
Order has been pulled and packaged, and is awaiting collection from a shipping provider.
Order Cancellation
Seller has cancelled an order, due to a stock inconsistency or other reasons.
Order Confirmation
Order has been created successfully using the control panel, an app or via the API.
Order Completed
Client has paid for their digital product and their file(s) are available for download.
Order Declined
Seller has marked the order as declined for lack of manual payment, or other reasons.
Order Disputed
Customer has initiated a dispute resolution process for the PayPal transaction that paid for the order.
Order Manual Verification Required
Order on hold while some aspect needs to be manually confirmed.
Order Partially Refunded
Seller has partially refunded the order.
Order Partially Shipped
Only some items in the order have been shipped, due to some products being pre-order only or other reasons.
Order Pending
Customer started the checkout process, but did not complete it.
Return Confirmation
Seller has used the Refund action.
Shipping Confirmation
Order has been shipped, but receipt has not been confirmed; seller has used the Ship Items action.
Welcome
A customer or subscriber is created in BigCommerce.
How to Dynamically Display All Order Items
Using "For Loops" to Use Order Product Merge Tags
The BigCommerce Transactional Stage allows you to use merge tags to dynamically add certain data points for each item in a particular order. This is typically seen in transactional messages like Order Confirmation, Shipping Confirmation, etc.
Using the Merge Tags to Represent Each Item in An Order
In order to support this, you will need to accompany the appropriate merge tag with a Liquid "for loop" to iterate through and list these dynamic values for each item in the users order.
Using the HTML Editor to Display All Order Product Names In An Order
In the example below, we've highlighted how you would use these tags in the html editor to represent each order_product.name value for the multiple items in the order.
{% for order_product in order.products %} {{ order_product.name }}{% endfor %}
This essentially allows you to represent the name of each product in the order without having to repeat the merge tag for each item.
Using the Drag and Drop Editor to Display All Order Product Names in An Order
In the next example, you'll see we've used the "Display Condition" feature in the template builder to setup our conditional statement to display all your order product name values.
To display all items in your order, select the row in the editor that you want to repeat.
Once the row is selected, you should see the row properties options as shown below.
Click on the "Add condition" button under "Display condition" (this will repeat the row for each product in your order to show all order products).
The "Add a new display condition" form should open and you will need to fill out the "Name", "Description", "Before", and "After" fields (all fields are required to save the display condition). The "Before" value should be the opening Liquid "for loop" statement (in this example, we are using {% for order_product in order.products %). This will iterate through each product in the order and display the contents of each row (if an order contains multiple items, multiple rows will be displayed). The "After" value should close the Liquid "for loop" statement.
Available Merge Tags
Merge Tags Relevant to Order Transactional Message Types
Merge Tag Name
Data Type
Description
Applicable Message Types
Example Value
{{order.id}}
integer
The ID of the order (Order number).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
118
{{order.customer_id}}
integer
The ID of the customer placing the order; or 0 if it was a guest order.
All Messages
6
{{order.date_created}}
string
The date this order was created (Order date).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Mon, 23 Apr 2018 18:04:48 +0000
{{order.date_modified}}
string
The date the order was last modified.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Mon, 23 Apr 2018 18:04:49 +0000
{{order.date_shipped}}
string
The date the order as shipped.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Wed, 14 Nov 2012 19:26:23 +0000
{{order.status_id}}
integer
The status ID of the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
11
{{order.cart_id}}
string
The cart ID from which this order originated, if applicable.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
a8458391-ef68-4fe5-9ec1-442e6a767364
{{order.status}}
string
The status of your order in BigCommerce (ex: Awaiting Fulfillment, Pending, Shipped).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Awaiting Fulfillment
{{order.custom_status}}
string
Displays the custom order status if applicable.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Awaiting Fulfillment
{{order.subtotal_ex_tax}}
string
The order subtotal excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
225.0000
{{order.subtotal_inc_tax}}
string
The order subtotal including tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
225.0000
{{order.subtotal_tax}}
string
The total tax on the order subtotal.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.base_shipping_cost}}
string
The value of the base shipping cost.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.shipping_cost_ex_tax}}
string
The value of shipping cost, excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.shipping_cost_inc_tax}}
string
The value of shipping cost, including tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.shipping_cost_tax}}
string
The total order shipping cost tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.shipping_cost_tax_class_id}}
integer
Shipping-cost tax class.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
2
{{order.base_handling_cost}}
string
The value of the base handling cost.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.handling_cost_ex_tax}}
string
The value of the handling cost, excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.handling_cost_inc_tax}}
number
The value of the handling cost, including tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order.handling_cost_tax}}
string
The total handling tax on the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.handling_cost_tax_class_id}}
integer
Handling cost tax class id value.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
2
{{order.base_wrapping_cost}}
integer
The value of the base wrapping cost.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order.wrapping_cost_ex_tax}}
string
The value of the wrapping cost, excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.wrapping_cost_inc_tax}}
string
The value of the wrapping cost, including tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.wrapping_cost_tax}}
string
The total wrapping cost tax on the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.wrapping_cost_tax_class_id}}
integer
Wrapping cost tax class id value.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
3
{{order.total_ex_tax}}
string
Order total excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
225.0000
{{order.total_inc_tax}}
string
Order total including tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
225.0000
{{order.total_tax}}
string
Order total tax amount.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
225.0000
{{order.items_total}}
number
The total number of items in the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order.items_shipped}}
number
The number of items that have been shipped.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order.payment_method}}
string
The payment method for this order. Can be one of the following: Manual, Credit Card, cash, Test Payment Gateway, etc.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Cash on Delivery
{{order.payment_provider_id}}
string
The external Transaction ID/Payment ID within this orders payment provider (if a payment provider was used).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order.payment_status}}
string
The payment status of the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.refunded_amount}}
string
The amount refunded from this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.store_credit_amount}}
string
Represents the store credit that the shopper has redeemed on this individual order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.gift_certificate_amount}}
string
The order gift certificate amount used.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.ip_address}}
string
IP Address of the customer, if known.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
12.345.678.910
{{order.geoip_country}}
string
The full name of the country where the customer made the purchase, based on the IP.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
United States
{{order.geoip_country_iso2}}
string
The country where the customer made the purchase, in ISO2 format, based on the IP.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
US
{{order.currency_id}}
integer
The ID of the currency being used in this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order.currency_code}}
string
The currency code of the currency being used in this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
USD
{{order.currency_exchange_rate}}
string
The currency exchange rate.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1.0000000000
{{order.default_currency_id}}
integer
The default currency id.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order.default_currency_code}}
string
The currency code of the default currency for this type of transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
USD
{{order.staff_notes}}
string
Any additional notes for staff.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Send Saturday
{{order.customer_message}}
string
Message that the customer entered in the Order Comments box during checkout.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Thank you
{{order.discount_amount}}
string
Amount of discount for this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order.coupon_discount}}
string
Coupon discount amount.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
5.0000
{{order.shipping_address_count}}
number
The number of shipping addresses associated with this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.ebay_order_id}}
string
If the order was placed through eBay, the eBay order number will be included. Otherwise, the value will be 0.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order.billing_address.first_name}}
string
First name of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Jane
{{order.billing_address.last_name}}
string
Last name of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Doe
{{order.billing_address.company}}
string
Company name of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.billing_address.street_1}}
string
Street information of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
123 Main Street
{{order.billing_address.street_2}}
string
Additional street information of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.billing_address.city}}
string
City of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Austin
{{order.billing_address.state}}
string
State of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
TX
{{order.billing_address.zip}}
string
Zip code of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
12345
{{order.billing_address.country}}
string
Country of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
United States
{{order.billing_address.country_iso2}}
string
Country code of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
US
{{order.billing_address.phone}}
string
Phone number of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.billing_address.email}}
string
Email of the customer who placed the order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order.order_source}}
string
Orders submitted via the stores website will include a www value. Orders submitted via the API will be set to external.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
www
{{order.external_source}}
string
For orders submitted or modified via the API, using a PUT or POST operation, you can optionally pass in a value identifying the system used to generate the order. For example: POS. Otherwise, the value will be null.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order.external_id}}
string
ID of the order in another system. For example, the Amazon Order ID if this is an Amazon order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order.external_merchant_id}}
string
Id of the external merchant.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order.channel_id}}
number
Shows where the order originated. The channel_id will default to 1.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order.tax_provider_id}}
string
BasicTaxProvider - Tax is set to manual.
AvaTaxProvider - This is for when the tax provider has been set to automatic and the order was NOT created by the API. Used for Avalara.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
BasicTaxProvider, AvaTaxProvider,
{{order.tracking_number}}
string
Tracking number of the shipment.
Shipping Confirmation,Order Partially Shipped,Order Awaiting Shipment
w4se4b6ASFEW4T
{{order.shipping_method}}
string
Extra detail to describe the shipment, with values like: Standard, My Custom Shipping Method Name, etc.
Shipping Confirmation,Order Partially Shipped,Order Awaiting Shipment
Ship by Weight
{{order.shipping_provider}}
string
Enum of the BigCommerce shipping-carrier integration/module.
Shipping Confirmation,Order Partially Shipped,Order Awaiting Shipment
auspost, canadapost, endicia, usps, fedex, royalmail, ups, upsready, upsonline, shipperhq,
{{order.tracking_carrier}}
string
The carrier who will be tracking the shipment of the order.
Shipping Confirmation,Order Partially Shipped,Order Awaiting Shipment
auspost, canadapost, endicia, usps, fedex, royalmail, ups, upsready, shipperhq example: auspost
{{order.comments}}
string
Comments the shipper wishes to add.
Shipping Confirmation,Order Partially Shipped,Order Awaiting Shipment
Leave by mailbox
{{order_shipping_address.street_1}}
string
Street address (first line).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
123 MainStreet
{{order_shipping_address.street_2}}
string
Street address (second line).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_shipping_address.city}}
string
Addressee city.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Austin
{{order_shipping_address.zip}}
string
ZIP or postal code, as a string.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
12345
{{order_shipping_address.country}}
string
Addressees country.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
United States
{{order_shipping_address.country_iso2}}
string
2-letter ISO Alpha-2 code for the country. (Looking Up Country Codes)
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
US
{{order_shipping_address.state}}
string
The name of the state or province. Should be spelled out in full, e.g.: California.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Texas
Merge Tags Relevant to Inserting Order Products Information
Field Name
Data Type
Description
Applicable Message Types
Example Value
{{order_product.image_url}}
string
Image url of the product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
https://example.jpg
{{order_product.product_id}}
integer
Numeric ID of the product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
20
{{order_product.name}}
string
The product name.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Fog Linen Chambray Towel - Beige Stripe
{{order_product.sku}}
string
User-defined product code/stock keeping unit (SKU).
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
S-GREE
{{order_product.base_price}}
string
The product's base price.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
54.0000
{{order_product.price_ex_tax}}
string
The products price excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
54.0000
{{order_product.base_total}}
string
Total base price.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
54.0000
{{order_product.total_ex_tax}}
string
Total base price excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
54.0000
{{order_product.quantity}}
number
Quantity of the product ordered.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order_product.weight}}
string
Weight of the product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1
{{order_product.is_refunded}}
boolean
Whether the product has been refunded.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
false
{{order_product.refunded_amount}}
string
The amount refunded from this transaction.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order_product.return_id}}
integer
Numeric ID for the refund.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order_product.wrapping_name}}
string
Name of gift-wrapping option
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order_product.base_wrapping_cost}}
string
The value of the base wrapping cost.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order_product.wrapping_cost_ex_tax}}
string
The value of the wrapping cost, excluding tax.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order_product.wrapping_message}}
string
Message to accompany gift-wrapping option.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.quantity_shipped}}
number
Quantity of this item shipped.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{order_product.event_name}}
string
Name of promotional event/delivery date.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
null
{{order_product.event_date}}
string
Date of the promotional event/scheduled delivery.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.fixed_shipping_cost}}
string
Fixed shipping cost for this product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0.0000
{{order_product.ebay_item_id}}
string
Item ID for this product on eBay.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.ebay_transaction_id}}
string
Transaction ID for this product on eBay.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.option_set_id}}
integer
Numeric ID of the option set applied to the product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
5
{{order_product.parent_order_product_id}}
integer
ID of a parent product.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.applied_discount.id}}
string
Name of the coupon applied to order
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
total-coupon
{{order_product.applied_discount.amount}}
string
Amount of the discount.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
1.2100
{{order_product.applied_discount.name}}
string
Name of the coupon. `Manual Discount` when creating a manual discount.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
$5 off
{{order_product.applied_discount.code}}
string
Coupon Code. There is no code when creating a manual discount.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
S2549JM0Y
{{order_product.product_option.order_product_id}}
integer
53
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.product_option.display_name}}
string
The name of the option, as shown on the storefront.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Size
{{order_product.product_option.display_value}}
string
The name of the value, as shown on the storefront.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
S
{{order_product.product_option.value}}
string
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
70
{{order_product.external_id}}
integer
ID of the order in another system. For example, the Amazon Order ID if this is an Amazon order.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
{{order_product.upc}}
string
Universal Product Code.
Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
Merge Tags Relevant to Customer Transactional Message Types
Merge Tag Name
Data Type
Description
Applicable Message Types
Example Value
{{customer.id}}
integer
Unique numeric ID of this customer.
All Messages
1
{{customer.company}}
string
The name of the company for which the customer works.
Welcome, Account Updated
BigCommerce
{{customer.first_name}}
string
First name of the customer.
All Messages
Jane
{{customer.last_name}}
string
Last name of the customer.
All Messages
Doe
{{customer.email}}
string
Email address of the customer.
All Messages
{{customer.phone}}
string
Phone number of the customer.
All Messages
1234567890
{{customer.date_created}}
string
Date on which the customer registered from the storefront or was created in the control panel.
Welcome, Account Updated
Thu, 11 Jan 2018 20:57:52 +0000
{{customer.date_modified}}
string
Date on which the customer updated their details in the storefront or was updated in the control panel.
Welcome, Account Updated
Tue, 10 Apr 2018 18:59:05 +0000
{{customer.store_credit}}
string
The amount of credit the customer has.
Welcome, Account Updated, Order Confirmation, Shipping Confirmation, Order Cancellation, Return Confirmation, Order Pending, Order Partially Shipped, Order Declined, Order Awaiting Payment, Order Awaiting Pickup, Order Awaiting Shipment, Order Completed, Order Awaiting Fulfillment, Order Manual Verification Required, Order Disputed, Order Partially Refunded
0
{{customer.registration_ip_address}}
string
The customers IP address when they signed up.
Welcome, Account Updated
12.345.678.910
{{customer.customer_group_id}}
integer
The group to which the customer belongs.
Welcome, Account Updated
2
{{customer.notes}}
string
Store-owner notes on the customer.
Welcome, Account Updated
{{customer.tax_exempt_category}}
string
Used to identify customers who fall into special sales-tax categories in particular, those who are fully or partially exempt from paying sales tax. Can be blank, or can contain a single AvaTax code. (The codes are case-sensitive.) Stores that subscribe to BigCommerces Avalara Premium integration will use this code to determine how/whether to apply sales tax. Does not affect sales-tax calculations for stores that do not subscribe to Avalara Premium.
Welcome, Account Updated
View ArticleTable of Contents
Overview
Common Issues
Troubleshooting First Steps
Troubleshooting Regular Page View Event
Troubleshooting Item Page View Event
Troubleshooting Add to Cart Event
Troubleshooting Checkout Success Event
Troubleshooting Search Event
Troubleshooting Email Capture Event
Overview
There are many reasons why copying and pasting our JavaScript code may not work as intended. This guide will highlight the most common issues that arise and how to address them.
If you are still unable to resolve your issue, please reach out to [email protected], or to your [email protected] (provided by ReSci).
Common Issues
JavaScript is pointing to the incorrect DOM element.
Conflicts with existing page code.
Data discrepancy from your system to what the JS event is capturing.
Troubleshooting First Steps
Troubleshooting First Steps
Navigate to the webpage you are troubleshooting and open your browser developer tools to the "Network" tab.
Filter for the relevant user event "wave", and refresh the page to verify that the JS is firing correctly to capture relevant user interaction events.(Example gif above shows this process a page view event as "action":"view")
Click on the "wave" that was fired and verify the relevant wave metadata matches the acceptance criteria for each event (listed in the respective sections below).
If no wave was fired, review the code to check for possible conflicts and to verify if the correct global parameters, event-specific parameters,and DOM elements were referenced as needed.
Troubleshooting Regular Page View Event
What is the Regular Page View Event?Regular Page View Sample Data
Acceptance Criteria:
This event should be fired when a user views any webpage (such as your homepage).
Find out more information on the regular page view event.
When you load the page, is an event action (wave) being fired correctly?
See Troubleshooting First Steps above for details.
Is the metadata for the page view event accurate (event-specific fields listed below)?
action should be listed as view
Troubleshooting Item Page View Event
What is the Item Page View Event?
Item Page View Sample Data
Acceptance Criteria:
This event should be fired when a user views an item details webpage.
Find out more information on the item page view event.
When you load the item page, is an event action being fired correctly?
See Troubleshooting First Steps above for details.
Is the metadata for the item page view event accurate (event-specific fields listed below)?
action should be listed as view
items should list the id of the item(s) on the page and match the record_idbeing sent to ReSci via the items flat file.
If there is a discrepancy here, you will first want to ensure that the data you are sending us is accurately reflected (i.e. the record_id for this item is being sent accurately to ReSci)
Troubleshooting Add to Cart Event
What is the Add to Cart Event?
Add to Cart Sample Data
Acceptance Criteria:
This event should be fired when a user adds an item(s) to their cart and should display the item record_id(s), name, price, etc.
Find out more information on the add to cart event.
When you click add to cart, is an event action being fired correctly?
See Troubleshooting First Steps above for details.
Is the metadata for the add to cart event accurate (event-specific fields listed below)?
action should be listed as shopping_cart
items should list the id of the item(s) on the page and match the record_id for those items in yourdatabase, the name of the item, and the price of the item.
These fields should match the corresponding fields on the items data you are sending to ReSci.
If there is a discrepancy here, you will first want to ensure that the data you are sending us is accurately reflected (i.e. the record_id for this item is being sent accurately to ReSci)
Troubleshooting Checkout Success Event
What is the Checkout Success Event?
Checkout Success Sample Data
Acceptance Criteria:
This event should be fired when a user checks out successfully after placing an order and should display the itemrecord_id(s),name,price, etc.
Find out more information on the checkout success event.
When you load the checkout success page, is an event action being fired correctly?
See Troubleshooting First Steps above for details.
Is the metadata for the item page view event accurate (event-specific fields listed below)?
action should be listed ascheckout_success
items should list theidof the item(s) on the page andmatchtherecord_idfor those items in yourdatabase, thenameof the item, and thepriceof the item.
These fields should match the corresponding fields on the items data you are sending to ReSci.
If there is a discrepancy here, you will first want to ensure that the data you are sending us is accurately reflected (i.e. therecord_idfor this item is being sent accurately to ReSci)
Troubleshooting Search Event
What is the Search Event?
Search Event Sample Data
Acceptance Criteria:
This event should be fired when a user completes a search on your website. The event "wave" should display the search terms the user entered (displayed as "params":{"terms":"searchterm"}.The action should be listed as search.
Find out more information on the search event.
When you complete a search on site, is an event action being fired correctly?
See Troubleshooting First Steps above for details.
Is the metadata for the item page view event accurate (event-specific fields listed below)?
action should be listed as search
params should list the term(s) the user searched for.
Troubleshooting Email Capture Event
What is the Email Capture Event?
Email Capture Sample Data
Acceptance Criteria:
This event should be fired when a user enters their email into a form such as an email newsletter sign-up, or a pop-up form. The event "wave" should display the email of the user, as well as the user_properties that are associated with that user, such as record_id, email, registration_source, etc. The action should be listed as email_entered.
Find out more information on the email capture event.
When you enter an email into the email capture form, is an event action being fired correctly?
See above for details.
Is the metadata for the email capture event accurate (event-specific fields listed below)?
action should be listed as email_entered
user_properties should list the record_id of the user signing up via email and match the record_id for that user in yourdatabase, the email of the user, and the registration_source from where the user signed up.
If there is a discrepancy here, you will first want to ensure that the data you are sending us is accurately reflected (i.e. the record_id for this item is being sent accurately to ReSci)
View ArticleMerge tags are used to personalize your email templates.
When to use merge tags
Merge tags can be used to insert dynamic content based on each user's individual attributes. For example, you can insert the user's first name to add personalization to your email. In addition, you may want to insert dynamic product recommendations for each user that is specific to their profile.
How to use merge tags
Merge tags will automatically bring in product information, images, or text pertaining to the user. For example, for a user who's first name is "John", using the merge tag{{ fname }} will bring in the text "John" when that user receives the email. Simply insert a merge tag and the Retention Science platform will take care of assigning the correct text or image.
Using merge tags for Product Recommendations
Product recommendations are a key feature in the ReSciplatform; they are tailored to each individual based on their demographics, browsing behavior, and purchasing behavior.
Product ID, Product Name, Product Image URL, and Product Page URL are all available for use when building emails. You can insert up to 10 product recommendations per template, simply by changing the recommendation number in the merge tag.
note: product recommendations do not work in transactional messages
Full list of merge tags
The basics
Merge Tag Name
Merge Tag
Notes
Email Address
{{ email }}
User'semail address
First Name
{{ fname }}
User's first name
Last Name
{{ lname }}
User's last name
Full Name
{{ full_name }}
User's full name
Unsubscribe URL
{{ unsub_url }}
Unsubscribelink
Product 1 Name
{{rs_rn1}}
Name of Product 1
Product 1 URL
{{rs_rpu1}}
URL of Product 1
Product 1 Image URL
{{rs_riu1}}
Image URL of Product 1
Product 1Price
{{rs_rp1}}
Price of Product 1
Product 1 Manufacturer
{{rs_rmfr1}}
Manufacturer of Product 1
Product 1 Description
{{rs_rdscr1}}
Description of Product 1
Product 1 Display Name
{{rs_rdspnm1}}
Display Name for Product 1
Product 2 Name
{{rs_rn2}}
Name of Product 2
Product 2 URL
{{rs_rpu2}}
URL of Product 2
Product 2 Image URL
{{rs_riu2}}
Image URL of Product 2
Product 2 Price
{{rs_rp2}}
Price of Product 2
Product 2 Manufacturer
{{rs_rmfr2}}
Manufacturer of Product 2
Product 2 Description
{{rs_rdscr2}}
Description of Product 2
Product 2 Display Name
{{rs_rdspnm2}}
Display Name for Product 2
Product 3 Name
{{rs_rn3}}
Name of Product 3
Product 3 URL
{{rs_rpu3}}
URL of Product 3
Product 3 Image URL
{{rs_riu3}}
Image URL of Product 3
Product 3 Price
{{rs_rp3}}
Price of Product 3
Product 3 Manufacturer
{{rs_rmfr3}}
Manufacturer of Product 3
Product 3 Description
{{rs_rdscr2}}
Description of Product 2
Product 3 Display Name
{{rs_rdspnm3}}
Display Name for Product 3
NOTE: Product 1 Name, Product 1 URL, Product 1 Image URL, Product 1 Price act as placeholders for dynamic product recommendations ONLY in Cortex stages that are not user or item triggered. Example:
Ready to Buy stage:{{ rs_rn1 }} would display the name of product recommendation 1.
Cart Abandon stage (a user triggered stage):{{ rs_rn1 }} would display the name of an item left in their shopping cart that they abandoned.
Learn more about how to use merge tags in Cortex emails here.
NOTE:You can insert up to 10 product recommendations per template, simply by changing the recommendation number in the merge tag.
Incentive Text
{{rs_itxt}}
This is the amount of the offer or incentive.
Incentive Code
{{rs_icode}}
This will populate your "onecode" for everyone or "multiple codes" unique to each user.
Incentive Details
{{rs_idet}}
This isthe short description like a disclaimer or statement of code expiration.
Incentive Image URL
{{rs_iimg}}
This is the image associated to your offer.
NOTE: Learn more about how to use incentive merge tags in emails here.
What else is available
Merge Tag Name
Merge Tag
Notes
User Record ID
{{ rs_urid }}
Your User ID, stored in ReSci as User Record ID
Offer ID
{{rs_offerid}}
Unique email ID used for tracking
Subject Line
{{rs_sub}}
Allows use of multiple subject lines for promo blast templates, can be used to repeat the subject line in the email body.
Recommended Item Type
{{rs_rtype1}}, {{rs_rtype2}},...
Recommended Item Type
Recommended Item Price B
{{rs_rpb1}},{{rs_rpb2}},...
Recommended Item Price B
Recommended Item ID
{{rs_rid1}},{{rs_rid2}},...
Recommended Item ID
Custom String 1Shopify Checkout Abandon URL(shopify customers only)
{{rs_str_1_usr_attr}}
Custom field (ie. unsubscribe_link)
Conditional Merge Tag Name
Conditional Merge Tag
Notes
First Name with greeting
Hi{% if fname == null or fname == '' %}{% else %} {{fname}}{% endif %},
Returns "Hi," or "Hi John,"
Shows a date three days from now
{{ 3 | days_from_now | date: '%B %d, %Y' }}
SHOPIFY CART:
Send customer to a Shopify cart or to a default
{% if rs_str_1_usr_attr == null or rs_str_1_usr_attr == '' %} <a href= "www.default.com"> {% else %} <a href= "{{rs_str_1_usr_attr}}"> {% endif %}
Replace Default with the desired web address, or {{rs_rpu1}} to send to the product page
NOTE: more here for conditional formatting and examples.
Where to use merge tags:
Merge tags are inserted directly in to the HTML template. See example below.
Example 1: Cart Abandon, first name merge tag in subject line
Merge Tags for Cortex Emails
Structure the subject line like this:
{% if fname == null or fname == '' %}Y{% else %}{{fname}}, y{% endif %}ou forgot something!
So it reads like this:
You forgot something!
OR
Firstname, you forgot something!
Example 2: Cart Abandon, showing an item left in their shopping cart
{{rs_rpu1}} will be the URL of Product 1 left in their shopping cart.
{{rs_riu1}} will be the image URL of Product 1 left in their shopping cart.
{{rs_rmfr1}} will be the manufacturer's name of Product 1 left in their shopping cart.
{{rs_rn1}} will be the name of Product 1 left in their shopping cart.
Here is what the email looks like in the user's inbox:
NOTE: Product 1 merge tags in the Cart Abandon Cortex stage will display what the user left in their shopping cart.
Example 3:Ready to Buy, all dynamic product recommendations
{{rs_rpu1}} will be the URL of Product 1, first product recommendation.
{{rs_riu1}} will be the image URL of Product 1,first product recommendation.
{{rs_rpu2}} will be the URL of Product 2, first product recommendation.
{{rs_riu2}} will be the image URL of Product 2,first product recommendation.
{{rs_rpu3}} will be the URL of Product 3, first product recommendation.
{{rs_riu3}} will be the image URL of Product 3,first product recommendation.
NOTE: lower down in the HTML or code section of the email are the merge tags for the Product names - {{rs_rn1}}, {{rs_rn2}}, {{rs_rn3}}.
Here is what the email looks like in the user's inbox:
-------------------------------------------------------------------------------------------------------------------------
Other articles you may like:
Advanced Merge Tags
Understanding Merge Tags for Dynamic Product Recommendations
View ArticleCreating a plain text version of your email in Cortex is an easy task.
The "Plain Text" section of an email is a carryover from old email clients which could not display html layouts. This allowed users with older machines or software to read emails whose html could not be displayed. These days plain text "backup" content is almost never shown to users and is mostly used to help mailbox providers read and score the content of an email.
On the screen where you are building your email template (HTML or Drag and Drop), look for the dropdown on the upper right of the screen, and click "Plain Text"
When you first click "Plain text", we will make best effort to copy any text over from the HTML or Drag and Drop version of your email, and strip out any code, like HTML or liquid tags (no merge tags will work in a text email). Please still review your text email to make sure everything is how you want it.
Upon saving and scheduling, the text email will send to any users who are unable to view an HTML version of email (which is very much in the minority these days). This content is also scanned by mailbox providers and is used to help sort messages within the inbox.
To View Your Plain Text email:
Send a test email to yourself
Look for "view source" or "view original"
Search for "Content-type: text/plain" inside the email html
View ArticleSetting up user behavior tracking on Shopify is simple with Retention Science. Real-time event tracking is implemented by inserting our JavaScript snippets into your Shopify theme. This guide will show you how to install our JavaScript code into Liquid, Shopifys templating language. Here is a list of tracking events to be installed:
Regular Page View JavaScript Event
Item Page View JavaScript Event
Shopping Cart View JavaScript Event
Checkout Success Javascript Event
Search Javascript Event
Email Capture Event
Step 1
Navigate to Shopify Sales Channel Themes > Click Action > Edit Code.
Checkout Success Javascript
Step 2
In the file tree,under the Layout folder, click theme.liquid.
Step 3
Scroll down to the page until you find the following tag: </head>.
Step 4
Paste the ReSci Tracking Code just before the closing</head>tag.
Be sure to update the code highlighted in red.
The code should be updated to match your site ID and specific element names.
<!-- RetentionScience start -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.10.0/js/md5.js"></script>
<script type="text/javascript">
window._rsq = window._rsq || [];
window._rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID
window._rsq.push(['_enableOnsite']);
{% if customer %}
window._rsq.push(['_setUserId', '{{ customer.id }}']);
window._rsq.push(['_setUserEmail', '{{ customer.email }}']);
{% endif %}
/*** Item View Event ***/
{% if template.name == 'product' and product %}
{% if product.first_available_variant.id %}
window._rsq.push(['_addItem', {'id': '{{product.first_available_variant.id}}'}]);
{% endif %}
{% if product.first_available_variant.id == '' %}
window._rsq.push(['_addItem', {'id': '{{product.id}}'}]);
{% endif %}
{% endif %}
/*** Cart View Event ***/
{% if template.name == 'cart' %}
{% for item in cart.items %}
window._rsq.push(['_addItem', { 'id':'{{ item.id }}', 'name':'{{ item.title }}', 'price':'{{ item.price | money_without_currency }}' }]);
{% endfor %}
window._rsq.push(['_setAction', 'shopping_cart']);
{% endif %}
/*** Search View Event ***/
{% if template.name == 'search' and search.performed %} window._rsq.push(['_setAction', 'search']) ;
window._rsq.push(['_setParams', { 'term': '{{ search.terms }}'}]);
{% endif %}
window._rsq.push(['_track']);
/*** Email Capture Event ***/
document.getElementById("email_signup").addEventListener("submit", function(){
// update the param within getELementById to the ID name of the email capture form var uEmail = document.getElementById('k_id_email').value; // update the param getELementById to the ID name of the email input
window._rsq.push(['_setUserEmail', uEmail]);
window._rsq.push(['_setUserProperties', { 'record_id': md5(uEmail.toLowerCase()),'email':uEmail, 'registration_source':'footer'}]); // (Optional) You can pass any ReSci standard user data point
window._rsq.push(['_setAction', 'email_entered']);
window._rsq.push(['_track']);
});
/*** ReSci Script ***/
(function() { var rScix = document.createElement('script');
rScix.type = 'text/javascript';
rScix.async = true;
rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix);
})();
</script>
<!-- RetentionScience end -->
Please proceed to add the checkout success event by clicking the link below.
Instructions to implement
View ArticleOverview
Similar to "Shopping Cart View" in that you are looping through all items, but has the addition of the 'addOrder' line where you should pass over the order details.
Note we do have certain clients that don't have this data because the order ID is not generated until much later.
If you fall into the above scenario, just ping your Onboarding Engineer/Technical Project Manager and we can lift the requirement and further advise.
Should trigger on the completion of the buy process on your website, and stops false Cart Abandon campaigns from going out to a user. (E.g. Fire on Thank you/Receipt Confirmation Page)
NoteCheckout Success Event will fail if acommais sent as a value in price data. Periods are only accepted for this value.
Checkout Success Event Details
The checkout success action will tell us if a purchase has been made. Here you will need to add order information, loop through the items, and set a new action. If you will be sending order data via JavaScript, please use the Checkout Success with Order Data snippet instead.
The order_id should correspond to the orders unique record ID within your database
/*** EVENT SPECIFIC CODE ***/_rsq.push(['_addOrder', {'id': 'order_id', 'total': 'order_total'}]); // replace order_id and order_total with your dynamic order_id and order_total variablesfor (condition) { // replace condition with your loop parameters for all items in order_rsq.push(['_addItem', { 'id':'item_id', // replace item_id with your dynamic item_id variable 'name':'item_title', // replace item_title with your dynamic item_title variable 'price':'item_price'// replace item_price with your dynamic item_price variable}]); }_rsq.push(['_setAction', 'checkout_success']);/*** END EVENT SPECIFIC CODE ***/
Checkout Success Code Sample
<!-- RetentionScience start --><script type='text/javascript'> var _rsq = _rsq || []; _rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID _rsq.push(['_enableOnsite']);
if (condition) { // replace condition with your parameters for checking if a user is logged in _rsq.push(['_setUserId', 'user_id']); // replace user_id with your dynamic user_id variable _rsq.push(['_setUserEmail','user_email']); // replace user_email with your dynamic user_email variable }
/*** EVENT SPECIFIC CODE ***/_rsq.push(['_addOrder', {'id': 'order_id', 'total': 'order_total'}]); // replace order_id and order_total with your dynamic order_id and order_total variablesfor (condition) { // replace condition with your loop parameters for all items in order_rsq.push(['_addItem', { 'id':'item_id', // replace item_id with your dynamic item_id variable 'name':'item_title', // replace item_title with your dynamic item_title variable 'price':'item_price'// replace item_price with your dynamic item_price variable}]); }_rsq.push(['_setAction', 'checkout_success']);/*** END EVENT SPECIFIC CODE ***/_rsq.push(['_track']);
(function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script><!-- RetentionScience end -->
Checkout Success Event Data Sample
View Article
Our shopify integration is set up to use item metafields to handle replenishment and the "do not recommend" toggle. Metafields are set on a per-item basis and contain three fields: namespace, key, and value. A free extension is required to manage metafields for your shopify items.
You can get started using an extension to manage your meta fields here: https://help.shopify.com/themes/liquid/objects/metafield
https://apps.shopify.com/metafields-editor
To set up your metafields, go to the page for the product you want to update, and open the metafield editor app.
this video.
Click the "Add New Metafield" button
Set up your metafield for the ReSci value you need to set (instructions below) (See All Metafield Formats)
Hit "Add", and you're done! You can now update your values on the fly as well.
If you're using Metafields Guru, refer to the following example:
Having trouble editingvariant metafields? Watch
To set up your metafields for the "do not recommend" control:
namespace: retentionscience key: do_not_recommendvalue (integer): 1A value of 0 will be "recommend," 1 is "do not recommend." This is not something that needs to be set up for all your items, just the ones that you do not want recommended. (And this goes on the parent item not child items).
To set up your metafields for replenishment stage control:
namespace: retentionscience
key: replenish_interval
value (integer): (any integer > 0)This will set the number of days after purchase to send the customer an item replenishment interval. Try to predict the best number of days
To set up your metafields for item type (subscription cortex, item targeting controls):
namespace: retentionscience
key: item_type
value (string): subscriptionThis will set the item type in Retention Science. (Shopify's "item type" field maps to categories in Retention Science). Item type is important for designating subscription items, and can be used to add another layer of control to item targeting.
List of Accepted Metafields:
User Birthday
Namespace:
retentionscience
Key:
birthday
Value:
YYYY-MM-DD
User Registration Source
Namespace:
retentionscience
Key:
registration_source
Value:
string
Item - Item Type
Namespace:
retentionscience
Key:
item_type
Value:
string
Item - Do Not Recommend
Namespace:
retentionscience
Key:
do_not_recommend
Value:
integer
Item - Replenishment Interval
Namespace:
retentionscience
Key:
replenish_interval
Value:
integer (number of days)
View ArticleWarning: Some font providers require use of their hosted font source. Check your license details to ensure you are not violating your contract.
Step 1 - Get Your Font
Find a free font or purchase a font from your provider of choice. Make sure that you get a font source file, and a font-face file. If you cannot find a font-face file we will build one in step 3.
For examples see Adding a Custom Font to the Email Builder. Step 2 - Host Your Font Source File
2A -In your shopify store, go to the settings menu:
Click Here
2B -Select the Files menu
2C -Select the Upload Files button on the top right
2D -Upload Your Font Source
Your webfont source file will appear in your files list
Step 3 - Prepare Your Font-Face File
If you did not receive a font-face file from your font provider you will need to create the file yourself. The steps below will allow you to create a basic font-face file.
3A -Open your preferred text editing program. The team at ReSci likes Sublime Text 3.
3B -Copy and paste the text below into your editor
/* FONTNAME */
@font-face {
font-family: 'fontfamily';
font-style: normal;
font-weight: 400;
src: url(https://THISISYOURFILE.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
}
3C - Copy your font information into your font-face file
Our example font is "example_font" so that's what we will use for the font-family and font name
3D - Add your font source URL to the font-face file, and match the format to your file extension
3E -Save your font-face file as a .css
3F - Upload your font-face file to Shopify
Step 4 - Send Your Request To Tech Support
4A -
4B -Copy this text into the form:
Hello Tech Support!
I would like to add a custom font to our email builder.
The Font Name isThe Font Family isThe Font-Face file is hosted at
Thanks!
Valued Client
4C - Copy your Font-Face location
4D - Put your font information into the form
4E - Send your request to tech support!
View ArticleThis section is only relevant if your site is using Asynchronous JavaScript and XML (AJAX). If you use a standard shopping cart page or product page, the code listed on the standard JavaScript Setup for Shopify is all you will need. Here are the events we'll be going over:
AJAX Add to Cart
AJAX Product Quick View
AJAX Update to Cart
Setting Up AJAX Add to Cart Event
Step 1
Copy the AJAX code below.
/*** AJAX Add to Cart ***/window.addEventListener('DOMContentLoaded', function(_rsq){ window.frames.document.getElementById('ADD_TO_CART_ID_HERE').addEventListener("click", function(_rsq){ // update the getElementById param to the ID name of the add to cart button window._rsq.push(['_addItem', {
'id':'item_id', // replace item_id with your dynamic item_id variable
'name':'item_title', // replace item_title with your dynamic item_title variable
'price':'item_price'// replace item_price with your dynamic item_price variable
}]); window._rsq.push(['_setAction', 'shopping_cart']); });});/*** AJAX Product Quickview ***/window.addEventListener('DOMContentLoaded', function(_rsq){ window.frames.document.getElementById('QUICK_PRODUCT_VIEW_ID_HERE').addEventListener("click", function(_rsq){ // update the getElementById param to the ID name of the add to cart button window._rsq.push(['_addItem', { 'id': 'item_id'// replace item_id with your dynamic item_id variable }]); });});/*** AJAX Update to Cart ***/window.addEventListener('DOMContentLoaded', function(_rsq){ window.frames.document.getElementById('UPDATE_CART_ID_HERE').addEventListener("click", function(_rsq){ // update the getElementById param to the ID name of the update to cart button _rs_ajax.updateCart(); });});/*** FUNCTION FOR AJAX TRACKING ***/var _rs_ajax = {};_rs_ajax.updateCart = function() { //This is required for ajax cart views var request = new XMLHttpRequest(); request.open('GET', '/cart.js', true); request.onload = function() { if (request.status >= 200 && request.status < 400) { // Success! var cart = JSON.parse(request.responseText); for(var i=0; i<cart.items.length; i++) { var cartItem = cart.items[i]; var price = cartItem.price / 100; _rsq.push(['_addItem', { 'id':cartItem.id.toString(), 'name':cartItem.title.toString(),'price':price.toFixed(2).toString() }]); } _rsq.push(['_setAction', 'shopping_cart']); _rsq.push(['_track']); } }; request.onerror = function() { console.log("Shopify Cart JS Failed"); }; request.send();};/*** END FUNCTION FOR AJAX TRACKING ***/
Step 2
Paste the code into the theme.liquid file below the email capture event.
Step 3
Look for the button ID by right-clicking the button and then clicking inspect.
Step 4
Check the source and look for the ID.
Step 5
Copy the ID and paste it into the ReSci code with the corresponding AJAX event.
Example:
/*** AJAX Add to Cart ***/window.addEventListener('DOMContentLoaded', function(_rsq){ window.frames.document.getElementById('add-to-cart').addEventListener("click", function(_rsq){ // update the getElementById param to the ID name of the add to cart button window._rsq.push(['_addItem', {
'id': item.id, // replace item_id with your dynamic item_id variable
'name': item.name, // replace item_name with your dynamic item_title variable
'price': item.price// replace item_price with your dynamic item_price variable
}]); window._rsq.push(['_setAction', 'shopping_cart']); });});
View ArticleTable of Contents
Overview
Shopify AppInstallation
Shopify Javascript Setup
Shopify Checkout Success Setup
Shopify AJAX Javascript Setup
Shopify Understanding Data Mappings
Overview
The Shopify x ReSci integration makes it easy to onboard to ReSci by syncing your e-commerce data into Cortexs customer data platform. This provides actual business data to train our AI, providing you with a unified profile of your customers, and allows Cortex to make personalized recommendations based on actual purchase history, browsing activity, and demographics.
View ArticleBefore Cortex can provide product recommendations or track a user's interactions with an item, it must first receive the item data from Shopify.
The example below ("Baby Stuffed Elephant - White") will illustrate how Shopify's item data maps through into Cortex.
Standard Shopify Item Attributes
1. The Shopify Item IDis found within the url of the item page. In this example the Shopify Item ID is405613346856. When this item's data is entered into Cortex, it is recorded asItem Record ID.
2. The Shopify Item Title is the item title. When this item's data is entered into Cortex, the Item Title will be recorded as Item Name.
Item Targeting
3. The Sales channels availability will determine whether the item will be marked asActivein Cortex. If the item is active in the Online Store, it will be recorded as active. Only Active products can be recommended in Cortex emails. When a product first becomes active it will trigger New Arrivals.
4. The Product Type and Collections will be reflected as Categories in Cortex. Categories can be used in Smart Segments and Item Targeting within Cortex.
5. The Vendorselected for a Shopify item will be reflected as theManufacturer in Cortex. Manufacturer is used as a filter that can be applied in Smart Segments within Cortex.
More information on Smart Segments can be found here, and the glossary of available filters for segmentation can be found here.
More information on Item Targeting can be found here.
6. The item Price in Shopify will still be reflected as Price in Cortex. A reduction in price will cause an item to trigger the Price Drop stage.
7. The item SKU in Shopify will be reflected as the Model in Cortex.
8. The item Quantityin Shopify will still be reflected as Quantityin Cortex. When an item's quantity changes from 0 to something above 0, that item will trigger Item Back In Stock.
Understanding Products and Variants
Items are defined as either Productor Variantitems within Shopify. When entered into Cortex, the item will be marked as a Parent or Childitems respectively.
It is important to note thatall Products in shopify have at least one Variant. If a variant is not immediately specified, a default variant is created by Shopify.
The easiest way to view unspecified variants in Shopify is through the Metafields editor. Below we will click through into the variant item "Baby Stuffed Elephant - White - Default".
Click into the metafields editor for your Product
Click into the Variants tab
The variant can also be seen on the items page under Data Management:
Attributes not Specified by Shopify
The following attributes are not handled natively in Shopify. They will be applied to items through Shopify Item metafields.
Item Type (ReSci Item Type)
Cortex uses an item type value to distinguish between Subscription and Non-Subscription items. If an item is not a subscription type item this field can be used to hold an arbitrary value. Item Type is used to power recommendation filtering using the control.
Do Not Recommend
Cortex has a second control for removing items from email recommendations (without using item targeting). The Do Not Recommend field is designed to help marketers remove items from emails that cannot be made inactive in the store.
Items often marked with do not recommend include free samples, gift cards, and placeholder items for custom orders.
Replenishment Interval
The Buy Again Stage uses AI to power its sends, but your brand can override this with its own input. Any item which has the Replenishment Interval set with client data will use the client provided value for Buy Again sends.
View ArticleStep 1
Click here and enter your stores "myshopify" domain.
Step 2
Click Install App.
Step 3
Click edit to update the API Credentials.
Step 4
Enter the provided username and password from ReSci and click save.
Your credentials will be provided by Retention Science.
Your API Username and Password can be found in the API Settings menu when you login to the dashboard.
Step 5
After credentials are saved, you can configure data exports to Retention Science.
Be sure to enable automatic exports and run an export.
"Enable automatic exports" to start automatic synchronization."Run Export" will immediately start a data export.
View ArticleStep 1
Go to the Shopify Dashboard and click settings.
Step 2
Click Checkout.
Step 3
Scroll down to Order Processing and look forAdditional Scripts.
Step 4
Paste checkout event tracking code below into additional scripts.
Update the site ID highlighted in red.
The site ID will be provided by your Onboarding manager.The code should be updated to match your site ID and specific element names.
<!-- RetentionScience start -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.10.0/js/md5.js"></script><script type="text/javascript">{% if first_time_accessed %}
window._rsq = window._rsq || [];
window._rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID
window._rsq.push(['_enableOnsite']);
{% if customer %}
window._rsq.push(['_setUserId', '{{ customer.id }}']);
window._rsq.push(['_setUserEmail','{{ customer.email }}']);
{% endif %}
/*** EVENT SPECIFIC CODE ***/
window._rsq.push(['_addOrder', { 'id':'{{ order.id }}', 'total':'{{ order.total_price | money_without_currency }}' }]);
{% for item in order.line_items %}
window._rsq.push(['_addItem', { 'id':'{{ item.product_id }}', 'name':'{{ item.title }}', 'price':'{{item.price | money_without_currency }}' }]);
{% endfor %}
window._rsq.push(['_setAction', 'checkout_success']);
/*** END EVENT SPECIFIC CODE ***/
window._rsq.push(['_track']);
(function() {
var rScix = document.createElement('script');
rScix.type = 'text/javascript';
rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix);
})();{% endif %}
</script>
<!-- RetentionScience end -->
Step 4
Click save.
View ArticleSubscription preferences connect your users to your brand by giving them flexibility in what kind of messaging they want to receive, and how often they want to hear from you. This increases your engagement by letting users choose content that is more tailored to their preferences and personal interests, and helps you learn more about your users.
Adding subscription merge tags to your emails
To configure your preferences, navigate to the Subscriptions page. This feature comes with three optional subscription preferences that you can offer your users:
Types are the different categories of emails based on Cortex stages. You can group stages together under distinct labels, and let your users choose which types of content they want to receive.
Your newsletter subscription type includes the Promo Blast and Smart Blast stages. Your users can choose how often they want to receive newsletters through frequency options.
Interests are specialized fields that you can use to find out more about your users, like their preferred shopping vertical (e.g. clothing, home goods, pet products) or favorite brand. You can tag your emails with interests to make sure that users only receive content that they want.
By default, new users are subscribed to every type and interest of content, and they will receive newsletters as often as they are eligible to receive them. Your users can manage their email preferences and unsubscribe from all promotional emails through links that you include in your email campaigns.
Setting subscription types
Setting frequency options for newsletters
Setting subscription interests
Customizing subscription landing pages
View ArticleFrequency options let your users choose how often they want to receive your newsletters. Youll be able to create, edit, and delete frequency options for the newsletter type, and users can choose the option that applies best for them. Cortex will do the work to automatically send newsletters based on each individual users preference, no matter how many Promo Blasts you send.
To set your frequency options, find the Types section on the Subscriptions page, and click the Configure button.
In this article, youll learn how to configure your frequency options. After setting up frequency options, youll need to make them visible to users on the Manage preferences landing page.
Before configuring your frequency options, here are some things to know:
By default, all new users will receive newsletters based on your scheduling.
This feature lets users override Cortexs scheduling for Promo Blast and Smart Blast. Other timing-based rules for all other stages still follow Cortexs default rules and predictions.
Create a new frequency option
To create a new frequency option, follow the steps below:
Click the Add option button. A new row will appear in the table.
Add a label for this option. This text is what your users will see when managing their preferences.
Input an interval for this frequency option. This value is how long Cortex will wait before sending a newsletter to a given user.
Click the Add button in the row.
Save your changes by clicking the Save button at the bottom of the page.
Edit a frequency option
You can edit the label or interval of a frequency option by clicking the Edit button for a particular option.
If you edit the interval for a frequency option that users have already selected, then there are two ways to handle the preferences for these given users:
Reset users intervals back to Cortex default
This action will clear the frequency preference for all users who selected this frequency option. They will start receiving newsletters based on your scheduling.
Change users intervals to the new value
This action will change the frequency preference for all users from the old interval to the new interval. They will start receiving newsletters based on this new interval.
View ArticleYou can group Cortex stages into various subscription types to let your users choose what kind of content they want to receive.
The two default subscription types are Newsletters, which include Promo and Smart Blast, and Hand-picked content for you, which include all other Cortex stages. You can also categorize subscription types by site activity, like Cart Abandon and Browse Abandon, or by important product announcements, like Price Drop and Back In Stock.
In this article, youll learn how to configure your subscription types. After setting up your subscription types, youll need to make them visible to users on the Manage preferences landing page.
Before configuring your subscription types, here are some things to know:
Every Cortex stage must belong to a subscription type.
By default, all new users are subscribed to every subscription type. All users will be automatically subscribed to new subscription types that are created.
If a user excludes a subscription type in their preferences, then theywon'treceive any emails from any stages in that subscription type.
Create a new subscription type
To configure your subscription types, locate the Types section on the Subscriptions page, and click the Configure button.
Click the Add new type button. This will create a new category where you can add stages.
Give your subscription type a label and description. This text is what your users will see when managing their preferences, and helps your users understand exactly what each type means.
Drag and drop stages into your type.
Save your changes by clicking the Save button at the bottom of the page.
Reorder your subscription types
To reorder your subscription types, find the Types section on the Subscriptions page. The order shown in this table reflects the order of subscription types that your users will see when managing their preferences on the landing page. You can reorder your types by dragging a row to a new position in the table.
Move Smart Blast out of your newsletter type
If you use Smart Blast to send drip campaigns to your users, youll want to separate Smart Blast from your regular newsletters. To move Smart Blast to a different type, find the Types section on the Subscriptions page, and click the Configure button.
Find the newsletter type, and click the Show stages button.
Clicking this button will display a panel with Promo Blast and Smart Blast.
Drag Smart Blast to a new subscription type.
Save your changes by clicking the Save button at the bottom of the page.
View Articlemerge tags in your emails
Subscription landing pages let your users unsubscribe from promotional content or change their subscription preferences. Use to link users to the corresponding pages. You can customize these pages to feel true and authentic to your brand.
In this article, you'll learn how to customize specific features in each of the subscription landing pages. Navigate to these pages by clicking on the particular landing page in Subscriptions.
Unsubscribe confirmation
Users will see this page when they unsubscribe from promotional emails through an unsubscribe link in their email. You can customize the styling and messaging on this page, as well as let your users resubscribe to your mailing list. To add a resubscribe link, follow the steps below:
Add messaging to let your users know that they can resubscribe to your mailing list.
Highlight the words that you want to hyperlink.
Click theicon that appears above the text field, and the highlighted words will let users resubscribe.
Manage preferences
This page will let your users unsubscribe from all emails, or change their subscription preferences if any exist. If you configure subscription preferences, youll need to make them visible to your users.
To display subscription preferences on this landing page, navigate to the Content tab and find the toggles for the preferences you want to make visible. Users will only see options for subscription preferences that are visible.
View ArticleWith interests, you can learn more about your users, like their preferred shopping vertical or favorite brand. This feature lets your users choose what they want to receive based on their personal interests.
In this article, youll learn how to configure your interests. After setting up interests, youll need to make them visible to users on the Manage preferences landing page.
Before configuring your interests, here are some things to know:
By default, all new users are subscribed to every interest. All users will be automatically subscribed to new interests that are created.
Interests can be assigned to emails to make sure that users only receive content that they want.
A user is eligible to receive an email if the email is unassigned with interests, or is assigned at least one interest that the user has included in their preferences.
How interests work
To better understand whether your users will receive emails based on their personal interests, take the following example:
exporting purposes
This brand has four interests: Mens, Womens, Kids, and Home.
User 1 is subscribed to all interests, while User 2 is subscribed only to Womens and Kids.
Email A does not have any interests assigned; Email B has the interestMens assigned; and Email C has the interestsMens and Kids assigned.
Both users will receive Email A
Provided they meet the stage and segment criteria, all users are eligible to receive emails that do not have interests.
Only User 1 will receive Email B
User 1 will receive Email B because they are subscribed totheMens interest in their subscription preferences.
User 2 will not receive Email B because they explicitly excluded the Mens interest in their subscription preferences.
Both users will receive Email C
Even though User 2 explicitly excluded the Mens interest in their subscription preferences, they are eligible to receive Email C because they are subscribed to theKids interest in their subscription preferences.
Create an interest
To configure your interests, find the Interests section on the Subscriptions page.
To create an interest, click the Add interest button. A new row will appear in the table.
Add a label for this interest. This text is what your users will see when managing their preferences.
Click the Add button in the row. Added interests will automatically appear in the landing page when users manage their preferences.
Reorder your interests
The order shown in the table reflects the order of interests that your users will see when managing their preferences on the landing page. You can reorder your interests by dragging a row to a new position in the table.
Assign interests to an email
To assign an email with an interest, navigate to the Settings section within an emails settings.
Click on the Advanced tab.
Choose the option for which interests apply to this email.
You can assign multiple interests to an email. If a given user is subscribed to any of the interests that have been assigned to an email, then they will receive the email.
Use interests in segments
Any of the interests that you created in the Subscriptions page are available to use in your segments. To use an interest in your segments, navigate to the Segment Builder in Smart Segments.
Interest filters can be used for, or for building more complex email targeting. Consider the following example:
If a given user is subscribed to any of the interests that have been assigned to an email through its settings, then they will receive the email.
This segment includes users who are subscribed only to the Mens interest. Users who are subscribed to other interests like Womens, Kids, or Home are not eligible for this segment, even if they are subscribed to the Mens interest.
View ArticleCAN-SPAM and anti-spam laws require that we let users easily unsubscribe from promotional content. This means that your emails need to include an unsubscribe link.
In this article, youll learn how to link to your subscription landing pages by adding merge tags in your emails.
From the HTML editor
Use an <a> tag to create a hyperlink to your landing page.
Add the corresponding merge tag to the href attribute, which indicates the links destination.
Add link text, which is the visible part that users will click to reach the landing page.
Unsubscribe confirmation
<a href="{{unsub_url}}">Don't want to receive emails? Click here to unsubscribe.</a>
Manage preferences
<a href="{{subpref_url}}">Click here to manage your subscription preferences.</a>
From the template builder
Add messaging to let users know that they can unsubscribe or manage their preferences.
Highlight the words that you want to hyperlink.
In the control bar that appears, click the Special links button and select the corresponding merge tag. These merge tags can also be found by clicking the Merge tags button and selecting Unsubscribe URL or Manage Preferences URL.
Save your changes by clicking the Save button.
View ArticleFile Schema Types
Categories
Items
Users
Orders
Order Items
User Subscriptions
Item Reviews
User Wish Lists
Overview
File schemas are used to identify the data that you are sending to ReSci from your system via flat files through the SFTP. Each filetype that you send has specific schema that describes what the data in each column contains. The schema should be sent as the column header with the relevant data underneath.
See below for file schema types, as well as a table containing each schema field name, status, data type and a brief description.
Please note, the status of each field as the required fields must be sent exactly as listed for that filetype to be properly ingested into our system.
CATEGORIES
Fields
Status
Type
Description
record_id
Required
String
Primary unique key of category in your database
name
Required
String
Name of category
description
Optional
String
Description of category
parent_record_id
Optional
String
Primary key of parent category in your database
Example:
Fields
Value
record_id
12
name
Pants
description
Contains all types of pants
parent_record_id
1
Context/Considerations:
record_id: This is your category id that will be associated in items.
ITEMS
Fields
Status
Type
Description
record_id
Required
String
Primary unique key of item in your database
name
Required
String
Name of item
price
Required
Float
Price of item
price_b
Optional
Float
Alternate price for item (MSRP or Original Price)
active
Required
Integer
Active: 1, Inactive: 0
item_url
Required
String
URL of item
item_type
Optional (Required for Subcortex)
String
Indicating the type of item (No special characters)
manufacturer
Optional
String
Manufacturer of item
model
Optional
String
Model of item
quantity
Optional
Integer
Quantity of item in stock
image_list
Required
String
URL of hosted item image
categories
Optional
String
Category Record IDs of item, comma separated (no spaces)
parent_record_id
Required
String
Primary key of parent item in your database
replenish_interval
Optional
Integer
Integer of days predicting when item should be repurchased
do_not_recommend
Optional
Integer
Not Recommendable: 1, Recommendable: 0
description
Optional
String
item description to display when recommended in email
display_name
Optional
String
item display name
Example:
Fields
Value
record_id
2345L
name
Large Fuji Apple
price
1.99
active
1
item_url
http://example.com/fruit/apples/fuji
item_type
subscription
manufacturer
Nature
model
A-LF
quantity
100
image_list
http://example.com/fruit/apples/fuji/image_1.jpg
categories
123,123A
parent_record_id
2345
replenish_interval
20
Context/Considerations:
active: This column is critical as it will determine if RS will recommend a product or not in emails. (e.g. if 0, the item will not be recommended).
item_url: When Cortex generates emails with item recs, these URLs will navigate the user to the item they wish to purchase.
item_type: Assign the value subscription if you are using Subscription Cortex. Note: "subscription" should be sent aslowercase. This is used to determine which items are subscriptions vs. one off purchase items.
quantity: Required to use the Cortex campaign stage of Item Back In Stock. (notify Users automatically when items are available).
image_list: This will be the picture of the items that will appear in your emails. The images should be high quality and consistent in sizing across items.
categories: The record_id of the category from the Categories file. (e.g. if multiple, example format would be 1,2,3,4,5).
replenish_interval: Allows Cortex to automatically follow up with Users when item is about to expire. The days provided should be an average estimate of how long the product typically lasts.
Note on parent items- In emails, we may want to recommend parent items instead of their children. An example of this is a shirt that comes in different sizes. In many cases, the parent item is not actually for sale, only its children. However, the parent entry still must be in the items file, with record_id, name, price, item_url and image_list as required fields. The price for the parent item should be equal to the price of its lowest-priced child. The item_url is typically the landing page of the item from which you can select its children. The images in image_list represent the images that you want to be shown in email templates when recommending the parent.
USERS
Fields
Status
Type
Description
record_id
Required
String
Primary key of user in your database / MD5 of email address
Required
String
Email address of customer
account_created_on
Required
yyyy-mm-dd
Account creation date in UTC format
full_name
Optional
String
Full name of customer
address1
Optional
String
Address 1 of customer
address2
Optional
String
Address 2 of customer
city
Optional
String
City of customer
state
Optional
String
State of customer
zip
Optional
String
Zip code of customer
country
Optional
String
Country of customer
phone
Optional
String
Phone number of customer
birthday
Optional
yyyy-mm-dd
Birthday in UTC format
gender
Optional
String
Gender of customer
ip_address
Optional
String
IPv4 address of customer, send only ONE IP ADDRESS
number_logons
Optional
Integer
Number of times customer logged on
last_logon_at
Optional
yyyy-mm-dd hh:mm:ss
Last date and time customer logged on in UTC format
registration_source
Optional
String
Customer acquisition channel
date_unsubscribed
Optional
yyyy-mm-dd hh:mm:ss
Date and time customer unsubscribed in UTC format
unsubscribe_link
Optional
String
Internal link to unsubscribe customer
utm_campaign
Optional
String
UTM Campaign
utm_source
Optional
String
UTM Source
utm_medium
Optional
String
UTM Medium
utm_term
Optional
String
UTM Term
utm_content
Optional
String
UTM Content
Example:
Fields
Value
record_id
A1B2C3D4
account_created_on
2016-01-01
full_name
John Doe
address1
123 Main St.
address2
Apt 209
city
Los Angeles
state
CA
zip
91224
country
USA
phone
3339992222
birthday
1970-01-01
gender
m
ip_address
127.0.0.1
number_logons
2
last_logon_at
2016-01-05 10:25:13
registration_source
Google Adwords
date_unsubscribed
2016-01-05 10:25:13
unsubscribe_link
http://www.unsubscribeaddress.com
utm_campaign
campaign_launch
utm_source
utm_medium
banner1
utm_term
SEO_service
utm_content
content_a
Context/Considerations:
account_created_on: Used when determining sends of New to Your Brand (NTYB) emails in Cortex, the created on date must be within 2 days of current date for a user to be eligible
full_name: First and Last name will be available as merge tags in email
birthday: Allows your to setup Birthday Campaigns in Cortex
gender: If not provided, RS can predict gender with up to 95% accuracy.
registration_source: Useful for analytics inside of Cortex as well as segmenting campaigns
date_unsubscribed: This is only required in rare situations where multiple send systems are being used
unsubscribe_link: This is only required in rare situations where multiple send systems are being used
utm_campaign: Refers to the overall campaign you are running
utm_source: Used to describe where the traffic is coming from
utm_medium: Used to describe the specific element
utm_term: Used for paid search to determine the particular keyword you were bidding on for that specific ad
utm_content: Used for split testing
ORDERS
Fields
Status
Type
Description
record_id
Required
String
Primary key of order in your database
user_record_id
Required
String
Primary key of user in your database / MD5 of email address
Required
String
Email address of customer
total_price
Required
Float
Total price of entire order
ordered_at
Required
yyyy-mm-dd hh:mm:ss
Order datetime in UTC format Must be a full timestamp, not order date
order_status
Required
String
Status of order
discount_amount
Optional
Float
Discount of order (Positive Value)
shipping_amount
Optional
Float
Shipping of order
tax_amount
Optional
Float
Tax of order
payment_method
Optional
String
Payment method used
subscription
Optional
Integer
Subscription order: 1, Non-subscription order: 0
Example:
Fields
Value
record_id
987654321
user_record_id
A1B2C3D4
total_price
99.95
ordered_at
2016-01-05 10:25:13
discount_amount
10.00
shipping_amount
5.00
tax_amount
9.95
payment_method
PayPal
subscription
0
order_status
Paid
Context/Considerations:
order_status: Helpful to make revenue/order stats as accurate as possible inside of Cortex (e.g. we can de-activate certain statuses such as Refunded that are not true orders)
ORDER ITEMS
Fields
Status
Type
Description
order_record_id
Required
String
Primary key of order in your database
item_record_id
Required
String
Primary key of item in your database
name
Required
String
Name of item
quantity
Required
Integer
Quantity of item in order
price
Required
Float
Price per item
categories
Optional
String
Category Record IDs of item, separated by commas (no spaces)
Example:
Fields
Value
order_record_id
987654321
item_record_id
2345L
name
Large Fuji Apple
quantity
2
price
1.99
categories
123,123A
USER SUBSCRIPTIONS
Used by AI models to track users who have recurring subscriptions to a product (Note: These are not newsletter only subscribers)
Fields
Status
Type
Description
record_id
Required
String
Primary key of subscription
user_record_id
Required
String
Primary key of user in your database / MD5 of email address
status
Required
String
Status of subscription
item_record_id
Required
String
Primary key of subscribed item in your database. Subscribed item must have an item type of subscription
started_at
Required
yyyy-mm-dd hh:mm:ss
Subscription start datetime in UTC format
trial
Required
Integer
Indicating whether the user is on trial 1=true 0=false
churned
Required
Integer
Indicating whether the user is on churned 1=true 0=false
canceled_at
Required
yyyy-mm-dd hh:mm:ss
Subscription cancelation datetime in UTC format. If the subscription is active, leave this field blank.
cancel_reason
Optional
String
Subscription cancelation reason
attribute_1
Optional
String
Any additional field (frequency, color, etc)
Example:
Fields
Example
record_id
345678
user_record_id
A1B2C3D4
status
active
item_record_id
2345L
started_at
2016-01-05 10:25:13
trial
1
churned
1
canceled_at
2016-01-15 10:25:13
cancel_reason
Too expensive
attribute_1
Monthly
ITEM REVIEWS
Used by AI models to enhance recommendations and churn score of users
Fields
Status
Type
Description
record_id
Required
String
Unique Key
feedback_at
Required
yyyy-mm-ddhh:mm:ss
Date of feedback in datetime in UTC format
user_record_id
Required
String
Primary key of user in your database / MD5 of email address
item_record_id
Optional
String
Primary key of subscribed item in your database.
rating
Optional
Float
Rating of the item (1-5, float)
review
Optional
String
Review of the item
num_approvals
Optional
Integer
Number of users that found this review useful (integer)
Example:
Fields
Value
record_id
42
feedback_at
2016-01-01 11:31:45
user_record_id
A1B2C3D4
item_record_id
2345L
rating
1,2.5,3.3,4,5
review
This item was fantastic!
num_approvals
3
Context/Considerations:
item_record_id: Item IDs are optional in case surveys used are not item specific
rating: At least one must be provided: rating or review
review: At least one must be provided: rating or review
USER WISH LISTS
Fields
Status
Description
item_record_id
Required
Primary key of item in your database.
user_record_id
Required
Primary key of user in your database / MD5 of email address
active
Required
Active: 1, Inactive: 0
Example:
Fields
Example
item_record_id
2345L
user_record_id
A1B2C3D4
active
1
Context/Considerations:
active: This defines if the item is active in a users wishlist, not to be confused with the items file active column
View ArticleOverview
Justuno is a popular on-site conversion product that allows you to create lead / email capture forms.With the Justuno x ReSci integration, you can use Justunos on-site conversion optimization tools to grow your email list and engage with customers and push them directly into ReSci. You can also trigger immediate Welcome Stage emails to these users who've signed up on your Justuno forms.
Table of Contents
Overview
Installing the Justuno Plugin
Enabling the Integration
Integration Data
Installing the Justuno Plugin
Navigate to the Integrations Center in Cortex by navigating to "Cortex" and then "Integrations" User create API
Search for Justuno or click on the Justuno plugin to open the Justuno plugin page
Click "Install" and wait for for the plugin to complete installation
Once installed, click "Generate a new key" under the "API KEY" section and use this key to enter into Justuno this will be used to enable the integration and for authentication
Enabling the Integration
1. Copy the API Key generated from the Justuno plugin (see step 4 above)
2. Open your Justuno promotions in the design canvas, clickEditon the promotion and then clickEdit Design
3. In the design canvas, select the email field. Click theChange Formbutton on the Form Options menu on the right side
4.If an existing integration is set, selectChange Integrationat the top left of the form editor, otherwise select the tile that is labeled RESCI and proceed to enter your API Key to link the promotion form fields toRetention Science.
5. You'll be prompted for the ReSci API key enter the Key from the Justuno Plugin here
6. Add or remove fields as desired, then ClickCreate Formto complete the integration process.This screen will show you the options for the information fields to pull, select the desired options. There is an option to add more fields if desired. Please note, that is best practice with ReSci to set a Registration Source. This will allow you to segment users based on how they entered the platform. You can do this by using a hidden field as shown in the screenshot below.
7.Upon creation of the form in the design canvas, you will note on the right hand side where the "Change Form" option is located, that Integration Type now reads as "retentionscience".
8. Publish your promotion and give it a test!
Integration Data
Justunohas access to thewhich allows you to create configurable fields on the campaign. We support thethe standard attributes listed belowin addition to custom attributesthat have been set up for your account.
Standard Attributes
Please note that Justuno sets the User id to the MD5 hash automatically.
Fields available to JustUno
Required
Default Value
Notes
yes
full_name
no
User's full name (first and last).
address1
no
address2
no
state
no
zip
no
country
no
phone
no
birth_year
no
gender
no
Values
mfor male
ffor female
registration_source
no
The source of the user's registration typically used for user segmentation
birthday
no
format must be YYYY-MM-DD
send_transactional_welcome
no
true
When true, an email is sent to new users when there is an available template in the Welcome stage. When false Welcome emails will not go to new users. The default for this setting is true.
Custom Attributes
To support custom fields in your Justuno forms so that you can filter for custom attributes in Cortex:
1. Email [email protected] to ensure your custom attributes are configured for your account
2. Once these custom attributes are configured for your account, they will appear as filters automatically in Smart Segmentsunder "Custom Features"
View ArticleOverview
Installing the Privy Plugin
Enabling the Integration
Adding JavaScript to Privy
Integration Data
Overview
The Privy x ReSci integration takes just a few minutes to setup, and allows seamless transfer of captured email data from Privy to ReSci for use in your email campaigns.This supports specialized fields such as registration_source and birthday, and even custom attributesfor proper tracking, and allows you to use the instant transactional Welcome stage inside of Cortex.
Installing the Privy Plugin
Navigate to the Integrations Center in Cortex by navigating to "Cortex" and then "Integrations" user schema
Search for Privy or click on the Privy plugin to open the Privy plugin page
Click "Install" and wait for for the plugin to complete installation
Once installed, click "Generate a new key" under the "API KEY" section and use this key to enter into Privy this will be used to enable the integration and for authentication
Enabling the Integration
Step 1: Sign Up for Privy through your ReSci Representative
Request your ReSci contact to notify Privy about your interest in signing up.
Step 2: Enable the Privy Integration
Go to your Linked accounts page and click on "Integrations"
Click on "Retention Science" and enter in the API Key you generated in the Privy Plugin from the Integrations Center in Cortex
Step 3: Enable the Privy x ReSci integration at the campaign level
Sync should be enabled per campaign
Click on the Campaign you'd like to enable the integration for (this creates users in Cortex after form submission and triggers our Welcome Stage email)
Click the "Automation" Tab and then click "+ New Rule"
Select your linked Retention Science account and select the list "All Users"
Click "Save"
Thats it! Just repeat for any campaign that you want synced directly to ReSci
Adding JavaScript to Privy
To optimize our user tracking for visitors to your site, we add a layer of JavaScript on top of the Privy capture forms. Please see below for the instructions on this process:
Navigate to the "Integrations" page under your account settings (top right nav).
Click on "Customizations" on the left hand menu under "Business Settings".
Under the "Custom Javascript" section, copy and paste the below code snippet into the "Conversion Pixel" section (see above screenshot for reference):
<!-- RetentionScience start --><script type="text/javascript">(function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();window._rsq = window._rsq || []; window._rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID window._rsq.push(['_enableOnsite']);window._rsq.push(['_setUserEmail', '{{ contact.email }}']);window._rsq.push(['_track']);</script><!-- RetentionScience end -->
Click "Save Changes" at the bottom of the page and you're done!
Integration Data
Privy allows you to create configurable fields on the campaign. We support the standard user attributes that match our in addition to custom attributes that have been set up for your account.
Standard Attributes
Please see below for the default attributes we support:
Fields
Status
Type
Description
record_id
Required
String
Primary key of user in your database / MD5 of email address
Required
String
Email address of customer
account_created_on
Required
yyyy-mm-dd
Account creation date in UTC format
full_name
Optional
String
Full name of customer
address1
Optional
String
Address 1 of customer
address2
Optional
String
Address 2 of customer
city
Optional
String
City of customer
state
Optional
String
State of customer
zip
Optional
String
Zip code of customer
country
Optional
String
Country of customer
phone
Optional
String
Phone number of customer
birthday
Optional
yyyy-mm-dd
Birthday in UTC format
gender
Optional
String
Gender of customer
ip_address
Optional
String
IPv4 address of customer, send onlyONE IP ADDRESS
number_logons
Optional
Integer
Number of times customer logged on
last_logon_at
Optional
yyyy-mm-dd hh:mm:ss
Last date and time customer logged on in UTC format
registration_source
Optional
String
Customer acquisition channel
date_unsubscribed
Optional
yyyy-mm-dd hh:mm:ss
Date and time customer unsubscribed in UTC format
unsubscribe_link
Optional
String
Internal link to unsubscribe customer
utm_campaign
Optional
String
UTM Campaign
utm_source
Optional
String
UTM Source
utm_medium
Optional
String
UTM Medium
utm_term
Optional
String
UTM Term
utm_content
Optional
String
UTM Content
Custom Attributes
To support custom fields in your Privy forms so that you can filter for custom attributes in Cortex:
1. Email [email protected] to ensure your custom attributes are configured for your account
2. Once these custom attributes are configured for your account, they will appear as filters automatically in Smart Segmentsunder "Custom Features"
View ArticleThe Smart Subject Lines tool leverages Cortex's AI to assist your creative process when thinking of subject lines for your emails.
Enter a phrase, and the dropdown will auto-suggest subject lines, based on what you're typing.
If you would like to use one of the auto-suggestions, just click the suggestion. If you want to use your original phrase ("cart" in the above example), just click "Search".
Smart Subject Lines will find similar subject lines for the specific stage where you're building an email. The results will also indicate how that subject line has performed compared to other subject lines in that stage(via the up and down arrows).
In the above example, we are searching for subject lines similar to "cart", in the Cart Abandon stage. The results show similar subject lines for Cart Abandon emails specifically, and how well they have performed over time.
The similar subject line "Nice Cart" is shown to have performed better than other subject lines. The similar subject line "Your cart awaits", has performed worse.
Any subject line you want to use for your email, just click "add" to the right of the result. This will automatically add that subject line to your email.
That's it! Use the tool anytime you're stuck coming up with more subject lines!
View ArticleA preview or preheader is the short summary of text after your subject line when an email is viewed in the inbox.
How to Set Preview Text
1. In each Cortex email template, there is an option to add Preview Text.
2. The text you add to the Preview Text box will show up next to the subject line in the user's inbox.
ReSci Pro Tip: Think about the number of characters in your preview text.
It's important to note that the preview will show the next found text in the email, if the pre-header does not utilize the full length of the pre-header. Below is a guide for the amount of characters that are normally visible in specific email clients.
Best Practices
1. The preheader is one of the first things users see along with the subject line, make it count to improve open rates.
2. Preheader text can be used as subliminal advertising, serving as a one-time advertisement in the inbox.
3. Keep it short so it will display properly across different devices and email service providers. Try keeping it to 40-50 characters.
4. Make sure the preheader content is in line with the subject line and email content so it all flows together creating a story for the user.
5. Use it as an extension of your subject line.
6. Include a call to action in your preheader. "See more", "learn more", and "check it out" are all good options.
Troubleshooting
It's not uncommon to see preview text that contains a string of what looks like nonsense after the text set in the template builder.
This happens because email clients do not limit themselves to your chosen pre-header text, and will reach into an email to find additional preview content. Most commonly this results in image alt text being shown as preview text.
Luckily, adjusting your image alt text is very easy.
In the Drag and Drop builder, select your image and set the alt text in the Content Properties menu:
In an HTML template, use the "alt" property to add alt text to an image.
View ArticleCreating great marketing emails doesn't just happen, it takes some upfront work to put together a cohesive email, and this article will walk you through the basic questions and direction for developing a concept. We'll also analyze a few emails and point out some good and less good qualities in each design.
Determining the Purpose of Your Email
This is the number one thing that separates great email design from mediocre email design. If your thought process when creating a new email is, "This is a welcome message, let's welcome the user" you're not taking the perspective of your user base. This is your chance to craft a personal relationship with your users, take some time to craft your messages. Some questions to ask before designing your email:
What action(s) do I want the recipients to take?
Is there a specific emotion that I want the email to invoke?
Why should the recipients care?
Who is receiving the campaign?
What does success look like for this campaign?
Below you'll find some examples of some great welcome emails and why they work:
Draper James
choice overload
Draper James does a great job of using the Subject Line (Let's be friends!) and Preview Text (Let's get to know each other!) to introduce what's coming in the email.
The goal of this email is to create a friendship with their newly acquired customer. The idea here is that a new friend shares things about themselves to help build rapport.
Each tile has a distinct feature about the business and gives a clear Call To Action (CTA).
It's subtle, but if you notice in frames 2 and 3 the models are actually looking at the text, this subtle trick draws your eyes to the CTA and text.
There is no menu at the top to distract you from the main content in the email.
This may be too many items for a user to interact with, think about sticking to three distinct CTAs to decrease .
Ban.d
Again we see a strategy of extending friendship. You can immediately understand what this brand is conveying. With the initial copy the user feels welcomed, warm and part of the club.
They set the expectations of their email program, so the users know exactly what to expect.
They offer a discount prominently in their welcome email.
They give the user a way to further interact with a specific social channel instead of overwhelming the user with multiple choices.
The menu bar takes away from the main message, and likely shows up in the preview text, but at least it is limited to just a few categories. This is one area where this email can improve (remember emails websites).
Sleepy Jones
That hero image screams personality! The juxtaposition of the tired guy and the fierce woman gives a sense of what you can expect from this brand.
They do a good job of using the same text throughout but there are a few improvements that can be made here.
The promo code gets lost in the paragraph.
Make important items like this stand out so potential customers are more inclined to engage.
Although standard links are useful for secondary items that you want to call attention to, a button format with a clear CTA would likely increase click rates.
Below the divider they have some suggestions but no header or information to tell us what these are. Are they best sellers, personalized for me? A little description can go a long way.
There is already a Men and Women section at the top of the email, so why repeat it? This is a space that can be used for something else, or they could move the entire menu below the message to increase mobile responsiveness and keep the focus on the primary message.
Now that we have the concept and idea of what the purpose of the email will be, it's time to begin the design process. Check out this article on the design process and how to gather content. (Article in progress, please be patient)
View ArticleEvery email marketer wants to send the best emails, right? Of course you do. Here's the good news: you don't need to spend hours or days developing new content from scratch - with Cortex onlya few minutes every few weeksis necessary.
This article will teach you how to use insights from Cortex to improve your content over time, turning your great content into the best content.
The process is simple:
Take your best template in a stage
Clone that template
Change one thing
Activate the new template version
Cortex automatically tests the two templates against each other
It's that easy!
Let's learn a little more about the two steps: picking a variableand reviewing performance.
Picking a Variable
To gain valuable insights, pick one thing to change at a time. If the content being tested is too different, it will be impossible to determine what made one template better than another. This is why small changes over time can be more valuable thanstarting from scratch with all-new content.
What you want to do is pick one element to focus on at a time: hero image, call to action language, and the number of product recs are all great places to start. Clone a copy of your template for each version of your variable (if you have three hero images to test, have three templates).
Whenever possible, copy subject lines across templates within a stage, so that subject line and template performance can be evaluated independently.
Reviewing Performance
Once your templates are running in Cortex, the best performing content will rise to the top and get the most sends to your audience. Once this winner is identified, you can use this knowledge to improve your other templates. Turn off the losing templates, and use this winning content as the base for your next test on a different part of the template. As each test finishes, you'll be one step closer to the best content possible!
It's important to note, what works best in one stage may not work in another! Users in New To Your Brand may be looking for something different than a user receiving Follow Up messaging after their third purchase. It can also be good to revisit an already-tested variable if you have new ideas!
Here are some variables you may want to test:
Hero Images- Hero Image vs Product Rec as hero image- Testing different model photos- Testing product photos vs modeled photos- Testing product photos vs "lifestyle" photos- Group shots with models vs individual shots- Size of Hero Image or First Product Rec
Number ofProduct Recs Per Row
Number of Product Rec Rows
Call To Action language
CTA Button Color
CTA Button Size
Pre-Header Text (Preview Text)
Greeting Language
Gifs vs Static Images
Educational Content vs Product Recs
Template Layout
Template Background Color
View ArticleDo you love Smart Segments? Do you wish you could use that information for your other marketing actions? Well, you can, thanks to the Export feature inside Smart Segments.
Exporting your data opens up many new options. Thanks to the Export Data control, you can combine the intelligent insights of Cortex with the reach of any advertising platform, including AdWords andFacebook.
Your smart segments can be exported in four formats: Facebook Custom Audience, Google Customer Match, Emails Only, and ReSci formats.
To export your segments, simply select the segment and format from the segment export drop-down:
here
Using Your Custom Facebook Audience
Facebook is the third most trafficked site, globally and in the United States, and it's a powerful platform for marketers in the 21st century. Here's some of the best ways to use Cortex and Facebook together:
Follow your best customers and recent visitors to keep them engaged and on site. Recommended Segments: "Ready To Buy," "High CFV," "High CLV," "Repeat Purchases," "Last Site Action < 30 Days."
Use Facebook "lookalike audiences" to acquire new customers who are similar to your existing customer lists.Recommended Segments: "Subscribed Users," "At Least 1 Purchase."
Re-engage customers who don't respond to email or are disconnecting from your brand. Recommended Segments: "Churned," "At Risk," "Unsubscribed from Email," "Last Email Open >30 Days," "Last Site Action > 30 Days."
Your Facebook Audience Export contains:
phone number
first name
last name
city
state
country
date of birth
year of birth
age zip code
gender
Want to go one step further? Contact tech support and ask to participate in our direct facebook sync program!
Using Your GoogleAudience
Google AdWords has potentially the greatest exposure of any browser-based advertising. Between Google Search, Youtube, and the Google Display Network of websites, it is virtually impossible for someone to be online without encountering the AdWords platform. Here's some of the best ways to use Cortex and AdWords together:
Target your best customers and recent visitors to keep them engaged and on site.Recommended Segments: "Ready To Buy," "High CFV," "High CLV," "Repeat Purchases," "Last Site Action < 30 Days."
Using the "Similar Audience" feature, you can expose new potential customers to your brand whose browsing and searching behavior is similar to your existing customers.Recommended Segments: "Subscribed Users," "At Least 1 Purchase."
Re-engage customers who don't respond to email or are disconnecting from your brand. Recommended Segments: "Churned," "At Risk," "Unsubscribed from Email," "Last Email Open >30 Days," "Last Site Action > 30 Days."
Your Google Audience Export contains:
email address
first name
last name
country
zip
phone
Other Exports:
Your third option for data export is the "Emails Only" export.
Your Emails Only Export contains:
email address
Your fourth option for data export is the "ReSci Format" export.
Your ReSci Format Export contains:
record_id
full name
birthdate
gender
registration date
registration source
last registration source
number of orders
last order date
total lifetime spend
AOV
zip
state
country
phone
date_unsubscribed
Example
Goal: Create a Facebook Lookalike Audience for your High Customer Lifetime Value users and target them with and ad for a top product those High Customer Lifetime users purchased.
Steps:
1. Data Management --> Smart Segments --> Predicted User Segments
2. Click on Analytics for that segment and see what the top selling products are for that segment.
3. Click on Export As for Facebook Custom Audiences.
4. Login to Facebook and create a Lookalike Audience campaign using the smart segment and an ad for one of that liststop selling products.
Example
Goal: Create a Facebook Audience for your High Customer Lifetime Value users and target them with a special offer thanking them for their loyalty.
Steps:
1. Data Management --> Smart Segments --> Predicted User Segments
2. Click on Export As for Facebook Custom Audiences.
3. Login to Facebook and create a Lookalike Audience campaign using the smart segment and an ad that includes a special offer.
Further Reading:
Introduction to Facebook Lookalike Audiences
Facebook Custom Audiences
Creating a Facebook Lookalike Audience
Adding Lists to Google Adwords Customer Match
Google Adwords Similar Audiences
Google AdWords Strategies
Additional resources:
Blueprint eLearning is a series of free, self-paced online courses and learning paths teaching the best practices of Facebook marketingperfect for small businesses, agencies, advertisers, graduates, MBA holders, or anyone wanting to market more effectively on Facebook. All you need to get started is a Facebook account.
Link to get started!
View ArticleIn Cortex, you can segment on registration sources, which are the sources of traffic your users are coming from. There are also various metrics in the platform so you can learn more about these sources.
Navigate to your Smart Segments page, and click "create new". This will take you to the segment builder, where you can search for "registration source".
check out this article
There are two options:
Registration source - the first registration source of a user; this value cannot be changed.
Last registration source - the last registration source of a user, this value will be set anew every time a user comes in with another registration source
Example:
Jim Smith clicks on one of your Facebook Lead Ads, goes to your site, and signs up. Their registration source will be set to "Facebook Lead Ad".
A week later, Jim Smith signs up through a Yieldify sweepstakes program. Registration source will still be "Facebook Lead Ad", and last registration source will be "Yieldify".
So Jim will be included in the count for this segment:
And Jim will also be included in this segment:
So if you wanted to target users like Jim who came in through Yieldify, you would use the second segment.
Note: Last registration source is a revolving door: each new source that a user comes in through will set this field anew each time. Users don't typically come in through many reg sources over a short period of time, so this system will handle most of your use cases.
If you want to learn more about registration sources and how the data gets into Cortex, .
View ArticleThis article will provide a working example to transform a drag-and-drop Cart Abandon template into a dynamic template that inserts Shopify's abandoned checkout URL when it is available.
Make sure you are familiar with the basics of the Template Builder, Conditional Statements, and the Display Conditions control.
- Review Row Controls - Review Conditional Statements. - Review Display Conditions Control.
The Goal
Our goal is to build a template that will move users towards checkout after they have abandoned their cart. We want the special shopify link to appear whenever it is available, and will link users back to a product from their cart when that link is unavailable.
The Approach
We will build two new rows that feature the product name and the CTA button. These rows will be controlled by conditional statements so that only one is displayed each time.
The Transformation
First, select the template you would like to use as a starting point, and clone a copy. it's important to always A/B test changes to your campaign, instead of assuming a new version is always better!
For this example we will be using a winter-themed email from Ghurka.
Step 1 - Determine which elements will be displayed conditionally
For this template we will be linking the hero image and the CTA button conditionally. Because of this we will place the hero image, product name, and CTA button content blocks in their own structure row.
When your structure row is selected, you will be able to highlight the content blocks inside by moving the mouse over each element.
Step 2 - Build the First Display Condition
Make sure you have the structure element selected, then open display conditions from the menu.
Name: Display if Shopify link exists (is not null and is not blank)
Description: send the user back to their cart/checkout
Before: {% if rs_str_1_usr_attr != null and rs_str_1_usr_attr != '' %}
After: {% else %}{% endif %}
Step 3 - Set Your Conditional Content
Once a display condition has been set, we must set the content that follows this statement. If the shopify link exists we want to serve users the shopify link. Here we are setting the hero image and the CTA button to link with the Shopify URL
Step 4 - Clone Your Content for the Second Display Condition
Step 5 - Build the Second Display Condition
Your display conditions will be copied over from the original structure row. Now we will swap the != "does not equal" for == "equals", and we will swap the "and" for an "or".
Name: Display if Shopify link does not exist (is null or if blank)
Description: send user back to a product from their cart
Before: {% if rs_str_1_usr_attr == null or rs_str_1_usr_attr == '' %}
After: {% else %}{% endif %}
Step 6 - Set Your Conditional Content
Once a display condition has been set, we must set the content that follows this statement. If the shopify link does not exist we want to serve users a product link. Here we are setting the hero image and the CTA button to link with the {{ rs_rpu1 }} product url link. We will also set the CTA button to say "Continue Shopping" since it does not lead back to the user's cart.
Step 7 - Finalize and Save Your Template!
Make sure all content is ready to send, double-checking filters, subject lines, and other advanced settings. Once it's saved and ready to go, don't forget to activate!
View ArticleTable of Contents
Overview
Data Streams from BigCommerce to ReSci
Requirements for Setup
Data Mapping
Users
Categories
Items
Orders
Order Items
Customers Versus Subscribers
Data Distinctions Between Customers and Subscribers
JavaScript Implementation
Updating the Content Security Policy
Create ReScis Tracking Script using BigCommerces Script Manager Tool
Implement our Checkout Success Snippet in Advanced Settings
Overview
The BigCommerce x ReSci integration makes it easy to onboard to ReSci by syncing your e-commerce data into Cortexs customer data platform. This provides actual business data to train our AI, providing you with a unified profile of your customers, and allows Cortex to make personalized recommendations based on actual purchase history, browsing activity, and demographics.
Note: The BigCommerce x ReSci Integration must be enabled for your account before data can be pushed from your BigCommerce account into Cortex.Please contact [email protected] or your client success manager to enable the integration.
Data Streams from BigCommerce to ReSci
The BigCommerce x ReSci integration pulls the below data streams from BigCommerce into Cortex for use in segmentation, training our AI models, etc.
BigCommerce > ReSci
customers > users
newsletter_subscribers > users
categories > categories
products > items
orders > orders
order_products > order_items
Requirements for Setup
In order to enable the integration for BigCommerce, you will need to install the BigCommerce plugin in the integrations center, and also provide our team with the below (you can find this information by following these instructions ):
Client ID
Client Secret
OAuth Access Token
Name
API Path
API Permissions that match the settings below:
Setup Guide
Data Mapping
The below mapping outlines exactly where we pull data from BigCommerce to populate the corresponding fields in ReSci.This is noted for each data schema :
Users
Categories
Items
Orders
Order Items
Users
BigCommerce
ReSci
customers.id
record_id
newsletter_subscribers.email
newsletter_subscribers.date_created or customers.date_created
account_created_on
newsletter_subscribers.first_name + + newsletter_subscribers.last_name
full_name
customers.addresses[0].street_1
address1
customers.addresses[0].street_2
address2
customers.addresses[0].city
city
customers.addresses[0].state
state
customers.addresses[0].zip
zip
customers.addresses[0].country
country
phone
phone
customers.registration_ip_address
ip_address
newsletter_subscribers.source
registration_source
if(customers.accepts_marketing == false) set to today
date_unsubscribed
If using Big Commerce "Form Fields" to collect & populate Birthday, Gender, and Registration Source, utilizing the following format:
Big Commerce Form Field
ReSci
birthday
birthday
gender
gender
registration_source
registration_source
Categories
BigCommerce
ReSci
categories.id
record_id
categories.name
name
categories.description
description
categories.parent_id
parent_record_id
Items
BigCommerce
ReSci
products.id
record_id
products.name
name
products.price
price
products.availability == available
active
products.custom_url.url
item_url
products.sku
model
products.inventory_level
quantity
products.variants[].image_url
image_list
products.categories
categories
products.variants[].product_id
parent_record_id
Orders
BigCommerce
ReSci
orders.id
record_id
orders.customer_id
user_record_id
orders.billing_address.email
orders.total_inc_tax
total_price
orders.date_created
ordered_at
orders.discount_amount
discount_amount
orders.shipping_cost_inc_tax
shipping_amount
orders.total_tax
tax_amount
orders.payment_method
payment_method
orders.status
order_status
Order Items
BigCommerce
ReSci
order_products.order_id
order_record_id
order_products.product_id
item_record_id
order_products.name
name
order_products.price_inc_tax
price
order_products.quantity
quantity
order_products.categories
categories
Customers versus Subscribers
Our BigCommerce integration identifies customers and subscribers distinctly so you have insight into which of your users has created an account or successfully placed an order, versus just signed up to receive emails from your newsletter form.If you are using BigCommerces built-in newsletter subscriber form, you will automatically have these subscribers synced from BigCommerce into ReSci.
Data Distinctions Between Customers and Subscribers
The way our integration distinguishes between customers and subscribers is using the key identifier user.record_id (see below). Using this value, youre easily able to understand which of your users is just a subscriber or which is a customer.
For segmentation purposes, you can drill deeper into your data and easily target just your subscribers by segmenting by those users who have not yet made a purchase but are subscribed to email.
See below for more information on how we differentiate between the two:
Customers
Customers are defined as those users who have created an account with you / successfully completed an order.
The user.record_id value for customers is the customers.id value in BigCommerce.
Customers are synced to your master all users segment in Cortex.
Subscribers
Subscribers are defined as those users who have signed up from your built-in newsletter form but not yet created an account / successfully completed an order.
The user.record_id value for subscribers is an MD5(lower) of the subscribers email address.
Subscribers are also synced to your master all users segment in Cortex.
JavaScript Implementation
Our normal JavaScript needs to be adapted for use in BigCommerce so that we can track user behavior in real-time. There are a couple steps needed to ensure that our JavaScript is working as needed:
Updating the Content Security Policy
Create ReScis Tracking Script using BigCommerces Script Manager Tool
Implement our Checkout Success Snippet in Advanced Settings
Updating the Content Security Policy
This step whitelists our required domain (cloudfront.net) so that our JavaScript works as expected.
Navigate to Storefront and from My Themes, select the Advanced drop-down from the Current Theme section, and select Edit theme files.
Click on templates, layout, then base.html
Locate the Content-Security-Policy on the base.html theme file and check if cloudfront.net is listed. If it is listed, move on to the next step. If not, add *.cloudfront.net as shown below within the content of the <meta> tag and click Save & apply file and close the base.html tab.
Create ReScis Tracking Script using BigCommerces Script Manager Tool
BigCommerce has a built-in tool that well use to implement our JavaScript to track user behavior in real-time.
Navigate to Storefront and Script Manager.
Click Create a Script and in the Name of script field, enter ReSci JS.
The configuration of the script should note the Location on page as Head, Select pages where script will be added as All pages, and Script type as Script.
In the Script contents section, paste the below code snippet and ensure that you replace the site_id variable with your correct site_id value, and reference your DOM elements appropriately, particularly in window.frames.document.getElementById('form-action-addToCart').Note: If you need assistance locating your site_id, contact [email protected].
<script type="text/javascript">window._rsq = window._rsq || []; window._rsq.push(['_setSiteId', 'site_id']); // replace with your site_id window._rsq.push(['_enableOnsite']);{{#if customer}} window._rsq.push(['_setUserId', '{{ customer.id }}']); window._rsq.push(['_setUserEmail', '{{ customer.email }}']);{{/if}} /*** EVENT SPECIFIC CODE ***/{{#if product}} window._rsq.push(['_addItem', {'id': '{{ product.id }}'}]);{{/if}}{{#if page_type '==' 'search'}} window._rsq.push(['_setAction', 'search']) ; window._rsq.push(['_setParams', { 'term': '{{ forms.search.query }}'}]);{{/if}} {{#if page_type '==' 'cart'}} {{#forEach cart.items}} window._rsq.push(['_addItem', { 'id':'{{ product_id }}', 'name':'{{ name }}', 'price':'{{ price.value }}' }]); {{/forEach}} window._rsq.push(['_setAction', 'shopping_cart']);{{/if}}/*** FUNCTION FOR AJAX TRACKING ***/var _rs_ajax = {};_rs_ajax.updateCart = function(){ //This is required for ajax cart views {{#if product}} window._rsq.push(['_addItem', { 'id':'{{ product.id }}', 'name':'{{ product.title }}', 'price':'{{ product.price.without_tax.value }}' }]); window._rsq.push(['_setAction', 'shopping_cart']); window._rsq.push(['_track']); {{/if}}};/*** END FUNCTION FOR AJAX TRACKING ***/window.addEventListener('DOMContentLoaded', function(){/*** FUNCTION FOR ADD TO CART EVENT ***/ window.frames.document.getElementById('form-action-addToCart').addEventListener("click", function(){ _rs_ajax.updateCart(); })});/*** END ADD TO CART EVENT ***//*** END EVENT SPECIFIC CODE ***/window._rsq.push(['_track']);(function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script>
Implement our Checkout Success Snippet in Advanced Settings
This step implements our conversion tracking pixel for a successful checkout, something we call a Checkout Success JavaScript event.
Navigate to Advanced Settings then Affiliate Conversion Tracking.
In Conversion Tracking Code section, paste the below code snippet and ensure that you replace the site_id variable with your correct site_id value. Click Save when finished.
<!-- RetentionScience start --><script type="text/javascript"> window._rsq = window._rsq || []; window._rsq.push(['_setSiteId', 'site_id']); // replace with your site_id window._rsq.push(['_enableOnsite']); window._rsq.push(['_setUserEmail','%%ORDER_EMAIL%%']); /*** EVENT SPECIFIC CODE ***/ window._rsq.push(['_addOrder', { 'id':'%%ORDER_ID%%', 'total':'%%ORDER_AMOUNT%%' }]); window._rsq.push(['_setAction', 'checkout_success']); /*** END EVENT SPECIFIC CODE ***/ window._rsq.push(['_track']); (function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script><!-- RetentionScience end -->
Thats it! Once the above has been completed, your data will start syncing to ReSci. It typically takes 3 - 5 business days for our team to train our AI on the data you provided, complete a thorough QA process and ensure that everything works end-to-end.
When everything is ready to go, your dedicated onboarding expert or client success manager will contact you to confirm that the integration is complete and youre ready to launch your AI powered email campaigns!Looking for help setting up the BigCommerce Transactional Stage and emails? See our .
View ArticleOverview
You can add one or more incentives per email template.Incentives are dynamically populated and automatically tested to findthe highest performer. The goal is to provide the smallest incentive to create the highest amount of conversions.
How to include incentives in emails within Cortex
Once you have added incentives, the incentives will display at the email template level within each Cortex stage.
1. Upload incentives to Cortex.Click here to learn how.
2. Choose incentives to automatically test in the email template.
here
Choose one or more uploaded incentives from the dropdown, or create a new incentive with the link below it.
3. Add merge tags to the email template.
Each email template should have the following merge tags for incentives:
Text: {{ rs_itxt }} Will populate discount type and amount off, e.g. discount type: percentage off, percent discount = 20.0, merge tag = 20%
Code: {{ rs_icode}} Will populate either the one time or multiple code in the email. e.g. one time code = SUMMER16
Details: {{ rs_idet }} Will populate the details listed in the incentive, e.g. Only valid on orders $100 or more.
Image: {{ rs_iimg}} Willpopulatethe url for your incentive image.
The image below shows howthese merge tags coincide with the information you provide in the Incentives menu.
This is what a Cortex email with dynamic incentives looks like in the inbox:
Need help with merge tags? Click here for a list of all available merge tags.
How to include incentives in emails withinExperiments
1. Create an email template under Data Management --> Templates
2. Add the appropriate incentive merge tags:
Text: {{ rs_itxt }} Will populate discount type and amount off, e.g. discount type: percentage off, percent discount = 20.0, merge tag = 20%
Code: {{ rs_icode}} Will populate either the one time or multiple code in the email. e.g. one time code = SUMMER16
Details: {{ rs_idet }} Will populate the details listed in the incentive, e.g. Only valid on orders $100 or more.
Image: {{ rs_iimg}} Willpopulatethe url for your incentive image.
*Need help with merge tags? Find the merge tag article here.
3. Create a Promotional Blast: Cortex Admin --> Experiments --> Promo Blast
4. Turn Incentive "on" and you will see all the incentives you have created. Select which ones you want to be applied to this Promotional Blast.
The image below has $5 off discounts selected on the right-hand side.
5. Click Create New Experiment.
Need help uploading incentives? Click to learn how.
View ArticleOverview
See this article for even more detail.
Our recommendation is to use Import API over the JS.
Email Capture Event Details
The email capture event is used for collecting emails signups through email forms.
Required Fields
record_id:
This record_id should match the record_id being passed via flat file.
If you cannot provide the record_id at the time this pixel is fired, set record_id to an md5 encoding of the email lower-cased (i.e. md5(lowercase(email))).
Note: Shopify and Magento stores will have to set record_id to an md5 encoding of the email lower-cased (i.e. md5(lowercase(email))).
email:
This email should match the email being captured.
Optional Fields
registration_source
full_name
address1
address2
city
state
zip
country
phone
birthday
gender
You can also pass any ReSci User attribute data in our Email Capture Event (Note: This will only be set once on user creation)
/*** EVENT SPECIFIC CODE ***/
_rsq.push(['_setUserEmail', uEmail]);
_rsq.push(['_setUserProperties', {
'record_id':'db-user-id',
'email':'[email protected]',
'registration_source':'source', 'full_name': 'John Smith', 'address1': '123 Test Street', 'address2': 'APT 1', 'city': 'Santa Monica', 'state': 'CA', 'zip': '90405', 'country': 'US', 'phone': '12345678', 'birthday': '1990-01-01', 'gender': 'M'
}]);
_rsq.push(['_setAction', 'email_entered']);
/*** END EVENT SPECIFIC CODE ***/
Email Capture Code Sample
<!-- RetentionScience start -->
<script type='text/javascript'>
var _rsq = _rsq || [];
_rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID
_rsq.push(['_enableOnsite']);
document.getElementsByClassName("contact-form")[0].addEventListener("submit", function(){
var uEmail = document.getElementsByClassName('contact_email')[0].value;
/*** EVENT SPECIFIC CODE ***/
_rsq.push(['_setUserEmail',uEmail]); // replace '[email protected]' with user email being captured
_rsq.push(['_setUserProperties', {
'record_id':'db-user-id',
'email':uEmail,
'registration_source':'source' // OPTIONAL: replace registration_source with source of email capture (ex: footer)
}]);
_rsq.push(['_setAction', 'email_entered']);
_rsq.push(['_track']);
});
/*** END EVENT SPECIFIC CODE ***/_rsq.push(['_track']); });
(function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script>
<!-- RetentionScience end -->
View ArticleFor HTML emails:
The href for the word "Unsubscribe" will be the unsubscribe merge tag {{ unsub_url }}, see below.
For Drag and Drop Email Template Builder:
1. Create a text box and write out your "how to unsubscribe" content.
2. Highlight the word you want to have the unsubscribe link attached to.
3. SelectSpecial links --> unsubscribe --> Unsubscribe From These Emails.
4. Save.
5. Send yourself a test send under a dummy email address and click unsubscribe to ensure it is working properly.
View ArticleThere are two options when it comes to manually unsubscribing users:
Option 1: Unsubscribe users one by one in Microscope ( see here ).
Option 2: Unsubscribe users via list upload.
Unsubscribing users via list upload
Data Management --> Smart Segments --> Upload
Name your list upload and description, and select the import option "Import a comma-separated .csv/.txt file"
here
Your file should include the headers "email" and "date_unsubscribed", see example here:
More info on uploading lists.
Important things to note:
Make sure to have the correct date format: YYYY-MM-DD
View ArticleI had to pause a Smart Blast to make an edit in the template. Can I re-enable the Smart Blast to finish the send?
Short answer - Yes!
Re-enabling a pausedsmart blast will not create duplicate sends, it will finish out the original segment as intended. Extra time will need to be added to the send schedule; this gives Smart Blast a second chance to reach the users skipped while the send was paused.
Don't change your template name!
Cortex reporting groups email performance according to the template name. You won't see all your sends in one place if you edit the email name while it's sending.
My Smart Blast has finished sending, can I re-schedule the template and reach these users again?
Short answer - No!
To re-use the content in acompleted Smart Blast you must clone the template and set up a new blast.
When you build a Smart Blast, all attributes of your Smart Blast are tied to an ID we call the 'Campaign Parameter ID'. All versions (edits) of your email are tied to the Campaign Parameter ID, and the ID never changes.
When Cortex queues up users for a Smart Blast it checks "has this Campaign Parameter ID sent to this user?" If yes, the template will not send. This ensures that users do not receive duplicate sends from a smart blast.
Cloning a Cortex email generates a new Campaign Parameter ID, so this allows us to re-use an older message, sending it a second time to the same list of users.
View ArticleOverview
Nearly the same as " Item Page View " event, but just adding one more line of code for setting of the action.
This event should fire on any "Add to Cart" button on the site, and is what enables our "Cart Abandon" stage for users in Cortex.
Add to Cart Event Details
The add to cart event is used for tracking each item that is added to the shopping cart. The add to cart will be very similar to the item page view, but with one additional call to _setAction.
The item_id should correspond to the items unique record ID within your database.
Insert this code into the/*** EVENT SPECIFIC CODE ***/section:
/*** EVENT SPECIFIC CODE ***/_rsq.push(['_addItem', { 'id':'item_id', // replace item_id with your dynamic item_id variable 'name':'item_title', // replace item_title with your dynamic item_title variable 'price':'item_price'// replace item_price with your dynamic item_price variable}]); _rsq.push(['_setAction', 'shopping_cart']);/*** END EVENT SPECIFIC CODE ***/
Add to Cart Code Sample
<!-- RetentionScience start --><script type='text/javascript'> var _rsq = _rsq || []; _rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID _rsq.push(['_enableOnsite']);
if (condition) { // replace condition with your parameters for checking if a user is logged in _rsq.push(['_setUserId', 'user_id']); // replace user_id with your dynamic user_id variable _rsq.push(['_setUserEmail','user_email']); // replace user_email with your dynamic user_email variable }
/*** EVENT SPECIFIC CODE ***/rsq.push(['_addItem', { 'id':'item_id', // replace item_id with your dynamic item_id variable 'name':'item_title', // replace item_title with your dynamic item_title variable 'price':'item_price'// replace item_price with your dynamic item_price variable}]); _rsq.push(['_setAction', 'shopping_cart']);/*** END EVENT SPECIFIC CODE ***/ _rsq.push(['_track']); (function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script><!-- RetentionScience end -->
Add to Cart Event Data Sample
View Article1. Go to Data Management --> Incentives.
2. ClickUpload Incentive Codes.
3. Choose your incentive from the drop down and import your file.
If you are uploading multiple codes via .csv or .txt file, make sure the header includes:
discount_code
The other accepted column headers arestarts_atandexpires. Any other columns will be ignored, or may produce an error.
Example:
Files without headers will not be uploaded.
**Header is required, paste codes after header.
** Column 'discount_code' is required.
** Columns 'starts_at' and 'expires' are optional.
** Columns 'starts_at' and 'expires' require a date or datetime format beginning with YYYY-MM-DD
4. Click the Upload button.
View ArticleOverview
What is an incentive?A promotion or discount, e.g. 20% off, $10 off, Free Shipping
What type of codes are there?
One code:A singlecode that gets distributed to all - e.g everyone receives SUMMER16 for 20% their purchase.
Multiple codes: Each code will get distributed per user - e.g. each user gets a different code for 20% off their purchase, Jon gets SUMMER17, Erin gets SUMMER18, Bryan gets SUMMER19
How do incentives work?Our machine-learning modelswill determine a price sensitivity score for every customer of your business, and send the minimum incentive needed to get a conversion.
How to upload new incentives
1. Determine theincentive you will be working with (multiple codes or one code).
2. Generate the incentive code(s) in your third party ecommerce platform.
3. Go to Cortex --> Incentives.
here
4. Click Create Incentive.
5. Enter the Name, Discount type, and Discount amount.
The image below outlines relevant entries for a 20% off discount.
6.Fill out the relevant fields for multiple codes or one code.
The image below outlines relevant entries for Multiple Codes.
If you are uploading multiple codes via .csv or .txt file, make sure the header includes:
discount_code
The other accepted column headers are starts_at and expires. Any other columns will be ignored, or may produce an error.Files without headers will not be uploaded.
Example:
**Header is required, paste codes after header.**Column 'discount_code' is required.**Columns 'starts_at' and 'expires' are optional.**Columns 'starts_at' and 'expires' require a date or datetime format beginning with YYYY-MM-DD
The image below outlines relevant entries forOne Code.
In this case, all users will receive one code. Make sure this matcheswith the code created in your ecommerce platform.
7. Optional: Fill out the Details and Incentive Image fields.
In the details text box, you can further describe the type of incentive being uploaded.
Under Incentive Image, upload the relevant image that will dynamically merge with your email content.
Afterwards, click Create Incentive to finish.
How to upload more codes to existing incentives
1. Go to Data Management --> Incentives.
2. ClickUpload Incentive Codes.
3. Choose the relevant incentive from the Incentive pick list and import your .csv or .txt file.
If you are uploading multiple codes via .csv or .txt file, make sure the header includes:
discount_code
The other accepted column headers are starts_at and expires. Any other columns will be ignored, or may produce an error.
Example:
Files without headers will not be uploaded.
**Header is required, paste codes after header.**Column 'discount_code' is required.**Columns 'starts_at' and 'expires' are optional.**Columns 'starts_at' and 'expires' require a date or datetime format beginning with YYYY-MM-DD
Valid example row:example-30OFF,2015-07-01,2015-12-21 00:00:00
4. Click Upload.
Additional Resources:
Need help putting incentives into email templates? Click.
View ArticleGeneral questions about test sends? See: How To Send Test Emails In Cortex.
Quick Test Troubleshooting
My item images aren't showing?- Check under Data Management > Items to view the stored image for each item. - Try refreshing! Images are not part of the email itself and need to be loaded by the viewer each time the email is opened.
I'm not seeing anything for (merge tag)- No user is being simulated for a Quick Test send, and not all merge tags will have available values. Try a Realistic Test.
I never received my Quick Test email- It's possible that your test email landed in your spam or promotions folder.
Realistic Test Troubleshooting
Submit a request Realistic Tests cannot always be generated
Always check your test send report to ensure that a list of valid users were found. Templates without product recommendations cannot generate realistic tests. Failed tests still show a user's email in the subject line.
"We found no users that we could simulate""This Doesn't Look Realistic"- There may not be any users eligible for your stage or template. Review your test send report. Consider the stage rules and filter conditions on your template if no users could be simulated.
My item images aren't showing?- Check under Data Management > Items to view the stored image for each item.- Try refreshing! Images are not part of the email itself and need to be loaded by the viewer each time the email is opened.
I'm not seeing anything for (merge tag)-A value may not be available for this user. Check microscope or your own data to see if we have the right values for that user or item.
I never received my RealisticTest email- Realistic Tests may take up to 60 minutes to process. - Your test email may have landed in your spam or promotions folder.
Ruled out these options? for to tech support assistance.
View ArticleLegacy Cortex users, please visit the Legacy Cortex section here.
Sending test emails is an important part of setting up an email marketing campaign. This article will walk you through the test send mechanisms in place for Cortex emails.
Testing Within Cortex
In your Cortex Admin page, select the stage that contains the email you would like to test send. Then click on the dropdown for the desired email and then click "Send test".
A test send can also be sent while editing an email by selecting "Send test".
When you click the "Send test" button you'll see the test send menu, which allows you to choose either a quick or realistic test send.
Quick Test Sends
Quick test sends provide a rough, but accurate view of the individual emails you create in Cortex. Product recommendation merge tags are not populated intelligently, and other merge tags are filled with default attributes. This will provide an accurate view of your email layout and will allow you to test formatting, display, and link structuring.
Keep in mind:if you have product recs in the email, the recs that will display will be the first items listed in your items feed. If you see recs that are set to inactive or not available, don't fret! Those are just placeholder images for your testing and will not show up in the actual sends once pushed live!
Realistic Test Sends
Realistic test sends provide an accurate look into the real emails your users are receiving. From all your eligible users an example recipient will be chosen, and the merge tags will be populated as if that user is receiving that email. Realistic test sends will contain the sampled user's email address in the subject line, and will be accompanied by a realistic test send report summarizing the sampled users and reporting any error in the process.
Always check your Test Send Reports.
Note:The realistic test send function requires product merge tags to work correctly. If your template will not render a realistic test send you may need to add some merge tags like {{rs_rn1}}
View ArticleOverview
Zapieris an integration platform that is used to glue APIs together. The primary objective of companies using Zapier is to allow business users to build workflows and actions across platforms that are disconnected from each other. One example is sales users who need an email platform like Hubspot to automate lead generation from a CRM like Salesforce.A current use case for Zapier would be to integrate 3rd party popup providers with ReSci.
On Zapier there are triggers and creates. Atriggeris asourceof data. Acreatedestinationofdata from a trigger. AZapis a mapping betweensources and destinations.
This article will cover
Setup:Walk through how to setup and use the ReSci Zapier App
Data:Discuss the data and APIs available to Zapier
Usage:Walk through an example of how to create a Zap within Zapier
Setup
The ReSci app is currently in Beta and is invite only. Please email [email protected] to request access. Please include the email of the person who will be creating the "Zap" in the request. We will respond with the ReSci API key (required below) after we have sent the invitation for access.
You will need a trigger with user information to setup a Zap with ReSci. Please see theUsagesection below for popular email capture providers that can connect to ReSci with Zapier.
After you have been invited to use the ReSci app and you have chosen a source for user capture, you can now create a Zap (For details on creating a Zap, see this article ). Select the ReSci app as an "Action"
article
3. After setting up the trigger, choose the "Create User" Action in our app. Click Save + Continue
4. Click Connect
5. Paste in the ReSci API key then click "Yes, Continue"
6. Click "Save + Continue"
7. Map the fields from the trigger to ReSci
8. Click "continue"
9. Verify the test and click "Send Test to ReSci
10. Click Finish after the test succeeds
11. Name your Zap
When you turn the Zap on you are done!
Data
Currently, the ReSci Zapier app will access our User create API. Below is a table of how the Zapier app leverages the ReSci API for the "Create User" action
Zapier <> ReSci Create User
Required
Default Value
Notes
id
yes, but optional
md5 hash of email
If the ID is not sent, the Zapier app will automatically set the ID to the MD5 hash of the email
yes
full_name
no
User's full name (first and last).
address1
no
address2
no
state
no
zip
no
country
no
phone
no
birth_year
no
gender
no
Values
mfor male
ffor female
registration_source
no
The source of the user's registration typically used for user segmentation
birthday
no
format must be YYYY-MM-DD
send_transactional_welcome
no
true
When true, an email is sent to new users when there is an available template in the Welcome stage. When false Welcome emails will not go to new users. The default for this setting is true.
Usage
Email Capture
Currently, the primary use for the Zapier ReSci app is for email capture. Popular email capture forms that can be integrated with the ReSci app are:
Sumo
Unbounce
Typeform
To setup a Zap, please see theSetupsection above for a step by step walkthrough
Welcome Email
Typically, when capturing emails for new users you will want to send a welcome email. ReSci supports this with our welcome stage. Please see thisfor welcome stage setup.
View ArticleThe Template Builder's mobile layout is a fixed system and is pretty simple once you get used to it. We have two controls "do not stack" and "hide", which allow you to change how your layout appears on desktop and mobile email clients.
Stacking Content on Mobile
When desktop is converted to mobile it will stack all of the content within your row into a column, then it will stack the next row, progressing through your email.
With the new "do not stack on mobile" control, a row can be fixed, so it displays the same on desktop and mobile.
To access the "do not stack on mobile" setting, hover and click on a "Structure" block within the template.
The "do not stack on mobile" setting will appear in the "Structure" properties menu on the right.
Hiding Content on Mobile/Desktop
At thecontent level, you can select individual images or other objects, and hide them on either mobile or desktop display. This allows you to substitute different image ratios for images on desktop and mobile.
Step 1
Select the object in your email
Step 2
Select the hide control for either Desktop or Mobile display
View ArticleYou're on an acquisition tear byutilizing Data Science to gain you high value customers, but how do you know these new acquisitions are actually generating revenue for your business?
This questions is at the heart of every marketer's acquisition efforts. The key to understanding this information at a more meaningful level is to correctly tag incoming users via a registration source.
Ok, but what's a Registration Source?
A registration source is a way of tagging a user with data that helps us track this user's opt-in to email marketing. If a user clicks on your FB ad, arrives at site and opts in or makes a purchase we should tag that user with one of the following:
FB Ad
FB Data Science Ad
Facebook - Dress Ad
Each one of these names has positivesand negatives. We'll discuss how to frame the proper tagging later on in this article.
Now that we know what a registration source is we can get into why this is important.
Why should I spend the time to do this correctly?
One of the most important business objectives in any e-commerce business is to drive traffic to the website. Law of e-commerce: Increased traffic + Good Product + Easy Checkout = Increased Revenue
Now this equation does a great job of breaking down how an e-commerce business can succeedbut it misses a crucial part of the cycle which is AcquisitionSpend. If a specific acquisition channel is pushing spammers, bots, or fraudulent users to your site, you're paying for leads that are actually adding cost without generating revenue. Properly setting up a registration_source program will allow you to identify where to spend your advertising dollars and where to decrease your spend. Remember: added setup now means accurate actionable data later.
On top of being able to analyze your acquisition channels for effectiveness you can now track these users and differentiate the messaging. Someone who comes in from a sweepstakes is more likely to stay a subscriber by welcoming them in the correct way.
Modern Citizen did a great job of utilizing the registration source segmentation in order to explicitly welcome new users coming from a sweepstakes.
this help desk article
By correctly tagging these users as they opted-in, Modern Citizen was able to segment the list and deliver branded content to these new sweepstakes users simply by adding a new Hero Image at the top of the email. They were also able to test three different incentives (No Incentive, 10% off and Free Shipping) to gather some information on how incentivesensitive users from this sweepstakes are.
Normally sweepstakes users tend to be disengaged and underperform with brands because of the nature of the opt-in, the possibility of winning the sweepstakes. Simply by personalizing this first message they matched the KPI performances of their organic traffic users, and also learned that not offering an incentive actually performs better than offering free shipping.
Personalizing the experience goes a long way to increased engagement and retaining valuable customers.
Ok, Ok, now how do I set this up?
With a little foresight and process setup you can make tagging new users via a registration source, simple and automated. Below we'll go through the Pros and Cons of nomenclature, and two ways to set reg source, automated and manual.
Nomenclature
First let's determine how to name each registration source.
Be sure to always approach this question from a reporting standpoint. The end goal is to make sure we know how well these acquisition channels perform. There are three basic ways of tagging a registration source, each with pros and cons
Reporting Question
Example Tags
Pros
Cons
I want to know how every individual ad performs
FB Ad - Product A
FB Ad - Value 1
FB Ad - Value 2
Granular Reporting on performance of ads
Easily remove ads that underperform
Lots of new registration sources
Cumbersome to implement
Google Analytics can do this through UTM tagging
I want to know which Ad locations (site based) perform well
Google Ad
Google Organic
Able to see which sites drive the most users
Parse down on specific channels that underperform
More actionable dataset
Easy setup
No additional information on what informs the channel
Only high level data (not granular enough)
I want to compare specific acquisition strategies
Facebook - Ready To Buy
Facebook - HCLV
Sweepstakes
Able to see which acquisition strategies perform best
Still able to make decisions on channel
Gives you insight into which Data Science segments perform better
Medium involvement for setup
Once you decide how you want to tag users based on a registration source, it's time to setup the process.
Process 1 - Manual List Upload
This process is for anytime you get a list of emails from a place that can't be captured electronically. Some examples are Trade Shows, Sweepstakes Partners, In-Store Demos or (tsk tsk) Purchased Lists (Don't do it! Not even once!).
Best practice is to run a check against your current user base and make sure that thethe list is composed of only new users.
Follow the instructions in and be sure to add the proper registration source to each user, based on the nomenclature above
Upload the list - and voil, you now tagged all those users with a registration source
You can now segment these users to make sure that
Process 2 - Automated Setup - Best to Get Some Tech Resources
This process will allow you to automatically tag users as they signup for your newsletter. You'll definitely need some technical assistance if you're not too savvy with JavaScript or API calls.
Make sure that all of your acquisition channels are UTM tagged so that you can pull a source tag from the UTM variables
Ask your technical support to incorporate the UTM source variable into a JS wave as a registration source call (this can also be done via out events API)
Once an email is entered be sure that the email, and the registration source are captured in the JS wave or in the events API call.
Your new user is now captured with the a registration source based on the ad that he/she clicked.
Congratulations! You're now all set up to segment, evaluate and make decisions about your acquisition channels!
View ArticleOverview
Our event tracking is flexible and we allow our clients to make up events and then use for segmentation if they want to. e.g.:
"I want to track when people are signing up or looking at swatches instead of furniture".
"I want to track people who watched a webinar (viewed a specific page) and follow up with special abandons for them".
"I want to track people who have submitted a specific form or reached a specific step in the signup process"
All you have to do for this is fire the Custom Event wave code (minus the 'setParams' line), and use whatever action name you want for the 'setAction' call.
Custom Event Details
In addition to our standard events tracking, we are also able to track custom events. Two calls will need to be added to the/*** EVENT SPECIFIC CODE ***/section:
Call_setActionand provide a name (snake case string) as the value. The action name can only use lower case letters, space, underscore, and dash. No upper case letters or numbers are allowed.
Call_setParamsand provide any useful parameters as the values for this custom event
/*** EVENT SPECIFIC CODE ***/
_rsq.push(['_setAction','category_view']);// custom event
_rsq.push(['_setParams', {'id':'category_id','name':'category_name'}]);// custom event params/*** END EVENT SPECIFIC CODE ***/
Custom Code Sample
<!-- RetentionScience start --><script type='text/javascript'> var _rsq = _rsq || []; _rsq.push(['_setSiteId', 'site_id']); // replace site_id with your static Site ID _rsq.push(['_enableOnsite']);
if (condition) { // replace condition with your parameters for checking if a user is logged in _rsq.push(['_setUserId', 'user_id']); // replace user_id with your dynamic user_id variable _rsq.push(['_setUserEmail','user_email']); // replace user_email with your dynamic user_email variable }
/*** EVENT SPECIFIC CODE ***/_rsq.push(['_setAction', 'category_view']); // custom event_rsq.push(['_setParams', {'id': 'category_id', 'name': 'category_name'}]); // custom event params/*** END EVENT SPECIFIC CODE ***/
_rsq.push(['_track']);
(function() { var rScix = document.createElement('script'); rScix.type = 'text/javascript'; rScix.async = true; rScix.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'd1stxfv94hrhia.cloudfront.net/waves/v3/w.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(rScix); })();</script><!-- RetentionScience end -->
Reserved Action Names
The following actions are reserved. Pleasedonottry to use these names as custom actions.
click
view
email_open
email_click
shopping_cart
checkout_success
search
View ArticleBackground
Retention Science's data schema has been optimized to power Cortex AI performance and ensure our client's success. Whether you are setting up Flat File Imports to feed us your data or already installed our Shopify or Magento plug ins, this guide will help your understand our data schema and key details. (You can also watch our YouTube videos for similar explanations of data, JS, and other topics)
How is this Data Received?
Magento/Shopify clients
Categories/Items/Users/Orders/Order_Items are "magically" pulled from the respective systems via our standard code installs
Subscriptions/Item Reviews/User Wish Lists would have to be FTPed over
For things like Subscription data we may have additional resources to support you, such as our Recharge Script which covers 90% of the DEV work for a Recharge integration!
Custom Integrations
All data would be sent via FTP as "Flat Files"
simple tsv files
Usually our clients get their query setup to extract data in a certain manner, then schedule a job to execute the query and transfer the file to our FTP
Though each client's execution of this task is going to be different depending on tech infrastructure
Data API
This method is not really used to fill large amounts of historical data, but can technically be used to add orders/users to our system in real time
You can reference our Data API documentation here
What does this data do for you?
Items
These would be the products that you sell and want our AI to optimize as recommendations to your users in emails.
Standard e-commerce clothing company: Shoes, Shorts, Tops, etc
Subscription Business: The items that can be given in a subscription offering/box
Context on select fields
active
Controls whether items are allowed to be recommended in your emails, effectively serving as your "on" and "off" switch for items
item_url
If an item is recommended in an email, it will typically need to be clicked upon and this URL is where the user will be directed to
item_type
How items can be grouped together for use in our item_targeting feature (similar to Categories), and for special AI customizations this field could be leveraged to serve certain items only to certain users
e.g. If item_type = "Canada", these items would only be served to Users that also have a corresponding datapoint tagged "Canada"
If you are a Subscription business offering stand-alone products vs subscription products (e.g. monthly box), you may leverage this field to distinguish between your item types
discuss with your Onboarding Engineer how to best set this up
image_list
Items will be in your emails, so make sure they look good and you use the best/consistent images
Users
These are all of your purchasers and newsletter subscribers, essentially a list of every person that can and cannot be emailed
e.g. even if a person is unsubscribed, data about them is still valuable and they may end up browsing onsite and giving our AI information
Context on select fields
birthday
Required to use Birthday stage in Cortex
registration_source
Required to get lead scoring features inside of Cortex
unsubscribe_link
Typically not needed because RS has it's own unsub link, but clients looking to be the unsub system of record can use their own instead
custom fields
We can support custom attributes and dynamic segmentation of these values, but it does require additional setup/implementation on the RS side
Contact your Account Executive if you would like to add these to your Cortex platform
Categories
Similar to "item_type", serves to help our AI models understand how your items are grouped together and enables you to use category based recommends in Cortex
e.g. a makeup company may have Categories of "eyelashes", "face", "lipstick", etc
Only consideration is that the record_id in this table is what will be used in Items/Order_items columns when designating what categories Items fall into
Orders
The information about what people have bought, fairly standard
Context on select fields
user_record_id
Be sure this matches your record_id in the Users file
order_status
In your order data you may have various status strings "returned", "canceled", "pending", etc.
You have the option of telling RS which ones should be revenue attributing in our dashboard vs not
e.g. make sure "canceled" orders don't count towards any $$$ totals
Your Onboarding Engineer would then make sure your system is setup correct based on your unique statuses
For Magento/Shopify this is already automated
Order_Items
Similar to Orders, but even more straightforward as this is just giving more details and quantity of the orders
Just make sure your order_record_id maps properly to your Orders file and item_record_id maps properly to your Items file
Subscriptions
Only useful for companies that are pure Subscription (e.g. only offering a monthly box) or Hybrid Subscription (box + one off products)
Required if you want to be on our "Subscription Cortex", which is a specialized version of Cortex that caters to needs of Subscription companies
Think of this as a subset of the Users table as all Subscribers here would exist in the Users table, but everyone in the Users table would not exist here
e.g. not everyone in the Users table has bought the product
Context on select fields
user_record_id
Be sure this matches your record_id in the Users file
status
This can be used as a flexible field for segmentation, as you can put any value you want and group your subscribers into them for specific targeting
Typically values such as "Active", "Paused", "Canceled"
trial
If you don't do any trial offerings, just default to 0
churned
Typically related to the status of "Canceled", set to 1 if the subscription is terminated
Item Reviews
Not required, consider this a bonus table to make our AI even smarter if you have the data!
Most of these fields are straightforward, and similar to other tables just make sure that user/item record_ids properly link to other files
User Wish Lists
Similar to Item Reviews in that it is not required, but can enhance performance of our Price Drop and Back in Stock campaigns
Data would essentially tell us what Users are have expressed explicit interest in what items, and fields are straightforward similar to item reviews
View ArticleTable of Contents
Overview
Important Considerations for All Files
What are the Standard File Schemas?
What does each Data Filetype do for You?
Following the File Naming Convention
Sending Historical Data
Daily Files for Traditional E-Commerce Businesses
Daily Files for Subscription Businesses
Overview
SFTP (SSH file transfer protocol) is used to securely transfer files to Retention Science. All files should beloaded to the /uploads folder.
The types of data files that are typically sent to us include daily files (such as items, orders, users, etc.), or historical files that help power our various data science models.
Background
Retention Science's data schema have been optimized to power Cortex AI performance and ensure our client's success. Whether you are setting up Flat File Imports to feed us your data or already installed our Shopify or Magento plug ins, this guide will help your understand our data schema and key details. (You can also watch our YouTube videos for similar explanations of data, JS, and other topics).
How is this Data Received?
Shopify/BigCommerce/Magento clients
Categories/Items/Users/Orders/Order_Items are "magically" pulled from the respective systems via our standard code installs
Subscriptions/Item Reviews/User Wish Lists would have to be FTPed over
For things like Subscription data we may have additional resources to support you, such as our Recharge <> ReSci integration, that will make pulling subscription data from Recharge into Cortex easy!
Custom Integrations
All data would be sent via FTP as "Flat Files"
simple tsv files
Usually our clients get their query setup to extract data in a certain manner, then schedule a job to execute the query and transfer the file to our FTP
Though each client's execution of this task is going to be different depending on tech infrastructure
Data API
This method is not really used to fill large amounts of historical data, but can technically be used to add orders/users to our system in real time
You can reference our Data API documentation here
View ArticleTable of Contents
Overview
Installing the Friendbuy Plugin
Enabling the Integration
Integration Data
Overview
Friendbuy is a SaaS platform powering referral programs for the worlds most recognizable e-commerce companies.
The Friendbuy x ReSci integration allows you to have access to user's referral data for use in ReSci campaigns.
Installing the Friendbuy Plugin
Navigate to the Integrations Center in Cortex by navigating to "Cortex" and then "Integrations"
Search for Friendbuy or click on the Friendbuy plugin to open the Friendbuy plugin page
Click "Install" and wait for for the plugin to complete installation
Once installed, click "Generate a new key" under the "API KEY" section and share this key with your account rep at Friendbuy this will be used to enable the integration and for authentication
Enabling the Integration
Retrieve API key from the Retention Science Friendbuy Plugin in the Integrations Center
VisitFriendbuy, then navigate to Settings > Configurations > Integrations > Retention Science
Enter the API key generated from Retention Science
Select a Default Widget for generating Personal URLs (PURLs)
Create a Welcome Stage email and enable it to send these users an immediate transactional Welcome message!
Integration Data
Friendbuy's integration with ReSci currently supports the below custom user attributes that can be used as merge tags to insert dynamically into emails or as filters for creating segments. Please see below for those supported attributes:
User Custom Fields
Field Title
Data Type
Description
personal_referral_link
string
customer or email PURL from the specific Friendbuy campaign configured for the integration)
total_conversions_generated
integer
the number of referred friend purchases generated by an advocates referrals for all campaigns
total_rewards_earned
integer
the number of approved rewards an advocate has earned through the reward program for all campaigns
View Article"I hear my CSM talking about 'data science model confidence'. What does that mean?"
Our data science models look for statistically significant sample sizes and a convergence of results to build a level of confidence. If Cortex sends a lot of something and it performs consistently, we will have a high level of confidence in that level of performance. If Cortex gets a bunch of new content it will have no confidence and will begin with an even split test.
The graphs below show how our confidence level changes over time when new content is introduced. For the subject lines below, the x axis represents the expected performance range (open rate), and the y axis represents confidence. As more sends go out, the expected performance narrows while confidence grows.
Image 1: The subject line in red is freshly introduced. Cortex assumes average performance, but with very low confidence.
Image 2: As performance resolves through a month of sends Cortex's level of confidence in the new subject line grows. The expected performance range has begun to narrow.
Image 3: The image below shows one older subject line with high confidence, but low performance. To the right are three newer (higher performing) subject lines with lower confidence.
This data is used in Cortex to determine the highest performing content, which Cortex then uses to split and prioritize send volume.
View ArticleGmail "clips" emails greater than 102KB in size. When a message is clipped, you will see this at the bottom of the email.
An email message is defined as the underlying code that makes up the email. An email's code includes:
Text
HTML
CSS Styling
Links
Images
Etc.
One of the biggest reason emails are clipped is from having too much content. We recommend removing unnecessary content from your email templates.
To test this, you can send yourself an email, download it through an ESP, and check the size on your desktop. Please note, before making any edits to your template create a copy to save valuable information.
Other Reasons:
Sending multiple emails with the same subject line.Gmail will often combine emails with the same subject line into a single email known as "threads". For example, if a customer received two emails with the same subject line "100% OFF on all Appliances", the emails will be "threaded" causing it to exceed the 102KB threshold.
Copy and pasting content from an external source.By including pasted content from external sources such as a blog or word-processing program, hidden formatted code can be injected into your email template.
Questions:
How is a 1KB measured? - Every character of code makes up of about 1-2 byte(s). 1KB = 1000 bytes. Take a look at the code snippet below:
<h1>Welcome to ReSci</h1> (This code snippet contains approximately 50 bytes)
How to check the file size of an email message?
Step 1) Download the email message
Step 2) Look for the download size of the email message.
View Article