diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py
index 0943493a521bb48f222b854b15b57b6dd2da5459..3f351f0c57114777fd99e5babd888c7acea815c8 100644
--- a/common/djangoapps/course_modes/views.py
+++ b/common/djangoapps/course_modes/views.py
@@ -9,13 +9,13 @@ import urllib
 import waffle
 from babel.dates import format_datetime
 from django.contrib.auth.decorators import login_required
-from django.urls import reverse
 from django.db import transaction
 from django.http import HttpResponse, HttpResponseBadRequest
 from django.shortcuts import redirect
+from django.urls import reverse
 from django.utils.decorators import method_decorator
-from django.utils.translation import ugettext as _
 from django.utils.translation import get_language, to_locale
+from django.utils.translation import ugettext as _
 from django.views.generic.base import View
 from ipware.ip import get_ip
 from opaque_keys.edx.keys import CourseKey
diff --git a/common/djangoapps/student/signals/__init__.py b/common/djangoapps/student/signals/__init__.py
index 6a50ccf072f6fcb64f1d37e507dea59e979ddf15..db63d488705def3f8aa555704d7f600f9d3757da 100644
--- a/common/djangoapps/student/signals/__init__.py
+++ b/common/djangoapps/student/signals/__init__.py
@@ -2,5 +2,6 @@ from student.signals.signals import (
     ENROLLMENT_TRACK_UPDATED,
     UNENROLL_DONE,
     ENROLL_STATUS_CHANGE,
-    REFUND_ORDER
+    REFUND_ORDER,
+    SAILTHRU_AUDIT_PURCHASE
 )
diff --git a/common/djangoapps/student/signals/signals.py b/common/djangoapps/student/signals/signals.py
index d1c080584d975b01ac54877af2445900d8eca874..9e7b7c90e6f778fec357d30e0f424b96320cee85 100644
--- a/common/djangoapps/student/signals/signals.py
+++ b/common/djangoapps/student/signals/signals.py
@@ -7,3 +7,4 @@ ENROLLMENT_TRACK_UPDATED = Signal(providing_args=['user', 'course_key'])
 UNENROLL_DONE = Signal(providing_args=["course_enrollment", "skip_refund"])
 ENROLL_STATUS_CHANGE = Signal(providing_args=["event", "user", "course_id", "mode", "cost", "currency"])
 REFUND_ORDER = Signal(providing_args=["course_enrollment"])
+SAILTHRU_AUDIT_PURCHASE = Signal(providing_args=["event", "user", "course_id", "mode"])
diff --git a/lms/djangoapps/commerce/api/v0/views.py b/lms/djangoapps/commerce/api/v0/views.py
index e4657cbdf92dd607c8dbaa918b7044481c982ea8..5ca26fabc5328af02a76ce191f259f2785fe3c87 100644
--- a/lms/djangoapps/commerce/api/v0/views.py
+++ b/lms/djangoapps/commerce/api/v0/views.py
@@ -1,7 +1,6 @@
 """ API v0 views. """
 import logging
 
-from courseware import courses
 from django.urls import reverse
 from edx_rest_api_client import exceptions
 from opaque_keys import InvalidKeyError
@@ -13,6 +12,7 @@ from rest_framework.views import APIView
 from six import text_type
 
 from course_modes.models import CourseMode
+from courseware import courses
 from enrollment.api import add_enrollment
 from enrollment.views import EnrollmentCrossDomainSessionAuth
 from entitlements.models import CourseEntitlement
@@ -21,7 +21,9 @@ from openedx.core.djangoapps.embargo import api as embargo_api
 from openedx.core.djangoapps.user_api.preferences.api import update_email_opt_in
 from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser
 from student.models import CourseEnrollment
+from student.signals import SAILTHRU_AUDIT_PURCHASE
 from util.json_request import JsonResponse
+
 from ...constants import Messages
 from ...http import DetailResponse
 
@@ -139,6 +141,10 @@ class BasketsView(APIView):
                 )
             log.info(msg)
             self._enroll(course_key, user, default_enrollment_mode.slug)
+            mode = CourseMode.AUDIT if audit_mode else CourseMode.HONOR
+            SAILTHRU_AUDIT_PURCHASE.send(
+                sender=None, event='enroll', user=user, mode=mode, course_id=course_key
+            )
             self._handle_marketing_opt_in(request, course_key, user)
             return DetailResponse(msg)
         else:
diff --git a/lms/djangoapps/email_marketing/signals.py b/lms/djangoapps/email_marketing/signals.py
index 0362086622d9c7f3043b436c7bcf5682e24e0b50..3109f325d9f21c4337fa308786534ffb28362485 100644
--- a/lms/djangoapps/email_marketing/signals.py
+++ b/lms/djangoapps/email_marketing/signals.py
@@ -16,14 +16,15 @@ from six import text_type
 import third_party_auth
 from course_modes.models import CourseMode
 from email_marketing.models import EmailMarketingConfiguration
+from lms.djangoapps.email_marketing.tasks import get_email_cookies_via_sailthru, update_user, update_user_email
+from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
 from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_THIRD_PARTY_MAILINGS
 from openedx.core.djangoapps.waffle_utils import WaffleSwitchNamespace
-from lms.djangoapps.email_marketing.tasks import update_user, update_user_email, get_email_cookies_via_sailthru
-from openedx.core.djangoapps.lang_pref import LANGUAGE_KEY
 from student.cookies import CREATE_LOGON_COOKIE
-from student.signals import ENROLL_STATUS_CHANGE
+from student.signals import SAILTHRU_AUDIT_PURCHASE
 from student.views import REGISTER_USER
 from util.model_utils import USER_FIELD_CHANGED
+
 from .tasks import update_course_enrollment
 
 log = logging.getLogger(__name__)
@@ -39,7 +40,7 @@ WAFFLE_SWITCHES = WaffleSwitchNamespace(name=WAFFLE_NAMESPACE)
 SAILTHRU_AUDIT_PURCHASE_ENABLED = 'audit_purchase_enabled'
 
 
-@receiver(ENROLL_STATUS_CHANGE)
+@receiver(SAILTHRU_AUDIT_PURCHASE)
 def update_sailthru(sender, event, user, mode, course_id, **kwargs):
     """
     Receives signal and calls a celery task to update the
@@ -51,7 +52,7 @@ def update_sailthru(sender, event, user, mode, course_id, **kwargs):
         None
     """
     if WAFFLE_SWITCHES.is_enabled(SAILTHRU_AUDIT_PURCHASE_ENABLED) and mode in CourseMode.AUDIT_MODES:
-        course_key = str(course_id)
+        course_key = course_id
         email = str(user.email)
         update_course_enrollment.delay(email, course_key, mode)
 
diff --git a/lms/djangoapps/email_marketing/tasks.py b/lms/djangoapps/email_marketing/tasks.py
index 3a1e42f42746ebf3fd78a55e93dea07eefaa3688..4221cd4d2a2806134ffcab855b3d44a0aa47617e 100644
--- a/lms/djangoapps/email_marketing/tasks.py
+++ b/lms/djangoapps/email_marketing/tasks.py
@@ -1,6 +1,7 @@
 """
 This file contains celery tasks for email marketing signal handler.
 """
+
 import logging
 import time
 from datetime import datetime, timedelta
@@ -320,7 +321,7 @@ def update_course_enrollment(self, email, course_key, mode):
 
     course_data = _get_course_content(course_key, course_url, sailthru_client, config)
 
-    item = _build_purchase_item(course_key, course_url, cost_in_cents, mode, course_data, None)
+    item = _build_purchase_item(course_key, course_url, cost_in_cents, mode, course_data)
     options = {}
 
     if send_template:
@@ -433,7 +434,7 @@ def _get_course_content(course_id, course_url, sailthru_client, config):
     return response
 
 
-def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data, sku):
+def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data):
     """Build and return Sailthru purchase item object"""
 
     # build item description
@@ -454,6 +455,9 @@ def _build_purchase_item(course_id, course_url, cost_in_cents, mode, course_data
     if 'tags' in course_data:
         item['tags'] = course_data['tags']
 
+    # add vars to item
+    item['vars'] = dict(course_data.get('vars', {}), mode=mode, course_run_id=unicode(course_id))
+
     return item
 
 
diff --git a/lms/djangoapps/email_marketing/tests/test_signals.py b/lms/djangoapps/email_marketing/tests/test_signals.py
index 18cd64b4db6619bc7dfacd45009ec924c61190a1..d0b67cbf940a3a522de10659f7e14be7e31bfca7 100644
--- a/lms/djangoapps/email_marketing/tests/test_signals.py
+++ b/lms/djangoapps/email_marketing/tests/test_signals.py
@@ -704,6 +704,7 @@ class SailthruTests(TestCase):
             m.return_value = self.course_url
             update_course_enrollment(TEST_EMAIL, self.course_id, 'audit')
         item = [{
+            'vars': {'course_run_id': u'edX/toy/2012_Fall', 'mode': 'audit'},
             'url': self.course_url,
             'price': 0,
             'qty': 1,