Universally solving Firefox, Brave, tracker blockers


We have discovered that Firefox and Brave browsers block Intercom by default. And 20% of our user base have ad-blockers which block Intercom as a tracking software. Effectively, 10-20% of our users do not have access to customer support at all. We expect more browsers to join this anti-tracking effort.

We are looking for a simple but universal solution to that.

But, first of all, we can’t ask users to switch browsers or disable ad blocker. This is against our User Experience policy.

The only way (for now) to solve this problem I see - host/proxy everything Intercom-ish through our host.

  1. Serve (or better proxy) all intercom js,css,html,etc assets.
  2. Proxy all the Intercom API calls.

Is there a simple solution to implement this in our backend?

Hey there, welcome to the forum!

Generally there are two options when it comes to tracking users that have blocking enabled:

  1. You can ask your users to disable JavaScript blockers. Googling for JavaScript blocker detection or Adblock detection will provide many resources on doing this.
  2. You can sync your backend with the Intercom API. There are several API wrappers that might suit your application well including: Ruby, Node, PHP, Java, Go

Be sure to check out this article that goes into more detail on this topic as well:


Hello Andrew. Thanks you for the prompt reply!

  1. As I mentioned, we believe that missing chat head is our fault. Customers shouldn’t be solving our problems.
  2. Thank you for the link. I’ve taken a look and seems like it’s not as simple as I thought. This involves a lot of programming from our side. Am I correct?

What I’m looking for is something like a http middleware which would do all the proxying for me:


var APP_ID="ownofqh1";
  proxy: "https://my.host.example.com/intercom-proxy"

(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');

ic('update', w.intercomSettings);

}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;

s.src='https://my.host.example.com/intercom-proxy/widget/' + APP_ID;

var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();

Server Node.js:

const app = require("express")();

const intercom = require("intercom-client");
app.use("/intercom-proxy", intercom.proxy({ app_id: "ownofqh1" }));

The browser would send all the analytics data to the Intercom via my host, which serves as a proxy.

As the result:

  1. No programming (by me) needed.
  2. All blockers avoided forever.
  3. Intercom still can collect browser, OS, location and other details about my customers.

Is there anything like that out there?

The setup of using something like http middleware to load the Intercom Messenger isn’t something that we would officially support on our side of things as an installation method for Intercom, so I wouldn’t be able to offer any guidance in a setup like this and it would have to be created at your own discretion.

I’ve shared this thread with our team though as something you’d like to see more solutions for in the future!