Additional Integrations

Though we don't have direct integrations for the platforms listed below, we've successfully ingested data from them in the past using their APIs and documentation. For questions about platforms not listed below, reach out to support@heap.io.

Bluekai

See the Oracle Help Center for information on how to bring data in from Bluekai.

Drift

See Drift's developer documentation on tracking events.

Drift makes a series of event listeners available, which they recommend using to send data to other tools. Those event listeners are as follows:

(function() {
  window.drift.on('welcomeMessage:open', function() {
    heap.track('Drift: Welcome Message opened');
  });
  window.drift.on('welcomeMessage:close', function() {
    heap.track('Drift: Welcome Message closed');
  });
  window.drift.on('awayMessage:open', function() {
    heap.track('Drift: Away Message opened');
  });
  window.drift.on('awayMessage:close', function() {
    heap.track('Drift: Away Message closed');
  });
  window.drift.on("campaign:open", function(data) {
    heap.track("Drift: Opened campaign");
  });
  window.drift.on("campaign:dismiss", function(data) {
    heap.track("Drift: Dismissed campaign");
  });
  window.drift.on("campaign:click", function(data) {
    heap.track("Drift: Clicked campaign");
  });
  window.drift.on("campaign:submit", function(data) {
    heap.strack("Drift: Submitted on campaign");
  });
  window.drift.on("sliderMessage:close", function(data) {
    heap.track("Drift: Closed slider", {
      "Bot Message": data.botMessage,
      "User Interacted with Conversation": data.userInteractedWithConversation
    });
  });
  window.drift.on("startConversation", function(data) {
    heap.track("Drift: Started new conversation", {
      "Conversation ID": data.conversationId,
      "Inbox ID": data.inboxId
    });
  });
  window.drift.on("message:sent", function(data) {
    heap.track("Drift: Replied to conversation", {
      "Conversation ID": data.conversationId,
      "Inbox ID": data.inboxId
    });
  });
  window.drift.on("message", function(data) {
    heap.track("Drift: Received message", {
      "Team Member Name": data.teamMember.name,
      "Conversation ID": data.conversationId,
      "Inbox ID": data.inboxId
    });
  });
  window.drift.on("emailCapture", function(e) {
    heap.track("Drift: Submitted email", {
      "Email": e.data.email
    });
    heap.addUserProperties({
      'Email': e.data.email
    });
  });
  window.drift.on("scheduling:requestMeeting", function(data) {
    heap.track("Drift: Requested meeting", {
      "Team Member Name": data.teamMember.name
    });
  });
  window.drift.on("scheduling:meetingBooked", function(data) {
    heap.track("Drift: Booked meeting", {
      "Team Member Name": data.teamMember.name
    });
  });
})();

Use this snippet to add data to a Pageview snapshot:

(function() { window.drift.on('welcomeMessage:open', function() { heap.track('Drift: Welcome Message opened'); }); window.drift.on('welcomeMessage:close', function() { heap.track('Drift: Welcome Message closed'); }); window.drift.on('awayMessage:open', function() { heap.track('Drift: Away Message opened'); }); window.drift.on('awayMessage:close', function() { heap.track('Drift: Away Message closed'); }); window.drift.on("campaign:open", function(data) { heap.track("Drift: Opened campaign"); }); window.drift.on("campaign:dismiss", function(data) { heap.track("Drift: Dismissed campaign"); }); window.drift.on("campaign:click", function(data) { heap.track("Drift: Clicked campaign"); }); window.drift.on("campaign:submit", function(data) { heap.strack("Drift: Submitted on campaign"); }); window.drift.on("sliderMessage:close", function(data) { heap.track("Drift: Closed slider", { "Bot Message": data.botMessage, "User Interacted with Conversation": data.userInteractedWithConversation }); }); window.drift.on("startConversation", function(data) { heap.track("Drift: Started new conversation", { "Conversation ID": data.conversationId, "Inbox ID": data.inboxId }); }); window.drift.on("message:sent", function(data) { heap.track("Drift: Replied to conversation", { "Conversation ID": data.conversationId, "Inbox ID": data.inboxId }); }); window.drift.on("message", function(data) { heap.track("Drift: Received message", { "Team Member Name": data.teamMember.name, "Conversation ID": data.conversationId, "Inbox ID": data.inboxId }); }); window.drift.on("emailCapture", function(e) { heap.track("Drift: Submitted email", { "Email": e.data.email }); heap.addUserProperties({ 'Email': e.data.email }); }); window.drift.on("scheduling:requestMeeting", function(data) { heap.track("Drift: Requested meeting", { "Team Member Name": data.teamMember.name }); }); window.drift.on("scheduling:meetingBooked", function(data) { heap.track("Drift: Booked meeting", { "Team Member Name": data.teamMember.name }); }); })();

Eloqua

See Oracle's documentation on exporting data from Eloqua as well as their activities export definitions.

When exporting data, make sure you have an identity value to use to tie in Eloqua data with the appropriate user.

Note that you might hit rate limits when using our Bulk Track API to bring the events into Heap. You should do nightly batches to bypass this issue.

Evergage

See Evergage's documentation on sending events server-side.

You can use Webhooks with Evergage's API to route your Evergage data into Heap.

Intercom

See Intercom's developer documentation on building apps and setting up event webhooks to set up sending Intercom data into Heap.

LaunchDarkly

See LaunchDarkly's implementation documentation.

To set this up, attach LaunchDarkly's user key and feature flags as user and event properties in Heap.

If you're using addEventProperties, be sure to double check the length of the cookie—there is a max of 4kb for the props cookie and most servers have an 8kb cookie load limit. You can calculate the cookie size of passing all feature flags by in the browser console.

encodeURIComponent(JSON.stringify(ldclient.allFlags())).length

You can also add user flags as user properties.

// get LaunchDarkly user ID and send to Heap as user property

var ldUserId = ldclient.getUser().key
heap.addUserProperties({"ldUserId": ldUserId});

/ /get LaunchDarkly feature flags and attach as properties to all events

var ldProps = ldclient.allFlags();
heap.addEventProperties(ldProps);

Mandrill

See Mandrill's developer documentation on exporting activity history.

You will need to regularly retrieve your user's email addresses to access this data. We recommend setting up a nightly task to pull down your Mandrill activity, and then pipe that data through our Bulk Track API.

Monetate

See our Monetate documentation.

Qubit

In Qubit, experiment data is exposed in a client-side object, qb_etc_data. The keys are as follows:

c — variation id
ckg — creative key group
cm — active variation id
cnt — active variation index (control or X)
e — experiment id
i — iteration id
p — actual probability of user to bucket
pc — probability to bucket
s — no idea
tc — matches experiment id, not sure of precise usage

You will need to use defined properties (similar to our Google Optimize integration) to sort out the experiment and variation IDs.

You can try this integration snippet by adding it directly to your codebase, or as a Snapshot, to achieve this. Note that it may miss the first pageview.

(function() {
  var props = {};
  var intervalCount = 0;
  var intervalId = setInterval(function() {
    if ((window.qb_etc_data) || (intervalCount < 100)) {
      var name, value;
      var exp = window.qb_etc_data;
      if ("undefined" !== typeof exp) {
        for (var i = 0; i < exp.length; i++) {
          name = "Qubit: " + exp[i].e;
          value = exp[i].cm;
          props[name] = value;
        }
        heap.clearEventProperties();
        heap.addEventProperties(props);

      }
      clearInterval(intervalId);
    } else {
      intervalCount++;
    }
  }, 100);
})();

Note that the mappings come from this bookmarklet.

WalkMe

We can ingest data via callbacks referenced in WalkMe's documentation on types of events.

Zendesk

See Zendesk's developer documentation on incremental ticket export and JSON formatting for tickets in Zendesk.

Updated 26 days ago

Additional Integrations


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.