First-party event infrastructure

One tracking layer for every client.

Give each site a branded tracking endpoint and route events to analytics and advertising platforms from one dashboard.

202 in < 50msat-least-once deliverytracking survives dashboard outages

Live routingReceiving events
track.acmecorp.comurion
GA4Meta CAPI
  • purchaseorder_9241 · $149.00delivered · 2/2
  • begin_checkout14:32:07Zdelivered · 2/2
  • leadform: contactretrying · 1/2
  • page_view/pricingdelivered · 2/2

One control plane

Manage every site from one place

Connect domains, destinations, and event mappings without maintaining a separate tracking stack for every client. Each client stays isolated, observable, and independently configurable.
Acme Corpworkspace / clients / siteslast 24h
Tracking domainDestinationsStatusEvents
track.acmecorp.comGA4 · Meta CAPIActive24,318
track.novafit.ioGA4DNS pending
track.harborlaw.comGA4 · Meta CAPI · Google AdsAction required8,904
track.fielderco.comMeta CAPIReceiving events11,027

First-party delivery

Keep tracking on the client’s domain

Route browser events through a hostname such as track.client.com, backed by Urion’s shared infrastructure. One DNS record, TLS handled, status visible at every step.
  • Each site gets its own endpoint — no shared third-party hostname
  • Ownership and certificate validation tracked separately
  • Adding the next site is the same three steps as the first
DNS setup

; add one record at your DNS provider

track.client.comCNAMEingest.urion.io

ownership
Verified
certificate
Issued
routing
Active

Reliable routing

Separate collection from delivery

Urion accepts events quickly, then processes destination calls through queues, retries, and delivery logs. A slow vendor API never slows the client’s website — and one failed destination never blocks the others.
browser eventSDK batch
collect202 accepted
queueasync
routeone job per destination
  • GA4delivered
  • Meta CAPIretry 2/5
  • Google Adsdelivered
  • At-least-once delivery. Temporary failures retry with backoff; exhausted jobs surface as issues, never silently dropped.
  • Isolated failures. A rejected Meta delivery doesn’t touch GA4 — each destination runs as its own job.
  • Dashboard-independent. Collection keeps running even if the dashboard is down.

Clear operations

See what needs attention

Monitor domain status, event volume, destination health, retries, and recent errors by client and site. Errors tell you what failed, why, and what to do — without exposing private event payloads.
  • Delivery health per destination, per site
  • Sanitized error messages — payloads stay private
  • Audit log for every domain, key, and credential change
Issues · Harbor Law1 open

Meta rejected 14 deliveries

Action required

The access token expired. Replace the token to resume delivery. Queued events will continue retrying until the retry limit is reached.

GA4 · track.harborlaw.com
99.98% delivered · 24h
Meta CAPI · track.harborlaw.com
degraded · retrying
Google Ads · track.harborlaw.com
100% delivered · 24h

Reusable implementation

Install one SDK

Use a small public package across your website projects while keeping destination secrets and routing logic on the server. One event contract for every site — Astro, SvelteKit, or plain JavaScript.
  • Typed, versioned event protocol with published schemas
  • Consent modeled in — advertising events wait for permission
  • Batched transport with beacon fallback on page unload
  • Astro
  • SvelteKit
  • Vanilla JS
  • Server API
tracking.ts@urion/sdk
import { createUrion } from '@urion/sdk';

const urion = createUrion({
  endpoint: 'https://track.client.com',
  siteKey: 'site_public_key'
});

urion.page();

urion.track('purchase', {
  order_id: 'order_123',
  value: 149.0,
  currency: 'USD'
});

Add the site once.
Route events where they belong.

Set up your first tracking domain in minutes. The next one takes even less.

Add your first site