Ship privacy-first analytics with a 10-second install.

Analytics your code can call.

Send events with one script tag or a small TypeScript SDK. Read them back over a REST API or an MCP server your coding agent can use.

Tracker under 4 KB gzipped. SDK about 3 KB, no dependencies.

index.html
<script defer
  src="https://cdn.tracabit.com/tracabit.js"
  data-key="tcb_live_…"
  data-project="tcb_proj_…"></script>

<script>
  window.tracabit.track("signup_click", { plan: "pro" });
</script>

Two keys per project, so the one in your HTML can't leak data.

Public ingest key
tcb_live_
Sends events and nothing else. It sits in your page HTML, so anyone can see it, and it can't read a single number back.
Secret key
tcb_sk_
Reads metrics, crashes, web vitals and usage, and connects MCP clients. Keep it on servers and in agent configs, never in browser code.
Session token
Dashboard sign-in
What the dashboard uses. It can read any project you own when you pass ?projectId= with the request.

Both keys live in Dashboard, under API Keys, and rotate independently.

Send events from anywhere.

The script tag records pageviews, clicks, crashes and web vitals on its own. For apps and servers, the tracabit package on npm has GA4-style helpers: pageView, track, purchase, addToCart, beginCheckout, generateLead, captureException and more.

No SDK? Post JSON to /analytics with your public key.

TypeScript
npm install tracabit

import { createClient } from "tracabit";

const tracabit = createClient({
  apiKey: "tcb_live_…",
  projectId: "tcb_proj_…",
  endpoint: "https://api.tracabit.com/analytics",
});

tracabit.pageView();
tracabit.purchase("order_1042", 149.97, "EUR", [
  { item_id: "sku_pro", price: 149.97, quantity: 1 },
]);
tracabit.captureException(new Error("Checkout failed"));
HTTP
curl -X POST https://api.tracabit.com/analytics \
  -H "Authorization: Bearer tcb_live_…" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"s1","url":"https://acme.com/pricing","event":"page_view"}'

{ "ok": true, "message": "Analytics recorded successfully" }

Read it back as JSON.

Every read endpoint returns { ok, data } with the same shape the dashboard uses. Dates are UTC days in YYYY-MM-DD.

GET /metrics
curl -H "Authorization: Bearer tcb_sk_…" \
  "https://api.tracabit.com/metrics?from=2026-10-01&to=2026-10-07"

{
  "ok": true,
  "data": {
    "from": "2026-10-01",
    "to": "2026-10-07",
    "days": 7,
    "users": 3120,
    "sessions": 4410,
    "pageviews": 11873,
    "bounceRate": "41.2%",
    "daily": [{ "date": "2026-10-01", "users": 402, "sessions": 571, "pageviews": 1490 }, …]
  }
}
API endpoints
EndpointWhat it does
POST /analyticsRecord a pageview, custom event, crash or web-vitals sample.
GET /metricsDaily totals for a range (from, to) or one day (date): users, sessions, pageviews, bounce rate, sources, countries, devices, pages, events.
GET /errorsCrash reports with stack traces. Filter with from, to, limit and fatal=true.
GET /vitalsLCP, CLS, FCP and TTFB from real visitors, per page, for a date range.
GET /costEvents used this month against the project's plan limit.
POST /mcpMCP over streamable HTTP (JSON-RPC 2.0).
GET /healthService status and version.

When something goes wrong

400
The payload is missing sessionId or userId, or a field is malformed.
401
No key was sent, or the key or token is invalid or expired.
403
A public key was used to read data, or a secret key asked for another project.
429
The project hit its monthly event limit, or sign-in attempts were rate limited. Check Retry-After.

An MCP server, built in.

Point Claude Code, Cursor or any MCP client at /mcp with a secret key. It speaks streamable HTTP; the older SSE transport isn't supported.

claude mcp add --transport http \
  tracabit https://api.tracabit.com/mcp \
  --header "Authorization: Bearer tcb_sk_…"
query_analytics
Traffic for 24h, 7d, 30d or 90d.
inspect_errors
Recent crashes and how often each happened.
resolve_error
Marks a crash resolved, or reopens it.
compute_funnel
Drop-off across a sequence of pages.
get_billing_usage
Events used, plan limits, renewal date.
list_projects
Projects the key or account can see.

Not available yet

Planned, with no release date. Tell us if one of these decides whether you can use Tracabit.

Self-hosting
Run the engine inside your own cloud account.
Edge ingestion
Accept events on Cloudflare Workers and Vercel Edge.
Command-line tool
Create projects and rotate keys from a terminal.
Contact us

Free for 3,000 events a month, with every endpoint and the MCP server included.

Start free