Millions of events.
One clear picture.
Understand your traffic, your product, and the actions that matter. Powerful analytics inside your .NET application, with your data under your control.
Understand the activity that matters
See your audience
Follow traffic trends, discover acquisition sources, and understand which content and devices visitors use.
ExploreMeasure outcomes
Connect visits with signups, purchases, revenue, and the steps that lead to a conversion.
ExploreKeep ownership
Run analytics with your application and choose the identity, retention, and reporting access that fit it.
ExploreMeasured on 5 million events
Six annual overview reports completed in 84 ms median, with previous-period comparisons enabled. The retained benchmark spans 365 days of generated traffic.
5 million events
A retained year of generated traffic, including visits and custom actions.
Explore84 ms median
All six reports completed; 87 ms at the 95th percentile.
Explore13.5 ms median
Country breakdown for GitHub traffic through a covering rollup index.
ExploreMeasured locally in a .NET 10 host, over 30 loads per scope. Read the query timings, environment, and methodology.
Website traffic, product behavior, and telemetry
| Your application | What you can measure |
|---|---|
| Website | Visitors, popular pages, sources, campaigns, and engagement |
| Product | Custom actions, purchases, revenue, and conversion paths |
| Service or worker | Job counts, durations, error rates, and other numeric metrics |
Use the website reports as a starting point, then build custom queries as your questions grow.
Add analytics to your application
using ZoneTree.Analytics;
using ZoneTree.Analytics.Web;
await using var analytics = AnalyticsEngine.Open("data/analytics");
analytics.Track(AnalyticsEvent.PageView("https://example.com/pricing"));
analytics.Track(new AnalyticsEvent("purchase").WithValue("revenue", 49.0));
var traffic = await analytics.Web.GetSummaryAsync(new WebReportRequest());
var sales = await analytics.QueryAsync(new AnalyticsQuery
{
Event = "purchase",
Metrics = { Metric.Events, Metric.Sum("revenue") },
}); using ZoneTree.Analytics.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddZoneTreeAnalytics(
options => options.DataDirectory = "data/analytics");
var app = builder.Build();
app.UseZoneTreeAnalytics();
app.MapGet("/", () => Results.Content(
"<!doctype html><html><body><h1>Hello analytics</h1></body></html>",
"text/html"));
app.MapZoneTreeAnalyticsApi();
await app.RunAsync(); Track visits and purchases directly from .NET, or add analytics to your ASP.NET Core application.
Technology stack
ZoneTree Analytics uses ZoneTree for persistent storage, PureStack to generate its dashboard and documentation, and Regor for reactive dashboard interfaces.
ZoneTree
Stores event history, sessions, rollups, and secondary indexes inside the .NET analytics engine.
PureStack
Generates the dashboard and documentation from MDX, with shared layouts, themes, and UI components.
Regor
Connects dashboard state to HTML and SVG for interactive reports, filters, and charts.
Choose your starting point
Start with the library, integrate a web application, or run the dashboard.
Explore the documentation for practical guides, concepts, performance, operations, and API reference.