Welcome to Canopy Labs!

Get ready to have a complete view of each of your customers and their unique journey with your business! Our platform automatically aggregates your customer data from a variety of sources, such as transactions, emails, web browsing, and support. This holistic view gives you a deeper understanding of your customers so you can engage them more effectively, improve their experience, and optimize conversions.

Onboarding Overview

What’s involved in onboarding? We break our onboarding process into two parts – Planning and Integration - designed to get you up and running as quickly as possible, while setting everyone up for long-term success.


  1. Picking your team
  2. Determining the KPI
  3. Discussing success
  4. Mapping out a timeline


  1. Gaining platform access
  2. Choosing a unique Customer ID
  3. Enabling web tracking
  4. De-anonymizing your customers' web activity
  5. Integrating your existing data through apps
  6. Integrating your existing data through flat file transfer
  7. Updating your Domain Name System (DNS) settings


Gaining Platform Access

Who should be involved: Project sponsor, Project lead

Before we do anything, we’ll need to get you set-up on the Canopy Labs platform. If you already have a trial account – congratulations, you’ve already completed this step! We’ll upgrade your account to match your new plan. Meanwhile, you can proceed to the next section.

If you didn’t start with a trial account don’t worry. Getting set-up is easy.

  1. Go to:
  2. Select “Sign up now”
  3. Choose a username that best fits your organization (i.e.: “canopylabs” instead of “Adam123”)

  4. Choose “Trial” plan – don’t worry, we’ll upgrade your account to match your new plan.

  5. Finish by clicking “Sign Up”

You will receive an email confirmation almost immediately. If you don’t see it, check your spam. Still don’t see it? Contact us.

Once you receive the email confirmation, login and take a look around. It won’t look like much until your data loaded, so hang in there!

TIP: you may want other people in your organization to have access to your Canopy Labs account. Not a problem. Just send us a list of their names and emails and we’ll give them unique login credentials.

Choosing a Unique Customer ID

Who should be involved: Project lead

The next step is deciding how we should identify your customers in the platform. It’s likely you have a multitude of identifiers for any one customer, such as:

We need to choose one, primary identifier for all your customers. The best choice is often whichever is most prevalent in your data. Here are two examples to help you decide:


You assign a CRM number for all potential and existing customers, but you’re missing email addresses for most people. In this case, it’s best to choose CRM number as your Customer ID since it covers the majority of your customers.


Maybe you have a large subscriber base, but only assign a CRM number to people how complete a purchase. In this case, it would be best to choose email address as your Customer ID so you can better track both purchasers and potential purchasers.

Still not sure? Don’t worry. Contact us and we’ll figure it out together.

Enabling Web Tracking

Who should be involved: Technical lead

If web tracking is part of your Canopy Labs plan, you’ll soon be able to see how individual customers browse your website. Our script will track page visits, but this can be extended to include custom events. A few examples custom events are:

Excited yet? Us too. To start tracking your web page visits, you will need to install our web tracking script. Here’s how:

  1. Log in to the Canopy Labs platform (
  2. Go to the Apps tab
  3. Click on the “Web Analytics” app
  4. Follow the instructions to configure your tracking script:
    • Identify your main domains and any relevant sub-domains we should track.
    • Select your Customer ID type.
    • Provide some additional details about your site to help us de-anonymize more users.
  5. Click “Save Settings”. You should now see your unique Canopy Labs web tracking snippet. Now you just need to customize it and install!

Customizing Your Web Tracking Snippet

Note the section in your snippet that says "REPLACE_WITH_CUSTOMER_ID". You have two options for replacing this section:

Your script is now ready to be installed!

Installing the Snippet on Your Site

Now that your snippet is customized you can now install it on your site. You can do this two ways:

  1. Add it to the end of your website’s closing </body> tag. Remember that the snippet needs to be live and firing on all pages.
  2. Use a tag manager, such as Google Tag Manager. Our snippet works in a very similar fashion to the Google Analytics snippet.

How do I know if my snippet is firing correctly?

Note: The instructions in this section assume that you’re using Chrome as your web browser.

  1. Open a page on your website in your browser and right-click on the screen.
  2. Select Inspect. You will see a toolbar appear at the bottom of your screen.
  3. Click on the Network tab, then refresh your page. Within the Network tab you will now see the Name, Method, Status, Type, etc. for all of the elements loading on your webpage.
  4. Click on the Name column to sort alphabetically, then scroll to the top of the list.
  5. Look for cl_sp.min.js in the Name column.
  6. Next to cl_sp.min.js you should see 304 or 200 in the Status column.
  7. If you see any other status (or the .js code is not found), your tracking code may not be firing correctly. Please contact your account rep for further support.

TIP: Another way to tell if your snippet is working, is by logging into the platform 24 hours after installing the code. If you select the Customers tab you should see some Customer IDs with values under the NUM WEB ACTIONS column.

De-anonymizing Your Customers' Web Activity

Who should be involved: Project lead

While we can track anonymous visits to your website, our goal is to help you build identifiable customer journeys. This means we need to tie known users to their web actions. We do this by adding a query string to the links in your emails. We call this string the CLUID (short for Canopy Labs Universal Identifier.) It looks like this:


TIP: CUSTOMER_ID gets replaced with each user’s unique ID.

So if you were sending an email to, (whose CRM account ID is 1A2B3C4D,) linking him to this page: you would modify the URL in your email to the following:

How do I automatically include my Customer_ID in the CLUID string?

When it’s time to replace CUSTOMER_ID with the actual user ID it wouldn’t make sense to do so manually - and you don’t have to!

Different ESPs have different ways to dynamically pull in subscriber information. You’ll use what is commonly called a “personalization string,” but are sometimes referred to as “merge fields” or “substitution strings.”

TIP: If you personalize your subscribers’ first names in emails, you are likely already familiar with personalization strings!

Below are a few examples of how to append the CLUID, if your chosen Customer ID is email, to a link:

For Constant Contact this only applies to XHTML emails made using the Custom Code editor. If you are using a pre-built template, or designing an HTML email, please reach out to us.

TIP: Think you got it? Deploy a test email to your Canopy Labs rep so we can ensure the CLUID is working properly.

Using a CRM ID instead? Don’t see your ESP here? Try searching your ESP’s support documentation for the personalization string they use to populate data fields.

Still having trouble? Let us know.

Integrating Your Existing Data Through Apps

Who should be involved: Project lead

Canopy Labs makes it easy to connect your third-party data sources with some nifty apps.

  1. Log in to the Canopy Labs platform (
  2. Go to the Apps tab
  3. Select the relevant app and follow the instructions

NOTE: some apps have some tricky steps – sorry! We’re working on amazing troubleshooting documentation, but until then, if you get stuck we’re here to help.

Integrating Your Existing Data Through Flat File Transfer

Who should be involved: Technical lead, Project lead

No app? In these cases, you’ll need to provide your data via flat files. We prefer .CSV files and it’s best to automatically upload them to our SFTP server daily.


Regardless of what industry you’re in, we’re looking for the following:

You’ll want to export the relevant data in a usable format from your data sources. Please see industry-specific examples of the data schemas and formats we’re looking for:


You’ll need to export and upload files to the “incoming” folder on a shared server (SFTP). We like to use FileZilla. You can download it free here.

You’ll need the following to connect:


You won’t want to manually transfer your data files to our SFTP every day. That’s tedious for you and hazardous for any initiatives that rely on up-to- date data. Instead, you should automate the transfers.

We thought about writing some tips, but if you’re a Windows user this handy guide says it best.

Updating Your Domain Name System (DNS) Settings

Who should be involved: Technical lead

In order for us to send emails on your behalf, we need you to verify your sending domain by adding Sender Policy Framework (SPF) and DomainKeys Identified Mail (DKIM) records.

TIP: You only need to complete this step if you plan on sending emails through Canopy Labs.

To add the SPF and DKIM records for your sending domains, you’ll need to add records of type ‘TXT’ through your hosting provider, domain registrar, or DNS provider. We recommend referring to your provider’s help documentation for specific information on adding TXT records.

TIP: Not only will authenticating your domain allow us to send emails on your behalf, authentication also builds your organization’s overall sending reputation. A strong sending reputation means your emails will be delivered faster and avoid subscribers' spam filters.


If you don’t have a SPF record, you’ll need to add one for your domain. At a minimum, the value should be the following if you’re only sending mail through Canopy Labs:

v=spf1 ?all

If you already have an SPF record, the format for including multiple domains is as follows:

v=spf1 include:spf.mandrillapp ?all


Missing DKIM? Add a new TXT record with the name:
(just replace with your actual domain name.)

The value for the record should be one of the options listed below. There are two options because the record contains semicolons and some DNS providers escape semicolons for you while others require you to do it when setting up the record.

With semicolons escaped:


Without semicolons escaped:



After adding or modifying TXT records it’s a good idea to check that they’re working as expected. There are some great free tools to help you verify.


Once your DKIM and SPF records are in place you’ll need to complete the authorization process. It’s super simple:

  1. Notify us once records are created. We’ll dispatch a verification email to you from our email service provider.
  2. Please forward that email back to us. We know that might seem strange, but you do not need to open or click the email (though you can if you want.) We just need this exchange to officially authorize Canopy Labs to send mail on using your domain name.

That’s it! Questions? Send them here.


  More information to come. For now, your Canopy Labs rep will walk you through this section directly.

Personalizing your Email Campaigns

Jinja is a templating language that, when used with Canopy Labs' campaign wizard, allows you to create dynamic emails.

For full documentation, please click here.

Working With Variables

We can use Jinja to dynamically output values. For example, in an email subject line, we may want to add the recipient’s name.

Hello, {{ first_name }}

In the above example, the variable first_name is a string. You may also work with other variable types, such as dictionaries and lists.

A dictionary is a set of key/value pairs.

demographics = {
    'first_name': 'John',
    'last_name': 'Doe'

We can output a value from a dictionary. For example, using the dictionary above,

Hello, {{ demographics['first_name'] }}

would return

Hello, John

A list is a collection of values.

recommendations = [

To output the value of an element in a list, type the name of the list followed by the element index in square brackets. Remember that indices are zero-based: the first element has index 0, the second element has index 1 and so on. Using the list above,

You might like this product: {{ recommendations[0] }}

would return

You might like this product: product_1


Now that we are able to output variables from different data types, we may want to format them a certain way!

You can include a filter when outputting a value by appending | followed by the filter name.

Capitalize the first letter of an output string
    {{ first_name | capitalize }}

    john --> John
Capitalize the first letter of all words of an output string
    {{ product_name | title }}

    Hello there! --> Hello There!

See here for a full list of builtin Jinja filters.

Conditional Statements and Iteration

Along with outputting simple values, you may want to add logic to your email templates. You can do conditional statements and iteration.

A conditional statement allows you to include or exclude content depending on the recipient’s data.

{% if additional_data['is_premium'] %}
    Thanks for your support!
{% endif %}

A conditional statement consists of an if statement, an optional elseif statement, followed by an endif statement.

Iteration allows you to loop through a list and perform the same action on every element in that list.

{% for recommendation in recommendations %}
    {{ recommendation['product_name'] }}
{% endfor %}


Adding an unsubscribe URL

You can use the variable unsubscribe_url to include an unsubscribe link to your emails:

Click <a href="{{ unsubscribe_link }}">here</a> to unsubscribe.

Note that this is a unique variable available to all email templates.

Including first name in subject line

Thanks for stopping by{% if first_name %}, {{ first_name }}{% endif %}!
Thanks for stopping by, John!
Thanks for stopping by!

Formatting a number

The following command formats a number to have two decimal places:

    {{ %0.2f | format(23) | float }}

Showing a list of recommendations

    {% for recommendation in recommendations %}
            <a href="{{ recommendation['product_url'] }}">
                <img src="{{ recommendation['image_url'] }}" />
    {% endfor %}

You may want to only show two recommendations for a certain email:

    {% for recommendation in recommendations[:2] %}
            <a href="{{ recommendation['product_url'] }}">
                <img src="{{ recommendation['image_url'] }}" />
    {% endfor %}