Elido
Everything Elido does
All plans (depth varies)

Analytics. Every click, mapped in real time.

Real-time click stream into ClickHouse. Geo, device, referrer, UTM. Funnel and cohort views on Business. Scheduled exports to S3, BigQuery, or Snowflake.

  • ClickHouse-backed for sub-second queries
  • GDPR-compliant by default — no cookies needed
  • Geo, device, referrer, UTM — in one view
  • Export via API or scheduled CSV
elido.app/analytics · elido.me/launch · last 7 daysLive
33.4K
clicks this week
+12.4% vs last week
MonTueWedThuFri7.1KSatSun
Total clicks
12.4K
Countries
94
Avg load
3.2s
0%
Click sampling
<5s
Event ingest lag
24 months
Retention on Business
S3 / BQ / Snowflake
Export destinations

How it works

From impression to revenue — every step measured

Click events fire into Redpanda the instant a redirect happens, with zero impact on redirect latency. The click-ingester service writes them to ClickHouse asynchronously — typically under 5 seconds. You see funnel drop-off, geo spread, and conversion attribution in the same view.

Conversion funnel — elido.me/launch · last 30 days
52,100 impressions
Impressions
52,100
100%
24% click-through
Clicks
12,504
24%
20% conversion rate
Conversions
2,500
4.8%
$0.84 per click
Revenue
$2,100
$2.1K
Overall CVR
4.8%
Revenue / impression
$0.040
Attribution
server-side

Geo analytics

Country → region → city, where the IP resolves

Geo resolution uses MaxMind GeoIP2 City. IP is used for lookup only and is not stored in click events — GDPR-compliant by default. For workspaces that need country-only resolution, that’s a single workspace setting on Business.

  • Country breakdown
    ISO 3166-1 alpha-2 with click share %
  • City-level precision
    Where IP resolution goes below region
  • Device + OS split
    Mobile, tablet, desktop; iOS, Android, Windows
  • UTM attribution
    source, medium, campaign, term, content
  • Hour × day heatmap
    Identify peak windows and bot patterns
Geo distribution — last 30 days
94 countries
DE
  • Germany
    3,241
  • Poland
    2,108
  • France
    1,879
  • United States
    1,432
  • United Kingdom
    1,219
  • Netherlands
    887
  • Czech Republic
    641
  • Sweden
    512
IP resolved via MaxMind GeoIP2 City · IP not stored in events
Live event stream
Streaming
elido.me/launch
  • Click from Berlin, DE
    newsletter.acme.comMobile
    2s ago
  • QR scan from Tokyo, JP
    directMobile
    5s ago
  • Click from Warsaw, PL
    twitter.comDesktop
    11s ago
  • Click from Paris, FR
    linkedin.comDesktop
    18s ago
  • Click from New York, US
    google.comMobile
    27s ago
  • Click from Amsterdam, NL
    directDesktop
    41s ago
Ingest lag
< 5s
Buffer retention
7 days
Firehose
Business

Live stream

Watch clicks arrive as they happen

The real-time view polls the analytics API every 30 seconds. Events are typically in ClickHouse within 5 seconds of the click. During traffic spikes, the Redpanda topic buffers events for up to 7 days — no events are lost, the ingester just catches up.

  • Sub-5s click-to-dashboard lag on average
  • Redpanda topic buffers 7 days of events
  • Consumer lag monitored; alert fires at 60s
  • Real-time Kafka firehose on Business
  • 30s dashboard poll; configurable via API

What you can do

  • Real-time click events
  • Country / device / referrer breakdowns
  • Funnel + cohort retention (Business)
  • Hour-of-day × day-of-week heatmap
  • Scheduled exports to S3 / BQ / Snowflake
  • Conversion attribution from Stripe / Shopify

What the analytics stack actually does

Click counts and geo breakdowns are in every shortener. The capabilities below are where the ClickHouse-backed architecture makes a real difference.

No sampling
01

Raw click events in ClickHouse — every event, no aggregation at ingest

Click events are ingested via Redpanda and written to ClickHouse by the click-ingester service. There is no sampling layer — a link with 10 clicks and a link with 10 million clicks use the same pipeline. Retention is 90 days on Free, 12 months on Pro, 24 months on Business. Event schema fields include: click_id, link_id, workspace_id, occurred_at (UTC), country_iso2, region, city, device_type, os, browser, referrer_domain, utm_source, utm_medium, utm_campaign, utm_term, utm_content, and referer (full URL, nullable). The schema is public and versioned; changes get a migration guide. Event ingest lag is typically under 5 seconds from click to ClickHouse availability. If you've been using Bitly or Rebrandly and rely on 'total click count' as a KPI, you'll get the same numbers from Elido — plus the ability to query the raw events instead of just the counter.

Per-link breakdown
02

Geo, device, referrer, and UTM breakdowns at the link level

Every link in the dashboard has its own analytics view: time-series click graph (hourly, daily, weekly), geo breakdown (country → region → city, where IP resolution goes down to city level), device type (mobile, tablet, desktop), OS, browser, referrer domain, and UTM parameter distribution. The hour-of-day × day-of-week heatmap shows when a link's traffic peaks — useful for scheduling campaigns, confirming that a live event drove traffic at the expected time, and catching bot patterns (bots often hit links at consistent off-hours with no geographic spread). For links with smart-link rules, per-variant analytics are visible in the same view — click counts and time-series by variant.

Conversion attribution
03

Server-side conversion attribution from Stripe, Shopify, and custom webhooks

Server-side conversion attribution closes the gap that client-side pixels create. On each click, Elido records a click_id and passes it as a query parameter to the destination URL. When a conversion event fires on your backend (Stripe checkout.session.completed, Shopify orders/paid, or your own POST to Elido's conversion endpoint), Elido matches it to the originating click, attributes the revenue value, and fans the conversion out to GA4 Measurement Protocol, Meta Conversions API, or Mixpanel — depending on what you've configured. The conversion appears in the link's analytics view attributed to the click (and its UTM context). This works across browser sessions and adblocker boundaries because it's server-to-server. Edge case: if your checkout flow strips the click_id query parameter before conversion (e.g., multi-step checkout that doesn't preserve query params), attribution breaks. Test the full checkout flow with the click_id before going live.

Warehouse export
04

S3, BigQuery, and Snowflake scheduled exports plus real-time Kafka firehose

Scheduled export sends click events to S3 (Parquet or JSON), BigQuery, or Snowflake on a configurable cadence (hourly or daily). Incremental exports append only new events since the last run, keyed on occurred_at. The first run backfills to your retention window. For teams who need sub-minute data in their warehouse: the Kafka/Redpanda firehose (Business) gives a direct consumer group with sub-5-second end-to-end lag. Both paths use the same event schema — switching from scheduled export to firehose is a consumer change, not a schema change. For teams who prefer direct SQL over export ETL: the read-only ClickHouse DSN (Business) lets you connect Metabase, Hex, Grafana, or any ClickHouse-compatible client directly to your workspace's event table.

Retention and cohorts
05

Retention heatmap and cohort views for click-level engagement analysis

Business workspaces get cohort and retention views in the analytics dashboard. Pick a link or campaign, pick a cohort dimension (country, device type, UTM source), and get a day-by-day or week-by-week retention heatmap. This answers questions like 'do users who click from organic search come back to this link more than users from paid?' — not at the session level (Elido doesn't track sessions), but at the click-cohort level. It's a different instrument than a product analytics tool like Mixpanel or PostHog: it measures re-engagement with the link, not in-product behavior. For teams that use short links in email campaigns, retention cohorts surface whether a link is being revisited (forwarded newsletters, bookmarked pages) or is one-and-done.

Teams relying on Elido analytics

Names are placeholders for now — real customer names land here as case studies are published.

We moved server-side Meta CAPI through Elido after iOS 14.5 killed our pixel attribution. Setup was two sprints; we recovered attribution on roughly 25% of conversions that the pixel was dropping. The UTM context passing through to CAPI is what made the attribution actually useful.

G
Growth team, B2B SaaS, Vienna
Growth Engineer

The ClickHouse DSN on Business means our Metabase dashboards query click event data directly. No export job to babysit, no sync delay. We answer 'which article drove the most clicks on monetized links today?' without a ticket to engineering.

A
Analytics team, media company, Warsaw
Senior Analyst

We export to BigQuery and join click events with our Shopify order table. The click_id passthrough is the key — we can trace a short link click through to the purchase with a simple JOIN. That closed our last-click attribution gap.

M
Marketing data team, e-commerce, Tallinn
Marketing Data Analyst

Elido analytics vs Bitly Analytics vs Heap

Two shortener-side options compared against a product analytics platform. Honest about which tool is right for which question.

FeatureElidoBitly AnalyticsHeap
Raw click event accessFull ClickHouse schema, export, DSNAggregated counters; raw not accessibleFull event access — product analytics
Sampling0% — every event storedNo sampling info publishedPlan-dependent on the free tier
Retention horizonUp to 24 months (Business)90 days (paid)Depends on plan
Server-side conversionGA4 MP, Meta CAPI, MixpanelNot availableServer-side ingestion (product events)
Warehouse exportS3, BigQuery, Snowflake scheduledCSV download onlyHeap Data Lake (BigQuery)
Real-time Kafka firehoseYes — BusinessNot availableNot available
User-level trackingNo — click-level onlyNoYes — core feature
Direct SQL accessRead-only ClickHouse DSN (Business)NoHeap Data Lake (BigQuery)

Analytics questions

What fields are in the click event?

click_id (UUID), link_id, workspace_id, occurred_at (UTC timestamp), country_iso2, region, city, device_type (mobile/tablet/desktop), os, browser, referrer_domain, utm_source, utm_medium, utm_campaign, utm_term, utm_content, referer (full URL, nullable). Schema is at /docs/api-reference under 'Click events'. It's stable; additions are backwards-compatible; removals get a 90-day deprecation notice.

Why is city-level geo sometimes missing?

City-level geo resolution depends on the IP range. Carrier-grade NAT, VPN, and some corporate proxies resolve to region or country level only — we can't resolve a city from a shared NAT IP. We use MaxMind GeoIP2 City; accuracy is high for residential IPs but lower for mobile carrier and enterprise IP ranges. We report what we can resolve; we don't guess.

How does conversion attribution break if the click_id is lost?

If the click_id query parameter is stripped before conversion (multi-step checkout, SPA router, redirects that don't forward query params), the conversion POST to Elido's endpoint has no click to match against and attribution fails silently. Test your checkout flow: click a short link, check that the click_id appears in the final conversion POST. If it doesn't, add query-parameter forwarding in your checkout flow. This is the most common attribution gap — not the pixel, but query-param loss in the checkout session.

What's the ingest lag between a click and ClickHouse availability?

Typically under 5 seconds. The path is: click hits edge → fire-and-forget event to Redpanda → click-ingester consumer reads from Redpanda and writes to ClickHouse. The consumer runs continuously with auto-commit. If the pipeline falls behind (high-traffic spike, infrastructure issue), the Redpanda topic retains events for 7 days. We monitor consumer lag; alerting fires at 60-second lag. Real-time dashboard updates poll the analytics API every 30 seconds.

Can I filter the ClickHouse DSN to only see one domain's clicks?

The DSN connects to a per-workspace ClickHouse view that shows all clicks for all links in your workspace. You filter by domain, link_id, or tag in your SQL. If you want per-domain views, create them in your own BI tool using a WHERE clause. We don't currently provision per-domain sub-users in ClickHouse.

Are analytics GDPR-compliant?

Click events are collected without cookies. Device type, OS, and browser are inferred from User-Agent. IP is used for geo resolution and then discarded — we don't store raw IPs in click events. City-level geo is stored; if that counts as personal data under your interpretation of GDPR (IP-derived location), configure your workspace to geo-resolve to country only. Country-only resolution is a workspace setting on Business.

What's the difference between analytics on Free, Pro, and Business?

Free: 90-day retention, country + device breakdown, per-link click count. Pro: 12-month retention, full geo/device/referrer/UTM breakdown, hour-of-day heatmap, conversion attribution. Business: 24-month retention, cohort + retention views, ClickHouse DSN, Kafka firehose, BigQuery/Snowflake/S3 scheduled export.

Can I see analytics for a specific campaign or folder, not just per link?

Yes — campaign-level analytics aggregate across all links tagged to a campaign. Folder-level rollups are available via the API (sum clicks across links in a folder by date range). The dashboard campaign view shows total clicks, conversion rate, UTM distribution, and per-link breakdown for the campaign. There's no 'folder analytics dashboard' in the UI yet — that's on the roadmap.

Ready to try it?

Start on the free plan, upgrade when you need a custom domain.

Analytics — ClickHouse-backed, GDPR-compliant. · Elido