4 min

59

Apollo Counts Everything: I Only Show It the Pages That Matter

Apollo’s visitor tracking counts every identified company against your quota, whatever page it viewed, and no setting lets you choose which ones. The workaround: load its script only on high-intent pages (pricing, contact, comparison, alternatives).

The problem: a quota eaten by blog readers

I detect about 100 companies a month. Of 111 companies detected in one month, 59 had only seen blog posts, the blog index or the home page: more than half of the quota went to visitors with no buying signal.

Apollo offers “intent paths”, the pages that reveal intent. They score interest and filter the list, but they don’t change the count. And on my account, the interest level came back “low” for every company, so it was useless. I built my own ranking: a view on a high-intent page is worth 3, an offer page 2, a blog post 1, an off-target page (careers, cookies) 0.

The workaround: load the script only where needed

Apollo can only identify a visitor on pages where its script is present. If the script loads only on the pages I care about, only companies visiting them are detected and counted.

On my site, the script was hard-coded in the page header. Claude found it, then rewrote it with a URL condition and an exclusion for internal traffic:

<script>
(function () {
  // High-intent pages: contact, pricing, alternatives, comparison, product
  var pages = /^\/(contact|thank-you|pricing|alternative-|comparison|platform\/|services\/)/;

  // Internal traffic: open yoursite.com/?internal=1 once in each team browser
  try {
    if (location.search.indexOf('internal=1') !== -1) localStorage.setItem('internal', '1');
    if (localStorage.getItem('internal') === '1') return;
  } catch (e) {}

  if (!pages.test(location.pathname)) return;

  var s = document.createElement('script');
  s.src = 'https://assets.apollo.io/micro/website-tracker/tracker.iife.js';
  s.async = true;
  s.onload = function () { window.trackingFunctions.onLoad({ appId: 'YOUR_APP_ID' }); };
  document.head.appendChild(s);
})();
</script>

Testing happens in the browser: the contact page is tracked, a blog post is not. My own visits accounted for 194 views in the list, hence the internal exclusion.

The pitfalls

  • The home page was still serving the old script. Caching kept serving it. The night after the change, 13 of the 16 new companies had only seen the home page or a blog post: visits from before the change, plus three home page visits served from cache. I cleared the cache.
  • Apollo processes visits overnight (around 4:30 a.m.), but companies only show up in the interface around 10:15 a.m. A 9 a.m. check is always a day late.
  • Intent paths use /path/, not full URLs. And anything after # isn’t transmitted: a /contact#demo page is counted as /contact/.
  • Apollo only returns the 5 most viewed pages per company. For heavy visitors, the list is incomplete.
  • Some companies are misidentified: 4 out of 100 had a webmail domain (gmail, outlook), so probably the wrong company.
  • What you lose: the full journey. You will no longer see that a company read three posts before going to pricing.

A check every morning

Apollo doesn’t give per-day visits for each page. A scheduled task therefore records the view count per page each morning and compares it with the day before: if it went up, the company came back. I get a notification (“Pricing return: X, 2nd day”), a daily report and an Excel log. The task runs inside the Claude app, which has to be open.

This script identifies companies from their visit: it is tracking, and consent must be collected before it loads. The code above doesn’t handle that: it filters pages, nothing more.

To check on your own site: open a high-intent page in a private window, without touching the banner, and watch the Network tab. If Apollo’s file shows up, the script loads before any choice is made. You then need to wire it into your consent manager. With tarteaucitron, the principle is to declare a custom service and start the loading only inside its js function:

<script>
tarteaucitron.services.apollo = {
  key: 'apollo', type: 'analytic', name: 'Apollo', needConsent: true, cookies: [],
  js: function () { /* here: the URL condition and the script loading */ },
  fallback: function () {}
};
(tarteaucitron.job = tarteaucitron.job || []).push('apollo');
</script>

This is the pattern documented by tarteaucitron, to be adapted and tested on your site. Also have your DPO validate the use.

What I don’t know yet

The expected volume is about one company a day. In the first days, Matomo counted 17 unique views on these pages over a day and a half, part of them internal. I haven’t attributed any conversion to these signals so far: the method is in place, the gain still has to be measured over a month.

Key takeaway

When a tool bills or caps by the number of companies detected, decide where it looks. Load it on pages that reveal intent, exclude your team, check consent, and judge the result over a month, not a week.

Read next

n8nAutomatically Enriching Lemlist Contacts with Apollo via n8nde laAutomating a Grammar Variable with an AI in n8n4AI Detection of Business Signals: Building a Useful RevOps System