Agent Tracking
Was KI-Agenten auf deiner Site tun
Der Check sagt dir, ob Agenten deine Site nutzen können. Das hier sagt dir, was sie damit tun: wer sie schickt, welche Seiten sie abrufen, welche deiner WebMCP-Tools sie aufrufen und ob sie zum Ziel kommen. Ein Snippet, ein Dashboard, keine Cookies, keine personenbezogenen Daten, Hosting in Deutschland.
Einbauen
Lege deine Site im Dashboard an und setze diese Zeile auf jede Seite. Die Domain in data-domain muss die registrierte sein; Ereignisse für jede andere Domain werden an der Tür verworfen.
<script defer data-domain="example.com" src="https://agenttracking.co/agent.js"></script>
Unter fünf Kilobyte, reines JavaScript, kein Framework, keine Abhängigkeiten. Es schickt kleine Pakete per sendBeacon an /api/event, deshalb kommt auch ein Klick an, der die Seite verlässt. Das Script hat absichtlich keinen Integrity-Hash: es wird an Ort und Stelle aktualisiert, wenn ein neuer Agent in der Liste unten auftaucht.
Drei Ebenen
A. KI-Referrals
Ein Besucher kommt von einem Assistenten: der Referrer wird gegen eine gepflegte Liste von Assistenten-Hosts abgeglichen, dazu utm_source-Muster. Erfasst als Assistent und Einstiegspfad.
B. KI-Abrufe
Ein Assistent lädt eine Seite und führt ihre Scripts aus: der User-Agent der Anfrage, die das Beacon trägt, wird gegen dieselbe Liste abgeglichen. Der Abgleich passiert auf unserem Server aus den Request-Headern, nicht im Snippet, damit die Liste an einem versionierten Ort bleibt und das Snippet klein.
C. WebMCP-Tool-Aufrufe
Der Teil, den sonst niemand misst. Das Snippet umhüllt document.modelContext (und das veraltete navigator.modelContext), sodass jede Registrierung und jeder Aufruf erfasst wird: Tool-Name, Dauer, Erfolg oder Fehler, Fehlerklasse und die Namen der Eingabefelder. Deklarative Tools auf Formularen werden beim Absenden erfasst.
Ein Crawler ohne JavaScript führt das Snippet nie aus. GPTBot, ClaudeBot und ihresgleichen holen meist rohes HTML und erscheinen hier nur, wenn sie die Seite rendern. Sie zu zählen braucht das Server-Log. Für agenttracking.co selbst läuft dieser Import alle 15 Minuten und speist dasselbe Dashboard, samt Abruf-Bursts (ein Agent, mehrere Seiten, wenige Sekunden: so sieht ein Query-Fan-out von deiner Seite aus). Für deine Site lädst du das Log auf der Einstellungsseite hoch oder lässt es einen Cron täglich mit dem API-Token schicken; nginx- oder Apache-Format combined, roh oder gezippt, ganze Dateien sind in Ordnung. Wo der Anbieter Adressbereiche veröffentlicht (OpenAI, Perplexity, Microsoft, Google, Apple), wird jede Zeile dagegen geprüft; ein behaupteter Agent von anderswo wird als unverifiziert angezeigt statt gezählt.
Tools und Ziele
An der Registrierung deiner Tools ändert sich nichts. Registriere sie, wie die Spezifikation es vorsieht, und das Snippet sieht sie:
await document.modelContext.registerTool({
name: "search_products",
description: "Durchsucht den Katalog per Freitext.",
inputSchema: { type: "object", properties: { query: { type: "string" } }, required: ["query"] },
annotations: { readOnlyHint: true },
execute: async ({ query }, { signal }) => { /* ... */ },
});
// agent.js umhüllt registerTool und provideContext, bevor das hier läuft:
// die Registrierung, jeder Aufruf, seine Dauer, Erfolg oder Fehler und
// die Namen der Argumentfelder werden erfasst. Werte nie.Deklarative Tools sind Formulare mit einem toolname. Setze data-agent-goal auf ein beliebiges Element, um eine Conversion zu markieren, etwa eine Bestellung oder eine bestätigte Buchung:
<form toolname="book_table" tooldescription="Reserviert einen Tisch für Datum und Personenzahl."
action="/book" method="post">
<input name="date" type="date" required>
<input name="guests" type="number" min="1" required>
<button type="submit" data-agent-goal="table_booked">Reservieren</button>
</form>Wenn du ein Manifest unter /.well-known/webmcp veröffentlichst, hasht das Snippet es einmal pro Besuch auf der Einstiegsseite. Das Dashboard zeigt, wann es sich zuletzt geändert hat; Pro-Konten können benachrichtigt werden.
Was erfasst wird und was nicht
| Erfasst | Nie erfasst |
|---|---|
| Seitenpfad ohne Query-String | Query-Strings, Fragmente, Formularwerte |
| Referrer-Host und utm_source, wenn sie einen Assistenten benennen | Vollständige Referrer-URLs |
| Tool-Name, Dauer, Erfolg, Fehlerklasse, Namen der Eingabefelder | Eingabewerte, Ausgabewerte |
| Eine Sitzungskennung: täglicher Zufalls-Salt, deine Domain, eine grobe Browserklasse und die Adresse, gehasht | Die Adresse selbst, Cookies, Speicher, Fingerprints, jede dauerhafte Kennung |
| Welcher KI-Agent, aus einer gepflegten Liste (Version 2026-09-08) | Vollständige User-Agent-Strings |
Rohdaten werden 90 Tage aufbewahrt und dann gelöscht; Tagessummen bleiben, solange die Site besteht. Alles liegt auf unserem eigenen Server in Deutschland. Site entfernen löscht alles. Die Datenschutzerklärung hat die formale Fassung, und der Auftragsverarbeitungsvertrag wird geschlossen, wenn du eine Site anlegst.
Pläne
In der Pilotphase ist jedes Konto auf Free, bezahlte Pläne sind noch nicht offen. Brauchst du während der Pilotphase mehr? Schreib an hi@finalmaster.net, wir stellen dein Konto von Hand um. Die Produktseite hat die Bedingungen der Pilotphase.
| Plan | Sites | Agenten-Ereignisse pro Monat | Verlauf | Extras |
|---|---|---|---|---|
| Free | 1 | 10.000 | 30 Tage | keine |
| Pro | 5 | 500.000 | 365 Tage | Manifest-Änderungsalarm |
| Agency | unbegrenzt | 5.000.000 | 365 Tage | Manifest-Änderungsalarm, White-Label-Badge |
Preise stehen im Dashboard beim Checkout. Free braucht keine Karte.
Deine Zahlen in deinen eigenen Werkzeugen
Alles, was das Dashboard zeigt, gibt es als JSON und als MCP-Tool, damit deine eigenen Scripts, Notebooks und Agenten es lesen können. Erzeuge das Token auf der Einstellungsseite einer Site; es wird einmal gezeigt und gehört zum Konto, liest also jede Site darauf. Nur lesend, nur Tagessummen, keine Rohdaten.
curl -s https://agenttracking.co/api/stats/example.com?days=30 \ -H "Authorization: Bearer wmt_dein_token"
Dasselbe Token schickt dein Server-Log. Ganze Dateien sind in Ordnung, täglich aus einem Cron; Zeilen bis zur neuesten bereits importierten werden übersprungen, nichts wird doppelt gezählt:
curl -sS -X POST https://agenttracking.co/api/logs/example.com \ -H "Authorization: Bearer wmt_dein_token" \ -H "Content-Type: text/plain" --data-binary @/var/log/nginx/access.log
GET /api/stats mit demselben Header listet die Sites, die das Token lesen darf. days ist auf den Verlauf des Plans gedeckelt. Die Antwort enthält Summen, die Vorperiode für Trends, die Tagesreihe, die Agenten mit Anteil und Trend, die Tools mit Erfolgsquote und mittlerer Dauer und die meistbesuchten Seiten.
Über MCP trägst du unseren Server mit dem Token als Header ein und fragst in Worten. Claude Desktop, Cursor und die meisten Clients nehmen eine Konfiguration wie diese:
{
"mcpServers": {
"agent-tracking": {
"url": "https://agenttracking.co/api/mcp",
"headers": { "Authorization": "Bearer wmt_dein_token" }
}
}
}Dann: „Welche Agenten haben example.com diese Woche gelesen?“ Der Client ruft get_agent_stats auf und bekommt dasselbe JSON. Ein Client, der keine Header setzen kann, übergibt das Token stattdessen im Argument token des Tools.
Die Agenten auf der Liste
Version 2026-09-08. Referrer: ChatGPT, Perplexity, Claude, Microsoft Copilot, Google Gemini, You.com, Mistral Le Chat, Meta AI, Grok, DeepSeek, Phind, Kagi Assistant, DuckDuckGo AI, Poe, HuggingChat. User-Agents: ChatGPT-User, OAI-SearchBot, GPTBot, ClaudeBot, Claude-User, Claude-SearchBot, Claude-Web, anthropic-ai, PerplexityBot, Perplexity-User, Google-Extended, GoogleOther, Gemini Deep Research, Applebot-Extended, Bytespider, CCBot, Amazonbot, Meta-ExternalAgent, Meta-ExternalFetcher, FacebookBot, Bingbot, DuckAssistBot, YouBot, MistralAI-User, cohere-ai, Diffbot, Timpibot, Omgili, PetalBot, AI2Bot, img2dataset, Kangaroo Bot, iAskBot, Browser Use, OpenAI Operator, Claude Computer Use. Fehlt einer? Schreib an hi@finalmaster.net, oder öffne einen Pull Request gegen lib/tracking/ai-sources.json.