An Odoo module that pulls a website’s GoatCounter statistics into Odoo through the GoatCounter API. Visits, pages, clicks, traffic sources and each visitor’s path through the site appear next to the rest of your work, so you don’t have to open goatcounter.com. This site’s own statistics are read this way.

Source: github.com/yakhras/Odoo-GoatCounter-Stats · License: AGPL-3 · Odoo: 20.0, 19.0, 18.0

Features

  • A dashboard for 7, 30 or 90 days or all time: page views and clicks compared with the previous period, a daily chart, top pages, click events, countries, referrers, browsers, systems and screen sizes
  • Visitor journeys: what each visit saw and clicked, in order, grouped by GoatCounter’s session
  • Click events for every link tagged with data-goatcounter-click
  • An hourly sync, plus Sync now and a backfill from any date
  • The API key is read from an environment variable and never stored in the database
  • Only administrators see the data
  • Covered by 18 automated tests, run by GitHub Actions on every push and before every release

It doesn’t show names, emails or IP addresses, because GoatCounter doesn’t collect them. A visit is one browser session, not a person.

Download and screenshots

One card per Odoo version. Each one has its own download, tested on that version, and its own screenshots. The screenshots use generated demo data; the numbers on them match the notes below each one.

Odoo 20.0 v20.0.1.2.2 · released 2026-10-28 · tested on Odoo 20.0 Download .zip
Download
goatcounter_stats-20.0.1.2.2.zip · 385 KB · SHA-256 fcc09158520a…
Install
Unzip into a folder on your addons_path, restart Odoo, update the apps list and install. Or: git clone -b 20.0 https://github.com/yakhras/Odoo-GoatCounter-Stats.git
Changes
Release notes for 20.0.1.2.2
The dashboard: every metric of the chosen period on one page.

1. The dashboard: every metric of the chosen period on one page.

  1. The period: 7, 30 or 90 days, or all time. Sync now fetches the latest data.
  2. Page views, clicks, pages visited and countries. The percentage compares with the period before.
  3. The latest visits, each with the pages and clicks (★) it went through. Click one to see its timeline.
*Visits*: the daily number of visits, as a graph that can also be shown as a pivot or a list.

2. Visits: the daily number of visits, as a graph that can also be shown as a pivot or a list.

  1. One point per day. Odoo’s graph options switch between line, bar and pie, stacked or cumulative.
*Pages*: page views per page and per day.

3. Pages: page views per page and per day.

  1. The page path, with its title next to it.
  2. Page views that day. Group by path in the search to total a page over the period.
*Clicks*: how often each tracked link or button was clicked.

4. Clicks: how often each tracked link or button was clicked.

  1. One bar per click event, i.e. per data-goatcounter-click name on the website.
*Sources*: where the visits came from, as a pivot table.

5. Sources: where the visits came from, as a pivot table.

  1. The search filter picks the source: countries, referrers, browsers, systems or screen sizes.
  2. Visits per value. Expand a row to split it by day.
*Visitor journeys*: one row per visit, with the pages and clicks (★) it went through.

6. Visitor journeys: one row per visit, with the pages and clicks (★) it went through.

  1. The visitor’s country, from GoatCounter’s location.
  2. The journey, in order. Search on a page or a click to find the visits that went through it.
One visit from Brazil: what the visitor saw and clicked, in order.

7. One visit from Brazil: what the visitor saw and clicked, in order.

  1. The country, and when the visit started and ended.
  2. The timeline. Clicks are highlighted.
*Settings*: the site, the API key check and the sync results.

8. Settings: the site, the API key check and the sync results.

  1. The GoatCounter site code. The API key comes from the GOAT_COUNTER_KEY environment variable and is never stored.
  2. When the last sync ran and what it did. Sync now and Backfill run it by hand.
Odoo 19.0 v19.0.1.2.3 · released 2026-10-28 · tested on Odoo 19.0 Download .zip
Download
goatcounter_stats-19.0.1.2.3.zip · 385 KB · SHA-256 8d651801cdf7…
Install
Unzip into a folder on your addons_path, restart Odoo, update the apps list and install. Or: git clone -b 19.0 https://github.com/yakhras/Odoo-GoatCounter-Stats.git
Changes
Release notes for 19.0.1.2.3
The dashboard: every metric of the chosen period on one page.

1. The dashboard: every metric of the chosen period on one page.

  1. The period: 7, 30 or 90 days, or all time. Sync now fetches the latest data.
  2. Page views, clicks, pages visited and countries. The percentage compares with the period before.
  3. The latest visits, each with the pages and clicks (★) it went through. Click one to see its timeline.
*Visits*: the daily number of visits, as a graph that can also be shown as a pivot or a list.

2. Visits: the daily number of visits, as a graph that can also be shown as a pivot or a list.

  1. One point per day. Odoo’s graph options switch between line, bar and pie, stacked or cumulative.
*Pages*: page views per page and per day.

3. Pages: page views per page and per day.

  1. The page path, with its title next to it.
  2. Page views that day. Group by path in the search to total a page over the period.
*Clicks*: how often each tracked link or button was clicked.

4. Clicks: how often each tracked link or button was clicked.

  1. One bar per click event, i.e. per data-goatcounter-click name on the website.
*Sources*: where the visits came from, as a pivot table.

5. Sources: where the visits came from, as a pivot table.

  1. The search filter picks the source: countries, referrers, browsers, systems or screen sizes.
  2. Visits per value. Expand a row to split it by day.
*Visitor journeys*: one row per visit, with the pages and clicks (★) it went through.

6. Visitor journeys: one row per visit, with the pages and clicks (★) it went through.

  1. The visitor’s country, from GoatCounter’s location.
  2. The journey, in order. Search on a page or a click to find the visits that went through it.
One visit from Brazil: what the visitor saw and clicked, in order.

7. One visit from Brazil: what the visitor saw and clicked, in order.

  1. The country, and when the visit started and ended.
  2. The timeline. Clicks are highlighted.
*Settings*: the site, the API key check and the sync results.

8. Settings: the site, the API key check and the sync results.

  1. The GoatCounter site code. The API key comes from the GOAT_COUNTER_KEY environment variable and is never stored.
  2. When the last sync ran and what it did. Sync now and Backfill run it by hand.
Odoo 18.0 v18.0.1.2.2 · released 2026-10-28 · tested on Odoo 18.0 Download .zip
Download
goatcounter_stats-18.0.1.2.2.zip · 386 KB · SHA-256 1c8e6d375b3a…
Install
Unzip into a folder on your addons_path, restart Odoo, update the apps list and install. Or: git clone -b 18.0 https://github.com/yakhras/Odoo-GoatCounter-Stats.git
Changes
Release notes for 18.0.1.2.2
The dashboard: every metric of the chosen period on one page.

1. The dashboard: every metric of the chosen period on one page.

  1. The period: 7, 30 or 90 days, or all time. Sync now fetches the latest data.
  2. Page views, clicks, pages visited and countries. The percentage compares with the period before.
  3. The latest visits, each with the pages and clicks (★) it went through. Click one to see its timeline.
*Visits*: the daily number of visits, as a graph that can also be shown as a pivot or a list.

2. Visits: the daily number of visits, as a graph that can also be shown as a pivot or a list.

  1. One point per day. Odoo’s graph options switch between line, bar and pie, stacked or cumulative.
*Pages*: page views per page and per day.

3. Pages: page views per page and per day.

  1. The page path, with its title next to it.
  2. Page views that day. Group by path in the search to total a page over the period.
*Clicks*: how often each tracked link or button was clicked.

4. Clicks: how often each tracked link or button was clicked.

  1. One bar per click event, i.e. per data-goatcounter-click name on the website.
*Sources*: where the visits came from, as a pivot table.

5. Sources: where the visits came from, as a pivot table.

  1. The search filter picks the source: countries, referrers, browsers, systems or screen sizes.
  2. Visits per value. Expand a row to split it by day.
*Visitor journeys*: one row per visit, with the pages and clicks (★) it went through.

6. Visitor journeys: one row per visit, with the pages and clicks (★) it went through.

  1. The visitor’s country, from GoatCounter’s location.
  2. The journey, in order. Search on a page or a click to find the visits that went through it.
One visit from Brazil: what the visitor saw and clicked, in order.

7. One visit from Brazil: what the visitor saw and clicked, in order.

  1. The country, and when the visit started and ended.
  2. The timeline. Clicks are highlighted.
*Settings*: the site, the API key check and the sync results.

8. Settings: the site, the API key check and the sync results.

  1. The GoatCounter site code. The API key comes from the GOAT_COUNTER_KEY environment variable and is never stored.
  2. When the last sync ran and what it did. Sync now and Backfill run it by hand.

Installation

Download the zip for your Odoo version above, or clone its branch. Add the folder to addons_path and give Odoo the API key as the GOAT_COUNTER_KEY environment variable. The key needs the Read statistics and Export permissions. Then restart Odoo and install GoatCounter Website Stats. Full setup steps are in the repository README.