saxon.me visitor map

Dynamic visitor map: interactive map view

The interactive map view allows you to zoom in for more detail. Use the + and − buttons to zoom, or drag to pan the map.

Total: 0
Visible: 0

Dynamic visitor map: globe view

This globe representation of recent visitors is updated hourly along with the static svg maps. Mouseover to see location, total visitors, and the most recent visit time.

Total: 0
Visible: 0

Approximate locations of visitors are aggregated by city and country. All maps on this page are generated using my analytics2map tool from live Google Analytics data.


About the analytics2map package

analytics2map is a simple static site visitor map renderer by Michael Saxon. It turns Google Analytics visit telemetry and historical Clustrmaps exports into simple static visitor maps. The stack is pure Python (Typer, Cartopy, svgwrite) and runs in a simple CLI.

The pipeline periodically pulls incremental GA4 data and puts it in a TSV store. Finally, a renderer module reads out the TSV and writes the SVG map. Each render emits a json file for dynamic d3js maps, two SVG files, an 800x400 one intended for embedding in a footer, and a higher-resolution one to be displayed full-width.

Every day at midnight, a Github action pulls the latest visit data from Google Analytics and updates the maps. Since the repo itself is hosted on Github pages, I simply point my website at the map output URLs (in this repo). With a simple combination of static calls here, I replicate the functionality of fancy JS-based spy maps like Clustrmaps.

Source code is available in my [analytics2map] repository on GitHub.

[Go home]


Static SVG maps

Two sizes of SVG map are rendered: one for display in the web page footer at 300px and the other for full-width display at 900px.

Large visitor map preview
900px full-width SVG map.