Features · counted twice
Analytics data accuracy: every figure counted twice
Analytics data accuracy you do not have to take on trust. A second, independent count checks every figure from the raw log, and a day the two counts disagree on is withheld.
Analytics data accuracy is whether the figures a tool shows match what really happened. Skald checks it the hard way: a separate audit, with its own parser and rules, recounts every figure from the raw log, and the five groups must add up to the log. Part of Skald features.
30-day free trial · no card · we set it up within one working day · free to self-host
- Mon 19 Oct 1,812 · 1,812published
- Tue 20 Oct 1,904 · 1,904published
- Wed 21 Oct 1,766 · 1,771withheld
- Thu 22 Oct 1,848 · 1,848published
- Funnel, before it was saved - · -not recorded: blank, never 0
Sample counts. Three days published, one withheld, one figure not recorded.
[02] what a day can be
Whole, partial, withheld or not collected
Every day in Skald has one of four states, and the page says how many of each a period holds. Only whole days go into totals. Pick a state.
pick a state
Whole: in every total
Both counts agree, and the log covers the whole day, midnight to midnight in the site's own time zone.
Tue 20 Oct · main 1,904 · audit 1,904 → whole · published
Partial: left out of totals
The log covers only part of the day, such as the day Skald started reading. Its figures are kept, and left out of totals and comparisons. Reports list it by date.
Mon 5 Oct · log from 14:20 → partial · not in totals
Withheld: nothing shown, nothing guessed
The two counts disagreed. Skald shows nothing for the day rather than a figure that may be wrong, and never quietly picks one count. It is never drawn as zero; the page names it.
Wed 21 Oct · main 1,766 · audit 1,771 → withheld · see Site › Data quality
Not collected: a gap, said plainly
Skald was not reading the log that day. The backfill command can count the days your raw log still holds. Something your site never sent at all says Not set up, with how to set it up, never 0 or 0%.
Sat 3 Oct · no log read → not collected · blank
[03] blank, never zero
Not recorded stays blank, never zero
Zero means Skald counted and found nothing. Blank means it does not know. Mixing the two is how dashboards lie, so Skald never does.
A figure not recorded is null in the API and the MCP server, shown as a dash on screen. A country the log did not carry says Not recorded. Something never set up says Not set up, with one line on how.
- Country · Not recordedthe log had none
- Page speed · Not set upnever tested
- Events · Not set upthe tag never sent one
- Funnel, days before it was saved · Not recordednever 0
- Conversions, before they were recorded · Not recordednever 0
[04] it must add up
The five groups must add up to the log
Skald began with a report that was right in its plumbing and wrong in its arithmetic: three visitor groups summing to 51,763 under a stated total of 55,539. One subtraction would have caught it. Now nothing is reported until the sums reconcile.
The groups partition the log
Every request lands in exactly one of five groups, and the five sum to the log's lines.
Checked before it goes
A report whose categories do not reconcile is not written. A mail that would include a withheld or partial day is held back.
A check you can run
skald checkcounts yesterday again and says whether every category reconciles.Unsampled
Every line of the log is counted. Nothing is sampled.
[05] is the log whole?
Data quality: is the log itself whole?
Two counts agreeing proves the arithmetic. It cannot prove the log they read was whole. Site › Data quality shows what can be seen of that, per day and for today so far.
- lines read
- unreadable lines
- duplicate lines
- silent stretches
- the audit's verdict
- the newest line against the server clock
- when each job last ran
Above the days, the reasons a day is Worth a look or Not trusted are listed, each with how many days it covers. A stretch with no log line counts only when it is long for your site: an hour at least, and longer on a quiet site, where a night's lull is normal.
[06] honest everywhere
The same rule on every screen, mail and alert
The audit is not a page you visit. It decides what every other part of Skald may show.
Real time
If the live audit disagrees, Real time shows no visitor figures until they match.
Every tab
When a period holds a withheld, partial or missing day, the page says how many and which.
Mails and reports
A mail with a withheld or partial day is held back. Client reports count only verified, whole days and list the rest by date.
Alerts
AI alerts use whole days only, and wait when a day in their window is withheld or missing.
What it does not do
- Two counts agreeing proves the arithmetic, not that the log was whole. Data quality shows what can be seen of that.
- Visits are an upper bound on people. Requests are never counted as people.
- A withheld day leaves a gap that is named. Skald never fills it with a guess.
- Skald counts what reached the log. A page a CDN served from its cache needs the CDN's own log.
- Search Console and Bing figures are the engines' own, so Skald cannot recount them from the log. It adds their tables up again by a separate road and says when they disagree.
2,500+ tests against hand-built logs, and a public comparison with a source for every cell.
keep reading
More on analytics data accuracy
questions
Analytics data accuracy FAQ
Straight answers, including what Skald does not do.
What does counted twice mean?
Every figure Skald shows is counted by two separate roads: the main count, and an independent audit with its own parser and rules that recounts it from the raw log. The two share only the lists of names, never the code. A day is shown only when both agree.
Why does a day say withheld?
Because the two counts did not agree. Rather than show a figure that may be wrong, Skald withholds the day and lists it. It is never shown as zero and never guessed. The server admin can see why on Site › Data quality.
Why is a figure blank and not zero?
Blank means not known; zero means Skald counted and found nothing. A figure that was not recorded, such as a breakdown from before Skald began collecting it, stays blank, shown as a dash. The same holds in the API and the MCP server: not recorded is null, never 0.
Is Skald's data sampled?
No. Every line of the log is counted, and nothing is sampled. What Skald leaves out of a total is a day that is not whole, and the page names that day.
Can two counts agree and still be wrong?
Yes, if the log itself was not whole: two counts of the same missing lines agree. So Site › Data quality shows what can be seen of the log: lines read, unreadable lines, duplicates, silent stretches, and when each job last ran.
How is Skald itself tested?
With 2,500+ tests against hand-built logs, and a public comparison with other tools that gives a source for every cell.
$ 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.