How to Build Your Own Segmentation Filters to Use With, e.g.: The Reporting API

Analytics are great because they provide answers to all sorts of questions:

  • How many people visited my Website?
  • When did they visit?
  • Where did they come from?

But while analytics give us some answers, they also create many more questions:

  • Of the people who came to the site, how many visited from the US?
  • Of the US visitors, how many came from search engines?
  • And how much items were purchased by just those visitors?

Segmentation allows you to narrowly focus attention on only the visitors you want to analyze, and probe deeper to make better decisions.

Segments

Segments consist of two parameters: are (who they are, i.e: visitor Properties) and did (what they did i.e: visitor actions) and each segment contains an operator and a list of filters. Reports and Searches support a segments and they consist of an array of the segments defined below.

{
  "are": {
    "operator": "AND", // AND or OR
    "filters": []
  },
  "did": {
    "operator": "AND", // AND, OR or THEN
    "filters": []
  }
}

"Are" Filters

The are filters are simple constraints that cover the Custom Visitor Data. This filter below will narrow the query response down to those from companies that have more than 300 employees and are at the trial stage.

{
  are: {
      "operator": "AND",
      "filters": [{
          "scope": "visitors",
          "key": "company size",
          "match": "gte",
          "value": 300 
      }, {
          "scope": "visitors",
          "key": "stage",
          "match": "match",
          "value": "trial"
      }]
  }
}

"Did" Filters

Every did filter consists of 4 objects:

  • action
  • aggregation
  • timeframe
  • visit

action

Action defines the action targetd in this behavioral filter. For example, if you want to filter people who made a payment, the action object should define the action payment and its constrains.

action:{
  "operator": "AND",
  "filters": [{
    "scope": "actions",
    "key": "name",
    "match": "match",
    "value": "payment"
  }, {
    "scope": "actions",
    "key": "amount",
    "match": "gt",
    "value": "10"
  }]
}

aggregation

The action constraints are extended with aggregation rules which must be matched. For example, you may want to spot people who committed the action payment at least 3 times, or those people who committed the action payment where the sum of amount (which is a property inside every payment action) to be greater than $100.

Count aggregation example

The method count takes scope as an extra parameter which is action by default. It enabled you to count occurrences by actions or limiting the count to one per visit.

aggregation: {
  "method": "count",
  "scope": "actions", // or visits (to count once per visit)
  "match": "gte", // equivalent to "greater than or equals" or "at least"
  "value": 3
}

Sum aggregation example

The method sum takes an extra parameter titled by which is the target key that should be used to sum amounts. For example, in a payment event, you need to use the amount key.

aggregation: {
  "method": "sum",
  "by": "amount", // property of the action matching in "actions"
  "match": "gte", // equivalent to "greater than or equals" or "at least"
  "value": 100
}

timeframe

You must define a time frame for every behavioral filter. Time frames can be defined using one of 2 methods: relative dates (days ago) and absolute dates.

Example of a relative time frame

The example below defines a timeframe relative to the time you’re querying the Woopra engines: From 29 to 0 days ago. Which means last 30 days including today.

timeframe: {
    "method": "relative",
    "from": 29,
    "to": 0
}

Example of an absolute time frame

The example below defines a timeframe that is absolute. You must define two dates in the format of yyyy-mm-dd.

timeframe: {
    "method": "absolute",
    "from": "2013-01-01",
    "to": "2013-01-31"
}

visit

The visit parameter defines the visit constraints that should be matched. If a visit that contains a matching action but does not match with the visit constraints, the matching actions will be ignored. The visit constraints object consists of two properties: operator and filters.

visit: {
    "operator": "AND",
    "filters": [{
        "scope": "visits",
        "key": "browser", 
        "match": "contains",
        "value": "chrome"
    }]
}

Match Comparators

KeyDescriptionData Type
matchExactly Matchesstring
startsStarts Withstring
containsContainsstring
endsEnds Withstring
notmatchDoes Not Matchstring
notstartsDoes Not Start Withstring
notendsDoes Not End Withstring
notcontainsDoes Not Containstring
regexpEntire String Matches Regular Expressionstring
emptyEmptystring/any
notemptyNot Emptystring/any
eqEqualsnumber
ltLess Thannumber
gtGreater thannumber
gteGreater Than or Equalsnumber
lteLess Than or Equalsnumber
neqNot equalsnumber

Full Segments Example

segments: [{
    "are": {
        "operator": "AND",
        "filters": [{
            "scope": "visitors",
            "key": "company size",
            "match": "gte",
            "value": 300
        }, {
            "scope": "visitors",
            "key": "stage",
            "match": "match",
            "value": "trial"
        }]
    },
    "did": {
        "operator": "AND",
        "filters": [{
            action: {
                "operator": "AND",
                "filters": [{
                    "scope": "actions",
                    "key": "name",
                    "match": "match",
                    "value": "payment"
                }]
            },
            aggregation: {
                "method": "sum",
                "by": "amount", // property of the action matching in "actions"
                "match": "gte", // equivalent to "greater than or equals" or "at least"
                "value": 100
            },
            timeframe: {
                "method": "relative",
                "from": 29,
                "to": 0
            },
            visit: {
                "operator": "AND",
                "filters": [{
                    "scope": "visits",
                    "key": "city",
                    "match": "match",
                    "value": "San Francisco"
                }]
            }
        }]
    }
}]