All docs

Start

  1. 01Getting started
  2. 02Install
  3. 03Tracking

Features

  1. 04The dashboard
  2. 05Goals
  3. 06Short links
  4. 07AI sources and agents
  5. 08Email reports
  6. 09Scheduled check
  7. 10Ask your AI

Reference

  1. 11Configuration
  2. 12HTTP API

Platforms

  1. 13Standalone server
  2. 14PHP
  3. 15Python
  4. 16WordPress
  5. 17Drupal
  6. 18Craft CMS
  7. 20Rails
  8. 21Ruby

Trust

  1. 19Privacy

Features

AI sources and agents

Runlight counts the people who arrive from ChatGPT and Claude, and it sees the AI agents that read your pages without running any JavaScript.

AI shows up in your traffic in two ways, and Runlight counts both.

People who came from an AI

When someone clicks a link in an answer from ChatGPT, Claude, Perplexity, Gemini, Copilot, Meta AI, Grok, DeepSeek, Mistral, You.com, or Phind, the visit gets that source and the AI channel. It counts toward visitors and conversions like any other visit, and you can filter by it.

Agents that read your pages

An AI answering a question often fetches your page itself. Agents do not run JavaScript, so the tracker never sees them. To count them from your server, pass each page request to rl.observe(request).

proxy.ts

import { rl } from "@/lib/runlight";

export async function proxy(request: Request) {
  void rl.observe(request);
  return (await rl.linkDomainResponse(request)) ?? undefined;
}

This is Next.js middleware, which lives in middleware.ts before Next.js 16. In Express, use app.use(observer(rl)) from @runlight/sdk/node.

observe records GET requests for pages from known agents and ignores everything else, including images, scripts, and styles. It never throws, so it is safe to call on every request. Leave it unawaited and it will not slow the response.

The AI agents box sorts what it sees into two groups and shows which pages each agent read. The first group fetches a page because a person asked something right now (ChatGPT-User, Claude-User, Perplexity-User, MistralAI-User, and Meta’s fetcher). The second group is crawlers that gather pages ahead of time (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Amazonbot, CCBot, and others). Runlight keeps these fetches out of visitor and pageview numbers.

Edit this page on GitHub