---
updatedAt: 2026-04-07T10:11:23.000Z
agentTools:
  siteIndex: https://developers.liveramp.com/llms.txt
  projectIndex: https://developers.liveramp.com/authenticatedtraffic-api/v1.0/llms.txt
---

# Email Service Providers (ESPs)

Enabling ATS functionality with your ESP of choice.

You may already have a large pool of identified users in your ESP. To enable ats.js to leverage these identifiers, you will need to modify your standard newsletters or transactional emails to pass an identifier when users click through to visit your site.

[block:callout]
{
  "type": "info",
  "title": "Email Newsletters vs. Direct Login",
  "body": "It's always best to leverage direct logins from your users. This gives the best transparency into what data is being processed on their behalf and also ensures that you have the correct user identity, as emails can be forwarded to individuals other than the original recipient."
}
[/block]

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/fbf13ea-Campaign-Monitor-logo1.png",
        "Campaign-Monitor-logo1.png",
        440,
        180,
        "#140e2a"
      ]
    }
  ]
}
[/block]

[block:api-header]
{
  "title": "Sending Emails to ats.js with Campaign Monitor"
}
[/block]

1. In your campaign design view, add a new link or modify an existing link.

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/dca37a3-Screen_Shot_2020-04-24_at_2.54.44_PM.png",
        "Screen Shot 2020-04-24 at 2.54.44 PM.png",
        995,
        750,
        "#c6bfbb"
      ]
    }
  ]
}
[/block]

2. Add a link as usual, but make sure to add an additional query parameter (remember what you use here!) and then add `[email`] to represent a dynamically-populated representation of the user's email address. For example:

`https://authenticated-traffic-solution.com?user_id=[email]`

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/15c9914-Screen_Shot_2020-04-24_at_2.57.12_PM.png",
        "Screen Shot 2020-04-24 at 2.57.12 PM.png",
        659,
        104,
        "#9da1a4"
      ]
    }
  ]
}
[/block]

3. Click the green check mark to save your link.

4. Send a test email or preview the email to ensure that your link is working as expected. Your link may appear differently if you preview the initial target, but Campaign Monitor will redirect the user to the website you specified, populating the email parameter along the way.

When you preview or test the email and click through the link, you will see URL-encoded `john@domain.com` email address on your site. This email would be replaced with your recipient's actual email address when you move out of testing.

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/3061f73-Screen_Shot_2020-04-24_at_3.02.41_PM.png",
        "Screen Shot 2020-04-24 at 3.02.41 PM.png",
        491,
        36,
        "#323235"
      ]
    }
  ]
}
[/block]

5. Now, you need to configure ats.js to detect and resolve email addresses passed through Campaign Monitor. Modify the configuration below to use your placement ID and the query parameter you used when setting up your link(s).

[block:code]
{
  "codes": [
    {
      "code": "{\n  \"placementID\": 9999,\n  \"storageType\": \"localStorage\",\n  \"detectionType\": \"url\",\n  \"detectionSubject\": \"email\",\n  \"logging\": \"error\",\n  \"urlParameter\": \"user_id\"\n}",
      "language": "javascript",
      "name": null
    }
  ]
}
[/block]

6. Test once more to be sure that ats.js is picking up the email address from the URL and you're all set!

[block:api-header]
{
  "title": "Sending Emails to ats.js with ConvertKit"
}
[/block]

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/011999d-convertkit-long.png",
        "convertkit-long.png",
        1626,
        324,
        "#7b475d"
      ]
    }
  ]
}
[/block]

1. In the body of your Broadcast or Automation email, add a new link or modify an existing link.

2. Make sure to add an additional query parameter (remember what you use!) and then add \`\`{{ subscriber.email_address }}​\` to represent a dynamically-populated representation of the user's email address. For example:

`https://authenticated-traffic-solution.com?user_id={{ subscriber.email_address }}​`

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/9104d5b-Screen_Shot_2020-07-29_at_4.38.20_PM.png",
        "Screen Shot 2020-07-29 at 4.38.20 PM.png",
        841,
        740,
        "#c8c7c7"
      ]
    }
  ]
}
[/block]

3. Save your link and finish creating your email template or broadcast.

When you send the email in production, the macro will be populated with the recipient's email.

4. Now, you need to configure ats.js to detect and resolve email addresses passed through mailchimp. Modify the configuration below to use your placement ID and the query parameter you used when setting up your link(s).

[block:code]
{
  "codes": [
    {
      "code": "{\n  \"placementID\": 9999,\n  \"storageType\": \"localStorage\",\n  \"detectionType\": \"url\",\n  \"detectionSubject\": \"email\",\n  \"logging\": \"error\",\n  \"urlParameter\": \"user_id\"\n}",
      "language": "javascript",
      "name": "ConvertKit ats.js configuration"
    }
  ]
}
[/block]

5. Send a test email to yourself to confirm that everything is working as expected -- and you're done!

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/e011d2d-Mailchimp_Logo-Horizontal_Black.png",
        "Mailchimp_Logo-Horizontal_Black.png",
        1200,
        326,
        "#000000"
      ]
    }
  ]
}
[/block]

[block:api-header]
{
  "title": "Sending Emails to ats.js with mailchimp"
}
[/block]

1. In your campaign design view, add a new link or modify an existing link.

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/68660ba-Screen_Shot_2020-04-24_at_4.12.54_PM.png",
        "Screen Shot 2020-04-24 at 4.12.54 PM.png",
        1036,
        595,
        "#e3e3e3"
      ]
    }
  ]
}
[/block]

2. Add/modify a link as usual, but make sure to add an additional query parameter (remember what you use!) and then add \`\`*|EMAIL|*\` to represent a dynamically-populated representation of the user's email address. For example:

`https://authenticated-traffic-solution.com?user_id=*|EMAIL|*`

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/c3bae5f-Screen_Shot_2020-04-24_at_4.11.58_PM.png",
        "Screen Shot 2020-04-24 at 4.11.58 PM.png",
        552,
        465,
        "#d4d4d3"
      ]
    }
  ]
}
[/block]

3. Click "insert" to update the link.

4. Continue creating the campaign. In previews, you should see the email macro populated with `< < Test Email Address > >`. When you send the email in production, the macro will be populated with the recipient's email.

5. Now, you need to configure ats.js to detect and resolve email addresses passed through mailchimp. Modify the configuration below to use your placement ID and the query parameter you used when setting up your link(s).

[block:code]
{
  "codes": [
    {
      "code": "{\n  \"placementID\": 9999,\n  \"storageType\": \"localStorage\",\n  \"detectionType\": \"url\",\n  \"detectionSubject\": \"email\",\n  \"logging\": \"error\",\n  \"urlParameter\": \"user_id\"\n}",
      "language": "javascript",
      "name": "mailchimp ats.js Configuration"
    }
  ]
}
[/block]

6. Send a test email to yourself to confirm that everything is working as expected -- and you're done!

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/d7e9c2d-AWeber-1.png",
        "AWeber-1.png",
        1194,
        1194,
        "#0075bd"
      ]
    }
  ]
}
[/block]

[block:api-header]
{
  "title": "Sending Emails to ats.js with Aweber"
}
[/block]

1. In the message editor, select the text you would like to hyperlink and click the "link" icon to add a destination URL.

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/5b7424c-Screen_Shot_2020-08-12_at_7.40.06_AM.png",
        "Screen Shot 2020-08-12 at 7.40.06 AM.png",
        636,
        167,
        "#8495a2"
      ]
    }
  ]
}
[/block]

2. Add the target URL and append an additional query parameter, such as `?e=`. Input the macro for a subscriber's email address after the query parameter, e.g. `?e={!email}`.

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/6c39109-Screen_Shot_2020-08-12_at_7.36.48_AM.png",
        "Screen Shot 2020-08-12 at 7.36.48 AM.png",
        629,
        536,
        "#bcc1c2"
      ]
    }
  ]
}
[/block]

3. Finish creating your message. When you send the email in production, the macro will be populated with the recipient's email.

4. Now, you need to configure ats.js to detect and resolve email addresses passed through AWeber. Modify the configuration below to use your placement ID and the query parameter you used when setting up your link(s).

[block:code]
{
  "codes": [
    {
      "code": "{\n  \"placementID\": 9999,\n  \"storageType\": \"localStorage\",\n  \"detectionType\": \"url\",\n  \"detectionSubject\": \"email\",\n  \"logging\": \"error\",\n  \"urlParameter\": \"e\"\n}",
      "language": "json",
      "name": "AWeber ats.js configuration"
    }
  ]
}
[/block]

5. Send a test email to yourself to confirm that everything is working as expected -- and you're done!

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/1efea26-exact_Target.jpeg",
        "exact Target.jpeg",
        306,
        165,
        "#b6c1ba"
      ],
      "caption": ""
    }
  ]
}
[/block]

ExactTarget can use a `%%emailaddr%%` macro to pass an email.

[block:code]
{
  "codes": [
    {
      "code": "%%=SHA256(LOWERCASE(TRIM(emailaddr)))=%% \n",
      "language": "css"
    }
  ]
}
[/block]

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/ece7235-SailThru.png",
        "SailThru.png",
        492,
        102,
        "#9debf8"
      ]
    }
  ]
}
[/block]

Please find documentation for each hashing method below.
[SHA256](https://getstarted.sailthru.com/developers/zephyr-functions-library/sha256/)
[SHA1](https://getstarted.sailthru.com/developers/zephyr-functions-library/sha1/)
[MD5](https://getstarted.sailthru.com/developers/zephyr-functions-library/md5/)

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/328f125-Klaviyo.png",
        "Klaviyo.png",
        259,
        194,
        "#f4f6f3"
      ]
    }
  ]
}
[/block]

Adding an email macro with Klaviyo is quite simple. You'd simply add an email macro to the url like so: `www.example.com/{{ email }}`
Documentation from their website can be found [here](https://help.klaviyo.com/hc/en-us/articles/115005084927-Template-Tags-and-Variable-Syntax?source=search\&auth_token=eyJhbGciOiJIUzI1NiJ9.eyJhY2NvdW50X2lkIjoxNjE0NDE0LCJ1c2VyX2lkIjo0MDU0NzA2MjgxNzEsInRpY2tldF9pZCI6NDIzODY4LCJjaGFubmVsX2lkIjo2MywidHlwZSI6IlNFQVJDSCIsImV4cCI6MTYwNjUxMTg1N30.DK_sdYpcpqEbWv1dwvcJWc70FN1vpW9LC5QWSnpx6Ts).

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/e8f568a-Iterable.png",
        "Iterable.png",
        3127,
        862,
        "#555967"
      ]
    }
  ]
}
[/block]

Please find documentation from their website [here](https://support.iterable.com/hc/en-us/articles/209530726-Custom-Link-Parameters-).

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/dac5c12-blueshift.png",
        "blueshift.png",
        600,
        315,
        "#134b82"
      ]
    }
  ]
}
[/block]

You'll want to use the following macro within your url:  `?email={{user.email}}`
Blueshift documentation can be found [here](https://help.blueshift.com/hc/en-us/articles/115002745193-Campaign-Tracking-Parameters#Custom).