All features

Technical foundations

Architecture, databases, custom domains, custom events, goals, funnels, and API access.

Architecture

Separated by design

Eurolytics separates event ingestion from the dashboard. The ingestion service is a stateless Go binary that accepts events, classifies traffic, and writes to ClickHouse. The dashboard is a Next.js 14 application that reads from ClickHouse and manages accounts via PostgreSQL. The two share no runtime dependencies.

architecture

INTERNET

┌──────────────┴──────────────┐

▼ ▼

events.eurolytics.app eurolytics.app

Go + SQLite WAL Next.js + Postgres

└──────────┬──────────────────┘

ClickHouse

Data Layer

ClickHouse for speed, Postgres for structure

ClickHouse

Columnar OLAP database optimized for time-series analytics

  • All pageview and event data
  • Aggregations and trend queries
  • Partitioned by site_id for fast queries

PostgreSQL

Relational database for structured metadata

  • User accounts and authentication
  • Site configurations and team membership
  • Goals, funnels, and conversion definitions
  • Bot pattern definitions for classifier sync

Bot filtering

Bots are classified, not counted

Every hit is classified on arrival — headless browsers, datacenter IPs, and automation patterns are labeled and kept out of your human stats. The live traffic feed shows the raw stream, classification included, so you can see exactly what was filtered and why.

eurolytics.app/dashboard — live traffic
The Eurolytics live traffic feed classifying each hit as Human, Headless Chrome, Datacenter, or Automation in real time

Tracking

Custom events, goals, and funnels

Beyond pageviews, Eurolytics tracks custom events you define — sign-ups, purchases, button clicks, or anything else. Create Goals in your site settings to track conversion rates, and build Funnels (2-8 steps) to see where visitors drop off in multi-page flows.

custom event

eurolytics('signup_complete', {

plan: 'pro',

source: 'landing_page'

})

Domains

Custom tracking domains via CNAME

Point a subdomain like analytics.yoursite.com to our ingestion endpoint via CNAME. Requests are served from your own domain, which gives you more complete and accurate measurement.

Configure it in Settings → Tracking Domain. DNS verification is built in — add the CNAME record and Eurolytics confirms it automatically.

API

Programmatic access

Eurolytics provides API access for querying analytics data, managing sites, and creating goals programmatically. You can export data via the dashboard in JSON format at any time.

Common questions

What's the tracker script size?

Just 1.2KB gzipped. That's tiny by modern standards, smaller than a thumbnail image. The script loads asynchronously and has zero impact on your page speed or Core Web Vitals. Perfect for high-performance sites.

Do you offer an API?

Yes. The Stats API lets you query aggregate stats, timeseries, and breakdowns with a Bearer API key, and the v1 API can create sites and fetch tracking snippets programmatically. There is also an MCP endpoint, so AI assistants can add sites, retrieve the tracking code, and pull stats directly. Create API keys in Settings.

Do you support custom domains (CNAME)?

Yes, we support custom tracking domains via CNAME. Point a subdomain (e.g. analytics.yourdomain.com) to events.eurolytics.app, verify DNS in Settings → Tracking Domain, and your snippets automatically use the first-party domain for more accurate measurement.

Can I track custom events?

Yes. You can define custom events (sign-ups, purchases, etc.) in the dashboard, and our JavaScript tracker sends them automatically. Create Goals in Settings -> Goals, and Eurolytics will start tracking and displaying conversions.

What databases do you use?

ClickHouse for analytics (fast OLAP queries, time-series optimized) and PostgreSQL for metadata (user accounts, site configs, team membership). We deliberately kept these separate so ingestion can run independently.

Ready to get started?

Free during beta. No credit card required.

Technical foundations | Eurolytics