ChatGPT reading your pricing page for someone's question never runs a script tag, so Google Analytics never sees it. Your server's log did. Skald reads that log and tells you what happened: which AI crawlers came, which assistants fetched a page, who clicked through from an answer, and which visits became leads and sales. Every figure is counted twice.
30-day free trial · no card · we set it up within one working day · free to self-host, source on GitHub
AI traffic analytics is measuring what AI does with your website: crawlers that read it to train or build an index, assistants that fetch a page live while answering someone, and people who click through from the answer. Skald gets all three from the access log your server already writes. How AI traffic is told apart
one sample day, told as news
example.comThu 22 Oct 2026sample edition
The Daily Log
Set from 1,848 lines of access.log · every line in one of five groups
AI assistants · live fetch, then click-through
ChatGPT read your pricing page nine times. Three people clicked through.
ChatGPT-User fetched /pricing/ for nine questions; three visits then came from chatgpt.com. Two figures in two units, kept apart.
AI crawlers
214 crawl requests, one fake
GPTBot, ClaudeBot and PerplexityBot. One "GPTBot" came from an address OpenAI does not list, so it is filed under bots.
Leads
Four booked a call
First came from google.com (2), chatgpt.com (1) and LinkedIn (1), by signed webhook.
Sales
USD 1,980 from two checkouts
EUR 290 stands in its own line. Currencies are never converted or added.
Social networks
X 31, LinkedIn 18, Reddit 6
t.co, x.com, twitter.com and the X app, added up as one X.
flip it
Sample day for a made-up site. People 415, AI assistants 322, search engines 147, bots and scanners 940, your own traffic 24: together the 1,848 lines read, none left over.
── script tags see people ──── prompt trackers sample answers ──── your server log saw what happened ─────────────
[01] AI crawlers and AI referrals
See which pages AI read, and which ones sent you people
An AI company touches your site three ways, and only the last one is a person. Here is one sample week of your pages for each company, ranked in each column, with a ribbon joining the same page across them.
pick one
Crawledtraining or index crawl · GPTBot · requests
/blog/server-logs/64
/pricing/41
/docs/setup/33
/compare/28
/about/12
Fetched for a questionlive fetch · ChatGPT-User · requests
/pricing/38
/docs/setup/21
/compare/17
/features/9
/blog/server-logs/4
Clicked from the answerclick-through · from chatgpt.com · visits
/pricing/11
/docs/setup/6
/4
/compare/3
/features/2
Sample week. Three columns, three units: crawl requests, fetch requests, visits. Skald never adds them up. A "GPTBot" from an address not on OpenAI's published list is filed under bots as "claims to be GPTBot". Clicks are a floor, because some apps send no referrer; visits that are only likely from AI are shown apart.
Social media traffic by network, with every address added up
X arrives as t.co, x.com, twitter.com and its app, and a raw list of referrers shows four rows. Skald adds them up as one X, and does the same for LinkedIn, Facebook and 14 more networks.
pick a visit
X
t.co
x.com
twitter.com
X app
twclid
LinkedIn
linkedin.com
lnkd.in
LinkedIn app
utm "linkedin"
li_fat_id
Facebook
facebook.com
fb.com
Facebook app
fbclid
Pinterest
pinterest.*
Social, network not named
two networks named
utm "social"
Other website, not social
producthunt.com
threads.com
fb.me
The referrer's host, t.co, is one of X's hosts.
The rule from Skald's own name lists: the referrer's host or app first; with no referrer, the words of utm_source, then utm_medium, then a social ad click ID (fbclid, li_fat_id, ttclid, twclid). A visit counts once, in one network, and the networks add up to the Social media row. Days before 2.34.0 say Not recorded.
The source with the most leads is often not the one that brings the most sales. Switch the podium between leads and revenue, and see the order change, one currency at a time.
switch it
leads, by first touch
182,450590google.comsearch
11980290Directno referrer
72,970no saleschatgpt.comAI assistant
61,980no salesLinkedInsocial
3no salesno salesNewsletteremail
google.com brings the most leads.Every lead counts once, on the day it was completed, under where that visitor first came from.
Sample 30 days. A lead arrives as a signed webhook from Calendly, Cal.com, Stripe, HubSpot, Typeform, Zapier, Make or n8n, from the script tag's form events, or from one file in your backend. A sale's value comes from Stripe or from the value and currency your server sends. Each currency is summed apart and never converted.
Analytics you can check: every figure counted twice
A second count, written as separate code, reads the same raw log again and must agree with the first. The two share only the lists of names. A day they disagree on is withheld, never guessed, and a figure that was not recorded stays blank, never 0.
Sample days. The cream sheet is the main count, the blue carbon is the audit's. On a withheld day the dashboard says why, and no chart draws it as 0.
── $ docker run ghcr.io/spcaeo/skald:2 ──── or we run it for you ──── the same code either way ─────────────
[05] hosted or your own server
Run it on your own server for free, or let us host it for you
The counting is the same code either way. Self-hosted, the Docker image runs beside your web server and the data stays there. Hosted, we run the server and set your site up within one working day.
Self-hosted, free
Skald is source-available under the Elastic License 2.0. Run it for your own sites and your clients' sites; offering Skald itself to others as a hosted service needs a commercial licence.
One command on an nginx or Apache server, the Cloudflare Worker, a CDN's own log export (Cloudflare Logpush, CloudFront, Fastly or Akamai DataStream 2) (Skald reads these, but its second count does not read CDN exports yet, so a day read only from one is withheld), a Vercel log drain (Vercel Pro or Enterprise, as Vercel's drains page says, read 25 Oct 2026), the script tag, or one line to paste into your AI agent. A dry run of a sample log shows what Skald reads before anything is stored.
Every page of this site and every guide is also plain Markdown, listed in /llms.txt (a plain-text map of a site for AI tools). Fern's Agent Score, a public check of how well AI agents can read a product's docs, rated Skald 98 out of 100 when we looked on 24 October 2026.
Fern Agent Score, read 24 Oct 2026 · buildwithfern.com/agent-score/company/skald
What it does not do
Without a server or CDN log, as on some site builders, Skald sees people only, through its script tag: no AI crawlers, fetchers or bots.
Visits are an upper bound on people, never an exact count of humans.
AI clicks are a floor. Likely visits from AI are shown apart and never added.
It sits beside Google Analytics and Search Console: no ad spend, no Google Ads link, and search figures stay the engines' own.
Why we built Skald when our analytics could not see AI
Skalds were the poets of the North. They watched what happened and told it back, faithfully, and only what they had seen. Skald reads the log, tells you what it saw, and leaves out what it did not.
Skald · say it skawld · rhymes with "called"
Rakesh wanted to know whether AI assistants were reading Space-O's pages, and our analytics could not tell us. A script tag only runs in a browser, so it could not say whether ChatGPT, Claude or Perplexity had read them. So we built a tool that reads the server's own log, which holds every request the server answers.
Built by Rakesh Patel, CEO of Space-O Technologies.
AI traffic analytics measures what AI does with your website: which crawlers read it to train or build an index, which assistants fetch a page live while answering someone, and which people click through from an answer. Skald reads all three from your server's access log, because crawlers and fetchers never run a script tag. AI traffic tracking, the full picture.
How does Skald see AI bots that Google Analytics misses?
AI crawlers and AI fetchers don't run JavaScript, so a script tag never fires for them. The server log records them anyway. Skald names each one, checks crawlers against the addresses their owners publish, and shows a fake as "claims to be GPTBot". How AI crawlers are identified.
Can Skald show traffic from X, LinkedIn and other social networks?
Yes, since version 2.34.0. Traffic › Sources has a Social network view with one row per network: X adds up t.co, x.com, twitter.com and the X app, and LinkedIn adds up linkedin.com, lnkd.in and its app. A visit with no referrer is matched by its utm_source, then its utm_medium, then a social ad click ID such as fbclid. Days before the upgrade say Not recorded.
Does Skald show revenue by source?
Yes, when your sales carry a value: Stripe's amounts, or a value and currency your server sends with a lead, directly or through Zapier, Make, n8n or a lead file. Leads & sales › Revenue shows which sources, pages, campaigns and AI assistants made money, each currency on its own and never converted. Lead attribution with Skald.
What happens when Skald's two counts disagree?
A second count, written as separate code, reads the raw log again and shares only the lists of names with the first. If the two disagree about a day, that day is not shown until it is counted again, and a figure nobody recorded is left blank rather than shown as zero. Every figure counted twice.
Does Skald tell me what to fix?
Yes, from the log alone. Since version 2.35, Overview › Insights opens with a to-do list: old addresses still asked for, server errors, AI asking for Markdown copies that fail, a sitemap address that is not there, and pages nearly every visit leaves at once with no form sent. Each comes with its proof, what to do, and a re-check after you mark it done. Site › Not found gives each lost page the closest live page and a 301 or 410 line to copy, and each page has an AI readiness check. Since 2.36, the open to-dos, security items and set-up problems come in one summary mail a day at 01:00, and no mail comes when nothing is open.
Can I self-host Skald, or do you host it?
Both. Self-hosting is free: the Docker image runs on your own server and your data stays there. Skald is source-available under the Elastic License 2.0. Or we host it for you, per site, after a 30-day free trial with no card, set up within one working day. Skald pricing.
Does Skald need cookies?
Not to count visits: the server log needs nothing in the browser. The optional script tag sets no cookie by default. It keeps the visit's source in the tab's session storage until the tab closes, and a random ID only when you turn visitor IDs on. Signing in to the dashboard uses one session cookie. Cookieless analytics with Skald.
Does Skald replace Google Analytics or Search Console?
No. Search Console still owns queries and rank, and Google Analytics still owns ad spend. Skald sits beside them: it joins Search Console and Bing figures to real visits and shows the traffic neither can see. Skald and Google Analytics, compared.
$ tail -f access.log | skald
See what AI does with your site. Free for 30 days.
No card. We set up hosted Skald for you within one working day, or you self-host it free. Every line of your log, sorted and added up.