8 June 2025 – Also see the GDPR consent notices.
GoatCounter stores information as separate “aggregate” tables per day or hour, with no way to link data between them. It’s probably easiest to explain by example; for browsers it looks like:
Path | Day | Browser | Count |
---|---|---|---|
/page.html | 2025-06-09 | Firefox 139 | 4 |
/other.html | 2025-06-09 | Firefox 139 | 2 |
/page.html | 2025-06-09 | Chrome 106 | 1 |
/page.html | 2025-06-10 | Firefox 139 | 1 |
/page.html | 2025-06-10 | Chrome 106 | 3 |
We can see that on June 9th /page.html
had 4 views with Firefox 139 and 1 with
Chrome 106, and that’s all the information we have. Only the end result is
stored (browser name and version) and not the source where we retrieved it from
(User-Agent
header).
And for example for screen widths:
Path | Day | Width | Count |
---|---|---|---|
/page.html | 2025-06-09 | 1920 | 1 |
/other.html | 2025-06-09 | 400 | 2 |
There is no way to link this information with the browser data (or anything
else). We don’t know if the person with the width of 1920
was using Firefox or
Chrome.
The following information is stored in this way:
Firefox 139
, Chrome 102
)Windows 11
, macOS 15.2
).Indonesia
, Canada
).English
, Klingon
).768
, 1920
).Sites may disable collecting any of this data; for example if you don’t want to collect screen sizes then you can disable it, and no screen sizes will be stored.
For the pageviews and referrers data is stored per hour:
Path | Hour | Count |
---|---|---|
/page.html | 2025-06-09 10:00:00 | 4 |
/other.html | 2025-06-09 10:00:00 | 2 |
/page.html | 2025-06-09 11:00:00 | 1 |
Path | Referrer | Hour | Count |
---|---|---|---|
/page.html | http://example.com/page.html | 2025-06-09 10:00:00 | 1 |
/other.html | custom-referrer | 2025-06-09 10:00:00 | 2 |
Other than that, it’s identical to the data stored per day.
GoatCounter includes an option to collect individual pageviews (disabled by default). If this is enabled it will also record a row for every pageview (in addition to the above):
Time | 2025-06-09 19:05:05 | 2025-06-09 19:07:59 |
---|---|---|
Path | /page.html | /other.html |
Referrer | https://example.com | - |
Session | aed10f81 | aed10f81 |
Entry | yes | no |
Bot | no | no |
Browser | Firefox 139 | Firefox 139 |
System | Windows 11 | Windows 11 |
Width | 1920 | 1920 |
Location | Ireland | Ireland |
Language | eng | eng |
There is not a lot of extra information here as such, but it does give a slightly more detailed view than just the aggregate statistics.
To keep track of repeated visits, GoatCounter stores the site name + IP +
User-Agent
in memory for up to 8 hours. This is not stored in the database,
instead it stores a random generated string. The mapping of site + IP +
User-Agent
to random ID is only stored in memory (for up to eight hours). This
random string is only stored in the database if collection of individual
pageviews is enable. Otherwise it doesn’t store anything (it simply won’t count
if we know about the session). See Sessions and visitors for a slightly more
detailed overview.
In short, GoatCounter doesn’t store IP addresses, the full User-Agent header, or any tracker ID. It also doesn’t store any information in the browser with cookies, localStorage, cache, or any other method.
No information is shared with third parties.
An email address is required to use the GoatCounter.com service. GoatCounter also use cookies to:
Data is stored on servers at Hetzner Online GmbH in Finland and Germany. GoatCounter.com is operated by Martin Tournoij, located in Ireland.
You can remove all data from the site settings (Settings → Delete Account
),
which will permanently delete all data. Some data may be retained in backups for
up to 30 days.
Feel free to get in touch if you’ve got any questions or having any problems; a lot of times they can be resolved without too much problems.
Ways to contact me: show