Personal Untappd stats dashboard built with Jekyll and hosted on GitHub Pages. Generates richer statistics than Untappd itself — breakdowns by year, month, day of week, ABV, style, brewery, country, and more.
- A daily GitHub Actions workflow downloads the latest
unparsdbinary and runsunparsd fetch, which pulls new check-ins from the Untappd API and appends them tocheckins/YYYY.json. unparsd generatereads thecheckins/folder and produces all aggregated_data/*.jsonfiles and the_monthly/*.htmlstubs.- The updated
checkins/files are committed and pushed back to the repo. - GitHub Pages detects the push and rebuilds the Jekyll site automatically.
The _data/ files and _monthly/ stubs are generated — do not edit them by hand, they will be overwritten on the next CI run.
- Total check-ins, unique beers, breweries, and countries
- Beers per year and month, with daily averages
- ABV distribution chart
- Beers by day of week
- Longest drinking streak
- Interactive world map (UK split into England, Scotland, Wales, Northern Ireland)
- Filterable tables for beers, breweries, styles, and flavor profiles
Runs on Ruby and Jekyll 4.
bundle install
bundle exec jekyll serveAll aggregated data lives in _data/. Key files:
| File | Contents |
|---|---|
allmy.json |
Master aggregate: totals, abv histogram, weekly day-of-week counts, streak data, and years → months breakdowns |
beers.json |
All unique beers with ABV, IBU, brewery, rating, and check-in count |
breweries.json |
All breweries with country, beer list, and check-in count |
countries.json |
Countries with ISO code and check-in count (UK nations use id: "GB", remapped to sub-regions in the map JS) |
styles.json |
Beer styles with unique beer count and total check-ins |
flavors.json |
Flavor profile tags with counts |
missing_styles.json |
Styles not yet tried |
missing_countries.json |
Countries not yet represented |
checkins/YYYY.json are the raw check-in records from the Untappd API — one file per year, these are the source of truth.
Untappd sometimes changes their list of styles, so it needs to be kept updated.
- Go to https://untappd.com/beer/top_rated
- Use this regex to extract styles:
<option value="\d+" data-value-slug="(\w|-)+">([A-Za-z\-\s\(\)/&èéäö]+)</option>