Developer-first analyticsNo SDK required

One endpoint.
One event.
Instant analytics.

Send events directly from your backend, frontend or serverless functions. No SDKs, no complex setup and no analytics pipeline to maintain. Just send an event and start getting insights.

No credit card required. Set up your first event in minutes.
track.sh
curl -X POST https://useampersand.io/collect \
  -H "Authorization: Bearer amp_live_9f2c…" \
  -H "Content-Type: application/json" \
  -d '{
    "event_name": "checkout_completed",
    "client_id": "usr_8f21c"
  }'
202 Accepted

One feed for everything your product generates - from signups and purchases to feature usage and conversions. Everything your product needs, all in one place.

&example.comOverviewEventsMore
prod1h24h7d30d
Traffic & revenuevisitorsrevenue
Visitors
48,291+12.4%
Revenue (EUR)
€203,600+14.2%
Events
63,517+21.7%
3.2k€8k2.4k€6k1.6k€4k800€2k000107131925
Add more to your payload
A panel with no data is not an empty chart. It tells you which field would fill it, with the snippet ready to copy — and it disappears the moment the field arrives.
Revenue over time

Send value and currency with your events to see revenue per cohort.

{ "value": 49.0, "currency": "EUR" }
Docs →

Product analytics that fits in a curl command

Track the events that matter without adding another SDK to your stack. Send an event with a single request and get clean, actionable analytics from day one.

You own the identity
Identify users with the fields you already have. Keep your existing user IDs and customer data - no new identity system required.
Nothing in the browser
Send events from your backend, server or serverless functions. Keep analytics logic out of your frontend and your bundle lightweight.
Measure the business, not the traffic
Focus on the metrics that move your product forward - revenue, activation, retention, conversions and more.
Is it a dashboard or is it data?
See the numbers that matter at a glance, then drill into the underlying events whenever you need more context.
Properties as first-class data
Add the context behind every event. Filter, segment and analyze events using the properties that matter to your product.
Simple, not limited
Start with a single event and expand as your product grows. Powerful analytics without the overhead of a complicated tracking stack.
Start here

One endpoint. Nothing to install.

Send an event with a simple POST request. No SDK, no package, no tracking script. If you can make an HTTP request, you can use it.

No packageAny language, any stack
No version to trackStays simple as you grow
Nothing in the frontendServer-side only
No custom pipelineEvents arrive ready
Easy to migrateStart small, add later

One request is all it takes. Send the event and we'll take care of the analytics layer behind it.

curl -X POST https://useampersand.io/collect \
  -H "Authorization: Bearer amp_live_9f2c…" \
  -H "Content-Type: application/json" \
  -d '{
    "event_name": "checkout_completed",
    "client_id": "usr_8f21c"
  }'

event_name is the only field we insist on. Everything else is optional, and nothing you send is discarded.

The rest of it

Everything else is optional

You have more than just an event name. Give us the full context when you need it - or keep things simple when you don't. Start with the basics and add detail as your product evolves.

Field
Core
event_namerequiredstringThe name of the event you want to track.
event_timestringISO 8601 timestamp with an offset or Z. Defaults to the time the event was received.
event_idstringYour idempotency key. Retry as often as you like - the same event is never counted twice.
Identity
client_idstringThe field that connects events over time. Send a pseudonymous ID and events become visitors, sessions and journeys. Leave it out and the event still counts, just on its own.
session_idstringUse only if you want to define sessions yourself. Otherwise, sessions are derived from client_id using a 30-minute inactivity window.
account_idstringThe company, workspace or organization behind the user.
Classification
environmentstringprod by default. Use staging or dev for other environments.
platformstringWhere the event came from: backend, web, mobile, worker or cli.
levelstringEvent severity: info by default, or warn and error.
Metrics
valuenumberThe amount that matters for this event. Never calculated from items - discounts, taxes and other adjustments make re-deriving the value unreliable.
currencystringISO 4217 currency code. Only meaningful together with value. Mixed currencies are displayed separately and never summed.
duration_msnumberDuration in milliseconds. Charted as p50 and p95 to make slow outliers visible instead of hiding them behind an average.
Errors
error.typestringThe error type, such as TimeoutError or PaymentDeclined. This is the dimension used to group errors.
error.messagestringFree-form error details. Shown on every row rather than grouped, so IDs, hosts and other unique details remain useful.
Line items
items[]arrayLine items containing sku, name, unit_price or quantity. Visible on the event and included in its revenue.
Context
context.page.urlstringThe full page URL. We extract the path and UTM parameters (utm_source, utm_medium and utm_campaign) from it.
context.page.referrerstringThe referring URL. Used to determine source and medium when no UTM parameters are available.
context.client.user_agentstringUsed to derive the device, operating system, browser and bot status.
context.client.ipstringUsed to derive continent, country, region and city.
context.client.device_typestringdesktop, mobile or tablet. When provided this value takes precedence over derived device information.
context.geo.countrystringISO 3166-1 alpha-2 country code such as DE. Populates the geographic map without requiring an IP address.
context.app.versionstringYour application release version. Makes it easy to answer "Which deploy caused this?".
context.trace.request_idstringYour own correlation ID. Use it to trace an event or error back to the corresponding logs.
Your data
propertiesobjectProduct-specific data you want to track. Keys with a small, consistent set of values can become filters and breakdowns. Up to 100 keys per event.

Let us fill in the details

Country, device, OS and browser? You don't have to build a pipeline for all of it. Pass the context you already have and we'll make it available when you need it.

context.client.user_agent
device_type · os · os_version · browser · browser_version · is_bot
context.client.ip
continent · country · region · city
Both are resolved in the request and the raw values discarded. Rather not send them? Leave them out and pass context.geo.country instead — every other panel is unaffected.
{
  "event_name": "page_view",
  "client_id": "usr_8f21c",
  "context": {
    "client": {
      "ip": "203.0.113.7",
      "user_agent": "Mozilla/5.0 (Macintosh; …)"
    },
    "page": { "url": "https://example.com/pricing" }
  }
}

Send events in batches

Sending a high volume of events? Batch them into a single request instead of sending them one by one. Fewer requests, simpler integrations and an ingestion flow that scales with your product.

{
  "events": [
    {
      "event_name": "page_view",
      "client_id": "usr_8f21c",
      "context": {
        "page": { "url": "https://example.com/pricing" }
      }
    },
    {
      "event_name": "signup_started",
      "client_id": "usr_8f21c"
    }
  ]
}

Priced per event, not per seat

Pay for what you actually track. Every plan includes the same core analytics. You only pay based on event volume.

HobbyFree
$0/mo
50k events, 30-day retention
30-day retention
Unlimited projects
Every dashboard view
Email support
Start free
LaunchMost picked
$10/mo
250k events, 3-month retention
3-month retention
Unlimited projects
Every dashboard view
Email support
Start 14-day trial
GrowthScale
$30/mo
1M events, 12-month retention
12-month retention
Unlimited projects
Every dashboard view
Priority support
Start 14-day trial
Enterprise — individual pricing from 1M events, individual retention. Write us at hello@useampersand.io to talk volume, contract and support.
Free tier, no card
Send your first event in the next five minutes

Create a free account, send your first event and see your product data come to life. The setup takes minutes - not days.

01Create a project and copy its write key.
02POST an event name to /collect.
03Open the dashboard — the first panels are already filled.
No credit card required. Start with the free plan and upgrade when you need more.