Product analytics

Your events and your errors, in the same place.

ZipLogger tracks product events next to the logs, traces and exceptions they happen alongside. So when a funnel drops, you are one click from the error that caused it, and from the commit that introduced it.

Start free · 5,000 events/day Read the docs

One SDK for logs and events · Mixpanel-compatible ingestion · No extra product to buy

Event → error correlation

“What were users actually doing?”

Expand any error pattern in Search and ask. ZipLogger correlates the events around that error by trace id and session, and answers with the common journey into it, how many users were affected, and where they were. The regression block sits right next to it, so the path from symptom to cause to commit is one screen.

This is the join a separate analytics product cannot make. Your events and your stack traces have to be in the same system to be asked about together.

  • Common journey into an error, reconstructed from real sessions
  • How many distinct users hit it, and from which countries and devices
  • Correlated by trace id and session, not guessed by timestamp
  • Sits beside the git regression analysis on the same pattern
Payment failed: card_declined — Charge()  214 events · term 31d

Journey into this error
  1. Viewed pricing          214
  2. Started checkout        214
  3. Applied coupon          198  ← 92%
  4. Submitted payment       214

Affected  186 users · top: US 61, DE 24, IL 19
Events explorer

Every event, sliced how you think

Total events, unique users, sessions and events per user across any time range, then group by whatever matters: event name, service, environment, country, device type, browser, or release version. Top events, countries, devices and browsers come as standing panels.

  • Group by event, service, environment, country, device, browser or version
  • Property breakdowns and value distributions on any field
  • Drill from an event into the user who fired it, and their whole history
  • Drill into a single session and read it end to end
  • Your daily quota shown on the page, so volume is never a surprise
Events        1,284,902     Unique users   48,201
Sessions       112,430     Events / user   26.7

Top events
  page_view          812,004
  checkout_started    41,882
  purchase            18,209
  payment_failed         214
Funnels

Where people fall out

Build a funnel from any sequence of events and put it on a dashboard next to your error rates and latency. Two modes: presence counts users who did each step at all in the window, sequential counts only those who did them in order.

Because the dashboard also holds your log and metric panels, a conversion dip and the deploy that caused it are visible on the same screen.

  • Presence and sequential funnel modes
  • Per-step counts and drop-off
  • Lives as a dashboard widget beside log, metric and trace panels
Signup funnel            sequential · 30d

visited_pricing     12,400  ████████████ 100%
started_signup       6,820  ██████▌       55%
verified_email       5,140  ████▉         41%
created_workspace    4,905  ████▋         40%
first_log_received   3,260  ███           26%
One SDK

Already installed, if you ship logs

The ZipLogger .NET packages register an IEventTracker alongside the logging provider, so Track() and Identify() are injectable next to ILogger, sharing one queue, one connection and one API key. Nothing new to install, no second vendor script on your pages.

Anything else can POST to the events endpoint directly: a single object, a JSON array, or NDJSON: the same shapes the log endpoint accepts.

  • Events ride the same batching, retry and backpressure as your logs
  • Same ingest key, same tenant isolation, same PII redaction
  • Same per-plan quota accounting, shown in the UI
// Injected next to ILogger — same queue, same key.
public CheckoutService(ILogger<CheckoutService> log,
                       IEventTracker events)

events.Identify(userId, new { plan = "team" });
events.Track("checkout_started", new {
    cart  = cart.Id,
    total = cart.Total,
});
Moving from somewhere else

Keep your Mixpanel SDK. Change the host.

ZipLogger accepts Mixpanel-shaped payloads on three routes, so an app already instrumented with Mixpanel can send to ZipLogger by pointing the SDK at a new host and swapping the project token for a ZipLogger ingest key. Event names, properties and identity calls keep working as written. See exactly what is supported →

Honest limits

ZipLogger is an observability platform that also does product analytics, not a replacement for a dedicated analytics suite. Two things it deliberately does not do today:

📉

No cohort retention report

Funnels, sessions and user histories are here; week-over-week retention cohorts are not. If retention curves are the question you buy a tool to answer, keep the tool that answers it.

👤

Profiles are derived, not stored

User profiles are computed from the event stream rather than kept as a mutable document. A Mixpanel $set is accepted and recorded as an event, so the properties stay queryable, but this is not a profile store you can overwrite in place.

Included in every plan

Analytics events are part of the same subscription as your logs, metered separately and shown in the app: 5,000 events/day on Free, 50K on Pro, 500K on Team and 2M on Business, with per-1K overage on paid plans instead of a hard stop. There is no separate analytics product to buy. See the full table →