What counts
Kymo records three kinds of human event and nothing else that inflates your numbers.
What counts
A human event is one of:
- Pageview — a real page load, or a
history.pushStatenavigation in a single-page app. - Outbound click — a click on a link to a different hostname.
- Goal — an auto-goal (WhatsApp,
tel:,mailto:, form submit), a key-page view listed indata-goals, or a custom goal you fire withwindow.kymo(...).
Repeated pageviews of the exact same path and query, back to back with no navigation in between, are de-duplicated by beat.js and counted once.
Where a visit came from
The Sources card on Analytics and the Inbound page count visits, not pageviews. A visit's source is decided by its first pageview:
- A referrer — the site that linked to you, such as
google.com. - A UTM tag — no referrer, but the link carried a
utm_source. The visit counts under that source. ChatGPT addsutm_source=chatgpt.comto its links, so those visits count underchatgpt.com, the same row as visits with that referrer. - Typed or bookmarked — no referrer and no tag, and the visit started on your homepage.
- Link, no referrer — no referrer and no tag, and the visit started on a deeper page. People rarely type a deep address by hand, so this is almost always a link whose referrer was hidden: an app, an email, a chat, or an AI answer. Click the row to see the pages these visits landed on. They are the best clue to what sent them.
Clicks from one of your pages to another never count as a source. They are part of the same visit.
What does not count
The ingest endpoint drops these before anything is stored:
- Bots and crawlers. Any request whose user-agent matches
bot,crawl,spider,slurp,headless, orlighthouseis dropped. It is never stored as a human event. - Headless browsers posing as Chrome. A request that claims to be desktop Chrome or Edge on an https page but carries no client hints is dropped. A real Chrome or Edge 90+ always sends them.
- Prefetches. A prefetched page does not execute
beat.jsuntil it is actually rendered, so speculative prefetch does not create a pageview. - Your own visits, if you set the
?kymo=ignoreopt-out, or if the IP is in your site's excluded list. - Local development.
beat.jsno-ops onlocalhost,127.*, and192.168.*.
AI crawlers are counted separately, and free
AI crawlers do not run beat.js — a crawler does not execute your page's JavaScript. They are tracked through a separate server-side path (/api/crawl) and stored as bot events, not human events. See The bot taxonomy.
Metering against plan limits
Plans are sized by human events per month: Solo up to 10,000, Studio up to 100,000. Only the three human event kinds above count toward that limit. Bot events do not.