Last Edit: Feb 10 2020

Tracking impressions allows you to learn what specific users are not interested in. If the app often shows posts about football, and the user never engages with those posts, we can conclude that we're displaying the wrong content. The code below shows how to track that a user viewed 3 specific activities:

const impression = {
  'content_list': [
      'foreign_id': 'post:42',
      'actor': {'id': 'user:2353540'},
      'verb': 'share',
      'object': {'id': 'song:34349698'},
  'feed_id': 'timeline:tom'


// track an impression
StreamImpression *event = [StreamImpression createImpressionEventWithContentList:@[@"song:34349698", @"song:34349699", @"song:34349697"]];

// (optional) the feed where this content is coming from
event.feedId = @"flat:tommaso";
// (optional) the location in your app. ie email, profile page etc
event.location = @"ios-app";

// send the impression events
[[StreamAnalytics sharedInstance] send:event];

client.send(new Impression.EventBuilder()
        new Content.ContentBuilder()
            .withAttribute("verb", "share")
            .withAttribute("actor", new ContentAttribute("1", "user1"))
        new Content.ContentBuilder()
        new Content.ContentBuilder()

Be sure to use the same Foreign Ids as used in your feeds. This allows Stream to understand the content of the activities.


Name Type Description Default Optional
content_list list of strings or objects The list of content the user is looking at. Either a list of IDs or objects. -
feed_id string The feed the user is looking at. -
location string The location in your app (i.e. email, homepage, profile page, etc.) -