Setting up a single collector for multiple domains

Hi all,
I’m attempting to configure one instance of the scala stream collector 0.13.0 to receive data for multiple domains.

I have the javascript tracker setup for each domain, and the id and ses cookies are landing in the browser.

However, what do I do in the collector’s config.hocon? I’ve tried these settings, and the collector’s cookie isn’t landing in the browser. I’d like apps on subdomains to be able to access the cookie as well, so commenting out the domain setting isn’t preferred.

  crossDomain {
    enabled = true
    # Domain that is granted access, * will match and
    domain = "*"
    # Whether to only grant access to HTTPS or both HTTPS and HTTP sources
    secure = true

  cookie {
    enabled = true
    expiration = 90d
    # Network cookie name
    name = _12345_
    # The domain is optional and will make the cookie accessible to other
    # applications on the domain. Comment out this line to tie cookies to
    # the collector's full domain
    domain = "*"


Edit: I just found an additional error that is probably affecting this, but I’d still like to hear from anyone regarding how to configure the above for multiple domains.

@rob, to allow for tracking cookies across subdomains you need to refer to Javascript Tracker rather than collector.

Generally, you can track 1st party cookie set on the browser (domain_userid, domain_sessionid) as well as 3rd party cookie set on the collector (network_userid).

The domain_userid is a UUID which is generated by the Javascript tracker. Be aware if a user deletes their cookies, or the cookie expires, a new domain_userid will be generated (which will make them look like a new user). Also, if the user visits from another browser or computer, it will look like this is a totally different user.

The network_userid is set as a third party cookie ID. It is typically used when site visitors need to be uniquely identified across multiple different domains (e.g. on a content or ad network). In a nutshell, the Stream Collector receives events from the Snowplow JavaScript tracker, sets/updates a third-party user tracking cookie, and returns the pixel to the client. The ID in this third-party user tracking cookie is stored in the network_userid field in Snowplow events. However, many browsers block 3rd party cookies by default (e.g. Safari & Firefox).

To track users across subdomains set cookieDomain property to your domain as in


Alternatively, if the optional discoverRootDomain field of the argmap is set to true, the Tracker automatically discovers and sets the cookie domain value to the root domain.

When tracking across domains

Thanks @ihor, very helpful info.

I have the first party cookies working as I’d like. However, I’m still not clear about how to set the third party cookies to work for multiple primary domains. For example, I’d like the third party cookie to be set for,, and instead of all of the third party cookies for those three domains getting a cookie that is from

If I comment out the cookie.domain config in config.hocon, I can partially achieve this, but the cookies are set for,, and I’d like to remove the collector part so that subdomains have access to those cookies (therefore the cookies are set to, etc).

How can I achieve this?

I’ve tried these cookie.domain configs in config.hocon unsuccessfully:

domain = "*"
domain = ".*"
domain = "*.*"
domain = "*.*.*"\

Or am I misunderstanding the purpose of a third party cookie? Should the third party cookie actually have the same domain configuration across multiple domains?

The network_userid is set on the collector domain and as such is read on the collector. Having the same collector domain is what allows the network user ID to be the same across domains.

Consider the following example to see how domain_userid and network_userid differ. Assuming a single user/browser:

  • Events from are sent to with domain_userid = A and at the collector the 3rd party cookie is read, enriching the event with network_userid = X
  • Events from are sent to with domain_userid = B and at the collector the 3rd party cookie is read, enriching the event with network_userid = X

If we were to set up a different collector with a different CNAME, network user ID would be different because the pipeline would not be able to access the cookie that is already stored against the first collector domain.

The cookie cannot be read on the website though unless the website domain is the same as the cookie domain of the 3rd party cookie.