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
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.
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 breakdownISO 3166-1 alpha-2 with click share %
- City-level precisionWhere IP resolution goes below region
- Device + OS splitMobile, tablet, desktop; iOS, Android, Windows
- UTM attributionsource, medium, campaign, term, content
- Hour × day heatmapIdentify peak windows and bot patterns
- Germany3,241
- Poland2,108
- France1,879
- United States1,432
- United Kingdom1,219
- Netherlands887
- Czech Republic641
- Sweden512
- Click from Berlin, DEnewsletter.acme.comMobile2s ago
- QR scan from Tokyo, JPdirectMobile5s ago
- Click from Warsaw, PLtwitter.comDesktop11s ago
- Click from Paris, FRlinkedin.comDesktop18s ago
- Click from New York, USgoogle.comMobile27s ago
- Click from Amsterdam, NLdirectDesktop41s ago
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.
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.
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.
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.
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 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.”
“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.”
“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.”
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.
| Feature | Elido | Bitly Analytics | Heap |
|---|---|---|---|
| Raw click event access | Full ClickHouse schema, export, DSN | Aggregated counters; raw not accessible | Full event access — product analytics |
| Sampling | 0% — every event stored | No sampling info published | Plan-dependent on the free tier |
| Retention horizon | Up to 24 months (Business) | 90 days (paid) | Depends on plan |
| Server-side conversion | GA4 MP, Meta CAPI, Mixpanel | Not available | Server-side ingestion (product events) |
| Warehouse export | S3, BigQuery, Snowflake scheduled | CSV download only | Heap Data Lake (BigQuery) |
| Real-time Kafka firehose | Yes — Business | Not available | Not available |
| User-level tracking | No — click-level only | No | Yes — core feature |
| Direct SQL access | Read-only ClickHouse DSN (Business) | No | Heap 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.
Keep reading
How analytics-first teams use Elido — ClickHouse DSN, Kafka firehose, and server-side attribution.
Server-side conversion forwarding setup guides for each platform.
A/B split analytics — per-variant click data and z-test confidence in the same analytics pipeline.
ClickHouse schema, event fields, and the analytics endpoint reference.